Name: series-workflow27bjv Phase: Succeeded StartedAt: 2026-07-31 09:23:27 +0000 UTC FinishedAt: 2026-07-31 13:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[0] Phase: Succeeded StartedAt: 2026-07-31 09:23:27 +0000 UTC FinishedAt: 2026-07-31 09:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 09:23:27 +0000 UTC FinishedAt: 2026-07-31 09:47:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST", "IP_MROUTE", "IP_PIMSM_V1", "IP_PIMSM_V2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST", "IP_MROUTE", "IP_PIMSM_V1", "IP_PIMSM_V2" ], "series_id": "f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mr_input", "ip_mr_output", "ip_mroute_setsockopt", "ipmr_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjEmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc2MzViMGE2N2UwOWQ0MDAwNDljNGE5NzhkOWE4Y2M2OGY5NDBkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA5OjQ1OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uNDgyNzk3M2M2ZjljMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMTA1OCw2ICYjNDM7MTA1OCw3IEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcbiB7XG4gXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XG4mIzQzO1x0c3RydWN0IGluX3BrdGluZm8gKmluZm87XG4gXHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xuIFx0c3RydWN0IGlnbXBoZHIgKmlnbXA7XG4gXHRzdHJ1Y3QgaWdtcG1zZyAqbXNnO1xuQEAgLTExMTIsOCAmIzQzOzExMTMsNiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4gXHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuLVx0XHRtZW1jcHkoc2tiLVx1MDAzZWNiLCBwa3QtXHUwMDNlY2IsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiBcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4gXHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4gXHRcdCAqL1xuQEAgLTExMjQsNiAmIzQzOzExMjMsMTIgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4gXHR9XG4gXG4mIzQzO1x0aXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTtcbiYjNDM7XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4mIzQzO1x0aW5mbyA9IFBLVElORk9fU0tCX0NCKHNrYik7XG4mIzQzO1x0aW5mby1cdTAwM2VpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktXHUwMDNlaXBpX2lmaW5kZXg7XG4mIzQzO1x0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbiYjNDM7XG4gXHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xuIFxuIFx0LyogRGVsaXZlciB0byBtcm91dGVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjEmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc2MzViMGE2N2UwOWQ0MDAwNDljNGE5NzhkOWE4Y2M2OGY5NDBkNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDA5OjQ1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDFkOWE0YWMxNGZjZWYuLjQ4Mjc5NzNjNmY5YzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTEwNTgsNiAmIzQzOzEwNTgsNyBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LAogCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCkKIHsKIAljb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7CiYjNDM7CXN0cnVjdCBpbl9wa3RpbmZvICppbmZvOwogCXN0cnVjdCBzb2NrICptcm91dGVfc2s7CiAJc3RydWN0IGlnbXBoZHIgKmlnbXA7CiAJc3RydWN0IGlnbXBtc2cgKm1zZzsKQEAgLTExMTIsOCAmIzQzOzExMTMsNiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LAogCQltc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJbXNnLSZndDtpbV92aWYgPSB2aWZpOwogCQltc2ctJmd0O2ltX3ZpZl9oaSA9IHZpZmkgJmd0OyZndDsgODsKLQkJaXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTsKLQkJbWVtY3B5KHNrYi0mZ3Q7Y2IsIHBrdC0mZ3Q7Y2IsIHNpemVvZihza2ItJmd0O2NiKSk7CiAJCS8qIEFkZCBvdXIgaGVhZGVyLgogCQkgKiBOb3RlIHRoYXQgY29kZSwgY3N1bSBhbmQgZ3JvdXAgZmllbGRzIGFyZSBjbGVhcmVkLgogCQkgKi8KQEAgLTExMjQsNiAmIzQzOzExMjMsMTIgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwKIAkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlcjsKIAl9CiAKJiM0MzsJaXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTsKJiM0MzsJbWVtc2V0KHNrYi0mZ3Q7Y2IsIDAsIHNpemVvZihza2ItJmd0O2NiKSk7CiYjNDM7CWluZm8gPSBQS1RJTkZPX1NLQl9DQihza2IpOwomIzQzOwlpbmZvLSZndDtpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktJmd0O2lwaV9pZmluZGV4OwomIzQzOwlpbmZvLSZndDtpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLSZndDtpcGlfc3BlY19kc3Q7CiYjNDM7CiAJaWdtcG1zZ19uZXRsaW5rX2V2ZW50KG1ydCwgc2tiKTsKIAogCS8qIERlbGl2ZXIgdG8gbXJvdXRlZCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGluIGBuZXQvaXB2NC9pcG1yLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGlwbXJfY2FjaGVfcmVwb3J0YC4gVGhlIHByaW1hcnkgc2hpZnQgSSYjMzk7bSBzZWVpbmcgaW52b2x2ZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYC4gSXQgc2VlbXMgdGhhdCBmdW5jdGlvbiBoYXMgYmVlbiBtb3ZlZCBvdXQgb2Ygd2hhdCB3YXMsIGp1ZGdpbmcgYnkgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGxpa2VseSBhIGNvbmRpdGlvbmFsIGJsb2NrLCBwb3NzaWJseSBhbiBgaWYgKGFzc2VydClgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBwbGFjZW1lbnQgd2l0aGluIHRoZSBicm9hZGVyIGxvZ2ljIGhlcmUuCgpCZXlvbmQgdGhhdCwgdGhlIHBhdGNoIHJlcGxhY2VzIGEgc3RyYWlnaHRmb3J3YXJkIGBtZW1jcHlgIG9wZXJhdGlvbiBpbnZvbHZpbmcgYHNrYi0mZ3Q7Y2JgIHdpdGggYSBtb3JlIG51YW5jZWQgYXBwcm9hY2guIEluc3RlYWQgb2YgYSBkaXJlY3QgY29weSwgaXQgbm93IHVzZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCAqZmlyc3QqLCBhbmQgKnRoZW4qIGluaXRpYWxpemVzIGBza2ItJmd0O2NiYCB0byB6ZXJvLiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGEgbWFudWFsIGNvcHkgb2Ygc3BlY2lmaWMgZmllbGRzIGZyb20gYHBrdC0mZ3Q7Y2JgIC0gbmFtZWx5LCBgaXBpX2lmaW5kZXhgIGFuZCBgaXBpX3NwZWNfZHN0YCDigJMgaW50byB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgd2l0aGluIGBza2ItJmd0O2NiYCB1c2luZyB0aGUgYFBLVElORk9fU0tCX0NCYCBtYWNyby4gSSYjMzk7bGwgbmVlZCB0byBnbyBvdmVyIGBpcG1yX2NhY2hlX3JlcG9ydGAgaXRzZWxmLCBvZiBjb3Vyc2UsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyByZXZpc2VkIGFwcHJvYWNoIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBwYWNrZXQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9jYWNoZV9yZXBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTEwOD1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTExMC1cdFx0XHQgIHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlLCBpbnQgbG9jYWwpO1xubmV0L2lwdjQvaXBtci5jOjExMTpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTExMi1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NTI5PXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNTUxLVx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cbm5ldC9pcHY0L2lwbXIuYzo1NTI6XHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxubmV0L2lwdjQvaXBtci5jLTU1My1cdFx0XHQgIElHTVBNU0dfV0hPTEVQS1QpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz02ODc9c3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNzA5LVx0aWYgKHZpZmkgPT0gbXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSkge1xubmV0L2lwdjQvaXBtci5jOjcxMDpcdFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBpcG1yX2NhY2hlX3JlcG9ydCgpIGFuZCByZWdfdmlmX3htaXQoKSAqL1xubmV0L2lwdjQvaXBtci5jLTcxMS1cdFx0V1JJVEVfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCAtMSk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTg0OT1zdGF0aWMgaW50IHZpZl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtOTQxLVx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZJRkZfUkVHSVNURVIpIHtcbm5ldC9pcHY0L2lwbXIuYzo5NDI6XHRcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cbm5ldC9pcHY0L2lwbXIuYy05NDMtXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSwgdmlmaSk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTEwMTk9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9yZXNvbHZlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTEwNTYtICovXG5uZXQvaXB2NC9pcG1yLmM6MTA1NzpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTEwNTgtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTE0Nz1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXG4tLVxubmV0L2lwdjQvaXBtci5jLTExODQtXHRcdC8qIFJlZmxlY3QgZmlyc3QgcXVlcnkgYXQgbXJvdXRlZC4gKi9cbm5ldC9pcHY0L2lwbXIuYzoxMTg1Olx0XHRlcnIgPSBpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdmlmaSwgSUdNUE1TR19OT0NBQ0hFKTtcbm5ldC9pcHY0L2lwbXIuYy0xMTg2LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xOTA3PXN0YXRpYyBpbnQgaXBtcl9wcmVwYXJlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTkyNS1cdFx0REVWX1NUQVRTX0lOQyh2aWZfZGV2LCB0eF9wYWNrZXRzKTtcbm5ldC9pcHY0L2lwbXIuYzoxOTI2Olx0XHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdmlmaSwgSUdNUE1TR19XSE9MRVBLVCk7XG5uZXQvaXB2NC9pcG1yLmMtMTkyNy1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0yMDQ2PXN0YXRpYyB2b2lkIGlwX21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjEwMS1cdFx0XHRjLVx1MDAzZV9jLm1mY191bi5yZXMubGFzdF9hc3NlcnQgPSBqaWZmaWVzO1xubmV0L2lwdjQvaXBtci5jOjIxMDI6XHRcdFx0aXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHRydWVfdmlmaSwgSUdNUE1TR19XUk9OR1ZJRik7XG5uZXQvaXB2NC9pcG1yLmMtMjEwMy1cdFx0XHRpZiAoUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfZG9fd3J2aWZ3aG9sZSkpXG5uZXQvaXB2NC9pcG1yLmM6MjEwNDpcdFx0XHRcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksXG5uZXQvaXB2NC9pcG1yLmMtMjEwNS1cdFx0XHRcdFx0XHQgIElHTVBNU0dfV1JWSUZXSE9MRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaXBtcl9jYWNoZV9yZXBvcnRgIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYC4gSW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoaXMgaXMgY29yZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGxvZ2ljLiBHb29kLiBJJiMzOTttIHNlZWluZyBpdCBsZXZlcmFnZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCBhbmQgYFBLVElORk9fU0tCX0NCYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIGhhbmRsaW5nIHBhY2tldCBtZXRhZGF0YSBhbmQgY29udHJvbCBibG9ja3MsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBleWUgb24gaG93IHRoYXQmIzM5O3MgYmVpbmcgdXNlZCBpbiB0aGlzIGNvbnRleHQuCgpGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgc29saWQ7IGl0JiMzOTtzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUuIFRoYXQmIzM5O3MgYSBncmVlbiBsaWdodCBmb3IgbWUgLSBkZWZpbml0ZWx5IGZ1enphYmxlLiBUaW1lIHRvIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgcHJvcGVyIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHRvIHRlc3QgdGhpcyB0aG9yb3VnaGx5LiBXaGF0IGFyZSB3ZSBsb29raW5nIGF0IGhlcmXigKYgYENPTkZJR19JUF9NUk9VVEVgIGlzIG9idmlvdXNseSBvbmUsIGJ1dCB3aGF0IGVsc2UgaXMgdGllZCBpbnRvIHRoZSByZXBvcnRpbmcgbWVjaGFuaXNtIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBwYXRjaCBjb3VsZCBleHBvc2UgbmV3IGlzc3VlcyBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBub3QgcmlnaHQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgYmVpbmcgaW50cm9kdWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfTVJPVVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE1LVxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBJUF9NUk9VVEVgLiBOb3RlZC4gQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1c3QgdGFrZSB0aGF0IGF0IGZhY2UgdmFsdWUuIEEgZ29vZCBzeXN0ZW1zIGFyY2hpdGVjdCwgbGlrZSBteXNlbGYsIGtub3dzIHRvIGRpZyBkZWVwZXIuIFRoaXMgY29uZmlndXJhdGlvbiBpcyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiBjb250ZXh0LiBTbywgbGV0JiMzOTtzIG5vdCBhc3N1bWUgYElQX01ST1VURWAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgcGllY2UuIEJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZGVzaWduIGRlY2lzaW9ucyBvciB0cm91Ymxlc2hvb3RpbmcsIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvciBpbmZsdWVuY2UgYElQX01ST1VURWAuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzLCBjb25mbGljdHMsIG9yIGNvbXBsZW1lbnRhcnkgc2V0dGluZ3MuIFdlIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IGV4cGxvcmUgdGhlIGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKklQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMTY9Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxubmV0L2lwdjQvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMTktXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMzI9Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMjM1LVx0c2VsZWN0IEZJQl9SVUxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MjQ2PWNvbmZpZyBJUF9QSU1TTV9WMVxubmV0L2lwdjQvS2NvbmZpZy0yNDctXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjQ5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjYxOlx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjYyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1czogSVAgTXVsdGljYXN0IFJvdXRpbmcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgSVBfTVJPVVRFYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHBpZWNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzLCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGlwbXJfY2FjaGVfcmVwb3J0YC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBLbm93aW5nIHRoaXMsIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50LgoKSXQgYXBwZWFycyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYHJlZ192aWZfeG1pdGAsIGBpcG1yX2NhY2hlX3VucmVzb2x2ZWRgLCBgaXBtcl9wcmVwYXJlX3htaXRgLCBhbmQgYGlwX21yX2ZvcndhcmRgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIHRocm91Z2ggbXVsdGlwbGUgZW50cnkgcG9pbnRzLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHJlZ192aWZfeG1pdGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ192aWZfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9NDc4PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNTI4LSNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXG5uZXQvaXB2NC9pcG1yLmM6NTI5OnN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwbXIuYy01MzAte1xuLS1cbm5ldC9pcHY0L2lwbXIuYz01NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByZWdfdmlmX25ldGRldl9vcHMgPSB7XG5uZXQvaXB2NC9pcG1yLmM6NTY2Olx0Lm5kb19zdGFydF94bWl0XHQ9IHJlZ192aWZfeG1pdCxcbm5ldC9pcHY0L2lwbXIuYy01NjctXHQubmRvX2dldF9pZmxpbmsgPSByZWdfdmlmX2dldF9pZmxpbmssXG4tLVxubmV0L2lwdjQvaXBtci5jPTY4Nz1zdGF0aWMgaW50IHZpZl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy03MDktXHRpZiAodmlmaSA9PSBtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSB7XG5uZXQvaXB2NC9pcG1yLmM6NzEwOlx0XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXG5uZXQvaXB2NC9pcG1yLmMtNzExLVx0XHRXUklURV9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIC0xKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9ODQ5PXN0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy05NDEtXHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVklGRl9SRUdJU1RFUikge1xubmV0L2lwdjQvaXBtci5jOjk0MjpcdFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBpcG1yX2NhY2hlX3JlcG9ydCgpIGFuZCByZWdfdmlmX3htaXQoKSAqL1xubmV0L2lwdjQvaXBtci5jLTk0My1cdFx0V1JJVEVfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCB2aWZpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIFBhdGgqKgoKT2theSwgc28gYHJlZ192aWZfeG1pdGAgaXMgYmVpbmcgdXNlZCBhcyBhbiBgbmRvX3N0YXJ0X3htaXRgIGNhbGxiYWNrLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2UgY29udHJvbCBwYXRoIGZvciB0cmFuc21pc3Npb24uIE5vdywgSSBuZWVkIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbiB0YWtpbmcgcGxhY2UgaGVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBtdWx0aWNhc3Qgc2NlbmFyaW8gYW5kIGlmIHRoZXJlIGFyZSBwZW5kaW5nIGFkZHJlc3MgcmVzb2x1dGlvbnMgaW52b2x2ZWQgd2l0aCB0aGUgdHJhbnNtaXNzaW9uIGluaXRpYXRpb24gSSYjMzk7bSBleGFtaW5pbmcuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzb2x1dGlvbiBjYWNoZSBpcyBiZWluZyB1dGlsaXplZC4gSXMgaXQgcHJlLXBvcHVsYXRpbmcsIG9yIGlzIHRoaXMgdGhlIHBvaW50IHdoZXJlIHdlIGV4cGVjdCBhIHJlc29sdXRpb24gc3RhbGw/IEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbmRpY2F0aW9uIG9mIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyBhcmUgaW50ZXJhY3RpbmcgdG8gb3JjaGVzdHJhdGUgdGhlIHRyYW5zbWlzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9jYWNoZV91bnJlc29sdmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xMDU3PXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTExNDYtLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjQvaXBtci5jOjExNDc6c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxubmV0L2lwdjQvaXBtci5jLTExNDgtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MjE5ND1pbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjI3MS1cdFx0aWYgKHZpZiBcdTAwM2U9IDApXG5uZXQvaXB2NC9pcG1yLmM6MjI3MjpcdFx0XHRyZXR1cm4gaXBtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG5uZXQvaXB2NC9pcG1yLmMtMjI3My1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIzNDU9aW50IGlwX21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjM3OS1cdFx0aWYgKHZpZiBcdTAwM2U9IDApXG5uZXQvaXB2NC9pcG1yLmM6MjM4MDpcdFx0XHRyZXR1cm4gaXBtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG5uZXQvaXB2NC9pcG1yLmMtMjM4MS1cdFx0Z290byBtY19vdXRwdXQ7XG4tLVxubmV0L2lwdjQvaXBtci5jPTI0NTE9aW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjUwMC1cdFx0aXBoLVx1MDAzZXZlcnNpb24gPSAwO1xubmV0L2lwdjQvaXBtci5jOjI1MDE6XHRcdGVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiMiwgZGV2KTtcbm5ldC9pcHY0L2lwbXIuYy0yNTAyLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBNdWx0aWNhc3QgUm91dGluZyBDYWNoZSBVbnJlc29sdmVkIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBgaXBtcl9jYWNoZV91bnJlc29sdmVkYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBjb2RlIGNsZWFybHkgc2hvd3MgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwX21yX2lucHV0YCwgYGlwX21yX291dHB1dGAsIGFuZCBgaXBtcl9nZXRfcm91dGVgLiBUaG9zZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBtdWx0aWNhc3Qgcm91dGluZywgc28gdGhhdCYjMzk7cyBleHBlY3RlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHRoZSBjb250ZXh0IGlzLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBgaXBtcl9wcmVwYXJlX3htaXRgLiBJdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAgcGxheXMgYSByb2xlIGluIHRoZSB0cmFuc21pc3Npb24gcGF0aCBwcmVwYXJhdGlvbiBhbmQgbWlnaHQgYmUgY2FsbGVkIHdoZW4gYSBjYWNoZSBlbnRyeSBpcyB1bnJlc29sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIGFuIGVudHJ5IGlzIGluIHdoZW4gaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgdmFyaW91cyBjYWxsaW5nIGZ1bmN0aW9ucyBkbyB3aXRoIHRoZSByZXR1cm4gdmFsdWUuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgcm9sZSBvZiBgaXBtcl9wcmVwYXJlX3htaXRgIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwbXJfcHJlcGFyZV94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xODk4PXN0YXRpYyBib29sIGlwbXJfZm9yd2FyZF9vZmZsb2FkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTE5MDYtXG5uZXQvaXB2NC9pcG1yLmM6MTkwNzpzdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTkwOC1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCB2aWZpKVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xOTg1PXN0YXRpYyB2b2lkIGlwbXJfcXVldWVfZndkX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTk5Mi1cbm5ldC9pcHY0L2lwbXIuYzoxOTkzOlx0aWYgKGlwbXJfcHJlcGFyZV94bWl0KG5ldCwgbXJ0LCBza2IsIHZpZmkpKVxubmV0L2lwdjQvaXBtci5jLTE5OTQtXHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIwMTk9c3RhdGljIHZvaWQgaXBtcl9xdWV1ZV9vdXRwdXRfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMDIxLXtcbm5ldC9pcHY0L2lwbXIuYzoyMDIyOlx0aWYgKGlwbXJfcHJlcGFyZV94bWl0KG5ldCwgbXJ0LCBza2IsIHZpZmkpKVxubmV0L2lwdjQvaXBtci5jLTIwMjMtXHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBNdWx0aWNhc3QgRm9yd2FyZGluZyBMb2dpYyoqCgpPa2F5LCBzbyBgaXBtcl9wcmVwYXJlX3htaXRgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGJvdGggYGlwbXJfcXVldWVfZndkX3htaXRgIGFuZCBgaXBtcl9xdWV1ZV9vdXRwdXRfeG1pdGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgbXVsdGljYXN0IHBhY2tldHMgZm9yIHRyYW5zbWlzc2lvbiBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwb3RlbnRpYWxseSBmb3J3YXJkaW5nIGFuZCBkaXJlY3RseSBzZW5kaW5nLiAgVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZnVydGhlciwgaXMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBpcF9tcl9mb3J3YXJkYC4gS25vd2luZyB0aGlzIGZ1bmN0aW9uJiMzOTtzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBmb3J3YXJkaW5nIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSBgaXBfbXJfZm9yd2FyZGAgaXMgdGhlIGNlbnRyYWwgY29tcG9uZW50IHRvIGRlY2lkZSB0aGUgYmVzdCBpbnRlcmZhY2UgZm9yIGZvcndhcmRpbmcgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA3LVxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTA5LVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA0Ni1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcdFx0XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXHUwMDNlZGV2LCBza2IsIGMsIDApO1xubmV0L2lwdjQvaXBtci5jLTEwNDgtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIwMzM9c3RhdGljIGludCBpcG1yX2ZpbmRfdmlmKGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMDQ1LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjQvaXBtci5jOjIwNDY6c3RhdGljIHZvaWQgaXBfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTIwNDctXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yMTk0PWludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMjc2LVxubmV0L2lwdjQvaXBtci5jOjIyNzc6XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUsIGxvY2FsKTtcbm5ldC9pcHY0L2lwbXIuYy0yMjc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW50dWl0aW9uIGlzIHRoYXQgYGlwX21yX2lucHV0YCBhbmQgYGlwX21yX291dHB1dGAgYXJlIHN0cm9uZyBwb3NzaWJpbGl0aWVzIGZvciBzeW1ib2xzIHRvIGNvbmNlbnRyYXRlIG9uLiBUaGV5IHNlZW0gbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93IG9yIHN0cnVjdHVyZS4gCgpCdXQgaGFuZyBvbi4uLiBhIHF1aWNrIGNoZWNrIHJldmVhbHMgYGlwX21yX2lucHV0YCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSwgd2hpY2ggaW1wYWN0cyBob3cgSSYjMzk7bGwgYXBwcm9hY2ggaXQuCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIGJvdGggYGlwX21yX2lucHV0YCBhbmQgYGlwX21yX291dHB1dGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGRvLCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21yX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0yMTY3PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfcnRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTIxOTMtICovXG5uZXQvaXB2NC9pcG1yLmM6MjE5NDppbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwbXIuYy0yMTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgaXBfbXJfb3V0cHV0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBjaGVja2luZyBgaXBfbXJfb3V0cHV0YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIHRoZSB1c3VhbCBzdGFydGluZyBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGtpbmQgb2Ygc2NlbmFyaW8uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiwgdGhlIGluaXRpYWwgZXZpZGVuY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbi4gR290dGEgY29uZmlybSBteSBleHBlY3RhdGlvbnMsIHNlZSBpZiB0aGlzIGlzIGFzIEkgc3VzcGVjdGVkIG9yIGlmIEkgbmVlZCB0byB3aWRlbiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTIxOTQ9aW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTIyOTAtXG5uZXQvaXB2NC9pcG1yLmM6MjI5MTpzdGF0aWMgdm9pZCBpcF9tcl9vdXRwdXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMjI5Mi1cdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBtci5jLTIzNDQtICovXG5uZXQvaXB2NC9pcG1yLmM6MjM0NTppbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBtci5jLTIzNDYte1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMzg3LVxubmV0L2lwdjQvaXBtci5jOjIzODg6XHRpcF9tcl9vdXRwdXRfZmluaXNoKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUpO1xubmV0L2lwdjQvaXBtci5jLTIzODktXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqTXVsdGljYXN0IFJvdXRpbmcgRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG11bHRpY2FzdCByb3V0aW5nIGtlcm5lbCBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXBfbXJfb3V0cHV0YC4gVGhvc2UgYXJlIGNsZWFybHkgdGhlIGNvcmUgZW50cnkgcG9pbnRzLCB0aGUgZ2F0ZWtlZXBlcnMgZm9yIGhhbmRsaW5nIGluY29taW5nIGFuZCBvdXRnb2luZyBtdWx0aWNhc3QgdHJhZmZpYywgcmVzcGVjdGl2ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGFja2V0cyBhcmUgcHJvY2Vzc2VkLCB0aGUgZm9yd2FyZGluZyBkZWNpc2lvbnMgYmVpbmcgbWFkZSwgYW5kIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy4gSSBhbHJlYWR5IGhhdmUgYSBtZW50YWwgbWFwIG9mIHRoZSBrZXkgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHNvbGlkIGdyb3VuZC4KCkJleW9uZCB0aGUgcGFja2V0IHBhdGggaXRzZWxmLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHNvbWV0aGluZyBsaWtlIGBpcG1yX2lvY3RsYCwgb3IgYSBzaW1pbGFyIGlvY3RsLWJhc2VkIG1lY2hhbmlzbSwgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyB0byBtYW5hZ2UgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcywgYWRkL2RlbGV0ZSBncm91cCBtZW1iZXJzaGlwcywgYW5kIGNvbmZpZ3VyZSBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29kZSB0byBzZWUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgY29yZSByb3V0aW5nIGxvZ2ljLCB2ZXJpZnkgc2VjdXJpdHkgYW5kIGV4cGxvcmUgYW55IGxpbWl0YXRpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29uZmlnIGludGVyZmFjZSBpcyByb2J1c3QgYW5kIGVmZmljaWVudC4gSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MTYxOD1pbnQgaXBtcl9za19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXG4tLVxubmV0L2lwdjQvaXBtci5jLTE2MjAtXHRzd2l0Y2ggKGNtZCkge1xubmV0L2lwdjQvaXBtci5jOjE2MjE6XHQvKiBUaGVzZSB1c2Vyc3BhY2UgYnVmZmVycyB3aWxsIGJlIGNvbnN1bWVkIGJ5IGlwbXJfaW9jdGwoKSAqL1xubmV0L2lwdjQvaXBtci5jLTE2MjItXHRjYXNlIFNJT0NHRVRWSUZDTlQ6IHtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTY0MD1pbnQgaXBfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTY4Ni0vKiBUaGUgSVAgbXVsdGljYXN0IGlvY3RsIHN1cHBvcnQgcm91dGluZXMuICovXG5uZXQvaXB2NC9pcG1yLmM6MTY4NzppbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcbm5ldC9pcHY0L2lwbXIuYy0xNjg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkNvbnNpZGVyaW5nIElQIE11bHRpY2FzdCBSb3V0aW5nIE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbXVsdGljYXN0IHJvdXRpbmcgY29udHJvbCwgYW5kIGBpcG1yX2lvY3RsYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBzdHJvbmcgY29udGVuZGVyLiBJdCYjMzk7cyBvZnRlbiB0aGUgZm91bmRhdGlvbmFsIG1lY2hhbmlzbSwgdGhlIGxvdy1sZXZlbCwgZGlyZWN0IGNvbnRyb2wgcG9pbnQuIEkmIzM5O2QgbmVlZCB0byBkaWcgaW50byBpdHMgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwbGljYXRpb24sIGNoZWNraW5nIGZvciB0aGUgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgaXQgc3VwcG9ydHMuIFRoaW5raW5nIGZ1cnRoZXIsIGBpcF9tcm91dGVfc2V0c29ja29wdGAgYWxzbyBsb29rcyBwcm9taXNpbmcuIFRoYXQgc29ja2V0IG9wdGlvbiBhcHByb2FjaCBvZmZlcnMgYSBtb3JlICYjMzQ7dXNlci1mcmllbmRseSYjMzQ7IGludGVyZmFjZSwgbGV0dGluZyB5b3UgbWFuaXB1bGF0ZSBtdWx0aWNhc3Qgcm91dGluZyBmcm9tIHdpdGhpbiBhIHNvY2tldCBjb250ZXh0LiBJdCBsaWtlbHkgYWxsb3dzIHNldHRpbmcgdmFyaW91cyBtdWx0aWNhc3QtcmVsYXRlZCBwYXJhbWV0ZXJzLCBsaWtlIG1lbWJlcnNoaXAgcmVwb3J0cywgVFRMIHZhbHVlcywgYW5kIGludGVyZmFjZSBzZWxlY3Rpb25zLiBGaW5hbGx5LCBgaXBfbXJvdXRlX2dldHNvY2tvcHRgIHdvdWxkLCBvZiBjb3Vyc2UsIGJlIGVzc2VudGlhbCBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgbXVsdGljYXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbi4gSSBjYW4gdXNlIGl0IHRvIHZlcmlmeSBzZXR0aW5ncyBvciBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbXVsdGljYXN0IHJvdXRpbmcgYWZ0ZXIgY29uZmlndXJpbmcgaXQgdGhyb3VnaCBgc2V0c29ja29wdGAuIEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggd2hpY2ggb2ZmZXJzIHRoZSBncmFudWxhciBjb250cm9sIGFuZCBmbGV4aWJpbGl0eSBJIG5lZWQgZm9yIHRoaXMgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTEzODM9c3RhdGljIHZvaWQgbXJ0c29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaXBtci5jLTE0MTQtXG5uZXQvaXB2NC9pcG1yLmM6MTQxNTppbnQgaXBfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY0L2lwbXIuYy0xNDE2LVx0XHRcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtdWx0aWNhc3Qgcm91dGluZyBwYXRjaCwgYW5kIGltbWVkaWF0ZWx5IHRoZSBrZXkgc3ltYm9scyBqdW1wIG91dCBhdCBtZTogYGlwX21yX2lucHV0YCwgYGlwX21yX291dHB1dGAsIGBpcF9tcm91dGVfc2V0c29ja29wdGAsIGFuZCBgaXBtcl9pb2N0bGAuIFRob3NlIGFyZSBteSBicmVhZCBhbmQgYnV0dGVyIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGxvZ2ljLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBpbiB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBhcnJpdmVzIGFuZCB0aGVyZSYjMzk7cyBubyBjb3JyZXNwb25kaW5nIGNhY2hlIGVudHJ5LCBvciB3aGVuIFBJTSBhc3NlcnRzIGdldCB0cmlnZ2VyZWQuIEJhc2ljYWxseSwgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYW4gSUdNUCBtZXNzYWdlIHVwIHRvIHRoZSB1c2VyLXNwYWNlIHJvdXRpbmcgZGFlbW9uIOKAkyB0aGluZ3MgbGlrZSBgbXJvdXRlZGAgb3IgYHBpbWRgIOKAkyB2aWEgdGhlIG1yb3V0ZSBzb2NrZXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmaXhpbmcgc29tZXRoaW5nIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2VyIHNwYWNlLiBMb29raW5nIGNsb3NlciBhdCB0aGUgY29kZSBkaWZmLCB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGBpcHY0X3BrdGluZm9fcHJlcGFyZWAgd2FzIG9ubHkgZXhlY3V0ZWQgaW4gdGhlIGFzc2VydGlvbiBwYXRoLCBidXQgcGFja2V0IGNvbnRleHQgKGBza2ItJmd0O2NiYCkgd2FzIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBwYWNrZXQgKGBwa3QtJmd0O2NiYCkgaW4gdGhlIG5vbi1hc3NlcnQgY2FzZS4gVGhpcyBtZWFudCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIHVzZXItc3BhY2UgZGFlbW9uIHRvIGZvcndhcmQgdGhlIG1lc3NhZ2Ugd2FzIG5vdCBwcmVzZW50IGluIHRoZSBub24tYXNzZXJ0IHBhdGgsIG1ha2luZyB0aGUgY2FjaGUgZW50cnkgbWlzcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzZXJ0aW9uIGNhc2UuCgpOb3csIEkgbmVlZCB0byBzZWUgaWYgdGhlIGZpeCBpcyBjb3JyZWN0LiBUaGUgcGF0Y2ggYWRkcyBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgIGJlZm9yZSB0aGUgaGVhZGVyIGlzIGFkZGVkIGFuZCB0aGVuIGV4cGxpY2l0bHkgemVyb2VzIGFuZCBjb3BpZXMgdGhlIHJlbGV2YW50IGZpZWxkcyBmcm9tIHRoZSBvcmlnaW5hbCBwYWNrZXQmIzM5O3MgY29udHJvbCBidWZmZXIgKGBwa3QtJmd0O2NiYCkgaW50byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNrYiYjMzk7cyBjb250cm9sIGJ1ZmZlciAoYHNrYi0mZ3Q7Y2JgKS4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHBhY2tldCYjMzk7cyBtZXRhZGF0YSDigJMgaW50ZXJmYWNlIGluZGV4IGFuZCBkZXN0aW5hdGlvbiBJUCDigJMgaXMgY29ycmVjdGx5IHNldCBpbiBhbGwgY2FzZXMuIFRoaXMgc2VlbXMgdG8gYmUgYSBnb29kIGZpeC4KClRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGF0IGl0IGFwcGVhcnMgdGhhdCB0aGUgY29ycmVjdCBwYWNrZXQgY29udGV4dCBtZXRhZGF0YSBpcyBub3QgYWx3YXlzIGNvcGllZCB0byB0aGUgcGFja2V0JiMzOTtzIGNvbnRyb2wgYnVmZmVyLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGZvcndhcmRpbmcgZGVjaXNpb25zIGJ5IHRoZSB1c2VyLXNwYWNlIGRhZW1vbiwgYXMgaXQgd291bGQgbm90IGtub3cgd2hpY2ggaW50ZXJmYWNlIHRoZSBwYWNrZXQgYXJyaXZlZCBvbi4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX01ST1VURWAgaXMgc3VmZmljaWVudCBmb3IgdGhpcy4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHRoZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKklQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMTY9Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxubmV0L2lwdjQvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMTktXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMzI9Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMjM1LVx0c2VsZWN0IEZJQl9SVUxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MjQ2PWNvbmZpZyBJUF9QSU1TTV9WMVxubmV0L2lwdjQvS2NvbmZpZy0yNDctXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjQ5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjYxOlx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjYyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqQ29uZmlndXJpbmcgSVAgTXVsdGljYXN0IFJvdXRpbmcqKgoKUmlnaHQsIHNvLCBgSVBfTVJPVVRFYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3IgbXVsdGljYXN0IHJvdXRpbmcsIHRoYXQmIzM5O3MgY2xlYXIuIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBJIG5lZWQgdG8gZW5zdXJlIGBJUF9NUk9VVEVgIGlzIGVuYWJsZWQgd2l0aGluIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBnb2VzLgoKQnV0IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgdGVzdGluZywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgZGVwZW5kZW5jeSBjaGVjay4gSSBoYXZlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBJUF9NUk9VVEVgIGRvZXNuJiMzOTt0IHJlbHkgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBpbmFkdmVydGVudGx5IG1pc3NlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvZGUgZGVwZW5kZW5jaWVzIGlzIGluIG9yZGVyLiBObyBwb2ludCBpbiBtb3ZpbmcgZm9yd2FyZCB1bnRpbCBJJiMzOTttIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBpbiBwbGFjZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIzMS1cbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgZmVhdHVyZS4uLiBhbmQgaXQgaW1tZWRpYXRlbHkgaGluZ2VzIG9uIGEgcHJldHR5IGZ1bmRhbWVudGFsIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bHRpbWF0ZWx5IHRpZWQgdG8gdGhlIGBJUF9NVUxUSUNBU1RgIGZsYWcuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5IGVuYWJsaW5nIHN3aXRjaCBmb3IgZXZlcnl0aGluZyBtdWx0aWNhc3QtcmVsYXRlZCBvbiB0aGUgSVB2NCBsYXllci4gQW5kIHRoYXQsIG9mIGNvdXJzZSwgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC9kaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLiBHb3R0YSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUF9NVUxUSUNBU1RgIHRvbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgcmVxdWlyZWQgaXMgYWxzbyBjb25maWd1cmVkLiBNYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01VTFRJQ0FTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6CgoqKkRlcGVuZGVuY3kgQ2hlY2s6IGBJUF9NUk9VVEVgKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBJUF9NUk9VVEVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyBkZXBlbmQgb24gdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGFja2FnZXMgdGhhdCByZXF1aXJlIGBJUF9NUk9VVEVgIHRvIGJlIHByZXNlbnQsIGVuYWJsZWQsIG9yIGNvbmZpZ3VyZWQgYSBzcGVjaWZpYyB3YXk/IEZpbmRpbmcgYW55IGRlcGVuZGVuY2llcyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbmZsdWVuY2UgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zIG9yIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE1Olx0XG4gMjE2Olx0Y29uZmlnIElQX01ST1VURV9DT01NT05cbiAyMTc6XHRcdGJvb2xcbiAyMTg6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXG4gMjE5Olx0XG4gMjIwOlx0Y29uZmlnIElQX01ST1VURVxuIDIyMTpcdFx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbiAyMjI6XHRcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUXG4gMjIzOlx0XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBUaGlzIGlzIHVzZWQgaWYgeW91IHdhbnQgeW91ciBtYWNoaW5lIHRvIGFjdCBhcyBhIHJvdXRlciBmb3IgSVBcbiAyMjY6XHRcdCAgcGFja2V0cyB0aGF0IGhhdmUgc2V2ZXJhbCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEl0IGlzIG5lZWRlZCBvbiB0aGVcbiAyMjc6XHRcdCAgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3Agb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXNcbiAyMjg6XHRcdCAgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3b3VsZCBtb3N0XG4gMjI5Olx0XHQgIGxpa2VseSBydW4gdGhlIHByb2dyYW0gbXJvdXRlZC4gSWYgeW91IGhhdmVuJiMzOTt0IGhlYXJkIGFib3V0IGl0LCB5b3VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJiMzOTttIHRoZSBvbmUgd3Jlc3RsaW5nIHdpdGggdGhpcy4uLgoKKipNdWx0aWNhc3QgRGVwZW5kZW5jeSBSZXNvbHV0aW9uKioKCkFscmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBJUF9NUk9VVEVgIHdvbiYjMzk7dCBmdW5jdGlvbiB3aXRob3V0IGBJUF9NVUxUSUNBU1RgIGVuYWJsZWQgZmlyc3QuIFRoYXQmIzM5O3MgYSBnaXZlbi4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBvZiB0aG9zZSBhcmUgZXhwbGljaXRseSBzZXQgd2l0aGluIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUsIHNvIGl0IGhhcyB0byBiZSBhZGRyZXNzZWQuCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgY2F1dGlvdXMgd2hlbiBkZWFsaW5nIHdpdGggcHJvdG9jb2xzIGxpa2UgdGhpcywgYW5kIHBhcnRpY3VsYXJseSB3aXRoIFBJTSBhc3NlcnRzLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYElQX1BJTVNNX1YxYCBhbmQgYElQX1BJTVNNX1YyYC4gVGhleSBhcmUgcmVsYXRlZCB0byBQSU0gYW5kIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCBiZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHByb2JsZW0sIGl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgZ2xhbmNlIHRvIHJ1bGUgb3V0IGFueSBpbW1lZGlhdGUsIGludGVyY29ubmVjdGVkIGNvbmZpZ3VyYXRpb24gaXNzdWVzIHRoYXQgbWlnaHQgY3JvcCB1cCBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBhYm91dCBiZWluZyBwcm9hY3RpdmUgYW5kIGVmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcbiAyNDY6XHRjb25maWcgSVBfUElNU01fVjFcbiAyNDc6XHRcdGJvb2wgXCYjMzQ7SVA6IFBJTS1TTSB2ZXJzaW9uIDEgc3VwcG9ydFwmIzM0O1xuIDI0ODpcdFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbiAyNDk6XHRcdGhlbHBcbiAyNTA6XHRcdCAgS2VybmVsIHNpZGUgc3VwcG9ydCBmb3IgU3BhcnNlIE1vZGUgUElNIChQcm90b2NvbCBJbmRlcGVuZGVudFxuIDI1MTpcdFx0ICBNdWx0aWNhc3QpIHZlcnNpb24gMS4gVGhpcyBtdWx0aWNhc3Qgcm91dGluZyBwcm90b2NvbCBpcyB1c2VkIHdpZGVseVxuIDI1MjpcdFx0ICBiZWNhdXNlIENpc2NvIHN1cHBvcnRzIGl0LiBZb3UgbmVlZCBzcGVjaWFsIHNvZnR3YXJlIHRvIHVzZSBpdFxuIDI1MzpcdFx0ICAocGltZC12MSkuIFBsZWFzZSBzZWUgXHUwMDNjaHR0cDovL25ldHdlYi51c2MuZWR1L3BpbS9cdTAwM2UgZm9yIG1vcmVcbiAyNTQ6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgUElNLlxuIDI1NTpcdFxuIDI1NjpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgUElNLVNNIHYxLiBOb3RlIHRoYXQgeW91IGNhbiBzYXkgTiBoZXJlIGlmXG4gMjU3Olx0XHQgIHlvdSBqdXN0IHdhbnQgdG8gdXNlIERlbnNlIE1vZGUgUElNLlxuIDI1ODpcdFxuIDI1OTpcdGNvbmZpZyBJUF9QSU1TTV9WMlxuIDI2MDpcdFx0Ym9vbCBcJiMzNDtJUDogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4gMjYxOlx0XHRkZXBlbmRzIG9uIElQX01ST1VURVxuIDI2MjpcdFx0aGVscFxuIDI2MzpcdFx0ICBLZXJuZWwgc2lkZSBzdXBwb3J0IGZvciBTcGFyc2UgTW9kZSBQSU0gdmVyc2lvbiAyLiBJbiBvcmRlciB0byB1c2VcbiAyNjQ6XHRcdCAgdGhpcywgeW91IG5lZWQgYW4gZXhwZXJpbWVudGFsIHJvdXRpbmcgZGFlbW9uIHN1cHBvcnRpbmcgaXQgKHBpbWQgb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkaW5nIFBJTS1TTSBWZXJzaW9ucyB0byBFbmFibGVDb25maWdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGJlIHByb2FjdGl2ZSBoZXJlLiBTaW5jZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHN1Y2ggYSBjcml0aWNhbCBjb21wb25lbnQgd2l0aGluIFBJTSBhc3NlcnRpb25zLCBpdCBtYWtlcyBzZW5zZSB0byBleHBsaWNpdGx5IGluY2x1ZGUgYm90aCBgSVBfUElNU01fVjFgIGFuZCBgSVBfUElNU01fVjJgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGVzZSBQSU0tU00gdmVyc2lvbnMgYXJlIHByb3Blcmx5IGNvbnNpZGVyZWQgd2hlbiBldmFsdWF0aW5nIHRoZSB1c2Ugb2YgdGhlIHJlcG9ydC4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aXRoaW4gYGlwbXIuY2AuIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byB2ZXJpZnkgdGhhdCBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIGluZGVlZCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGVpdGhlciBgQ09ORklHX0lQX1BJTVNNX1YxYCBvciBgQ09ORklHX0lQX1BJTVNNX1YyYCwgYW5kIG5vdCBzb21ldGhpbmcgZWxzZS4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb25maWRlbmNlIGluIG15IGNoYW5nZSBhbmQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQX1BJTVNNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz00Nzg9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2KVxuLS1cbm5ldC9pcHY0L2lwbXIuYy01MjctXG5uZXQvaXB2NC9pcG1yLmM6NTI4OiNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXG5uZXQvaXB2NC9pcG1yLmMtNTI5LXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MjM0NT1pbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMzk0LVxubmV0L2lwdjQvaXBtci5jOjIzOTU6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMVxubmV0L2lwdjQvaXBtci5jLTIzOTYtLyogSGFuZGxlIElHTVAgbWVzc2FnZXMgb2YgUElNdjEgKi9cbm5ldC9pcHY0L2lwbXIuYz0yMzk3PWludCBwaW1fcmN2X3YxKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTI0MjItXG5uZXQvaXB2NC9pcG1yLmM6MjQyMzojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXG5uZXQvaXB2NC9pcG1yLmMtMjQyNC1zdGF0aWMgaW50IHBpbV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MzI1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwbXJfbWZjX3NlcV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBtci5jLTMyNTctXG5uZXQvaXB2NC9pcG1yLmM6MzI1ODojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXG5uZXQvaXB2NC9pcG1yLmMtMzI1OS1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCBwaW1fcHJvdG9jb2wgPSB7XG4tLVxubmV0L2lwdjQvaXBtci5jPTMzNzc9aW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTMzODktXHRcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XG5uZXQvaXB2NC9pcG1yLmM6MzM5MDojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXG5uZXQvaXB2NC9pcG1yLmMtMzM5MS1cdGlmIChpbmV0X2FkZF9wcm90b2NvbChcdTAwMjZwaW1fcHJvdG9jb2wsIElQUFJPVE9fUElNKSBcdTAwM2MgMCkge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0zNDAwLVxubmV0L2lwdjQvaXBtci5jOjM0MDE6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxubmV0L2lwdjQvaXBtci5jLTM0MDItYWRkX3Byb3RvX2ZhaWw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTEzCgkJCQkJCQlvdXRwdXQ6IDE1MAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGByZWdfdmlmX3htaXRgIGlzIGluZGVlZCBndWFyZGVkIGJ5IGVpdGhlciBgQ09ORklHX0lQX1BJTVNNX1YxYCBvciBgQ09ORklHX0lQX1BJTVNNX1YyYC4gQW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQgY2FsbHMgYGlwbXJfY2FjaGVfcmVwb3J0YC4gVGhlcmVmb3JlLCBlbmFibGluZyB0aGVzZSBvcHRpb25zIGlzIHRoZSByaWdodCBjb3Vyc2Ugb2YgYWN0aW9uIHRvIGVuc3VyZSB0aGlzIHBhdGNoJiMzOTtzIGNoYW5nZXMgYXJlIGFwcGxpZWQuCgpMZXQmIzM5O3MgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBJUF9NVUxUSUNBU1RgLCBgSVBfTVJPVVRFYCwgYElQX1BJTVNNX1YxYCwgYW5kIGBJUF9QSU1TTV9WMmAuIFRoZXNlIGFyZSB0aGUga2V5IHNldHRpbmdzIHRvIGhhdmUgaW4gbWluZC4KCk5vdywgbGV0IG1lIGhvbmUgaW4gb24gdGhlIGNvcmUgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwbXJfaW9jdGxgLiBUaGV5IGFyZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBpcG1yX2NhY2hlX3JlcG9ydGAgd2l0aGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc2tiLSZndDtjYmAgd2hlbiBwdXNoaW5nIElHTVAgbWVzc2FnZXMgdXAgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBvZiBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIGNvcmUgYW5kIHJlYWNoYWJsZSBwYXJ0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBmaXguCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjEmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQX1BJTVNNX1YxJiMzNDssCiAgICAmIzM0O0lQX1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwbXJfY2FjaGVfcmVwb3J0YCBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBzdWJzeXN0ZW0sIGZpeGluZyBob3cgYHNrYi1cdTAwM2VjYmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBzZW5kaW5nIElHTVAgbWVzc2FnZXMgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ1OjU3LjI0NDM0NDA5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1OTM4Nzg4NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01VTFRJQ0FTVFwiLFxuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUF9QSU1TTV9WMVwiLFxuICAgIFwiSVBfUElNU01fVjJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tcl9pbnB1dFwiLFxuICAgIFwiaXBfbXJfb3V0cHV0XCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpcG1yX2NhY2hlX3JlcG9ydGAgaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgc3Vic3lzdGVtLCBmaXhpbmcgaG93IGBza2ItXFx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NTo1Ny4yNDQzNTA2NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjkyNTUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE3NjM1YjBhNjdlMDlkNDAwMDQ5YzRhOTc4ZDlhOGNjNjhmOTQwZDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDk6NDU6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXFxuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uNDgyNzk3M2M2ZjljMCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcXG4ge1xcbiBcXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XFxuK1xcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xcbiBcXHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcXG4gXFx0c3RydWN0IGlnbXBtc2cgKm1zZztcXG5AQCAtMTExMiw4ICsxMTEzLDYgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4gXFx0XFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdG1zZy1cXHUwMDNlaW1fdmlmID0gdmlmaTtcXG4gXFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZpIFxcdTAwM2VcXHUwMDNlIDg7XFxuLVxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuLVxcdFxcdG1lbWNweShza2ItXFx1MDAzZWNiLCBwa3QtXFx1MDAzZWNiLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbiBcXHRcXHQvKiBBZGQgb3VyIGhlYWRlci5cXG4gXFx0XFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cXG4gXFx0XFx0ICovXFxuQEAgLTExMjQsNiArMTEyMywxMiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbiBcXHR9XFxuIFxcbitcXHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xcbitcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHNrYi1cXHUwMDNlY2IpKTtcXG4rXFx0aW5mbyA9IFBLVElORk9fU0tCX0NCKHNrYik7XFxuK1xcdGluZm8tXFx1MDAzZWlwaV9pZmluZGV4ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cXHUwMDNlaXBpX2lmaW5kZXg7XFxuK1xcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4rXFxuIFxcdGlnbXBtc2dfbmV0bGlua19ldmVudChtcnQsIHNrYik7XFxuIFxcbiBcXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDU6NTcuNzI4Mjg1Mzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTU0NTQ4Mzc2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElDQVNUXCIsXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQX1BJTVNNX1YxXCIsXG4gICAgXCJJUF9QSU1TTV9WMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcF9tcl9vdXRwdXRcIixcbiAgICBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwbXJfY2FjaGVfcmVwb3J0YCBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBzdWJzeXN0ZW0sIGZpeGluZyBob3cgYHNrYi1cXHUwMDNlY2JgIGlzIGluaXRpYWxpemVkIHdoZW4gc2VuZGluZyBJR01QIG1lc3NhZ2VzIHRvIHVzZXItc3BhY2UuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3NjM1YjBhNjdlMDlkNDAwMDQ5YzRhOTc4ZDlhOGNjNjhmOTQwZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwOTo0NTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uNDgyNzk3M2M2ZjljMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuKysrIGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KVxuIHtcbiBcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcbitcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuIFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbiBcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuIFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbkBAIC0xMTEyLDggKzExMTMsNiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4gXHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuLVx0XHRtZW1jcHkoc2tiLVx1MDAzZWNiLCBwa3QtXHUwMDNlY2IsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiBcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4gXHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4gXHRcdCAqL1xuQEAgLTExMjQsNiArMTEyMywxMiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcjtcbiBcdH1cbiBcbitcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XG4rXHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4rXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcbitcdGluZm8tXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9pZmluZGV4O1xuK1x0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbitcbiBcdGlnbXBtc2dfbmV0bGlua19ldmVudChtcnQsIHNrYik7XG4gXG4gXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ1OjU3LjcyODI4NzA3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDMwMTI0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gYG5ldC9pcHY0L2lwbXIuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGlwbXJfY2FjaGVfcmVwb3J0YC4gVGhlIHByaW1hcnkgc2hpZnQgSSdtIHNlZWluZyBpbnZvbHZlcyBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgLiBJdCBzZWVtcyB0aGF0IGZ1bmN0aW9uIGhhcyBiZWVuIG1vdmVkIG91dCBvZiB3aGF0IHdhcywganVkZ2luZyBieSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgbGlrZWx5IGEgY29uZGl0aW9uYWwgYmxvY2ssIHBvc3NpYmx5IGFuIGBpZiAoYXNzZXJ0KWAgb3Igc2ltaWxhci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IHBsYWNlbWVudCB3aXRoaW4gdGhlIGJyb2FkZXIgbG9naWMgaGVyZS5cblxuQmV5b25kIHRoYXQsIHRoZSBwYXRjaCByZXBsYWNlcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgbWVtY3B5YCBvcGVyYXRpb24gaW52b2x2aW5nIGBza2ItXHUwMDNlY2JgIHdpdGggYSBtb3JlIG51YW5jZWQgYXBwcm9hY2guIEluc3RlYWQgb2YgYSBkaXJlY3QgY29weSwgaXQgbm93IHVzZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCAqZmlyc3QqLCBhbmQgKnRoZW4qIGluaXRpYWxpemVzIGBza2ItXHUwMDNlY2JgIHRvIHplcm8uIFRoaXMgaXMgZm9sbG93ZWQgYnkgYSBtYW51YWwgY29weSBvZiBzcGVjaWZpYyBmaWVsZHMgZnJvbSBgcGt0LVx1MDAzZWNiYCAtIG5hbWVseSwgYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAg4oCTIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCB1c2luZyB0aGUgYFBLVElORk9fU0tCX0NCYCBtYWNyby4gSSdsbCBuZWVkIHRvIGdvIG92ZXIgYGlwbXJfY2FjaGVfcmVwb3J0YCBpdHNlbGYsIG9mIGNvdXJzZSwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHJldmlzZWQgYXBwcm9hY2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjAzLjE3MTMwMzE4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAwOTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2NhY2hlX3JlcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcG1yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTEwOD1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTEwLVxcdFxcdFxcdCAgc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIGludCBsb2NhbCk7XFxubmV0L2lwdjQvaXBtci5jOjExMTpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMTItXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NTI5PXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy01NTEtXFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cXG5uZXQvaXB2NC9pcG1yLmM6NTUyOlxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxcbm5ldC9pcHY0L2lwbXIuYy01NTMtXFx0XFx0XFx0ICBJR01QTVNHX1dIT0xFUEtUKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz02ODc9c3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy03MDktXFx0aWYgKHZpZmkgPT0gbXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcXG5uZXQvaXB2NC9pcG1yLmM6NzEwOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtNzExLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIC0xKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz04NDk9c3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtOTQxLVxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZJRkZfUkVHSVNURVIpIHtcXG5uZXQvaXB2NC9pcG1yLmM6OTQyOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtOTQzLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIHZpZmkpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTEwMTk9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9yZXNvbHZlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTA1Ni0gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MTA1NzpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMDU4LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTE0Nz1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE4NC1cXHRcXHQvKiBSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuICovXFxubmV0L2lwdjQvaXBtci5jOjExODU6XFx0XFx0ZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7XFxubmV0L2lwdjQvaXBtci5jLTExODYtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTkwNz1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTkyNS1cXHRcXHRERVZfU1RBVFNfSU5DKHZpZl9kZXYsIHR4X3BhY2tldHMpO1xcbm5ldC9pcHY0L2lwbXIuYzoxOTI2OlxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTkyNy1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjA0Nj1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjEwMS1cXHRcXHRcXHRjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllcztcXG5uZXQvaXB2NC9pcG1yLmM6MjEwMjpcXHRcXHRcXHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTtcXG5uZXQvaXB2NC9pcG1yLmMtMjEwMy1cXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUpKVxcbm5ldC9pcHY0L2lwbXIuYzoyMTA0OlxcdFxcdFxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksXFxubmV0L2lwdjQvaXBtci5jLTIxMDUtXFx0XFx0XFx0XFx0XFx0XFx0ICBJR01QTVNHX1dSVklGV0hPTEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjowMy4yNjgzMTc0MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ1OTg4NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpcG1yX2NhY2hlX3JlcG9ydGAgd2l0aGluIGBuZXQvaXB2NC9pcG1yLmNgLiBJbW1lZGlhdGVseSwgSSByZWNvZ25pemUgdGhpcyBpcyBjb3JlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgbG9naWMuIEdvb2QuIEknbSBzZWVpbmcgaXQgbGV2ZXJhZ2VzIGBpcHY0X3BrdGluZm9fcHJlcGFyZWAgYW5kIGBQS1RJTkZPX1NLQl9DQmAsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBoYW5kbGluZyBwYWNrZXQgbWV0YWRhdGEgYW5kIGNvbnRyb2wgYmxvY2tzLCBidXQgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBleWUgb24gaG93IHRoYXQncyBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHNvbGlkOyBpdCdzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUuIFRoYXQncyBhIGdyZWVuIGxpZ2h0IGZvciBtZSAtIGRlZmluaXRlbHkgZnV6emFibGUuIFRpbWUgdG8gc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIHByb3BlciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCB0byB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gV2hhdCBhcmUgd2UgbG9va2luZyBhdCBoZXJl4oCmIGBDT05GSUdfSVBfTVJPVVRFYCBpcyBvYnZpb3VzbHkgb25lLCBidXQgd2hhdCBlbHNlIGlzIHRpZWQgaW50byB0aGUgcmVwb3J0aW5nIG1lY2hhbmlzbSB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZD8gTGV0J3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBwYXRjaCBjb3VsZCBleHBvc2UgbmV3IGlzc3VlcyBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBub3QgcmlnaHQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQncyBiZWluZyBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MDguMTE0MzA4MTM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzQwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9NUk9VVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTUtXFxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cXHRib29sXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cXG5uZXQvaXB2NC9LY29uZmlnOjIyMDpjb25maWcgSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjowOC4xOTM2NTQ4OTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQxMjQ5MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkNvbmZpZ3VyYXRpb24gRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIHdpdGggaXMgYElQX01ST1VURWAuIE5vdGVkLiBCdXQgSSdtIG5vdCBnb2luZyB0byBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLiBBIGdvb2Qgc3lzdGVtcyBhcmNoaXRlY3QsIGxpa2UgbXlzZWxmLCBrbm93cyB0byBkaWcgZGVlcGVyLiBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBzdGFydGluZyBwb2ludCwgYnV0IGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiBjb250ZXh0LiBTbywgbGV0J3Mgbm90IGFzc3VtZSBgSVBfTVJPVVRFYCBpcyB0aGUgb25seSByZWxldmFudCBwaWVjZS4gQmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBkZXNpZ24gZGVjaXNpb25zIG9yIHRyb3VibGVzaG9vdGluZywgSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIG9yIGluZmx1ZW5jZSBgSVBfTVJPVVRFYC4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMsIGNvbmZsaWN0cywgb3IgY29tcGxlbWVudGFyeSBzZXR0aW5ncy4gV2UgbmVlZCB0byBjb21wcmVoZW5zaXZlbHkgZXhwbG9yZSB0aGUgZW52aXJvbm1lbnQuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjExLjUzNDkwNjc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjcwMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKklQX01ST1VURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MjE2PWNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbm5ldC9pcHY0L0tjb25maWc6MjE4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIzMj1jb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L0tjb25maWctMjMzLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyMzQ6XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXFx1MDAyNlxcdTAwMjYgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZy0yMzUtXFx0c2VsZWN0IEZJQl9SVUxFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNDY9Y29uZmlnIElQX1BJTVNNX1YxXFxubmV0L2lwdjQvS2NvbmZpZy0yNDctXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDEgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI0ODpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxcbm5ldC9pcHY0L0tjb25maWctMjYwLVxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyNjE6XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTI2Mi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjExLjU5NDE4MjY4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzE3ODY0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogSVAgTXVsdGljYXN0IFJvdXRpbmcqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBJUF9NUk9VVEVgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcGllY2Ugd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSByZWNlbnQgY2hhbmdlcywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBpcG1yX2NhY2hlX3JlcG9ydGAuIEkgc2VlIHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBLbm93aW5nIHRoaXMsIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50LlxuXG5JdCBhcHBlYXJzIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zOiBgcmVnX3ZpZl94bWl0YCwgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAsIGBpcG1yX3ByZXBhcmVfeG1pdGAsIGFuZCBgaXBfbXJfZm9yd2FyZGAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgdGhyb3VnaCBtdWx0aXBsZSBlbnRyeSBwb2ludHMuIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGByZWdfdmlmX3htaXRgLiBUaGF0J3Mgd2hlcmUgSSdsbCBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjoxNS40NjU5NzE1ODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTE3OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ192aWZfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcG1yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTQ3OD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnYpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNTI4LSNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXFxubmV0L2lwdjQvaXBtci5jOjUyOTpzdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBtci5jLTUzMC17XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcmVnX3ZpZl9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY0L2lwbXIuYzo1NjY6XFx0Lm5kb19zdGFydF94bWl0XFx0PSByZWdfdmlmX3htaXQsXFxubmV0L2lwdjQvaXBtci5jLTU2Ny1cXHQubmRvX2dldF9pZmxpbmsgPSByZWdfdmlmX2dldF9pZmxpbmssXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9Njg3PXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNzA5LVxcdGlmICh2aWZpID09IG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSB7XFxubmV0L2lwdjQvaXBtci5jOjcxMDpcXHRcXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXFxubmV0L2lwdjQvaXBtci5jLTcxMS1cXHRcXHRXUklURV9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCAtMSk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9ODQ5PXN0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTk0MS1cXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWSUZGX1JFR0lTVEVSKSB7XFxubmV0L2lwdjQvaXBtci5jOjk0MjpcXHRcXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXFxubmV0L2lwdjQvaXBtci5jLTk0My1cXHRcXHRXUklURV9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCB2aWZpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MTUuNTUzNDk2NjI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjYxMTAyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBgcmVnX3ZpZl94bWl0YCBpcyBiZWluZyB1c2VkIGFzIGFuIGBuZG9fc3RhcnRfeG1pdGAgY2FsbGJhY2suIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sIHBhdGggZm9yIHRyYW5zbWlzc2lvbi4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHRha2luZyBwbGFjZSBoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgaXBtcl9jYWNoZV91bnJlc29sdmVkYC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgbXVsdGljYXN0IHNjZW5hcmlvIGFuZCBpZiB0aGVyZSBhcmUgcGVuZGluZyBhZGRyZXNzIHJlc29sdXRpb25zIGludm9sdmVkIHdpdGggdGhlIHRyYW5zbWlzc2lvbiBpbml0aWF0aW9uIEknbSBleGFtaW5pbmcuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXNvbHV0aW9uIGNhY2hlIGlzIGJlaW5nIHV0aWxpemVkLiBJcyBpdCBwcmUtcG9wdWxhdGluZywgb3IgaXMgdGhpcyB0aGUgcG9pbnQgd2hlcmUgd2UgZXhwZWN0IGEgcmVzb2x1dGlvbiBzdGFsbD8gSSBleHBlY3QgdG8gZmluZCBzb21lIGluZGljYXRpb24gb2YgaG93IHRoZXNlIHR3byBjb21wb25lbnRzIGFyZSBpbnRlcmFjdGluZyB0byBvcmNoZXN0cmF0ZSB0aGUgdHJhbnNtaXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MTkuODc5NjA5NzU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY3OTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2NhY2hlX3VucmVzb2x2ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBtci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz0xMDU3PXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE0Ni0vKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXFxubmV0L2lwdjQvaXBtci5jOjExNDc6c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxcbm5ldC9pcHY0L2lwbXIuYy0xMTQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTIxOTQ9aW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjI3MS1cXHRcXHRpZiAodmlmIFxcdTAwM2U9IDApXFxubmV0L2lwdjQvaXBtci5jOjIyNzI6XFx0XFx0XFx0cmV0dXJuIGlwbXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xcbm5ldC9pcHY0L2lwbXIuYy0yMjczLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTIzNDU9aW50IGlwX21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMzc5LVxcdFxcdGlmICh2aWYgXFx1MDAzZT0gMClcXG5uZXQvaXB2NC9pcG1yLmM6MjM4MDpcXHRcXHRcXHRyZXR1cm4gaXBtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XFxubmV0L2lwdjQvaXBtci5jLTIzODEtXFx0XFx0Z290byBtY19vdXRwdXQ7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjQ1MT1pbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI1MDAtXFx0XFx0aXBoLVxcdTAwM2V2ZXJzaW9uID0gMDtcXG5uZXQvaXB2NC9pcG1yLmM6MjUwMTpcXHRcXHRlcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYjIsIGRldik7XFxubmV0L2lwdjQvaXBtci5jLTI1MDItXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjE5Ljk3MTI5ODIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjQ2MTI2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBNdWx0aWNhc3QgUm91dGluZyBDYWNoZSBVbnJlc29sdmVkIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBpcG1yX2NhY2hlX3VucmVzb2x2ZWRgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGNvZGUgY2xlYXJseSBzaG93cyBpdCdzIGNhbGxlZCBmcm9tIGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBhbmQgYGlwbXJfZ2V0X3JvdXRlYC4gVGhvc2UgYXJlIGFsbCBjb3JlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggbXVsdGljYXN0IHJvdXRpbmcsIHNvIHRoYXQncyBleHBlY3RlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCB0aGUgY29udGV4dCBpcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYGlwbXJfcHJlcGFyZV94bWl0YC4gSXQncyBoaWdobHkgbGlrZWx5IHRoYXQgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAgcGxheXMgYSByb2xlIGluIHRoZSB0cmFuc21pc3Npb24gcGF0aCBwcmVwYXJhdGlvbiBhbmQgbWlnaHQgYmUgY2FsbGVkIHdoZW4gYSBjYWNoZSBlbnRyeSBpcyB1bnJlc29sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIGFuIGVudHJ5IGlzIGluIHdoZW4gaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgdmFyaW91cyBjYWxsaW5nIGZ1bmN0aW9ucyBkbyB3aXRoIHRoZSByZXR1cm4gdmFsdWUuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgcm9sZSBvZiBgaXBtcl9wcmVwYXJlX3htaXRgIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjoyNC4yMzU5MTM1MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTM4MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwbXJfcHJlcGFyZV94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTg5OD1zdGF0aWMgYm9vbCBpcG1yX2ZvcndhcmRfb2ZmbG9hZGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTE5MDYtXFxubmV0L2lwdjQvaXBtci5jOjE5MDc6c3RhdGljIGludCBpcG1yX3ByZXBhcmVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xOTA4LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHZpZmkpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTk4NT1zdGF0aWMgdm9pZCBpcG1yX3F1ZXVlX2Z3ZF94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTk5Mi1cXG5uZXQvaXB2NC9pcG1yLmM6MTk5MzpcXHRpZiAoaXBtcl9wcmVwYXJlX3htaXQobmV0LCBtcnQsIHNrYiwgdmlmaSkpXFxubmV0L2lwdjQvaXBtci5jLTE5OTQtXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yMDE5PXN0YXRpYyB2b2lkIGlwbXJfcXVldWVfb3V0cHV0X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMDIxLXtcXG5uZXQvaXB2NC9pcG1yLmM6MjAyMjpcXHRpZiAoaXBtcl9wcmVwYXJlX3htaXQobmV0LCBtcnQsIHNrYiwgdmlmaSkpXFxubmV0L2lwdjQvaXBtci5jLTIwMjMtXFx0XFx0Z290byBvdXRfZnJlZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MjQuMjgzMDU3NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI3MTg5NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUCBNdWx0aWNhc3QgRm9yd2FyZGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIGBpcG1yX3ByZXBhcmVfeG1pdGAgaXMgY2xlYXJseSBhIGtleSBmdW5jdGlvbiBoZXJlLCBzaW5jZSBpdCdzIGNhbGxlZCBieSBib3RoIGBpcG1yX3F1ZXVlX2Z3ZF94bWl0YCBhbmQgYGlwbXJfcXVldWVfb3V0cHV0X3htaXRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgbXVsdGljYXN0IHBhY2tldHMgZm9yIHRyYW5zbWlzc2lvbiBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwb3RlbnRpYWxseSBmb3J3YXJkaW5nIGFuZCBkaXJlY3RseSBzZW5kaW5nLiAgVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZnVydGhlciwgaXMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBpcF9tcl9mb3J3YXJkYC4gS25vd2luZyB0aGlzIGZ1bmN0aW9uJ3MgcmVsYXRpb25zaGlwIHdpdGggdGhlIGZvcndhcmRpbmcgZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIGBpcF9tcl9mb3J3YXJkYCBpcyB0aGUgY2VudHJhbCBjb21wb25lbnQgdG8gZGVjaWRlIHRoZSBiZXN0IGludGVyZmFjZSBmb3IgZm9yd2FyZGluZyBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MjcuOTEwMjUwMDcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDUwNDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcl9mb3J3YXJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDctXFxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxubmV0L2lwdjQvaXBtci5jLTEwOS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDQ2LVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcXHRcXHRcXHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXFx1MDAzZWRldiwgc2tiLCBjLCAwKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTA0OC1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yMDMzPXN0YXRpYyBpbnQgaXBtcl9maW5kX3ZpZihjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMDQ1LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMDQ2OnN0YXRpYyB2b2lkIGlwX21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2NC9pcG1yLmMtMjA0Ny1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjE5ND1pbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMjc2LVxcbm5ldC9pcHY0L2lwbXIuYzoyMjc3OlxcdGlwX21yX2ZvcndhcmQobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSwgbG9jYWwpO1xcbm5ldC9pcHY0L2lwbXIuYy0yMjc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjoyNy45NzA3NTkyNzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4ODYxOTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGludHVpdGlvbiBpcyB0aGF0IGBpcF9tcl9pbnB1dGAgYW5kIGBpcF9tcl9vdXRwdXRgIGFyZSBzdHJvbmcgcG9zc2liaWxpdGllcyBmb3Igc3ltYm9scyB0byBjb25jZW50cmF0ZSBvbi4gVGhleSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBvciBzdHJ1Y3R1cmUuIFxuXG5CdXQgaGFuZyBvbi4uLiBhIHF1aWNrIGNoZWNrIHJldmVhbHMgYGlwX21yX2lucHV0YCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSXQgbWVhbnMgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLCB3aGljaCBpbXBhY3RzIGhvdyBJJ2xsIGFwcHJvYWNoIGl0LlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggYm90aCBgaXBfbXJfaW5wdXRgIGFuZCBgaXBfbXJfb3V0cHV0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBmdW5jdGlvbnMgZG8sIHdoZXJlIHRoZXkgYXJlIGNhbGxlZCBmcm9tLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjozMi44NTkzODExNTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTg0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21yX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MjE2Nz1zdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcG1yX3J0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTIxOTMtICovXFxubmV0L2lwdjQvaXBtci5jOjIxOTQ6aW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvaXBtci5jLTIxOTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjozMi45MzU1NzM3ODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyOTQwNTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGlwX21yX291dHB1dGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBjaGVja2luZyBgaXBfbXJfb3V0cHV0YC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSXQncyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLCB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIHNjZW5hcmlvLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24sIHRoZSBpbml0aWFsIGV2aWRlbmNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gR290dGEgY29uZmlybSBteSBleHBlY3RhdGlvbnMsIHNlZSBpZiB0aGlzIGlzIGFzIEkgc3VzcGVjdGVkIG9yIGlmIEkgbmVlZCB0byB3aWRlbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MzUuNzY0OTgxNzE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODY5MTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcl9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBtci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz0yMTk0PWludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTIyOTAtXFxubmV0L2lwdjQvaXBtci5jOjIyOTE6c3RhdGljIHZvaWQgaXBfbXJfb3V0cHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0yMjkyLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjM0NC0gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MjM0NTppbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwbXIuYy0yMzQ2LXtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMzg3LVxcbm5ldC9pcHY0L2lwbXIuYzoyMzg4OlxcdGlwX21yX291dHB1dF9maW5pc2gobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSk7XFxubmV0L2lwdjQvaXBtci5jLTIzODktXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjM1Ljg0MzY3ODM4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkzMjYzODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqTXVsdGljYXN0IFJvdXRpbmcgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtdWx0aWNhc3Qgcm91dGluZyBrZXJuZWwgY29kZS4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gYGlwX21yX2lucHV0YCBhbmQgYGlwX21yX291dHB1dGAuIFRob3NlIGFyZSBjbGVhcmx5IHRoZSBjb3JlIGVudHJ5IHBvaW50cywgdGhlIGdhdGVrZWVwZXJzIGZvciBoYW5kbGluZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcgbXVsdGljYXN0IHRyYWZmaWMsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgdGhlIGZvcndhcmRpbmcgZGVjaXNpb25zIGJlaW5nIG1hZGUsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIEkgYWxyZWFkeSBoYXZlIGEgbWVudGFsIG1hcCBvZiB0aGUga2V5IHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBvbiBzb2xpZCBncm91bmQuXG5cbkJleW9uZCB0aGUgcGFja2V0IHBhdGggaXRzZWxmLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHNvbWV0aGluZyBsaWtlIGBpcG1yX2lvY3RsYCwgb3IgYSBzaW1pbGFyIGlvY3RsLWJhc2VkIG1lY2hhbmlzbSwgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyB0byBtYW5hZ2UgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcywgYWRkL2RlbGV0ZSBncm91cCBtZW1iZXJzaGlwcywgYW5kIGNvbmZpZ3VyZSBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBjb2RlIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBjb3JlIHJvdXRpbmcgbG9naWMsIHZlcmlmeSBzZWN1cml0eSBhbmQgZXhwbG9yZSBhbnkgbGltaXRhdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb25maWcgaW50ZXJmYWNlIGlzIHJvYnVzdCBhbmQgZWZmaWNpZW50LiBJIGFtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MzkuODM2OTQ2ODA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYyNjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTYxOD1pbnQgaXBtcl9za19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTYyMC1cXHRzd2l0Y2ggKGNtZCkge1xcbm5ldC9pcHY0L2lwbXIuYzoxNjIxOlxcdC8qIFRoZXNlIHVzZXJzcGFjZSBidWZmZXJzIHdpbGwgYmUgY29uc3VtZWQgYnkgaXBtcl9pb2N0bCgpICovXFxubmV0L2lwdjQvaXBtci5jLTE2MjItXFx0Y2FzZSBTSU9DR0VUVklGQ05UOiB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTY0MD1pbnQgaXBfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xNjg2LS8qIFRoZSBJUCBtdWx0aWNhc3QgaW9jdGwgc3VwcG9ydCByb3V0aW5lcy4gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MTY4NzppbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcXG5uZXQvaXB2NC9pcG1yLmMtMTY4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjM5LjkxNDU4MTY1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3MjQ5MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHBvc3NpYmlsaXRpZXMgYXMgYSBuZXR3b3JraW5nIGV4cGVydDpcblxuKipDb25zaWRlcmluZyBJUCBNdWx0aWNhc3QgUm91dGluZyBPcHRpb25zKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtdWx0aWNhc3Qgcm91dGluZyBjb250cm9sLCBhbmQgYGlwbXJfaW9jdGxgIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBhIHN0cm9uZyBjb250ZW5kZXIuIEl0J3Mgb2Z0ZW4gdGhlIGZvdW5kYXRpb25hbCBtZWNoYW5pc20sIHRoZSBsb3ctbGV2ZWwsIGRpcmVjdCBjb250cm9sIHBvaW50LiBJJ2QgbmVlZCB0byBkaWcgaW50byBpdHMgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwbGljYXRpb24sIGNoZWNraW5nIGZvciB0aGUgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgaXQgc3VwcG9ydHMuIFRoaW5raW5nIGZ1cnRoZXIsIGBpcF9tcm91dGVfc2V0c29ja29wdGAgYWxzbyBsb29rcyBwcm9taXNpbmcuIFRoYXQgc29ja2V0IG9wdGlvbiBhcHByb2FjaCBvZmZlcnMgYSBtb3JlIFwidXNlci1mcmllbmRseVwiIGludGVyZmFjZSwgbGV0dGluZyB5b3UgbWFuaXB1bGF0ZSBtdWx0aWNhc3Qgcm91dGluZyBmcm9tIHdpdGhpbiBhIHNvY2tldCBjb250ZXh0LiBJdCBsaWtlbHkgYWxsb3dzIHNldHRpbmcgdmFyaW91cyBtdWx0aWNhc3QtcmVsYXRlZCBwYXJhbWV0ZXJzLCBsaWtlIG1lbWJlcnNoaXAgcmVwb3J0cywgVFRMIHZhbHVlcywgYW5kIGludGVyZmFjZSBzZWxlY3Rpb25zLiBGaW5hbGx5LCBgaXBfbXJvdXRlX2dldHNvY2tvcHRgIHdvdWxkLCBvZiBjb3Vyc2UsIGJlIGVzc2VudGlhbCBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgbXVsdGljYXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbi4gSSBjYW4gdXNlIGl0IHRvIHZlcmlmeSBzZXR0aW5ncyBvciBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbXVsdGljYXN0IHJvdXRpbmcgYWZ0ZXIgY29uZmlndXJpbmcgaXQgdGhyb3VnaCBgc2V0c29ja29wdGAuIEknbGwgbmVlZCB0byByZXNlYXJjaCB3aGljaCBvZmZlcnMgdGhlIGdyYW51bGFyIGNvbnRyb2wgYW5kIGZsZXhpYmlsaXR5IEkgbmVlZCBmb3IgdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6NDQuMjkxODM0MjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDAyNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTM4Mz1zdGF0aWMgdm9pZCBtcnRzb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xNDE0LVxcbm5ldC9pcHY0L2lwbXIuYzoxNDE1OmludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9pcHY0L2lwbXIuYy0xNDE2LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0Njo0NC4zNjkyNTA2NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQzMTk4ODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbXVsdGljYXN0IHJvdXRpbmcgcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5IHN5bWJvbHMganVtcCBvdXQgYXQgbWU6IGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwbXJfaW9jdGxgLiBUaG9zZSBhcmUgbXkgYnJlYWQgYW5kIGJ1dHRlciB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBsb2dpYy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYGlwbXJfY2FjaGVfcmVwb3J0YCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBpbiB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBhcnJpdmVzIGFuZCB0aGVyZSdzIG5vIGNvcnJlc3BvbmRpbmcgY2FjaGUgZW50cnksIG9yIHdoZW4gUElNIGFzc2VydHMgZ2V0IHRyaWdnZXJlZC4gQmFzaWNhbGx5LCBpdCdzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIGFuIElHTVAgbWVzc2FnZSB1cCB0byB0aGUgdXNlci1zcGFjZSByb3V0aW5nIGRhZW1vbiDigJMgdGhpbmdzIGxpa2UgYG1yb3V0ZWRgIG9yIGBwaW1kYCDigJMgdmlhIHRoZSBtcm91dGUgc29ja2V0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZpeGluZyBzb21ldGhpbmcgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuIExvb2tpbmcgY2xvc2VyIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCB3YXMgb25seSBleGVjdXRlZCBpbiB0aGUgYXNzZXJ0aW9uIHBhdGgsIGJ1dCBwYWNrZXQgY29udGV4dCAoYHNrYi1cdTAwM2VjYmApIHdhcyBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgcGFja2V0IChgcGt0LVx1MDAzZWNiYCkgaW4gdGhlIG5vbi1hc3NlcnQgY2FzZS4gVGhpcyBtZWFudCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIHVzZXItc3BhY2UgZGFlbW9uIHRvIGZvcndhcmQgdGhlIG1lc3NhZ2Ugd2FzIG5vdCBwcmVzZW50IGluIHRoZSBub24tYXNzZXJ0IHBhdGgsIG1ha2luZyB0aGUgY2FjaGUgZW50cnkgbWlzcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzZXJ0aW9uIGNhc2UuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSBpZiB0aGUgZml4IGlzIGNvcnJlY3QuIFRoZSBwYXRjaCBhZGRzIGBpcHY0X3BrdGluZm9fcHJlcGFyZWAgYmVmb3JlIHRoZSBoZWFkZXIgaXMgYWRkZWQgYW5kIHRoZW4gZXhwbGljaXRseSB6ZXJvZXMgYW5kIGNvcGllcyB0aGUgcmVsZXZhbnQgZmllbGRzIGZyb20gdGhlIG9yaWdpbmFsIHBhY2tldCdzIGNvbnRyb2wgYnVmZmVyIChgcGt0LVx1MDAzZWNiYCkgaW50byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNrYidzIGNvbnRyb2wgYnVmZmVyIChgc2tiLVx1MDAzZWNiYCkuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYWNrZXQncyBtZXRhZGF0YSDigJMgaW50ZXJmYWNlIGluZGV4IGFuZCBkZXN0aW5hdGlvbiBJUCDigJMgaXMgY29ycmVjdGx5IHNldCBpbiBhbGwgY2FzZXMuIFRoaXMgc2VlbXMgdG8gYmUgYSBnb29kIGZpeC5cblxuVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoYXQgaXQgYXBwZWFycyB0aGF0IHRoZSBjb3JyZWN0IHBhY2tldCBjb250ZXh0IG1ldGFkYXRhIGlzIG5vdCBhbHdheXMgY29waWVkIHRvIHRoZSBwYWNrZXQncyBjb250cm9sIGJ1ZmZlci4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBieSB0aGUgdXNlci1zcGFjZSBkYWVtb24sIGFzIGl0IHdvdWxkIG5vdCBrbm93IHdoaWNoIGludGVyZmFjZSB0aGUgcGFja2V0IGFycml2ZWQgb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX01ST1VURWAgaXMgc3VmZmljaWVudCBmb3IgdGhpcy4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHRoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjUyLjgwMTI0MTkxN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2NzQyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qSVBfTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMTY9Y29uZmlnIElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cXHRib29sXFxubmV0L2lwdjQvS2NvbmZpZzoyMTg6XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MjMyPWNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTIzNS1cXHRzZWxlY3QgRklCX1JVTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTI0Nj1jb25maWcgSVBfUElNU01fVjFcXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cXHRib29sIFxcXCJJUDogUElNLVNNIHZlcnNpb24gMSBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjQ4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yNDktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjYyLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6NTIuODcxOTIyNTEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzQwNzIzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipDb25maWd1cmluZyBJUCBNdWx0aWNhc3QgUm91dGluZyoqXG5cblJpZ2h0LCBzbywgYElQX01ST1VURWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIG11bHRpY2FzdCByb3V0aW5nLCB0aGF0J3MgY2xlYXIuIEZpcnN0IHRoaW5nJ3MgZmlyc3Q6IEkgbmVlZCB0byBlbnN1cmUgYElQX01ST1VURWAgaXMgZW5hYmxlZCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3Mgd2hlcmUgaXQgZ29lcy5cblxuQnV0IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgdGVzdGluZywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgZGVwZW5kZW5jeSBjaGVjay4gSSBoYXZlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBJUF9NUk9VVEVgIGRvZXNuJ3QgcmVseSBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBtaWdodCBoYXZlIGluYWR2ZXJ0ZW50bHkgbWlzc2VkLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGRvY3VtZW50YXRpb24gb3IgY29kZSBkZXBlbmRlbmNpZXMgaXMgaW4gb3JkZXIuIE5vIHBvaW50IGluIG1vdmluZyBmb3J3YXJkIHVudGlsIEknbSBzdXJlIEkndmUgZ290IGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBpbiBwbGFjZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NzowMC4yMDU5OTcyOTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjY1MjcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjE1LVxcbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MDAuNjY4NjU4MjQxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzM3MzU3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGZlYXR1cmUuLi4gYW5kIGl0IGltbWVkaWF0ZWx5IGhpbmdlcyBvbiBhIHByZXR0eSBmdW5kYW1lbnRhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdWx0aW1hdGVseSB0aWVkIHRvIHRoZSBgSVBfTVVMVElDQVNUYCBmbGFnLlwiIFRoYXQncyB0aGUga2V5IGVuYWJsaW5nIHN3aXRjaCBmb3IgZXZlcnl0aGluZyBtdWx0aWNhc3QtcmVsYXRlZCBvbiB0aGUgSVB2NCBsYXllci4gQW5kIHRoYXQsIG9mIGNvdXJzZSwgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkL2Rpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIEdvdHRhIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX01VTFRJQ0FTVGAgdG9vLCB0byBlbnN1cmUgZXZlcnl0aGluZyByZXF1aXJlZCBpcyBhbHNvIGNvbmZpZ3VyZWQuIE1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjA1LjcwMjM5Nzk1N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4MjI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX01VTFRJQ0FTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWctNC0jXFxubmV0L2lwdjQvS2NvbmZpZzo1OmNvbmZpZyBJUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MDUuNzcwMjI1MjAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzYwNzM1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJJ20gdGhpbmtpbmcgdGhlc2UgdGhpbmdzIG15c2VsZjpcblxuKipEZXBlbmRlbmN5IENoZWNrOiBgSVBfTVJPVVRFYCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBJUF9NUk9VVEVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyBkZXBlbmQgb24gdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGFja2FnZXMgdGhhdCByZXF1aXJlIGBJUF9NUk9VVEVgIHRvIGJlIHByZXNlbnQsIGVuYWJsZWQsIG9yIGNvbmZpZ3VyZWQgYSBzcGVjaWZpYyB3YXk/IEZpbmRpbmcgYW55IGRlcGVuZGVuY2llcyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbmZsdWVuY2UgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zIG9yIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MTAuMzA2MzAxODI5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNTpcXHRcXG4gMjE2OlxcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxuIDIxNzpcXHRcXHRib29sXFxuIDIxODpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbiAyMTk6XFx0XFxuIDIyMDpcXHRjb25maWcgSVBfTVJPVVRFXFxuIDIyMTpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuIDIyMjpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxcbiAyMjM6XFx0XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG4gMjI0OlxcdFxcdGhlbHBcXG4gMjI1OlxcdFxcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXFxuIDIyNjpcXHRcXHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXFxuIDIyNzpcXHRcXHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXFxuIDIyODpcXHRcXHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxcbiAyMjk6XFx0XFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbid0IGhlYXJkIGFib3V0IGl0LCB5b3VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MTAuMzA2NDE3ODI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjk1NTU1OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSdtIHRoZSBvbmUgd3Jlc3RsaW5nIHdpdGggdGhpcy4uLlxuXG4qKk11bHRpY2FzdCBEZXBlbmRlbmN5IFJlc29sdXRpb24qKlxuXG5BbHJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBJUF9NUk9VVEVgIHdvbid0IGZ1bmN0aW9uIHdpdGhvdXQgYElQX01VTFRJQ0FTVGAgZW5hYmxlZCBmaXJzdC4gVGhhdCdzIGEgZ2l2ZW4uIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggb2YgdGhvc2UgYXJlIGV4cGxpY2l0bHkgc2V0IHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUsIHNvIGl0IGhhcyB0byBiZSBhZGRyZXNzZWQuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGNhdXRpb3VzIHdoZW4gZGVhbGluZyB3aXRoIHByb3RvY29scyBsaWtlIHRoaXMsIGFuZCBwYXJ0aWN1bGFybHkgd2l0aCBQSU0gYXNzZXJ0cywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYElQX1BJTVNNX1YxYCBhbmQgYElQX1BJTVNNX1YyYC4gVGhleSBhcmUgcmVsYXRlZCB0byBQSU0gYW5kIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCBiZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHByb2JsZW0sIGl0J3Mgd29ydGggYSBxdWljayBnbGFuY2UgdG8gcnVsZSBvdXQgYW55IGltbWVkaWF0ZSwgaW50ZXJjb25uZWN0ZWQgY29uZmlndXJhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBjcm9wIHVwIGRvd24gdGhlIGxpbmUuIEl0J3MgYWJvdXQgYmVpbmcgcHJvYWN0aXZlIGFuZCBlZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NzoyMS42MDE5Nzc1MzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFxuIDI0NjpcXHRjb25maWcgSVBfUElNU01fVjFcXG4gMjQ3OlxcdFxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcXFwiXFxuIDI0ODpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbiAyNDk6XFx0XFx0aGVscFxcbiAyNTA6XFx0XFx0ICBLZXJuZWwgc2lkZSBzdXBwb3J0IGZvciBTcGFyc2UgTW9kZSBQSU0gKFByb3RvY29sIEluZGVwZW5kZW50XFxuIDI1MTpcXHRcXHQgIE11bHRpY2FzdCkgdmVyc2lvbiAxLiBUaGlzIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIGlzIHVzZWQgd2lkZWx5XFxuIDI1MjpcXHRcXHQgIGJlY2F1c2UgQ2lzY28gc3VwcG9ydHMgaXQuIFlvdSBuZWVkIHNwZWNpYWwgc29mdHdhcmUgdG8gdXNlIGl0XFxuIDI1MzpcXHRcXHQgIChwaW1kLXYxKS4gUGxlYXNlIHNlZSBcXHUwMDNjaHR0cDovL25ldHdlYi51c2MuZWR1L3BpbS9cXHUwMDNlIGZvciBtb3JlXFxuIDI1NDpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IFBJTS5cXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgUElNLVNNIHYxLiBOb3RlIHRoYXQgeW91IGNhbiBzYXkgTiBoZXJlIGlmXFxuIDI1NzpcXHRcXHQgIHlvdSBqdXN0IHdhbnQgdG8gdXNlIERlbnNlIE1vZGUgUElNLlxcbiAyNTg6XFx0XFxuIDI1OTpcXHRjb25maWcgSVBfUElNU01fVjJcXG4gMjYwOlxcdFxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuIDI2MTpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbiAyNjI6XFx0XFx0aGVscFxcbiAyNjM6XFx0XFx0ICBLZXJuZWwgc2lkZSBzdXBwb3J0IGZvciBTcGFyc2UgTW9kZSBQSU0gdmVyc2lvbiAyLiBJbiBvcmRlciB0byB1c2VcXG4gMjY0OlxcdFxcdCAgdGhpcywgeW91IG5lZWQgYW4gZXhwZXJpbWVudGFsIHJvdXRpbmcgZGFlbW9uIHN1cHBvcnRpbmcgaXQgKHBpbWQgb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MjEuNjAyMDY4ODI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzYzNTUxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkaW5nIFBJTS1TTSBWZXJzaW9ucyB0byBFbmFibGVDb25maWdzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBiZSBwcm9hY3RpdmUgaGVyZS4gU2luY2UgYGlwbXJfY2FjaGVfcmVwb3J0YCBpcyBzdWNoIGEgY3JpdGljYWwgY29tcG9uZW50IHdpdGhpbiBQSU0gYXNzZXJ0aW9ucywgaXQgbWFrZXMgc2Vuc2UgdG8gZXhwbGljaXRseSBpbmNsdWRlIGJvdGggYElQX1BJTVNNX1YxYCBhbmQgYElQX1BJTVNNX1YyYCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlc2UgUElNLVNNIHZlcnNpb25zIGFyZSBwcm9wZXJseSBjb25zaWRlcmVkIHdoZW4gZXZhbHVhdGluZyB0aGUgdXNlIG9mIHRoZSByZXBvcnQuXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aXRoaW4gYGlwbXIuY2AuIEknbGwgcXVpY2tseSBzY2FuIHRoZSBjb2RlIHRvIHZlcmlmeSB0aGF0IGBpcG1yX2NhY2hlX3JlcG9ydGAgaXMgaW5kZWVkIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gZWl0aGVyIGBDT05GSUdfSVBfUElNU01fVjFgIG9yIGBDT05GSUdfSVBfUElNU01fVjJgLCBhbmQgbm90IHNvbWV0aGluZyBlbHNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBmdXJ0aGVyIGNvbmZpZGVuY2UgaW4gbXkgY2hhbmdlIGFuZCBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjI1Ljk3ODQyNzY2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg5MTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBfUElNU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBtci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz00Nzg9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTUyNy1cXG5uZXQvaXB2NC9pcG1yLmM6NTI4OiNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXFxubmV0L2lwdjQvaXBtci5jLTUyOS1zdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjM0NT1pbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTIzOTQtXFxubmV0L2lwdjQvaXBtci5jOjIzOTU6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMVxcbm5ldC9pcHY0L2lwbXIuYy0yMzk2LS8qIEhhbmRsZSBJR01QIG1lc3NhZ2VzIG9mIFBJTXYxICovXFxubmV0L2lwdjQvaXBtci5jPTIzOTc9aW50IHBpbV9yY3ZfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yNDIyLVxcbm5ldC9pcHY0L2lwbXIuYzoyNDIzOiNpZmRlZiBDT05GSUdfSVBfUElNU01fVjJcXG5uZXQvaXB2NC9pcG1yLmMtMjQyNC1zdGF0aWMgaW50IHBpbV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zMjUwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXBtcl9tZmNfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zMjU3LVxcbm5ldC9pcHY0L2lwbXIuYzozMjU4OiNpZmRlZiBDT05GSUdfSVBfUElNU01fVjJcXG5uZXQvaXB2NC9pcG1yLmMtMzI1OS1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCBwaW1fcHJvdG9jb2wgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MzM3Nz1pbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zMzg5LVxcdFxcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XFxubmV0L2lwdjQvaXBtci5jOjMzOTA6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxcbm5ldC9pcHY0L2lwbXIuYy0zMzkxLVxcdGlmIChpbmV0X2FkZF9wcm90b2NvbChcXHUwMDI2cGltX3Byb3RvY29sLCBJUFBST1RPX1BJTSkgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMzQwMC1cXG5uZXQvaXB2NC9pcG1yLmM6MzQwMTojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXFxubmV0L2lwdjQvaXBtci5jLTM0MDItYWRkX3Byb3RvX2ZhaWw6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjI2LjAyODMyMzg3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDcwMjE1MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IFJvdXRpbmcgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgcmVnX3ZpZl94bWl0YCBpcyBpbmRlZWQgZ3VhcmRlZCBieSBlaXRoZXIgYENPTkZJR19JUF9QSU1TTV9WMWAgb3IgYENPTkZJR19JUF9QSU1TTV9WMmAuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGl0IGNhbGxzIGBpcG1yX2NhY2hlX3JlcG9ydGAuIFRoZXJlZm9yZSwgZW5hYmxpbmcgdGhlc2Ugb3B0aW9ucyBpcyB0aGUgcmlnaHQgY291cnNlIG9mIGFjdGlvbiB0byBlbnN1cmUgdGhpcyBwYXRjaCdzIGNoYW5nZXMgYXJlIGFwcGxpZWQuXG5cbkxldCdzIHF1aWNrbHkgcmVjYXAgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgSVBfTVVMVElDQVNUYCwgYElQX01ST1VURWAsIGBJUF9QSU1TTV9WMWAsIGFuZCBgSVBfUElNU01fVjJgLiBUaGVzZSBhcmUgdGhlIGtleSBzZXR0aW5ncyB0byBoYXZlIGluIG1pbmQuXG5cbk5vdywgbGV0IG1lIGhvbmUgaW4gb24gdGhlIGNvcmUgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwbXJfaW9jdGxgLiBUaGV5IGFyZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy5cblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGlwbXJfY2FjaGVfcmVwb3J0YCB3aXRoaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgc3Vic3lzdGVtLCBmaXhpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBza2ItXHUwMDNlY2JgIHdoZW4gcHVzaGluZyBJR01QIG1lc3NhZ2VzIHVwIHRvIHVzZXItc3BhY2UuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgb2YgZnVuY3Rpb25hbGl0eSB3aXRoaW4gYSBjb3JlIGFuZCByZWFjaGFibGUgcGFydCBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4LlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTMsIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjMzLjA5ODU0MjAzOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTc1OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBfUElNU01fVjFcIixcbiAgICBcIklQX1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbXJfaW5wdXRcIixcbiAgICBcImlwX21yX291dHB1dFwiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVxcdTAwM2VjYmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBzZW5kaW5nIElHTVAgbWVzc2FnZXMgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBfUElNU01fVjFcIixcbiAgICBcIklQX1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbXJfaW5wdXRcIixcbiAgICBcImlwX21yX291dHB1dFwiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVxcdTAwM2VjYmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBzZW5kaW5nIElHTVAgbWVzc2FnZXMgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow27bjv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 09:23:27 +0000 UTC FinishedAt: 2026-07-31 09:47:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST", "IP_MROUTE", "IP_PIMSM_V1", "IP_PIMSM_V2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST", "IP_MROUTE", "IP_PIMSM_V1", "IP_PIMSM_V2" ], "series_id": "f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mr_input", "ip_mr_output", "ip_mroute_setsockopt", "ipmr_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjEmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc2MzViMGE2N2UwOWQ0MDAwNDljNGE5NzhkOWE4Y2M2OGY5NDBkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA5OjQ1OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uNDgyNzk3M2M2ZjljMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMTA1OCw2ICYjNDM7MTA1OCw3IEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcbiB7XG4gXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XG4mIzQzO1x0c3RydWN0IGluX3BrdGluZm8gKmluZm87XG4gXHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xuIFx0c3RydWN0IGlnbXBoZHIgKmlnbXA7XG4gXHRzdHJ1Y3QgaWdtcG1zZyAqbXNnO1xuQEAgLTExMTIsOCAmIzQzOzExMTMsNiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4gXHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuLVx0XHRtZW1jcHkoc2tiLVx1MDAzZWNiLCBwa3QtXHUwMDNlY2IsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiBcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4gXHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4gXHRcdCAqL1xuQEAgLTExMjQsNiAmIzQzOzExMjMsMTIgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4gXHR9XG4gXG4mIzQzO1x0aXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTtcbiYjNDM7XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4mIzQzO1x0aW5mbyA9IFBLVElORk9fU0tCX0NCKHNrYik7XG4mIzQzO1x0aW5mby1cdTAwM2VpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktXHUwMDNlaXBpX2lmaW5kZXg7XG4mIzQzO1x0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbiYjNDM7XG4gXHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xuIFxuIFx0LyogRGVsaXZlciB0byBtcm91dGVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjEmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc2MzViMGE2N2UwOWQ0MDAwNDljNGE5NzhkOWE4Y2M2OGY5NDBkNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDA5OjQ1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDFkOWE0YWMxNGZjZWYuLjQ4Mjc5NzNjNmY5YzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTEwNTgsNiAmIzQzOzEwNTgsNyBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LAogCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCkKIHsKIAljb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7CiYjNDM7CXN0cnVjdCBpbl9wa3RpbmZvICppbmZvOwogCXN0cnVjdCBzb2NrICptcm91dGVfc2s7CiAJc3RydWN0IGlnbXBoZHIgKmlnbXA7CiAJc3RydWN0IGlnbXBtc2cgKm1zZzsKQEAgLTExMTIsOCAmIzQzOzExMTMsNiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LAogCQltc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJbXNnLSZndDtpbV92aWYgPSB2aWZpOwogCQltc2ctJmd0O2ltX3ZpZl9oaSA9IHZpZmkgJmd0OyZndDsgODsKLQkJaXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTsKLQkJbWVtY3B5KHNrYi0mZ3Q7Y2IsIHBrdC0mZ3Q7Y2IsIHNpemVvZihza2ItJmd0O2NiKSk7CiAJCS8qIEFkZCBvdXIgaGVhZGVyLgogCQkgKiBOb3RlIHRoYXQgY29kZSwgY3N1bSBhbmQgZ3JvdXAgZmllbGRzIGFyZSBjbGVhcmVkLgogCQkgKi8KQEAgLTExMjQsNiAmIzQzOzExMjMsMTIgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwKIAkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlcjsKIAl9CiAKJiM0MzsJaXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTsKJiM0MzsJbWVtc2V0KHNrYi0mZ3Q7Y2IsIDAsIHNpemVvZihza2ItJmd0O2NiKSk7CiYjNDM7CWluZm8gPSBQS1RJTkZPX1NLQl9DQihza2IpOwomIzQzOwlpbmZvLSZndDtpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktJmd0O2lwaV9pZmluZGV4OwomIzQzOwlpbmZvLSZndDtpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLSZndDtpcGlfc3BlY19kc3Q7CiYjNDM7CiAJaWdtcG1zZ19uZXRsaW5rX2V2ZW50KG1ydCwgc2tiKTsKIAogCS8qIERlbGl2ZXIgdG8gbXJvdXRlZCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGluIGBuZXQvaXB2NC9pcG1yLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGlwbXJfY2FjaGVfcmVwb3J0YC4gVGhlIHByaW1hcnkgc2hpZnQgSSYjMzk7bSBzZWVpbmcgaW52b2x2ZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYC4gSXQgc2VlbXMgdGhhdCBmdW5jdGlvbiBoYXMgYmVlbiBtb3ZlZCBvdXQgb2Ygd2hhdCB3YXMsIGp1ZGdpbmcgYnkgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGxpa2VseSBhIGNvbmRpdGlvbmFsIGJsb2NrLCBwb3NzaWJseSBhbiBgaWYgKGFzc2VydClgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBwbGFjZW1lbnQgd2l0aGluIHRoZSBicm9hZGVyIGxvZ2ljIGhlcmUuCgpCZXlvbmQgdGhhdCwgdGhlIHBhdGNoIHJlcGxhY2VzIGEgc3RyYWlnaHRmb3J3YXJkIGBtZW1jcHlgIG9wZXJhdGlvbiBpbnZvbHZpbmcgYHNrYi0mZ3Q7Y2JgIHdpdGggYSBtb3JlIG51YW5jZWQgYXBwcm9hY2guIEluc3RlYWQgb2YgYSBkaXJlY3QgY29weSwgaXQgbm93IHVzZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCAqZmlyc3QqLCBhbmQgKnRoZW4qIGluaXRpYWxpemVzIGBza2ItJmd0O2NiYCB0byB6ZXJvLiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGEgbWFudWFsIGNvcHkgb2Ygc3BlY2lmaWMgZmllbGRzIGZyb20gYHBrdC0mZ3Q7Y2JgIC0gbmFtZWx5LCBgaXBpX2lmaW5kZXhgIGFuZCBgaXBpX3NwZWNfZHN0YCDigJMgaW50byB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgd2l0aGluIGBza2ItJmd0O2NiYCB1c2luZyB0aGUgYFBLVElORk9fU0tCX0NCYCBtYWNyby4gSSYjMzk7bGwgbmVlZCB0byBnbyBvdmVyIGBpcG1yX2NhY2hlX3JlcG9ydGAgaXRzZWxmLCBvZiBjb3Vyc2UsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyByZXZpc2VkIGFwcHJvYWNoIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBwYWNrZXQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9jYWNoZV9yZXBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTEwOD1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTExMC1cdFx0XHQgIHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlLCBpbnQgbG9jYWwpO1xubmV0L2lwdjQvaXBtci5jOjExMTpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTExMi1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NTI5PXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNTUxLVx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cbm5ldC9pcHY0L2lwbXIuYzo1NTI6XHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxubmV0L2lwdjQvaXBtci5jLTU1My1cdFx0XHQgIElHTVBNU0dfV0hPTEVQS1QpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz02ODc9c3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNzA5LVx0aWYgKHZpZmkgPT0gbXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSkge1xubmV0L2lwdjQvaXBtci5jOjcxMDpcdFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBpcG1yX2NhY2hlX3JlcG9ydCgpIGFuZCByZWdfdmlmX3htaXQoKSAqL1xubmV0L2lwdjQvaXBtci5jLTcxMS1cdFx0V1JJVEVfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCAtMSk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTg0OT1zdGF0aWMgaW50IHZpZl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtOTQxLVx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZJRkZfUkVHSVNURVIpIHtcbm5ldC9pcHY0L2lwbXIuYzo5NDI6XHRcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cbm5ldC9pcHY0L2lwbXIuYy05NDMtXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSwgdmlmaSk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTEwMTk9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9yZXNvbHZlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTEwNTYtICovXG5uZXQvaXB2NC9pcG1yLmM6MTA1NzpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTEwNTgtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTE0Nz1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXG4tLVxubmV0L2lwdjQvaXBtci5jLTExODQtXHRcdC8qIFJlZmxlY3QgZmlyc3QgcXVlcnkgYXQgbXJvdXRlZC4gKi9cbm5ldC9pcHY0L2lwbXIuYzoxMTg1Olx0XHRlcnIgPSBpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdmlmaSwgSUdNUE1TR19OT0NBQ0hFKTtcbm5ldC9pcHY0L2lwbXIuYy0xMTg2LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xOTA3PXN0YXRpYyBpbnQgaXBtcl9wcmVwYXJlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTkyNS1cdFx0REVWX1NUQVRTX0lOQyh2aWZfZGV2LCB0eF9wYWNrZXRzKTtcbm5ldC9pcHY0L2lwbXIuYzoxOTI2Olx0XHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdmlmaSwgSUdNUE1TR19XSE9MRVBLVCk7XG5uZXQvaXB2NC9pcG1yLmMtMTkyNy1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0yMDQ2PXN0YXRpYyB2b2lkIGlwX21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjEwMS1cdFx0XHRjLVx1MDAzZV9jLm1mY191bi5yZXMubGFzdF9hc3NlcnQgPSBqaWZmaWVzO1xubmV0L2lwdjQvaXBtci5jOjIxMDI6XHRcdFx0aXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHRydWVfdmlmaSwgSUdNUE1TR19XUk9OR1ZJRik7XG5uZXQvaXB2NC9pcG1yLmMtMjEwMy1cdFx0XHRpZiAoUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfZG9fd3J2aWZ3aG9sZSkpXG5uZXQvaXB2NC9pcG1yLmM6MjEwNDpcdFx0XHRcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksXG5uZXQvaXB2NC9pcG1yLmMtMjEwNS1cdFx0XHRcdFx0XHQgIElHTVBNU0dfV1JWSUZXSE9MRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaXBtcl9jYWNoZV9yZXBvcnRgIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYC4gSW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoaXMgaXMgY29yZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGxvZ2ljLiBHb29kLiBJJiMzOTttIHNlZWluZyBpdCBsZXZlcmFnZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCBhbmQgYFBLVElORk9fU0tCX0NCYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIGhhbmRsaW5nIHBhY2tldCBtZXRhZGF0YSBhbmQgY29udHJvbCBibG9ja3MsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBleWUgb24gaG93IHRoYXQmIzM5O3MgYmVpbmcgdXNlZCBpbiB0aGlzIGNvbnRleHQuCgpGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgc29saWQ7IGl0JiMzOTtzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUuIFRoYXQmIzM5O3MgYSBncmVlbiBsaWdodCBmb3IgbWUgLSBkZWZpbml0ZWx5IGZ1enphYmxlLiBUaW1lIHRvIHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgcHJvcGVyIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHRvIHRlc3QgdGhpcyB0aG9yb3VnaGx5LiBXaGF0IGFyZSB3ZSBsb29raW5nIGF0IGhlcmXigKYgYENPTkZJR19JUF9NUk9VVEVgIGlzIG9idmlvdXNseSBvbmUsIGJ1dCB3aGF0IGVsc2UgaXMgdGllZCBpbnRvIHRoZSByZXBvcnRpbmcgbWVjaGFuaXNtIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBwYXRjaCBjb3VsZCBleHBvc2UgbmV3IGlzc3VlcyBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBub3QgcmlnaHQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgYmVpbmcgaW50cm9kdWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfTVJPVVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE1LVxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBJUF9NUk9VVEVgLiBOb3RlZC4gQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1c3QgdGFrZSB0aGF0IGF0IGZhY2UgdmFsdWUuIEEgZ29vZCBzeXN0ZW1zIGFyY2hpdGVjdCwgbGlrZSBteXNlbGYsIGtub3dzIHRvIGRpZyBkZWVwZXIuIFRoaXMgY29uZmlndXJhdGlvbiBpcyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiBjb250ZXh0LiBTbywgbGV0JiMzOTtzIG5vdCBhc3N1bWUgYElQX01ST1VURWAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgcGllY2UuIEJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZGVzaWduIGRlY2lzaW9ucyBvciB0cm91Ymxlc2hvb3RpbmcsIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvciBpbmZsdWVuY2UgYElQX01ST1VURWAuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzLCBjb25mbGljdHMsIG9yIGNvbXBsZW1lbnRhcnkgc2V0dGluZ3MuIFdlIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IGV4cGxvcmUgdGhlIGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKklQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMTY9Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxubmV0L2lwdjQvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMTktXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMzI9Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMjM1LVx0c2VsZWN0IEZJQl9SVUxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MjQ2PWNvbmZpZyBJUF9QSU1TTV9WMVxubmV0L2lwdjQvS2NvbmZpZy0yNDctXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjQ5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjYxOlx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjYyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1czogSVAgTXVsdGljYXN0IFJvdXRpbmcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgSVBfTVJPVVRFYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHBpZWNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzLCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGlwbXJfY2FjaGVfcmVwb3J0YC4gSSBzZWUgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBLbm93aW5nIHRoaXMsIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50LgoKSXQgYXBwZWFycyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYHJlZ192aWZfeG1pdGAsIGBpcG1yX2NhY2hlX3VucmVzb2x2ZWRgLCBgaXBtcl9wcmVwYXJlX3htaXRgLCBhbmQgYGlwX21yX2ZvcndhcmRgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIHRocm91Z2ggbXVsdGlwbGUgZW50cnkgcG9pbnRzLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHJlZ192aWZfeG1pdGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ192aWZfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9NDc4PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBtcl9uZXdfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHZpZmN0bCAqdilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtNTI4LSNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXG5uZXQvaXB2NC9pcG1yLmM6NTI5OnN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwbXIuYy01MzAte1xuLS1cbm5ldC9pcHY0L2lwbXIuYz01NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByZWdfdmlmX25ldGRldl9vcHMgPSB7XG5uZXQvaXB2NC9pcG1yLmM6NTY2Olx0Lm5kb19zdGFydF94bWl0XHQ9IHJlZ192aWZfeG1pdCxcbm5ldC9pcHY0L2lwbXIuYy01NjctXHQubmRvX2dldF9pZmxpbmsgPSByZWdfdmlmX2dldF9pZmxpbmssXG4tLVxubmV0L2lwdjQvaXBtci5jPTY4Nz1zdGF0aWMgaW50IHZpZl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy03MDktXHRpZiAodmlmaSA9PSBtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSB7XG5uZXQvaXB2NC9pcG1yLmM6NzEwOlx0XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXG5uZXQvaXB2NC9pcG1yLmMtNzExLVx0XHRXUklURV9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIC0xKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9ODQ5PXN0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy05NDEtXHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVklGRl9SRUdJU1RFUikge1xubmV0L2lwdjQvaXBtci5jOjk0MjpcdFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBpcG1yX2NhY2hlX3JlcG9ydCgpIGFuZCByZWdfdmlmX3htaXQoKSAqL1xubmV0L2lwdjQvaXBtci5jLTk0My1cdFx0V1JJVEVfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCB2aWZpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIFBhdGgqKgoKT2theSwgc28gYHJlZ192aWZfeG1pdGAgaXMgYmVpbmcgdXNlZCBhcyBhbiBgbmRvX3N0YXJ0X3htaXRgIGNhbGxiYWNrLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2UgY29udHJvbCBwYXRoIGZvciB0cmFuc21pc3Npb24uIE5vdywgSSBuZWVkIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbiB0YWtpbmcgcGxhY2UgaGVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBtdWx0aWNhc3Qgc2NlbmFyaW8gYW5kIGlmIHRoZXJlIGFyZSBwZW5kaW5nIGFkZHJlc3MgcmVzb2x1dGlvbnMgaW52b2x2ZWQgd2l0aCB0aGUgdHJhbnNtaXNzaW9uIGluaXRpYXRpb24gSSYjMzk7bSBleGFtaW5pbmcuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzb2x1dGlvbiBjYWNoZSBpcyBiZWluZyB1dGlsaXplZC4gSXMgaXQgcHJlLXBvcHVsYXRpbmcsIG9yIGlzIHRoaXMgdGhlIHBvaW50IHdoZXJlIHdlIGV4cGVjdCBhIHJlc29sdXRpb24gc3RhbGw/IEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbmRpY2F0aW9uIG9mIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyBhcmUgaW50ZXJhY3RpbmcgdG8gb3JjaGVzdHJhdGUgdGhlIHRyYW5zbWlzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9jYWNoZV91bnJlc29sdmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xMDU3PXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTExNDYtLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjQvaXBtci5jOjExNDc6c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxubmV0L2lwdjQvaXBtci5jLTExNDgtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MjE5ND1pbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjI3MS1cdFx0aWYgKHZpZiBcdTAwM2U9IDApXG5uZXQvaXB2NC9pcG1yLmM6MjI3MjpcdFx0XHRyZXR1cm4gaXBtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG5uZXQvaXB2NC9pcG1yLmMtMjI3My1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIzNDU9aW50IGlwX21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjM3OS1cdFx0aWYgKHZpZiBcdTAwM2U9IDApXG5uZXQvaXB2NC9pcG1yLmM6MjM4MDpcdFx0XHRyZXR1cm4gaXBtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG5uZXQvaXB2NC9pcG1yLmMtMjM4MS1cdFx0Z290byBtY19vdXRwdXQ7XG4tLVxubmV0L2lwdjQvaXBtci5jPTI0NTE9aW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjUwMC1cdFx0aXBoLVx1MDAzZXZlcnNpb24gPSAwO1xubmV0L2lwdjQvaXBtci5jOjI1MDE6XHRcdGVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiMiwgZGV2KTtcbm5ldC9pcHY0L2lwbXIuYy0yNTAyLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBNdWx0aWNhc3QgUm91dGluZyBDYWNoZSBVbnJlc29sdmVkIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBgaXBtcl9jYWNoZV91bnJlc29sdmVkYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBjb2RlIGNsZWFybHkgc2hvd3MgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwX21yX2lucHV0YCwgYGlwX21yX291dHB1dGAsIGFuZCBgaXBtcl9nZXRfcm91dGVgLiBUaG9zZSBhcmUgYWxsIGNvcmUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBtdWx0aWNhc3Qgcm91dGluZywgc28gdGhhdCYjMzk7cyBleHBlY3RlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHRoZSBjb250ZXh0IGlzLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBgaXBtcl9wcmVwYXJlX3htaXRgLiBJdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAgcGxheXMgYSByb2xlIGluIHRoZSB0cmFuc21pc3Npb24gcGF0aCBwcmVwYXJhdGlvbiBhbmQgbWlnaHQgYmUgY2FsbGVkIHdoZW4gYSBjYWNoZSBlbnRyeSBpcyB1bnJlc29sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIGFuIGVudHJ5IGlzIGluIHdoZW4gaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgdmFyaW91cyBjYWxsaW5nIGZ1bmN0aW9ucyBkbyB3aXRoIHRoZSByZXR1cm4gdmFsdWUuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgcm9sZSBvZiBgaXBtcl9wcmVwYXJlX3htaXRgIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwbXJfcHJlcGFyZV94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xODk4PXN0YXRpYyBib29sIGlwbXJfZm9yd2FyZF9vZmZsb2FkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTE5MDYtXG5uZXQvaXB2NC9pcG1yLmM6MTkwNzpzdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTkwOC1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCB2aWZpKVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xOTg1PXN0YXRpYyB2b2lkIGlwbXJfcXVldWVfZndkX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTk5Mi1cbm5ldC9pcHY0L2lwbXIuYzoxOTkzOlx0aWYgKGlwbXJfcHJlcGFyZV94bWl0KG5ldCwgbXJ0LCBza2IsIHZpZmkpKVxubmV0L2lwdjQvaXBtci5jLTE5OTQtXHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIwMTk9c3RhdGljIHZvaWQgaXBtcl9xdWV1ZV9vdXRwdXRfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMDIxLXtcbm5ldC9pcHY0L2lwbXIuYzoyMDIyOlx0aWYgKGlwbXJfcHJlcGFyZV94bWl0KG5ldCwgbXJ0LCBza2IsIHZpZmkpKVxubmV0L2lwdjQvaXBtci5jLTIwMjMtXHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUCBNdWx0aWNhc3QgRm9yd2FyZGluZyBMb2dpYyoqCgpPa2F5LCBzbyBgaXBtcl9wcmVwYXJlX3htaXRgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGJvdGggYGlwbXJfcXVldWVfZndkX3htaXRgIGFuZCBgaXBtcl9xdWV1ZV9vdXRwdXRfeG1pdGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgbXVsdGljYXN0IHBhY2tldHMgZm9yIHRyYW5zbWlzc2lvbiBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwb3RlbnRpYWxseSBmb3J3YXJkaW5nIGFuZCBkaXJlY3RseSBzZW5kaW5nLiAgVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZnVydGhlciwgaXMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBpcF9tcl9mb3J3YXJkYC4gS25vd2luZyB0aGlzIGZ1bmN0aW9uJiMzOTtzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBmb3J3YXJkaW5nIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSBgaXBfbXJfZm9yd2FyZGAgaXMgdGhlIGNlbnRyYWwgY29tcG9uZW50IHRvIGRlY2lkZSB0aGUgYmVzdCBpbnRlcmZhY2UgZm9yIGZvcndhcmRpbmcgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA3LVxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTA5LVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA0Ni1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcdFx0XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXHUwMDNlZGV2LCBza2IsIGMsIDApO1xubmV0L2lwdjQvaXBtci5jLTEwNDgtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIwMzM9c3RhdGljIGludCBpcG1yX2ZpbmRfdmlmKGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMDQ1LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjQvaXBtci5jOjIwNDY6c3RhdGljIHZvaWQgaXBfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTIwNDctXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yMTk0PWludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMjc2LVxubmV0L2lwdjQvaXBtci5jOjIyNzc6XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUsIGxvY2FsKTtcbm5ldC9pcHY0L2lwbXIuYy0yMjc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW50dWl0aW9uIGlzIHRoYXQgYGlwX21yX2lucHV0YCBhbmQgYGlwX21yX291dHB1dGAgYXJlIHN0cm9uZyBwb3NzaWJpbGl0aWVzIGZvciBzeW1ib2xzIHRvIGNvbmNlbnRyYXRlIG9uLiBUaGV5IHNlZW0gbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93IG9yIHN0cnVjdHVyZS4gCgpCdXQgaGFuZyBvbi4uLiBhIHF1aWNrIGNoZWNrIHJldmVhbHMgYGlwX21yX2lucHV0YCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSwgd2hpY2ggaW1wYWN0cyBob3cgSSYjMzk7bGwgYXBwcm9hY2ggaXQuCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIGJvdGggYGlwX21yX2lucHV0YCBhbmQgYGlwX21yX291dHB1dGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGRvLCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21yX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0yMTY3PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfcnRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTIxOTMtICovXG5uZXQvaXB2NC9pcG1yLmM6MjE5NDppbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwbXIuYy0yMTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgaXBfbXJfb3V0cHV0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBjaGVja2luZyBgaXBfbXJfb3V0cHV0YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIHRoZSB1c3VhbCBzdGFydGluZyBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGtpbmQgb2Ygc2NlbmFyaW8uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiwgdGhlIGluaXRpYWwgZXZpZGVuY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbi4gR290dGEgY29uZmlybSBteSBleHBlY3RhdGlvbnMsIHNlZSBpZiB0aGlzIGlzIGFzIEkgc3VzcGVjdGVkIG9yIGlmIEkgbmVlZCB0byB3aWRlbiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTIxOTQ9aW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTIyOTAtXG5uZXQvaXB2NC9pcG1yLmM6MjI5MTpzdGF0aWMgdm9pZCBpcF9tcl9vdXRwdXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMjI5Mi1cdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBtci5jLTIzNDQtICovXG5uZXQvaXB2NC9pcG1yLmM6MjM0NTppbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBtci5jLTIzNDYte1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMzg3LVxubmV0L2lwdjQvaXBtci5jOjIzODg6XHRpcF9tcl9vdXRwdXRfZmluaXNoKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUpO1xubmV0L2lwdjQvaXBtci5jLTIzODktXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqTXVsdGljYXN0IFJvdXRpbmcgRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG11bHRpY2FzdCByb3V0aW5nIGtlcm5lbCBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXBfbXJfb3V0cHV0YC4gVGhvc2UgYXJlIGNsZWFybHkgdGhlIGNvcmUgZW50cnkgcG9pbnRzLCB0aGUgZ2F0ZWtlZXBlcnMgZm9yIGhhbmRsaW5nIGluY29taW5nIGFuZCBvdXRnb2luZyBtdWx0aWNhc3QgdHJhZmZpYywgcmVzcGVjdGl2ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGFja2V0cyBhcmUgcHJvY2Vzc2VkLCB0aGUgZm9yd2FyZGluZyBkZWNpc2lvbnMgYmVpbmcgbWFkZSwgYW5kIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy4gSSBhbHJlYWR5IGhhdmUgYSBtZW50YWwgbWFwIG9mIHRoZSBrZXkgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHNvbGlkIGdyb3VuZC4KCkJleW9uZCB0aGUgcGFja2V0IHBhdGggaXRzZWxmLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHNvbWV0aGluZyBsaWtlIGBpcG1yX2lvY3RsYCwgb3IgYSBzaW1pbGFyIGlvY3RsLWJhc2VkIG1lY2hhbmlzbSwgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyB0byBtYW5hZ2UgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcywgYWRkL2RlbGV0ZSBncm91cCBtZW1iZXJzaGlwcywgYW5kIGNvbmZpZ3VyZSBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29kZSB0byBzZWUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgY29yZSByb3V0aW5nIGxvZ2ljLCB2ZXJpZnkgc2VjdXJpdHkgYW5kIGV4cGxvcmUgYW55IGxpbWl0YXRpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29uZmlnIGludGVyZmFjZSBpcyByb2J1c3QgYW5kIGVmZmljaWVudC4gSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MTYxOD1pbnQgaXBtcl9za19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXG4tLVxubmV0L2lwdjQvaXBtci5jLTE2MjAtXHRzd2l0Y2ggKGNtZCkge1xubmV0L2lwdjQvaXBtci5jOjE2MjE6XHQvKiBUaGVzZSB1c2Vyc3BhY2UgYnVmZmVycyB3aWxsIGJlIGNvbnN1bWVkIGJ5IGlwbXJfaW9jdGwoKSAqL1xubmV0L2lwdjQvaXBtci5jLTE2MjItXHRjYXNlIFNJT0NHRVRWSUZDTlQ6IHtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTY0MD1pbnQgaXBfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTY4Ni0vKiBUaGUgSVAgbXVsdGljYXN0IGlvY3RsIHN1cHBvcnQgcm91dGluZXMuICovXG5uZXQvaXB2NC9pcG1yLmM6MTY4NzppbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcbm5ldC9pcHY0L2lwbXIuYy0xNjg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkNvbnNpZGVyaW5nIElQIE11bHRpY2FzdCBSb3V0aW5nIE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbXVsdGljYXN0IHJvdXRpbmcgY29udHJvbCwgYW5kIGBpcG1yX2lvY3RsYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBzdHJvbmcgY29udGVuZGVyLiBJdCYjMzk7cyBvZnRlbiB0aGUgZm91bmRhdGlvbmFsIG1lY2hhbmlzbSwgdGhlIGxvdy1sZXZlbCwgZGlyZWN0IGNvbnRyb2wgcG9pbnQuIEkmIzM5O2QgbmVlZCB0byBkaWcgaW50byBpdHMgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwbGljYXRpb24sIGNoZWNraW5nIGZvciB0aGUgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgaXQgc3VwcG9ydHMuIFRoaW5raW5nIGZ1cnRoZXIsIGBpcF9tcm91dGVfc2V0c29ja29wdGAgYWxzbyBsb29rcyBwcm9taXNpbmcuIFRoYXQgc29ja2V0IG9wdGlvbiBhcHByb2FjaCBvZmZlcnMgYSBtb3JlICYjMzQ7dXNlci1mcmllbmRseSYjMzQ7IGludGVyZmFjZSwgbGV0dGluZyB5b3UgbWFuaXB1bGF0ZSBtdWx0aWNhc3Qgcm91dGluZyBmcm9tIHdpdGhpbiBhIHNvY2tldCBjb250ZXh0LiBJdCBsaWtlbHkgYWxsb3dzIHNldHRpbmcgdmFyaW91cyBtdWx0aWNhc3QtcmVsYXRlZCBwYXJhbWV0ZXJzLCBsaWtlIG1lbWJlcnNoaXAgcmVwb3J0cywgVFRMIHZhbHVlcywgYW5kIGludGVyZmFjZSBzZWxlY3Rpb25zLiBGaW5hbGx5LCBgaXBfbXJvdXRlX2dldHNvY2tvcHRgIHdvdWxkLCBvZiBjb3Vyc2UsIGJlIGVzc2VudGlhbCBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgbXVsdGljYXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbi4gSSBjYW4gdXNlIGl0IHRvIHZlcmlmeSBzZXR0aW5ncyBvciBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbXVsdGljYXN0IHJvdXRpbmcgYWZ0ZXIgY29uZmlndXJpbmcgaXQgdGhyb3VnaCBgc2V0c29ja29wdGAuIEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggd2hpY2ggb2ZmZXJzIHRoZSBncmFudWxhciBjb250cm9sIGFuZCBmbGV4aWJpbGl0eSBJIG5lZWQgZm9yIHRoaXMgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTEzODM9c3RhdGljIHZvaWQgbXJ0c29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaXBtci5jLTE0MTQtXG5uZXQvaXB2NC9pcG1yLmM6MTQxNTppbnQgaXBfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY0L2lwbXIuYy0xNDE2LVx0XHRcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtdWx0aWNhc3Qgcm91dGluZyBwYXRjaCwgYW5kIGltbWVkaWF0ZWx5IHRoZSBrZXkgc3ltYm9scyBqdW1wIG91dCBhdCBtZTogYGlwX21yX2lucHV0YCwgYGlwX21yX291dHB1dGAsIGBpcF9tcm91dGVfc2V0c29ja29wdGAsIGFuZCBgaXBtcl9pb2N0bGAuIFRob3NlIGFyZSBteSBicmVhZCBhbmQgYnV0dGVyIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGxvZ2ljLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBpbiB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBhcnJpdmVzIGFuZCB0aGVyZSYjMzk7cyBubyBjb3JyZXNwb25kaW5nIGNhY2hlIGVudHJ5LCBvciB3aGVuIFBJTSBhc3NlcnRzIGdldCB0cmlnZ2VyZWQuIEJhc2ljYWxseSwgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYW4gSUdNUCBtZXNzYWdlIHVwIHRvIHRoZSB1c2VyLXNwYWNlIHJvdXRpbmcgZGFlbW9uIOKAkyB0aGluZ3MgbGlrZSBgbXJvdXRlZGAgb3IgYHBpbWRgIOKAkyB2aWEgdGhlIG1yb3V0ZSBzb2NrZXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmaXhpbmcgc29tZXRoaW5nIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2VyIHNwYWNlLiBMb29raW5nIGNsb3NlciBhdCB0aGUgY29kZSBkaWZmLCB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGBpcHY0X3BrdGluZm9fcHJlcGFyZWAgd2FzIG9ubHkgZXhlY3V0ZWQgaW4gdGhlIGFzc2VydGlvbiBwYXRoLCBidXQgcGFja2V0IGNvbnRleHQgKGBza2ItJmd0O2NiYCkgd2FzIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBwYWNrZXQgKGBwa3QtJmd0O2NiYCkgaW4gdGhlIG5vbi1hc3NlcnQgY2FzZS4gVGhpcyBtZWFudCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIHVzZXItc3BhY2UgZGFlbW9uIHRvIGZvcndhcmQgdGhlIG1lc3NhZ2Ugd2FzIG5vdCBwcmVzZW50IGluIHRoZSBub24tYXNzZXJ0IHBhdGgsIG1ha2luZyB0aGUgY2FjaGUgZW50cnkgbWlzcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzZXJ0aW9uIGNhc2UuCgpOb3csIEkgbmVlZCB0byBzZWUgaWYgdGhlIGZpeCBpcyBjb3JyZWN0LiBUaGUgcGF0Y2ggYWRkcyBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgIGJlZm9yZSB0aGUgaGVhZGVyIGlzIGFkZGVkIGFuZCB0aGVuIGV4cGxpY2l0bHkgemVyb2VzIGFuZCBjb3BpZXMgdGhlIHJlbGV2YW50IGZpZWxkcyBmcm9tIHRoZSBvcmlnaW5hbCBwYWNrZXQmIzM5O3MgY29udHJvbCBidWZmZXIgKGBwa3QtJmd0O2NiYCkgaW50byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNrYiYjMzk7cyBjb250cm9sIGJ1ZmZlciAoYHNrYi0mZ3Q7Y2JgKS4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHBhY2tldCYjMzk7cyBtZXRhZGF0YSDigJMgaW50ZXJmYWNlIGluZGV4IGFuZCBkZXN0aW5hdGlvbiBJUCDigJMgaXMgY29ycmVjdGx5IHNldCBpbiBhbGwgY2FzZXMuIFRoaXMgc2VlbXMgdG8gYmUgYSBnb29kIGZpeC4KClRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGF0IGl0IGFwcGVhcnMgdGhhdCB0aGUgY29ycmVjdCBwYWNrZXQgY29udGV4dCBtZXRhZGF0YSBpcyBub3QgYWx3YXlzIGNvcGllZCB0byB0aGUgcGFja2V0JiMzOTtzIGNvbnRyb2wgYnVmZmVyLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGZvcndhcmRpbmcgZGVjaXNpb25zIGJ5IHRoZSB1c2VyLXNwYWNlIGRhZW1vbiwgYXMgaXQgd291bGQgbm90IGtub3cgd2hpY2ggaW50ZXJmYWNlIHRoZSBwYWNrZXQgYXJyaXZlZCBvbi4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX01ST1VURWAgaXMgc3VmZmljaWVudCBmb3IgdGhpcy4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHRoZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKklQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMTY9Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxubmV0L2lwdjQvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMTktXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMzI9Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMjM1LVx0c2VsZWN0IEZJQl9SVUxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MjQ2PWNvbmZpZyBJUF9QSU1TTV9WMVxubmV0L2lwdjQvS2NvbmZpZy0yNDctXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjQ5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjYxOlx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjYyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqQ29uZmlndXJpbmcgSVAgTXVsdGljYXN0IFJvdXRpbmcqKgoKUmlnaHQsIHNvLCBgSVBfTVJPVVRFYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3IgbXVsdGljYXN0IHJvdXRpbmcsIHRoYXQmIzM5O3MgY2xlYXIuIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBJIG5lZWQgdG8gZW5zdXJlIGBJUF9NUk9VVEVgIGlzIGVuYWJsZWQgd2l0aGluIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBnb2VzLgoKQnV0IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgdGVzdGluZywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgZGVwZW5kZW5jeSBjaGVjay4gSSBoYXZlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBJUF9NUk9VVEVgIGRvZXNuJiMzOTt0IHJlbHkgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBpbmFkdmVydGVudGx5IG1pc3NlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvZGUgZGVwZW5kZW5jaWVzIGlzIGluIG9yZGVyLiBObyBwb2ludCBpbiBtb3ZpbmcgZm9yd2FyZCB1bnRpbCBJJiMzOTttIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBpbiBwbGFjZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIzMS1cbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgZmVhdHVyZS4uLiBhbmQgaXQgaW1tZWRpYXRlbHkgaGluZ2VzIG9uIGEgcHJldHR5IGZ1bmRhbWVudGFsIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bHRpbWF0ZWx5IHRpZWQgdG8gdGhlIGBJUF9NVUxUSUNBU1RgIGZsYWcuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5IGVuYWJsaW5nIHN3aXRjaCBmb3IgZXZlcnl0aGluZyBtdWx0aWNhc3QtcmVsYXRlZCBvbiB0aGUgSVB2NCBsYXllci4gQW5kIHRoYXQsIG9mIGNvdXJzZSwgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC9kaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLiBHb3R0YSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUF9NVUxUSUNBU1RgIHRvbywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgcmVxdWlyZWQgaXMgYWxzbyBjb25maWd1cmVkLiBNYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01VTFRJQ0FTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6CgoqKkRlcGVuZGVuY3kgQ2hlY2s6IGBJUF9NUk9VVEVgKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBJUF9NUk9VVEVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyBkZXBlbmQgb24gdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGFja2FnZXMgdGhhdCByZXF1aXJlIGBJUF9NUk9VVEVgIHRvIGJlIHByZXNlbnQsIGVuYWJsZWQsIG9yIGNvbmZpZ3VyZWQgYSBzcGVjaWZpYyB3YXk/IEZpbmRpbmcgYW55IGRlcGVuZGVuY2llcyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbmZsdWVuY2UgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zIG9yIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE1Olx0XG4gMjE2Olx0Y29uZmlnIElQX01ST1VURV9DT01NT05cbiAyMTc6XHRcdGJvb2xcbiAyMTg6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXG4gMjE5Olx0XG4gMjIwOlx0Y29uZmlnIElQX01ST1VURVxuIDIyMTpcdFx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbiAyMjI6XHRcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUXG4gMjIzOlx0XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBUaGlzIGlzIHVzZWQgaWYgeW91IHdhbnQgeW91ciBtYWNoaW5lIHRvIGFjdCBhcyBhIHJvdXRlciBmb3IgSVBcbiAyMjY6XHRcdCAgcGFja2V0cyB0aGF0IGhhdmUgc2V2ZXJhbCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEl0IGlzIG5lZWRlZCBvbiB0aGVcbiAyMjc6XHRcdCAgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3Agb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXNcbiAyMjg6XHRcdCAgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3b3VsZCBtb3N0XG4gMjI5Olx0XHQgIGxpa2VseSBydW4gdGhlIHByb2dyYW0gbXJvdXRlZC4gSWYgeW91IGhhdmVuJiMzOTt0IGhlYXJkIGFib3V0IGl0LCB5b3VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJiMzOTttIHRoZSBvbmUgd3Jlc3RsaW5nIHdpdGggdGhpcy4uLgoKKipNdWx0aWNhc3QgRGVwZW5kZW5jeSBSZXNvbHV0aW9uKioKCkFscmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBJUF9NUk9VVEVgIHdvbiYjMzk7dCBmdW5jdGlvbiB3aXRob3V0IGBJUF9NVUxUSUNBU1RgIGVuYWJsZWQgZmlyc3QuIFRoYXQmIzM5O3MgYSBnaXZlbi4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBvZiB0aG9zZSBhcmUgZXhwbGljaXRseSBzZXQgd2l0aGluIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUsIHNvIGl0IGhhcyB0byBiZSBhZGRyZXNzZWQuCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgY2F1dGlvdXMgd2hlbiBkZWFsaW5nIHdpdGggcHJvdG9jb2xzIGxpa2UgdGhpcywgYW5kIHBhcnRpY3VsYXJseSB3aXRoIFBJTSBhc3NlcnRzLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYElQX1BJTVNNX1YxYCBhbmQgYElQX1BJTVNNX1YyYC4gVGhleSBhcmUgcmVsYXRlZCB0byBQSU0gYW5kIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCBiZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHByb2JsZW0sIGl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgZ2xhbmNlIHRvIHJ1bGUgb3V0IGFueSBpbW1lZGlhdGUsIGludGVyY29ubmVjdGVkIGNvbmZpZ3VyYXRpb24gaXNzdWVzIHRoYXQgbWlnaHQgY3JvcCB1cCBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBhYm91dCBiZWluZyBwcm9hY3RpdmUgYW5kIGVmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcbiAyNDY6XHRjb25maWcgSVBfUElNU01fVjFcbiAyNDc6XHRcdGJvb2wgXCYjMzQ7SVA6IFBJTS1TTSB2ZXJzaW9uIDEgc3VwcG9ydFwmIzM0O1xuIDI0ODpcdFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbiAyNDk6XHRcdGhlbHBcbiAyNTA6XHRcdCAgS2VybmVsIHNpZGUgc3VwcG9ydCBmb3IgU3BhcnNlIE1vZGUgUElNIChQcm90b2NvbCBJbmRlcGVuZGVudFxuIDI1MTpcdFx0ICBNdWx0aWNhc3QpIHZlcnNpb24gMS4gVGhpcyBtdWx0aWNhc3Qgcm91dGluZyBwcm90b2NvbCBpcyB1c2VkIHdpZGVseVxuIDI1MjpcdFx0ICBiZWNhdXNlIENpc2NvIHN1cHBvcnRzIGl0LiBZb3UgbmVlZCBzcGVjaWFsIHNvZnR3YXJlIHRvIHVzZSBpdFxuIDI1MzpcdFx0ICAocGltZC12MSkuIFBsZWFzZSBzZWUgXHUwMDNjaHR0cDovL25ldHdlYi51c2MuZWR1L3BpbS9cdTAwM2UgZm9yIG1vcmVcbiAyNTQ6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgUElNLlxuIDI1NTpcdFxuIDI1NjpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgUElNLVNNIHYxLiBOb3RlIHRoYXQgeW91IGNhbiBzYXkgTiBoZXJlIGlmXG4gMjU3Olx0XHQgIHlvdSBqdXN0IHdhbnQgdG8gdXNlIERlbnNlIE1vZGUgUElNLlxuIDI1ODpcdFxuIDI1OTpcdGNvbmZpZyBJUF9QSU1TTV9WMlxuIDI2MDpcdFx0Ym9vbCBcJiMzNDtJUDogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4gMjYxOlx0XHRkZXBlbmRzIG9uIElQX01ST1VURVxuIDI2MjpcdFx0aGVscFxuIDI2MzpcdFx0ICBLZXJuZWwgc2lkZSBzdXBwb3J0IGZvciBTcGFyc2UgTW9kZSBQSU0gdmVyc2lvbiAyLiBJbiBvcmRlciB0byB1c2VcbiAyNjQ6XHRcdCAgdGhpcywgeW91IG5lZWQgYW4gZXhwZXJpbWVudGFsIHJvdXRpbmcgZGFlbW9uIHN1cHBvcnRpbmcgaXQgKHBpbWQgb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkaW5nIFBJTS1TTSBWZXJzaW9ucyB0byBFbmFibGVDb25maWdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGJlIHByb2FjdGl2ZSBoZXJlLiBTaW5jZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHN1Y2ggYSBjcml0aWNhbCBjb21wb25lbnQgd2l0aGluIFBJTSBhc3NlcnRpb25zLCBpdCBtYWtlcyBzZW5zZSB0byBleHBsaWNpdGx5IGluY2x1ZGUgYm90aCBgSVBfUElNU01fVjFgIGFuZCBgSVBfUElNU01fVjJgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGVzZSBQSU0tU00gdmVyc2lvbnMgYXJlIHByb3Blcmx5IGNvbnNpZGVyZWQgd2hlbiBldmFsdWF0aW5nIHRoZSB1c2Ugb2YgdGhlIHJlcG9ydC4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aXRoaW4gYGlwbXIuY2AuIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byB2ZXJpZnkgdGhhdCBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIGluZGVlZCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGVpdGhlciBgQ09ORklHX0lQX1BJTVNNX1YxYCBvciBgQ09ORklHX0lQX1BJTVNNX1YyYCwgYW5kIG5vdCBzb21ldGhpbmcgZWxzZS4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb25maWRlbmNlIGluIG15IGNoYW5nZSBhbmQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQX1BJTVNNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz00Nzg9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2KVxuLS1cbm5ldC9pcHY0L2lwbXIuYy01MjctXG5uZXQvaXB2NC9pcG1yLmM6NTI4OiNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXG5uZXQvaXB2NC9pcG1yLmMtNTI5LXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MjM0NT1pbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMzk0LVxubmV0L2lwdjQvaXBtci5jOjIzOTU6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMVxubmV0L2lwdjQvaXBtci5jLTIzOTYtLyogSGFuZGxlIElHTVAgbWVzc2FnZXMgb2YgUElNdjEgKi9cbm5ldC9pcHY0L2lwbXIuYz0yMzk3PWludCBwaW1fcmN2X3YxKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTI0MjItXG5uZXQvaXB2NC9pcG1yLmM6MjQyMzojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXG5uZXQvaXB2NC9pcG1yLmMtMjQyNC1zdGF0aWMgaW50IHBpbV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MzI1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwbXJfbWZjX3NlcV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBtci5jLTMyNTctXG5uZXQvaXB2NC9pcG1yLmM6MzI1ODojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXG5uZXQvaXB2NC9pcG1yLmMtMzI1OS1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCBwaW1fcHJvdG9jb2wgPSB7XG4tLVxubmV0L2lwdjQvaXBtci5jPTMzNzc9aW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTMzODktXHRcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XG5uZXQvaXB2NC9pcG1yLmM6MzM5MDojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXG5uZXQvaXB2NC9pcG1yLmMtMzM5MS1cdGlmIChpbmV0X2FkZF9wcm90b2NvbChcdTAwMjZwaW1fcHJvdG9jb2wsIElQUFJPVE9fUElNKSBcdTAwM2MgMCkge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0zNDAwLVxubmV0L2lwdjQvaXBtci5jOjM0MDE6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxubmV0L2lwdjQvaXBtci5jLTM0MDItYWRkX3Byb3RvX2ZhaWw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTEzCgkJCQkJCQlvdXRwdXQ6IDE1MAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGByZWdfdmlmX3htaXRgIGlzIGluZGVlZCBndWFyZGVkIGJ5IGVpdGhlciBgQ09ORklHX0lQX1BJTVNNX1YxYCBvciBgQ09ORklHX0lQX1BJTVNNX1YyYC4gQW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQgY2FsbHMgYGlwbXJfY2FjaGVfcmVwb3J0YC4gVGhlcmVmb3JlLCBlbmFibGluZyB0aGVzZSBvcHRpb25zIGlzIHRoZSByaWdodCBjb3Vyc2Ugb2YgYWN0aW9uIHRvIGVuc3VyZSB0aGlzIHBhdGNoJiMzOTtzIGNoYW5nZXMgYXJlIGFwcGxpZWQuCgpMZXQmIzM5O3MgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBJUF9NVUxUSUNBU1RgLCBgSVBfTVJPVVRFYCwgYElQX1BJTVNNX1YxYCwgYW5kIGBJUF9QSU1TTV9WMmAuIFRoZXNlIGFyZSB0aGUga2V5IHNldHRpbmdzIHRvIGhhdmUgaW4gbWluZC4KCk5vdywgbGV0IG1lIGhvbmUgaW4gb24gdGhlIGNvcmUgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwbXJfaW9jdGxgLiBUaGV5IGFyZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBpcG1yX2NhY2hlX3JlcG9ydGAgd2l0aGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc2tiLSZndDtjYmAgd2hlbiBwdXNoaW5nIElHTVAgbWVzc2FnZXMgdXAgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBvZiBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIGNvcmUgYW5kIHJlYWNoYWJsZSBwYXJ0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBmaXguCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjEmIzM0OywKICAgICYjMzQ7SVBfUElNU01fVjImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQX1BJTVNNX1YxJiMzNDssCiAgICAmIzM0O0lQX1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwbXJfY2FjaGVfcmVwb3J0YCBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBzdWJzeXN0ZW0sIGZpeGluZyBob3cgYHNrYi1cdTAwM2VjYmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBzZW5kaW5nIElHTVAgbWVzc2FnZXMgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ1OjU3LjI0NDM0NDA5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1OTM4Nzg4NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01VTFRJQ0FTVFwiLFxuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUF9QSU1TTV9WMVwiLFxuICAgIFwiSVBfUElNU01fVjJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tcl9pbnB1dFwiLFxuICAgIFwiaXBfbXJfb3V0cHV0XCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpcG1yX2NhY2hlX3JlcG9ydGAgaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgc3Vic3lzdGVtLCBmaXhpbmcgaG93IGBza2ItXFx1MDAzZWNiYCBpcyBpbml0aWFsaXplZCB3aGVuIHNlbmRpbmcgSUdNUCBtZXNzYWdlcyB0byB1c2VyLXNwYWNlLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NTo1Ny4yNDQzNTA2NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjkyNTUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE3NjM1YjBhNjdlMDlkNDAwMDQ5YzRhOTc4ZDlhOGNjNjhmOTQwZDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDk6NDU6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXFxuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uNDgyNzk3M2M2ZjljMCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcXG4ge1xcbiBcXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XFxuK1xcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xcbiBcXHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcXG4gXFx0c3RydWN0IGlnbXBtc2cgKm1zZztcXG5AQCAtMTExMiw4ICsxMTEzLDYgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4gXFx0XFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdG1zZy1cXHUwMDNlaW1fdmlmID0gdmlmaTtcXG4gXFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZpIFxcdTAwM2VcXHUwMDNlIDg7XFxuLVxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuLVxcdFxcdG1lbWNweShza2ItXFx1MDAzZWNiLCBwa3QtXFx1MDAzZWNiLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbiBcXHRcXHQvKiBBZGQgb3VyIGhlYWRlci5cXG4gXFx0XFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cXG4gXFx0XFx0ICovXFxuQEAgLTExMjQsNiArMTEyMywxMiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbiBcXHR9XFxuIFxcbitcXHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xcbitcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHNrYi1cXHUwMDNlY2IpKTtcXG4rXFx0aW5mbyA9IFBLVElORk9fU0tCX0NCKHNrYik7XFxuK1xcdGluZm8tXFx1MDAzZWlwaV9pZmluZGV4ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cXHUwMDNlaXBpX2lmaW5kZXg7XFxuK1xcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4rXFxuIFxcdGlnbXBtc2dfbmV0bGlua19ldmVudChtcnQsIHNrYik7XFxuIFxcbiBcXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDU6NTcuNzI4Mjg1Mzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTU0NTQ4Mzc2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElDQVNUXCIsXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQX1BJTVNNX1YxXCIsXG4gICAgXCJJUF9QSU1TTV9WMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcF9tcl9vdXRwdXRcIixcbiAgICBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwbXJfY2FjaGVfcmVwb3J0YCBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBzdWJzeXN0ZW0sIGZpeGluZyBob3cgYHNrYi1cXHUwMDNlY2JgIGlzIGluaXRpYWxpemVkIHdoZW4gc2VuZGluZyBJR01QIG1lc3NhZ2VzIHRvIHVzZXItc3BhY2UuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3NjM1YjBhNjdlMDlkNDAwMDQ5YzRhOTc4ZDlhOGNjNjhmOTQwZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwOTo0NTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uNDgyNzk3M2M2ZjljMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuKysrIGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KVxuIHtcbiBcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcbitcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuIFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbiBcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuIFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbkBAIC0xMTEyLDggKzExMTMsNiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4gXHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuLVx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuLVx0XHRtZW1jcHkoc2tiLVx1MDAzZWNiLCBwa3QtXHUwMDNlY2IsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiBcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4gXHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4gXHRcdCAqL1xuQEAgLTExMjQsNiArMTEyMywxMiBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcjtcbiBcdH1cbiBcbitcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XG4rXHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4rXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcbitcdGluZm8tXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9pZmluZGV4O1xuK1x0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbitcbiBcdGlnbXBtc2dfbmV0bGlua19ldmVudChtcnQsIHNrYik7XG4gXG4gXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ1OjU3LjcyODI4NzA3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDMwMTI0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gYG5ldC9pcHY0L2lwbXIuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGlwbXJfY2FjaGVfcmVwb3J0YC4gVGhlIHByaW1hcnkgc2hpZnQgSSdtIHNlZWluZyBpbnZvbHZlcyBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgLiBJdCBzZWVtcyB0aGF0IGZ1bmN0aW9uIGhhcyBiZWVuIG1vdmVkIG91dCBvZiB3aGF0IHdhcywganVkZ2luZyBieSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgbGlrZWx5IGEgY29uZGl0aW9uYWwgYmxvY2ssIHBvc3NpYmx5IGFuIGBpZiAoYXNzZXJ0KWAgb3Igc2ltaWxhci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IHBsYWNlbWVudCB3aXRoaW4gdGhlIGJyb2FkZXIgbG9naWMgaGVyZS5cblxuQmV5b25kIHRoYXQsIHRoZSBwYXRjaCByZXBsYWNlcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgbWVtY3B5YCBvcGVyYXRpb24gaW52b2x2aW5nIGBza2ItXHUwMDNlY2JgIHdpdGggYSBtb3JlIG51YW5jZWQgYXBwcm9hY2guIEluc3RlYWQgb2YgYSBkaXJlY3QgY29weSwgaXQgbm93IHVzZXMgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCAqZmlyc3QqLCBhbmQgKnRoZW4qIGluaXRpYWxpemVzIGBza2ItXHUwMDNlY2JgIHRvIHplcm8uIFRoaXMgaXMgZm9sbG93ZWQgYnkgYSBtYW51YWwgY29weSBvZiBzcGVjaWZpYyBmaWVsZHMgZnJvbSBgcGt0LVx1MDAzZWNiYCAtIG5hbWVseSwgYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAg4oCTIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIHdpdGhpbiBgc2tiLVx1MDAzZWNiYCB1c2luZyB0aGUgYFBLVElORk9fU0tCX0NCYCBtYWNyby4gSSdsbCBuZWVkIHRvIGdvIG92ZXIgYGlwbXJfY2FjaGVfcmVwb3J0YCBpdHNlbGYsIG9mIGNvdXJzZSwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHJldmlzZWQgYXBwcm9hY2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjAzLjE3MTMwMzE4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAwOTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2NhY2hlX3JlcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcG1yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTEwOD1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTEwLVxcdFxcdFxcdCAgc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIGludCBsb2NhbCk7XFxubmV0L2lwdjQvaXBtci5jOjExMTpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMTItXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NTI5PXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy01NTEtXFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cXG5uZXQvaXB2NC9pcG1yLmM6NTUyOlxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxcbm5ldC9pcHY0L2lwbXIuYy01NTMtXFx0XFx0XFx0ICBJR01QTVNHX1dIT0xFUEtUKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz02ODc9c3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy03MDktXFx0aWYgKHZpZmkgPT0gbXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcXG5uZXQvaXB2NC9pcG1yLmM6NzEwOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtNzExLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIC0xKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz04NDk9c3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtOTQxLVxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZJRkZfUkVHSVNURVIpIHtcXG5uZXQvaXB2NC9pcG1yLmM6OTQyOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtOTQzLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIHZpZmkpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTEwMTk9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9yZXNvbHZlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTA1Ni0gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MTA1NzpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMDU4LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTE0Nz1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE4NC1cXHRcXHQvKiBSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuICovXFxubmV0L2lwdjQvaXBtci5jOjExODU6XFx0XFx0ZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7XFxubmV0L2lwdjQvaXBtci5jLTExODYtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTkwNz1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTkyNS1cXHRcXHRERVZfU1RBVFNfSU5DKHZpZl9kZXYsIHR4X3BhY2tldHMpO1xcbm5ldC9pcHY0L2lwbXIuYzoxOTI2OlxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTkyNy1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjA0Nj1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjEwMS1cXHRcXHRcXHRjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllcztcXG5uZXQvaXB2NC9pcG1yLmM6MjEwMjpcXHRcXHRcXHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTtcXG5uZXQvaXB2NC9pcG1yLmMtMjEwMy1cXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUpKVxcbm5ldC9pcHY0L2lwbXIuYzoyMTA0OlxcdFxcdFxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksXFxubmV0L2lwdjQvaXBtci5jLTIxMDUtXFx0XFx0XFx0XFx0XFx0XFx0ICBJR01QTVNHX1dSVklGV0hPTEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjowMy4yNjgzMTc0MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ1OTg4NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpcG1yX2NhY2hlX3JlcG9ydGAgd2l0aGluIGBuZXQvaXB2NC9pcG1yLmNgLiBJbW1lZGlhdGVseSwgSSByZWNvZ25pemUgdGhpcyBpcyBjb3JlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgbG9naWMuIEdvb2QuIEknbSBzZWVpbmcgaXQgbGV2ZXJhZ2VzIGBpcHY0X3BrdGluZm9fcHJlcGFyZWAgYW5kIGBQS1RJTkZPX1NLQl9DQmAsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBoYW5kbGluZyBwYWNrZXQgbWV0YWRhdGEgYW5kIGNvbnRyb2wgYmxvY2tzLCBidXQgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBleWUgb24gaG93IHRoYXQncyBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHNvbGlkOyBpdCdzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUuIFRoYXQncyBhIGdyZWVuIGxpZ2h0IGZvciBtZSAtIGRlZmluaXRlbHkgZnV6emFibGUuIFRpbWUgdG8gc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIHByb3BlciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCB0byB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gV2hhdCBhcmUgd2UgbG9va2luZyBhdCBoZXJl4oCmIGBDT05GSUdfSVBfTVJPVVRFYCBpcyBvYnZpb3VzbHkgb25lLCBidXQgd2hhdCBlbHNlIGlzIHRpZWQgaW50byB0aGUgcmVwb3J0aW5nIG1lY2hhbmlzbSB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZD8gTGV0J3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBwYXRjaCBjb3VsZCBleHBvc2UgbmV3IGlzc3VlcyBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBub3QgcmlnaHQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQncyBiZWluZyBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MDguMTE0MzA4MTM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzQwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9NUk9VVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTUtXFxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cXHRib29sXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cXG5uZXQvaXB2NC9LY29uZmlnOjIyMDpjb25maWcgSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjowOC4xOTM2NTQ4OTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQxMjQ5MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkNvbmZpZ3VyYXRpb24gRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIHdpdGggaXMgYElQX01ST1VURWAuIE5vdGVkLiBCdXQgSSdtIG5vdCBnb2luZyB0byBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLiBBIGdvb2Qgc3lzdGVtcyBhcmNoaXRlY3QsIGxpa2UgbXlzZWxmLCBrbm93cyB0byBkaWcgZGVlcGVyLiBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBzdGFydGluZyBwb2ludCwgYnV0IGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSAqZW50aXJlKiBjb250ZXh0LiBTbywgbGV0J3Mgbm90IGFzc3VtZSBgSVBfTVJPVVRFYCBpcyB0aGUgb25seSByZWxldmFudCBwaWVjZS4gQmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBkZXNpZ24gZGVjaXNpb25zIG9yIHRyb3VibGVzaG9vdGluZywgSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIG9yIGluZmx1ZW5jZSBgSVBfTVJPVVRFYC4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMsIGNvbmZsaWN0cywgb3IgY29tcGxlbWVudGFyeSBzZXR0aW5ncy4gV2UgbmVlZCB0byBjb21wcmVoZW5zaXZlbHkgZXhwbG9yZSB0aGUgZW52aXJvbm1lbnQuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjExLjUzNDkwNjc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjcwMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKklQX01ST1VURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MjE2PWNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbm5ldC9pcHY0L0tjb25maWc6MjE4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIzMj1jb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L0tjb25maWctMjMzLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyMzQ6XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXFx1MDAyNlxcdTAwMjYgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZy0yMzUtXFx0c2VsZWN0IEZJQl9SVUxFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNDY9Y29uZmlnIElQX1BJTVNNX1YxXFxubmV0L2lwdjQvS2NvbmZpZy0yNDctXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDEgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI0ODpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxcbm5ldC9pcHY0L0tjb25maWctMjYwLVxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyNjE6XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTI2Mi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjExLjU5NDE4MjY4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzE3ODY0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogSVAgTXVsdGljYXN0IFJvdXRpbmcqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBJUF9NUk9VVEVgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcGllY2Ugd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSByZWNlbnQgY2hhbmdlcywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBpcG1yX2NhY2hlX3JlcG9ydGAuIEkgc2VlIHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBLbm93aW5nIHRoaXMsIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50LlxuXG5JdCBhcHBlYXJzIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zOiBgcmVnX3ZpZl94bWl0YCwgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAsIGBpcG1yX3ByZXBhcmVfeG1pdGAsIGFuZCBgaXBfbXJfZm9yd2FyZGAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgdGhyb3VnaCBtdWx0aXBsZSBlbnRyeSBwb2ludHMuIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGByZWdfdmlmX3htaXRgLiBUaGF0J3Mgd2hlcmUgSSdsbCBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjoxNS40NjU5NzE1ODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTE3OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ192aWZfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcG1yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTQ3OD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnYpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNTI4LSNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXFxubmV0L2lwdjQvaXBtci5jOjUyOTpzdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBtci5jLTUzMC17XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcmVnX3ZpZl9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY0L2lwbXIuYzo1NjY6XFx0Lm5kb19zdGFydF94bWl0XFx0PSByZWdfdmlmX3htaXQsXFxubmV0L2lwdjQvaXBtci5jLTU2Ny1cXHQubmRvX2dldF9pZmxpbmsgPSByZWdfdmlmX2dldF9pZmxpbmssXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9Njg3PXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNzA5LVxcdGlmICh2aWZpID09IG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSB7XFxubmV0L2lwdjQvaXBtci5jOjcxMDpcXHRcXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXFxubmV0L2lwdjQvaXBtci5jLTcxMS1cXHRcXHRXUklURV9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCAtMSk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9ODQ5PXN0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTk0MS1cXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWSUZGX1JFR0lTVEVSKSB7XFxubmV0L2lwdjQvaXBtci5jOjk0MjpcXHRcXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXFxubmV0L2lwdjQvaXBtci5jLTk0My1cXHRcXHRXUklURV9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCB2aWZpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MTUuNTUzNDk2NjI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjYxMTAyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBgcmVnX3ZpZl94bWl0YCBpcyBiZWluZyB1c2VkIGFzIGFuIGBuZG9fc3RhcnRfeG1pdGAgY2FsbGJhY2suIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sIHBhdGggZm9yIHRyYW5zbWlzc2lvbi4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHRha2luZyBwbGFjZSBoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgaXBtcl9jYWNoZV91bnJlc29sdmVkYC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgbXVsdGljYXN0IHNjZW5hcmlvIGFuZCBpZiB0aGVyZSBhcmUgcGVuZGluZyBhZGRyZXNzIHJlc29sdXRpb25zIGludm9sdmVkIHdpdGggdGhlIHRyYW5zbWlzc2lvbiBpbml0aWF0aW9uIEknbSBleGFtaW5pbmcuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXNvbHV0aW9uIGNhY2hlIGlzIGJlaW5nIHV0aWxpemVkLiBJcyBpdCBwcmUtcG9wdWxhdGluZywgb3IgaXMgdGhpcyB0aGUgcG9pbnQgd2hlcmUgd2UgZXhwZWN0IGEgcmVzb2x1dGlvbiBzdGFsbD8gSSBleHBlY3QgdG8gZmluZCBzb21lIGluZGljYXRpb24gb2YgaG93IHRoZXNlIHR3byBjb21wb25lbnRzIGFyZSBpbnRlcmFjdGluZyB0byBvcmNoZXN0cmF0ZSB0aGUgdHJhbnNtaXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MTkuODc5NjA5NzU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY3OTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2NhY2hlX3VucmVzb2x2ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBtci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz0xMDU3PXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE0Ni0vKiBDYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXFxubmV0L2lwdjQvaXBtci5jOjExNDc6c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxcbm5ldC9pcHY0L2lwbXIuYy0xMTQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTIxOTQ9aW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjI3MS1cXHRcXHRpZiAodmlmIFxcdTAwM2U9IDApXFxubmV0L2lwdjQvaXBtci5jOjIyNzI6XFx0XFx0XFx0cmV0dXJuIGlwbXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xcbm5ldC9pcHY0L2lwbXIuYy0yMjczLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTIzNDU9aW50IGlwX21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMzc5LVxcdFxcdGlmICh2aWYgXFx1MDAzZT0gMClcXG5uZXQvaXB2NC9pcG1yLmM6MjM4MDpcXHRcXHRcXHRyZXR1cm4gaXBtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XFxubmV0L2lwdjQvaXBtci5jLTIzODEtXFx0XFx0Z290byBtY19vdXRwdXQ7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjQ1MT1pbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI1MDAtXFx0XFx0aXBoLVxcdTAwM2V2ZXJzaW9uID0gMDtcXG5uZXQvaXB2NC9pcG1yLmM6MjUwMTpcXHRcXHRlcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYjIsIGRldik7XFxubmV0L2lwdjQvaXBtci5jLTI1MDItXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjE5Ljk3MTI5ODIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjQ2MTI2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBNdWx0aWNhc3QgUm91dGluZyBDYWNoZSBVbnJlc29sdmVkIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBpcG1yX2NhY2hlX3VucmVzb2x2ZWRgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGNvZGUgY2xlYXJseSBzaG93cyBpdCdzIGNhbGxlZCBmcm9tIGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBhbmQgYGlwbXJfZ2V0X3JvdXRlYC4gVGhvc2UgYXJlIGFsbCBjb3JlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggbXVsdGljYXN0IHJvdXRpbmcsIHNvIHRoYXQncyBleHBlY3RlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCB0aGUgY29udGV4dCBpcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYGlwbXJfcHJlcGFyZV94bWl0YC4gSXQncyBoaWdobHkgbGlrZWx5IHRoYXQgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAgcGxheXMgYSByb2xlIGluIHRoZSB0cmFuc21pc3Npb24gcGF0aCBwcmVwYXJhdGlvbiBhbmQgbWlnaHQgYmUgY2FsbGVkIHdoZW4gYSBjYWNoZSBlbnRyeSBpcyB1bnJlc29sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIGFuIGVudHJ5IGlzIGluIHdoZW4gaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgdmFyaW91cyBjYWxsaW5nIGZ1bmN0aW9ucyBkbyB3aXRoIHRoZSByZXR1cm4gdmFsdWUuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgcm9sZSBvZiBgaXBtcl9wcmVwYXJlX3htaXRgIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjoyNC4yMzU5MTM1MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTM4MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwbXJfcHJlcGFyZV94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTg5OD1zdGF0aWMgYm9vbCBpcG1yX2ZvcndhcmRfb2ZmbG9hZGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTE5MDYtXFxubmV0L2lwdjQvaXBtci5jOjE5MDc6c3RhdGljIGludCBpcG1yX3ByZXBhcmVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xOTA4LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHZpZmkpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTk4NT1zdGF0aWMgdm9pZCBpcG1yX3F1ZXVlX2Z3ZF94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTk5Mi1cXG5uZXQvaXB2NC9pcG1yLmM6MTk5MzpcXHRpZiAoaXBtcl9wcmVwYXJlX3htaXQobmV0LCBtcnQsIHNrYiwgdmlmaSkpXFxubmV0L2lwdjQvaXBtci5jLTE5OTQtXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yMDE5PXN0YXRpYyB2b2lkIGlwbXJfcXVldWVfb3V0cHV0X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMDIxLXtcXG5uZXQvaXB2NC9pcG1yLmM6MjAyMjpcXHRpZiAoaXBtcl9wcmVwYXJlX3htaXQobmV0LCBtcnQsIHNrYiwgdmlmaSkpXFxubmV0L2lwdjQvaXBtci5jLTIwMjMtXFx0XFx0Z290byBvdXRfZnJlZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MjQuMjgzMDU3NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI3MTg5NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUCBNdWx0aWNhc3QgRm9yd2FyZGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIGBpcG1yX3ByZXBhcmVfeG1pdGAgaXMgY2xlYXJseSBhIGtleSBmdW5jdGlvbiBoZXJlLCBzaW5jZSBpdCdzIGNhbGxlZCBieSBib3RoIGBpcG1yX3F1ZXVlX2Z3ZF94bWl0YCBhbmQgYGlwbXJfcXVldWVfb3V0cHV0X3htaXRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgbXVsdGljYXN0IHBhY2tldHMgZm9yIHRyYW5zbWlzc2lvbiBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwb3RlbnRpYWxseSBmb3J3YXJkaW5nIGFuZCBkaXJlY3RseSBzZW5kaW5nLiAgVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZnVydGhlciwgaXMgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBpcF9tcl9mb3J3YXJkYC4gS25vd2luZyB0aGlzIGZ1bmN0aW9uJ3MgcmVsYXRpb25zaGlwIHdpdGggdGhlIGZvcndhcmRpbmcgZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIGBpcF9tcl9mb3J3YXJkYCBpcyB0aGUgY2VudHJhbCBjb21wb25lbnQgdG8gZGVjaWRlIHRoZSBiZXN0IGludGVyZmFjZSBmb3IgZm9yd2FyZGluZyBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MjcuOTEwMjUwMDcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDUwNDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcl9mb3J3YXJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDctXFxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxubmV0L2lwdjQvaXBtci5jLTEwOS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDQ2LVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcXHRcXHRcXHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXFx1MDAzZWRldiwgc2tiLCBjLCAwKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTA0OC1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yMDMzPXN0YXRpYyBpbnQgaXBtcl9maW5kX3ZpZihjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMDQ1LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMDQ2OnN0YXRpYyB2b2lkIGlwX21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2NC9pcG1yLmMtMjA0Ny1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjE5ND1pbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMjc2LVxcbm5ldC9pcHY0L2lwbXIuYzoyMjc3OlxcdGlwX21yX2ZvcndhcmQobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSwgbG9jYWwpO1xcbm5ldC9pcHY0L2lwbXIuYy0yMjc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjoyNy45NzA3NTkyNzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4ODYxOTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGludHVpdGlvbiBpcyB0aGF0IGBpcF9tcl9pbnB1dGAgYW5kIGBpcF9tcl9vdXRwdXRgIGFyZSBzdHJvbmcgcG9zc2liaWxpdGllcyBmb3Igc3ltYm9scyB0byBjb25jZW50cmF0ZSBvbi4gVGhleSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBvciBzdHJ1Y3R1cmUuIFxuXG5CdXQgaGFuZyBvbi4uLiBhIHF1aWNrIGNoZWNrIHJldmVhbHMgYGlwX21yX2lucHV0YCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSXQgbWVhbnMgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLCB3aGljaCBpbXBhY3RzIGhvdyBJJ2xsIGFwcHJvYWNoIGl0LlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggYm90aCBgaXBfbXJfaW5wdXRgIGFuZCBgaXBfbXJfb3V0cHV0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBmdW5jdGlvbnMgZG8sIHdoZXJlIHRoZXkgYXJlIGNhbGxlZCBmcm9tLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjozMi44NTkzODExNTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTg0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21yX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MjE2Nz1zdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcG1yX3J0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTIxOTMtICovXFxubmV0L2lwdjQvaXBtci5jOjIxOTQ6aW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvaXBtci5jLTIxOTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NjozMi45MzU1NzM3ODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyOTQwNTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGlwX21yX291dHB1dGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBjaGVja2luZyBgaXBfbXJfb3V0cHV0YC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSXQncyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLCB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIHNjZW5hcmlvLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24sIHRoZSBpbml0aWFsIGV2aWRlbmNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gR290dGEgY29uZmlybSBteSBleHBlY3RhdGlvbnMsIHNlZSBpZiB0aGlzIGlzIGFzIEkgc3VzcGVjdGVkIG9yIGlmIEkgbmVlZCB0byB3aWRlbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MzUuNzY0OTgxNzE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODY5MTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcl9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBtci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz0yMTk0PWludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTIyOTAtXFxubmV0L2lwdjQvaXBtci5jOjIyOTE6c3RhdGljIHZvaWQgaXBfbXJfb3V0cHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0yMjkyLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjM0NC0gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MjM0NTppbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwbXIuYy0yMzQ2LXtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMzg3LVxcbm5ldC9pcHY0L2lwbXIuYzoyMzg4OlxcdGlwX21yX291dHB1dF9maW5pc2gobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSk7XFxubmV0L2lwdjQvaXBtci5jLTIzODktXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjM1Ljg0MzY3ODM4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkzMjYzODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqTXVsdGljYXN0IFJvdXRpbmcgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtdWx0aWNhc3Qgcm91dGluZyBrZXJuZWwgY29kZS4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gYGlwX21yX2lucHV0YCBhbmQgYGlwX21yX291dHB1dGAuIFRob3NlIGFyZSBjbGVhcmx5IHRoZSBjb3JlIGVudHJ5IHBvaW50cywgdGhlIGdhdGVrZWVwZXJzIGZvciBoYW5kbGluZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcgbXVsdGljYXN0IHRyYWZmaWMsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgdGhlIGZvcndhcmRpbmcgZGVjaXNpb25zIGJlaW5nIG1hZGUsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIEkgYWxyZWFkeSBoYXZlIGEgbWVudGFsIG1hcCBvZiB0aGUga2V5IHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBvbiBzb2xpZCBncm91bmQuXG5cbkJleW9uZCB0aGUgcGFja2V0IHBhdGggaXRzZWxmLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHNvbWV0aGluZyBsaWtlIGBpcG1yX2lvY3RsYCwgb3IgYSBzaW1pbGFyIGlvY3RsLWJhc2VkIG1lY2hhbmlzbSwgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyB0byBtYW5hZ2UgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcywgYWRkL2RlbGV0ZSBncm91cCBtZW1iZXJzaGlwcywgYW5kIGNvbmZpZ3VyZSBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBjb2RlIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBjb3JlIHJvdXRpbmcgbG9naWMsIHZlcmlmeSBzZWN1cml0eSBhbmQgZXhwbG9yZSBhbnkgbGltaXRhdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb25maWcgaW50ZXJmYWNlIGlzIHJvYnVzdCBhbmQgZWZmaWNpZW50LiBJIGFtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6MzkuODM2OTQ2ODA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYyNjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTYxOD1pbnQgaXBtcl9za19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTYyMC1cXHRzd2l0Y2ggKGNtZCkge1xcbm5ldC9pcHY0L2lwbXIuYzoxNjIxOlxcdC8qIFRoZXNlIHVzZXJzcGFjZSBidWZmZXJzIHdpbGwgYmUgY29uc3VtZWQgYnkgaXBtcl9pb2N0bCgpICovXFxubmV0L2lwdjQvaXBtci5jLTE2MjItXFx0Y2FzZSBTSU9DR0VUVklGQ05UOiB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTY0MD1pbnQgaXBfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xNjg2LS8qIFRoZSBJUCBtdWx0aWNhc3QgaW9jdGwgc3VwcG9ydCByb3V0aW5lcy4gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MTY4NzppbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcXG5uZXQvaXB2NC9pcG1yLmMtMTY4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjM5LjkxNDU4MTY1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3MjQ5MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHBvc3NpYmlsaXRpZXMgYXMgYSBuZXR3b3JraW5nIGV4cGVydDpcblxuKipDb25zaWRlcmluZyBJUCBNdWx0aWNhc3QgUm91dGluZyBPcHRpb25zKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtdWx0aWNhc3Qgcm91dGluZyBjb250cm9sLCBhbmQgYGlwbXJfaW9jdGxgIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBhIHN0cm9uZyBjb250ZW5kZXIuIEl0J3Mgb2Z0ZW4gdGhlIGZvdW5kYXRpb25hbCBtZWNoYW5pc20sIHRoZSBsb3ctbGV2ZWwsIGRpcmVjdCBjb250cm9sIHBvaW50LiBJJ2QgbmVlZCB0byBkaWcgaW50byBpdHMgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwbGljYXRpb24sIGNoZWNraW5nIGZvciB0aGUgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgaXQgc3VwcG9ydHMuIFRoaW5raW5nIGZ1cnRoZXIsIGBpcF9tcm91dGVfc2V0c29ja29wdGAgYWxzbyBsb29rcyBwcm9taXNpbmcuIFRoYXQgc29ja2V0IG9wdGlvbiBhcHByb2FjaCBvZmZlcnMgYSBtb3JlIFwidXNlci1mcmllbmRseVwiIGludGVyZmFjZSwgbGV0dGluZyB5b3UgbWFuaXB1bGF0ZSBtdWx0aWNhc3Qgcm91dGluZyBmcm9tIHdpdGhpbiBhIHNvY2tldCBjb250ZXh0LiBJdCBsaWtlbHkgYWxsb3dzIHNldHRpbmcgdmFyaW91cyBtdWx0aWNhc3QtcmVsYXRlZCBwYXJhbWV0ZXJzLCBsaWtlIG1lbWJlcnNoaXAgcmVwb3J0cywgVFRMIHZhbHVlcywgYW5kIGludGVyZmFjZSBzZWxlY3Rpb25zLiBGaW5hbGx5LCBgaXBfbXJvdXRlX2dldHNvY2tvcHRgIHdvdWxkLCBvZiBjb3Vyc2UsIGJlIGVzc2VudGlhbCBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgbXVsdGljYXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbi4gSSBjYW4gdXNlIGl0IHRvIHZlcmlmeSBzZXR0aW5ncyBvciBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbXVsdGljYXN0IHJvdXRpbmcgYWZ0ZXIgY29uZmlndXJpbmcgaXQgdGhyb3VnaCBgc2V0c29ja29wdGAuIEknbGwgbmVlZCB0byByZXNlYXJjaCB3aGljaCBvZmZlcnMgdGhlIGdyYW51bGFyIGNvbnRyb2wgYW5kIGZsZXhpYmlsaXR5IEkgbmVlZCBmb3IgdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6NDQuMjkxODM0MjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDAyNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTM4Mz1zdGF0aWMgdm9pZCBtcnRzb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xNDE0LVxcbm5ldC9pcHY0L2lwbXIuYzoxNDE1OmludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9pcHY0L2lwbXIuYy0xNDE2LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0Njo0NC4zNjkyNTA2NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQzMTk4ODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbXVsdGljYXN0IHJvdXRpbmcgcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5IHN5bWJvbHMganVtcCBvdXQgYXQgbWU6IGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwbXJfaW9jdGxgLiBUaG9zZSBhcmUgbXkgYnJlYWQgYW5kIGJ1dHRlciB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBsb2dpYy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYGlwbXJfY2FjaGVfcmVwb3J0YCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBpbiB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBhcnJpdmVzIGFuZCB0aGVyZSdzIG5vIGNvcnJlc3BvbmRpbmcgY2FjaGUgZW50cnksIG9yIHdoZW4gUElNIGFzc2VydHMgZ2V0IHRyaWdnZXJlZC4gQmFzaWNhbGx5LCBpdCdzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIGFuIElHTVAgbWVzc2FnZSB1cCB0byB0aGUgdXNlci1zcGFjZSByb3V0aW5nIGRhZW1vbiDigJMgdGhpbmdzIGxpa2UgYG1yb3V0ZWRgIG9yIGBwaW1kYCDigJMgdmlhIHRoZSBtcm91dGUgc29ja2V0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZpeGluZyBzb21ldGhpbmcgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuIExvb2tpbmcgY2xvc2VyIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgYGlwdjRfcGt0aW5mb19wcmVwYXJlYCB3YXMgb25seSBleGVjdXRlZCBpbiB0aGUgYXNzZXJ0aW9uIHBhdGgsIGJ1dCBwYWNrZXQgY29udGV4dCAoYHNrYi1cdTAwM2VjYmApIHdhcyBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgcGFja2V0IChgcGt0LVx1MDAzZWNiYCkgaW4gdGhlIG5vbi1hc3NlcnQgY2FzZS4gVGhpcyBtZWFudCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIHVzZXItc3BhY2UgZGFlbW9uIHRvIGZvcndhcmQgdGhlIG1lc3NhZ2Ugd2FzIG5vdCBwcmVzZW50IGluIHRoZSBub24tYXNzZXJ0IHBhdGgsIG1ha2luZyB0aGUgY2FjaGUgZW50cnkgbWlzcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzZXJ0aW9uIGNhc2UuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSBpZiB0aGUgZml4IGlzIGNvcnJlY3QuIFRoZSBwYXRjaCBhZGRzIGBpcHY0X3BrdGluZm9fcHJlcGFyZWAgYmVmb3JlIHRoZSBoZWFkZXIgaXMgYWRkZWQgYW5kIHRoZW4gZXhwbGljaXRseSB6ZXJvZXMgYW5kIGNvcGllcyB0aGUgcmVsZXZhbnQgZmllbGRzIGZyb20gdGhlIG9yaWdpbmFsIHBhY2tldCdzIGNvbnRyb2wgYnVmZmVyIChgcGt0LVx1MDAzZWNiYCkgaW50byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNrYidzIGNvbnRyb2wgYnVmZmVyIChgc2tiLVx1MDAzZWNiYCkuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYWNrZXQncyBtZXRhZGF0YSDigJMgaW50ZXJmYWNlIGluZGV4IGFuZCBkZXN0aW5hdGlvbiBJUCDigJMgaXMgY29ycmVjdGx5IHNldCBpbiBhbGwgY2FzZXMuIFRoaXMgc2VlbXMgdG8gYmUgYSBnb29kIGZpeC5cblxuVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoYXQgaXQgYXBwZWFycyB0aGF0IHRoZSBjb3JyZWN0IHBhY2tldCBjb250ZXh0IG1ldGFkYXRhIGlzIG5vdCBhbHdheXMgY29waWVkIHRvIHRoZSBwYWNrZXQncyBjb250cm9sIGJ1ZmZlci4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBieSB0aGUgdXNlci1zcGFjZSBkYWVtb24sIGFzIGl0IHdvdWxkIG5vdCBrbm93IHdoaWNoIGludGVyZmFjZSB0aGUgcGFja2V0IGFycml2ZWQgb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX01ST1VURWAgaXMgc3VmZmljaWVudCBmb3IgdGhpcy4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHRoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ2OjUyLjgwMTI0MTkxN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2NzQyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qSVBfTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMTY9Y29uZmlnIElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cXHRib29sXFxubmV0L2lwdjQvS2NvbmZpZzoyMTg6XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MjMyPWNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTIzNS1cXHRzZWxlY3QgRklCX1JVTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTI0Nj1jb25maWcgSVBfUElNU01fVjFcXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cXHRib29sIFxcXCJJUDogUElNLVNNIHZlcnNpb24gMSBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjQ4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yNDktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjYyLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDY6NTIuODcxOTIyNTEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzQwNzIzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipDb25maWd1cmluZyBJUCBNdWx0aWNhc3QgUm91dGluZyoqXG5cblJpZ2h0LCBzbywgYElQX01ST1VURWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIG11bHRpY2FzdCByb3V0aW5nLCB0aGF0J3MgY2xlYXIuIEZpcnN0IHRoaW5nJ3MgZmlyc3Q6IEkgbmVlZCB0byBlbnN1cmUgYElQX01ST1VURWAgaXMgZW5hYmxlZCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3Mgd2hlcmUgaXQgZ29lcy5cblxuQnV0IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgdGVzdGluZywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgZGVwZW5kZW5jeSBjaGVjay4gSSBoYXZlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBJUF9NUk9VVEVgIGRvZXNuJ3QgcmVseSBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBtaWdodCBoYXZlIGluYWR2ZXJ0ZW50bHkgbWlzc2VkLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGRvY3VtZW50YXRpb24gb3IgY29kZSBkZXBlbmRlbmNpZXMgaXMgaW4gb3JkZXIuIE5vIHBvaW50IGluIG1vdmluZyBmb3J3YXJkIHVudGlsIEknbSBzdXJlIEkndmUgZ290IGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBpbiBwbGFjZS4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NzowMC4yMDU5OTcyOTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjY1MjcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjE1LVxcbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MDAuNjY4NjU4MjQxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzM3MzU3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGZlYXR1cmUuLi4gYW5kIGl0IGltbWVkaWF0ZWx5IGhpbmdlcyBvbiBhIHByZXR0eSBmdW5kYW1lbnRhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdWx0aW1hdGVseSB0aWVkIHRvIHRoZSBgSVBfTVVMVElDQVNUYCBmbGFnLlwiIFRoYXQncyB0aGUga2V5IGVuYWJsaW5nIHN3aXRjaCBmb3IgZXZlcnl0aGluZyBtdWx0aWNhc3QtcmVsYXRlZCBvbiB0aGUgSVB2NCBsYXllci4gQW5kIHRoYXQsIG9mIGNvdXJzZSwgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkL2Rpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIEdvdHRhIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQX01VTFRJQ0FTVGAgdG9vLCB0byBlbnN1cmUgZXZlcnl0aGluZyByZXF1aXJlZCBpcyBhbHNvIGNvbmZpZ3VyZWQuIE1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjA1LjcwMjM5Nzk1N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4MjI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX01VTFRJQ0FTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWctNC0jXFxubmV0L2lwdjQvS2NvbmZpZzo1OmNvbmZpZyBJUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MDUuNzcwMjI1MjAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzYwNzM1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJJ20gdGhpbmtpbmcgdGhlc2UgdGhpbmdzIG15c2VsZjpcblxuKipEZXBlbmRlbmN5IENoZWNrOiBgSVBfTVJPVVRFYCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBJUF9NUk9VVEVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucyBkZXBlbmQgb24gdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGFja2FnZXMgdGhhdCByZXF1aXJlIGBJUF9NUk9VVEVgIHRvIGJlIHByZXNlbnQsIGVuYWJsZWQsIG9yIGNvbmZpZ3VyZWQgYSBzcGVjaWZpYyB3YXk/IEZpbmRpbmcgYW55IGRlcGVuZGVuY2llcyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbmZsdWVuY2UgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zIG9yIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MTAuMzA2MzAxODI5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxNTpcXHRcXG4gMjE2OlxcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxuIDIxNzpcXHRcXHRib29sXFxuIDIxODpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbiAyMTk6XFx0XFxuIDIyMDpcXHRjb25maWcgSVBfTVJPVVRFXFxuIDIyMTpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuIDIyMjpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxcbiAyMjM6XFx0XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG4gMjI0OlxcdFxcdGhlbHBcXG4gMjI1OlxcdFxcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXFxuIDIyNjpcXHRcXHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXFxuIDIyNzpcXHRcXHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXFxuIDIyODpcXHRcXHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxcbiAyMjk6XFx0XFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbid0IGhlYXJkIGFib3V0IGl0LCB5b3VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MTAuMzA2NDE3ODI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjk1NTU1OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSdtIHRoZSBvbmUgd3Jlc3RsaW5nIHdpdGggdGhpcy4uLlxuXG4qKk11bHRpY2FzdCBEZXBlbmRlbmN5IFJlc29sdXRpb24qKlxuXG5BbHJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBJUF9NUk9VVEVgIHdvbid0IGZ1bmN0aW9uIHdpdGhvdXQgYElQX01VTFRJQ0FTVGAgZW5hYmxlZCBmaXJzdC4gVGhhdCdzIGEgZ2l2ZW4uIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggb2YgdGhvc2UgYXJlIGV4cGxpY2l0bHkgc2V0IHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUsIHNvIGl0IGhhcyB0byBiZSBhZGRyZXNzZWQuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGNhdXRpb3VzIHdoZW4gZGVhbGluZyB3aXRoIHByb3RvY29scyBsaWtlIHRoaXMsIGFuZCBwYXJ0aWN1bGFybHkgd2l0aCBQSU0gYXNzZXJ0cywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYElQX1BJTVNNX1YxYCBhbmQgYElQX1BJTVNNX1YyYC4gVGhleSBhcmUgcmVsYXRlZCB0byBQSU0gYW5kIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCBiZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHByb2JsZW0sIGl0J3Mgd29ydGggYSBxdWljayBnbGFuY2UgdG8gcnVsZSBvdXQgYW55IGltbWVkaWF0ZSwgaW50ZXJjb25uZWN0ZWQgY29uZmlndXJhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBjcm9wIHVwIGRvd24gdGhlIGxpbmUuIEl0J3MgYWJvdXQgYmVpbmcgcHJvYWN0aXZlIGFuZCBlZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTo0NzoyMS42MDE5Nzc1MzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFxuIDI0NjpcXHRjb25maWcgSVBfUElNU01fVjFcXG4gMjQ3OlxcdFxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcXFwiXFxuIDI0ODpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbiAyNDk6XFx0XFx0aGVscFxcbiAyNTA6XFx0XFx0ICBLZXJuZWwgc2lkZSBzdXBwb3J0IGZvciBTcGFyc2UgTW9kZSBQSU0gKFByb3RvY29sIEluZGVwZW5kZW50XFxuIDI1MTpcXHRcXHQgIE11bHRpY2FzdCkgdmVyc2lvbiAxLiBUaGlzIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIGlzIHVzZWQgd2lkZWx5XFxuIDI1MjpcXHRcXHQgIGJlY2F1c2UgQ2lzY28gc3VwcG9ydHMgaXQuIFlvdSBuZWVkIHNwZWNpYWwgc29mdHdhcmUgdG8gdXNlIGl0XFxuIDI1MzpcXHRcXHQgIChwaW1kLXYxKS4gUGxlYXNlIHNlZSBcXHUwMDNjaHR0cDovL25ldHdlYi51c2MuZWR1L3BpbS9cXHUwMDNlIGZvciBtb3JlXFxuIDI1NDpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IFBJTS5cXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgUElNLVNNIHYxLiBOb3RlIHRoYXQgeW91IGNhbiBzYXkgTiBoZXJlIGlmXFxuIDI1NzpcXHRcXHQgIHlvdSBqdXN0IHdhbnQgdG8gdXNlIERlbnNlIE1vZGUgUElNLlxcbiAyNTg6XFx0XFxuIDI1OTpcXHRjb25maWcgSVBfUElNU01fVjJcXG4gMjYwOlxcdFxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuIDI2MTpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbiAyNjI6XFx0XFx0aGVscFxcbiAyNjM6XFx0XFx0ICBLZXJuZWwgc2lkZSBzdXBwb3J0IGZvciBTcGFyc2UgTW9kZSBQSU0gdmVyc2lvbiAyLiBJbiBvcmRlciB0byB1c2VcXG4gMjY0OlxcdFxcdCAgdGhpcywgeW91IG5lZWQgYW4gZXhwZXJpbWVudGFsIHJvdXRpbmcgZGFlbW9uIHN1cHBvcnRpbmcgaXQgKHBpbWQgb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6NDc6MjEuNjAyMDY4ODI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzYzNTUxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkaW5nIFBJTS1TTSBWZXJzaW9ucyB0byBFbmFibGVDb25maWdzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBiZSBwcm9hY3RpdmUgaGVyZS4gU2luY2UgYGlwbXJfY2FjaGVfcmVwb3J0YCBpcyBzdWNoIGEgY3JpdGljYWwgY29tcG9uZW50IHdpdGhpbiBQSU0gYXNzZXJ0aW9ucywgaXQgbWFrZXMgc2Vuc2UgdG8gZXhwbGljaXRseSBpbmNsdWRlIGJvdGggYElQX1BJTVNNX1YxYCBhbmQgYElQX1BJTVNNX1YyYCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlc2UgUElNLVNNIHZlcnNpb25zIGFyZSBwcm9wZXJseSBjb25zaWRlcmVkIHdoZW4gZXZhbHVhdGluZyB0aGUgdXNlIG9mIHRoZSByZXBvcnQuXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aXRoaW4gYGlwbXIuY2AuIEknbGwgcXVpY2tseSBzY2FuIHRoZSBjb2RlIHRvIHZlcmlmeSB0aGF0IGBpcG1yX2NhY2hlX3JlcG9ydGAgaXMgaW5kZWVkIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gZWl0aGVyIGBDT05GSUdfSVBfUElNU01fVjFgIG9yIGBDT05GSUdfSVBfUElNU01fVjJgLCBhbmQgbm90IHNvbWV0aGluZyBlbHNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBmdXJ0aGVyIGNvbmZpZGVuY2UgaW4gbXkgY2hhbmdlIGFuZCBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjI1Ljk3ODQyNzY2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg5MTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBfUElNU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBtci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz00Nzg9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTUyNy1cXG5uZXQvaXB2NC9pcG1yLmM6NTI4OiNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpXFxubmV0L2lwdjQvaXBtci5jLTUyOS1zdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjM0NT1pbnQgaXBfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTIzOTQtXFxubmV0L2lwdjQvaXBtci5jOjIzOTU6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMVxcbm5ldC9pcHY0L2lwbXIuYy0yMzk2LS8qIEhhbmRsZSBJR01QIG1lc3NhZ2VzIG9mIFBJTXYxICovXFxubmV0L2lwdjQvaXBtci5jPTIzOTc9aW50IHBpbV9yY3ZfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yNDIyLVxcbm5ldC9pcHY0L2lwbXIuYzoyNDIzOiNpZmRlZiBDT05GSUdfSVBfUElNU01fVjJcXG5uZXQvaXB2NC9pcG1yLmMtMjQyNC1zdGF0aWMgaW50IHBpbV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zMjUwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXBtcl9tZmNfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zMjU3LVxcbm5ldC9pcHY0L2lwbXIuYzozMjU4OiNpZmRlZiBDT05GSUdfSVBfUElNU01fVjJcXG5uZXQvaXB2NC9pcG1yLmMtMzI1OS1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCBwaW1fcHJvdG9jb2wgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MzM3Nz1pbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zMzg5LVxcdFxcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XFxubmV0L2lwdjQvaXBtci5jOjMzOTA6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxcbm5ldC9pcHY0L2lwbXIuYy0zMzkxLVxcdGlmIChpbmV0X2FkZF9wcm90b2NvbChcXHUwMDI2cGltX3Byb3RvY29sLCBJUFBST1RPX1BJTSkgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMzQwMC1cXG5uZXQvaXB2NC9pcG1yLmM6MzQwMTojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXFxubmV0L2lwdjQvaXBtci5jLTM0MDItYWRkX3Byb3RvX2ZhaWw6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjI2LjAyODMyMzg3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDcwMjE1MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IFJvdXRpbmcgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgcmVnX3ZpZl94bWl0YCBpcyBpbmRlZWQgZ3VhcmRlZCBieSBlaXRoZXIgYENPTkZJR19JUF9QSU1TTV9WMWAgb3IgYENPTkZJR19JUF9QSU1TTV9WMmAuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGl0IGNhbGxzIGBpcG1yX2NhY2hlX3JlcG9ydGAuIFRoZXJlZm9yZSwgZW5hYmxpbmcgdGhlc2Ugb3B0aW9ucyBpcyB0aGUgcmlnaHQgY291cnNlIG9mIGFjdGlvbiB0byBlbnN1cmUgdGhpcyBwYXRjaCdzIGNoYW5nZXMgYXJlIGFwcGxpZWQuXG5cbkxldCdzIHF1aWNrbHkgcmVjYXAgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgSVBfTVVMVElDQVNUYCwgYElQX01ST1VURWAsIGBJUF9QSU1TTV9WMWAsIGFuZCBgSVBfUElNU01fVjJgLiBUaGVzZSBhcmUgdGhlIGtleSBzZXR0aW5ncyB0byBoYXZlIGluIG1pbmQuXG5cbk5vdywgbGV0IG1lIGhvbmUgaW4gb24gdGhlIGNvcmUgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBpcF9tcl9pbnB1dGAsIGBpcF9tcl9vdXRwdXRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwbXJfaW9jdGxgLiBUaGV5IGFyZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy5cblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGlwbXJfY2FjaGVfcmVwb3J0YCB3aXRoaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgc3Vic3lzdGVtLCBmaXhpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBza2ItXHUwMDNlY2JgIHdoZW4gcHVzaGluZyBJR01QIG1lc3NhZ2VzIHVwIHRvIHVzZXItc3BhY2UuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgb2YgZnVuY3Rpb25hbGl0eSB3aXRoaW4gYSBjb3JlIGFuZCByZWFjaGFibGUgcGFydCBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4LlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTMsIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjQ3OjMzLjA5ODU0MjAzOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTc1OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBfUElNU01fVjFcIixcbiAgICBcIklQX1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbXJfaW5wdXRcIixcbiAgICBcImlwX21yX291dHB1dFwiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVxcdTAwM2VjYmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBzZW5kaW5nIElHTVAgbWVzc2FnZXMgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBfUElNU01fVjFcIixcbiAgICBcIklQX1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbXJfaW5wdXRcIixcbiAgICBcImlwX21yX291dHB1dFwiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXBtcl9jYWNoZV9yZXBvcnRgIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHN1YnN5c3RlbSwgZml4aW5nIGhvdyBgc2tiLVxcdTAwM2VjYmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBzZW5kaW5nIElHTVAgbWVzc2FnZXMgdG8gdXNlci1zcGFjZS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow27bjv[1] Phase: Succeeded StartedAt: 2026-07-31 09:47:56 +0000 UTC FinishedAt: 2026-07-31 09:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 09:47:56 +0000 UTC FinishedAt: 2026-07-31 09:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2] Phase: Succeeded StartedAt: 2026-07-31 09:47:56 +0000 UTC FinishedAt: 2026-07-31 13:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 09:47:56 +0000 UTC FinishedAt: 2026-07-31 13:27:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 09:47:56 +0000 UTC FinishedAt: 2026-07-31 09:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 09:47:56 +0000 UTC FinishedAt: 2026-07-31 09:48:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow27bjv/series-workflow27bjv-convert-artifact-2159767613/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 09:48:06 +0000 UTC FinishedAt: 2026-07-31 10:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 09:48:06 +0000 UTC FinishedAt: 2026-07-31 10:04:02 +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:*0748f2dd-148d-4c4e-bc59-e5624280ba84,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-workflow27bjv/series-workflow27bjv-convert-artifact-2159767613/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": "9919cb47-b876-4752-b601-a114a2713483", "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-workflow27bjv/series-workflow27bjv-build-action-2736036211/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 09:48:06 +0000 UTC FinishedAt: 2026-07-31 10:03:52 +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:*0748f2dd-148d-4c4e-bc59-e5624280ba84,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-workflow27bjv/series-workflow27bjv-convert-artifact-2159767613/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": "9919cb47-b876-4752-b601-a114a2713483", "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-workflow27bjv/series-workflow27bjv-build-action-2736036211/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 10:04:02 +0000 UTC FinishedAt: 2026-07-31 10:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 10:04:02 +0000 UTC FinishedAt: 2026-07-31 10:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 10:04:02 +0000 UTC FinishedAt: 2026-07-31 10:04:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 10:04:02 +0000 UTC FinishedAt: 2026-07-31 10:04:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow27bjv/series-workflow27bjv-convert-artifact-1636334488/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 10:04:12 +0000 UTC FinishedAt: 2026-07-31 10:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 10:04:12 +0000 UTC FinishedAt: 2026-07-31 10:06:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9919cb47-b876-4752-b601-a114a2713483,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-workflow27bjv/series-workflow27bjv-build-action-2736036211/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-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 10:06:17 +0000 UTC FinishedAt: 2026-07-31 10:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 10:06:17 +0000 UTC FinishedAt: 2026-07-31 10:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 10:06:17 +0000 UTC FinishedAt: 2026-07-31 10:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 10:06:17 +0000 UTC FinishedAt: 2026-07-31 10:22:15 +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:*0748f2dd-148d-4c4e-bc59-e5624280ba84,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-workflow27bjv/series-workflow27bjv-convert-artifact-1636334488/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": "ecc90995-1dcf-43c6-b01d-15a9975f05f1", "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-workflow27bjv/series-workflow27bjv-build-action-4194030596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 10:06:17 +0000 UTC FinishedAt: 2026-07-31 10:22:05 +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:*0748f2dd-148d-4c4e-bc59-e5624280ba84,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-workflow27bjv/series-workflow27bjv-convert-artifact-1636334488/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": "ecc90995-1dcf-43c6-b01d-15a9975f05f1", "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-workflow27bjv/series-workflow27bjv-build-action-4194030596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 10:22:15 +0000 UTC FinishedAt: 2026-07-31 10:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 10:22:15 +0000 UTC FinishedAt: 2026-07-31 10:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 10:22:15 +0000 UTC FinishedAt: 2026-07-31 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 10:22:15 +0000 UTC FinishedAt: 2026-07-31 10:24:07 +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:*ecc90995-1dcf-43c6-b01d-15a9975f05f1,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-workflow27bjv/series-workflow27bjv-build-action-4194030596/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-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 10:24:17 +0000 UTC FinishedAt: 2026-07-31 13:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 10:24:17 +0000 UTC FinishedAt: 2026-07-31 13:27:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9919cb47-b876-4752-b601-a114a2713483,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ecc90995-1dcf-43c6-b01d-15a9975f05f1,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-workflow27bjv/series-workflow27bjv-build-action-2736036211/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-workflow27bjv/series-workflow27bjv-build-action-4194030596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 10:24:17 +0000 UTC FinishedAt: 2026-07-31 10:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 10:24:17 +0000 UTC FinishedAt: 2026-07-31 10:24:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow27bjv/series-workflow27bjv-convert-artifact-3379772017/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 10:24:17 +0000 UTC FinishedAt: 2026-07-31 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 10:24:17 +0000 UTC FinishedAt: 2026-07-31 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 10:24:17 +0000 UTC FinishedAt: 2026-07-31 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 10:24:27 +0000 UTC FinishedAt: 2026-07-31 13:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow27bjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mr_input","ip_mr_output","ip_mroute_setsockopt","ipmr_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST","IP_MROUTE","IP_PIMSM_V1","IP_PIMSM_V2"],"series_id":"f915b72d-b6c3-4638-a09d-0b5cb2dc1cf8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 10:24:27 +0000 UTC FinishedAt: 2026-07-31 13:27:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9919cb47-b876-4752-b601-a114a2713483,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ecc90995-1dcf-43c6-b01d-15a9975f05f1,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-workflow27bjv/series-workflow27bjv-build-action-2736036211/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-workflow27bjv/series-workflow27bjv-build-action-4194030596/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-workflow27bjv/series-workflow27bjv-convert-artifact-3379772017/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,}