Name: series-workflow8kt2c Phase: Succeeded StartedAt: 2026-08-18 11:14:45 +0000 UTC FinishedAt: 2026-08-18 15:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[0] Phase: Succeeded StartedAt: 2026-08-18 11:14:45 +0000 UTC FinishedAt: 2026-08-18 11:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 11:14:45 +0000 UTC FinishedAt: 2026-08-18 11:18:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "db39ca53-4660-4aa8-91f3-ebe7684c0785" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ratelimit_interval_ms_store", "ratelimit_burst_store", "ratelimit_interval_ms_show", "ratelimit_burst_show" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfYnVyc3Rfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cblxuVGhlIG5vdGljZSBpcyBmb3JtYXR0ZWQgdXNpbmcgYHNjbnByaW50ZmAgaW50byB0aGUgdGFyZ2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXHUwMDNlYnVmYCksIGFuZCB0aGUgZXhhY3QgbGVuZ3RoIHJldHVybmVkIGJ5IGBzY25wcmludGZgIGlzIHBhc3NlZCB0byBgc2VuZF91ZHBgLiBgc2NucHJpbnRmYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnl0ZXMgaXQgd3JpdGVzLCBhbmQgYHNlbmRfdWRwYCBvbmx5IHJlYWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBidWZmZXIgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLlxuXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxuXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNzM2OWNkODlhZTc2YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5AQCAtMTc3LDYgJiM0MzsxNzcsNDkgQEAgWW91IGNhbiBtb2RpZnkgdGhlc2UgdGFyZ2V0cyBpbiBydW50aW1lIGJ5IGNyZWF0aW5nIHRoZSBmb2xsb3dpbmcgdGFyZ2V0czo6XG4gIGNhdCBjbWRsaW5lMS9yZW1vdGVfaXBcbiAgMTAuMC4wLjNcbiBcbiYjNDM7UmF0ZSBsaW1pdGluZ1xuJiM0MzstLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXRcbiYjNDM7bG9ncyBjb250aW51b3VzbHkgY2FuIHNhdHVyYXRlIHRoZSByZWNlaXZpbmcgYWdlbnQuIEVhY2ggdGFyZ2V0IGNhcnJpZXMgYSB0b2tlblxuJiM0MztidWNrZXQgdGhhdCBkcm9wcyBtZXNzYWdlcyBvbmNlIHRoZSBjb25maWd1cmVkIHJhdGUgaXMgZXhjZWVkZWQsIGNvbnRyb2xsZWQgYnlcbiYjNDM7dHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OlxuJiM0MztcbiYjNDM7ICAgICAgICA9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW5cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzLiBaZXJvLCB0aGUgZGVmYXVsdCwgc2VuZHNcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnl0aGluZy5cbiYjNDM7ICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOyB6ZXJvIGRyb3BzIGV2ZXJ5IG1lc3NhZ2UuXG4mIzQzOyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7VW5saWtlIG1vc3QgdGFyZ2V0IHBhcmFtZXRlcnMsIGJvdGgga25vYnMgY2FuIGJlIHdyaXR0ZW4gd2hpbGUgdGhlIHRhcmdldCBpc1xuJiM0MztlbmFibGVkLCB3aGljaCBpcyB3aGVuIGEgZmxvb2RpbmcgdGFyZ2V0IG1vc3QgbGlrZWx5IG5lZWRzIHRoZW0uXG4mIzQzO1xuJiM0MztUaGUgbGltaXQgaXMgYXBwbGllZCBwZXIgbWVzc2FnZSwgbm90IHBlciBwYWNrZXQsIHNvIGEgbWVzc2FnZSBiaWcgZW5vdWdoIHRvIGJlXG4mIzQzO3NwbGl0IGludG8gc2V2ZXJhbCBgbmNmcmFnYCBwYWNrZXRzIGlzIGVpdGhlciBzZW50IHdob2xlIG9yIG5vdCBhdCBhbGwuXG4mIzQzO1xuJiM0MztDcmFzaCBvdXRwdXQgYnlwYXNzZXMgdGhlIGJ1Y2tldC4gV2hpbGUgYW4gb29wcywgQlVHKCkgb3IgcGFuaWMoKSBpcyBpblxuJiM0Mztwcm9ncmVzcyBldmVyeSBtZXNzYWdlIGlzIHNlbnQsIHdoYXRldmVyIHRoZSBsaW1pdCBzYXlzLCBzbyBhIHNtYWxsIGJ1cnN0XG4mIzQzO2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC5cbiYjNDM7XG4mIzQzO0EgZHJvcCBsZWF2ZXMgbm90aGluZyBvbiB0aGUgd2lyZSwgc28gdGhlIHJlY2VpdmVyIGlzIHRvbGQgd2hhdCBpdCBtaXNzZWQgYXNcbiYjNDM7c29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjpcbiYjNDM7XG4mIzQzOyAgbmV0Y29uc29sZTogNDUgbWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0XG4mIzQzO1xuJiM0MztUaGUgbm90aWNlIG9ubHkgdHJhdmVscyB3aXRoIHRoZSBuZXh0IG1lc3NhZ2UgdGhlIGJ1Y2tldCBhbGxvd3MuIEEgaG9zdCB0aGF0XG4mIzQzO2dvZXMgcXVpZXQgcmlnaHQgYWZ0ZXIgYmVpbmcgbGltaXRlZCByZXBvcnRzIHRoZSBkcm9wcyBsYXRlciwgd2hlbiBpdCBsb2dzXG4mIzQzO2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLlxuJiM0MztcbiYjNDM7bmV0Y29uc29sZSBnZW5lcmF0ZXMgdGhlIG5vdGljZSBpdHNlbGYgaW5zdGVhZCBvZiBsb2dnaW5nIGl0LCBzbyBvbiBhblxuJiM0MztleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uXG4mIzQzO1xuJiM0MztDYXBwaW5nIGEgdGFyZ2V0IGF0IDUwMCBtZXNzYWdlcyBhIG1pbnV0ZTo6XG4mIzQzO1xuJiM0MzsgIGVjaG8gNjAwMDAgXHUwMDNlIHJhdGVsaW1pdF9pbnRlcnZhbF9tc1xuJiM0MzsgIGVjaG8gNTAwIFx1MDAzZSByYXRlbGltaXRfYnVyc3RcbiYjNDM7XG4gQXBwZW5kIFVzZXIgRGF0YVxuIC0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTQ5LDYgJiM0Mzs0OSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmF0ZWxpbWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7TWF0dCBNYWNrYWxsIFx1MDAzY21wbUBzZWxlbmljLmNvbVx1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXNcJiMzNDspO1xuQEAgLTE3NSw2ICYjNDM7MTc3LDggQEAgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuICAqIEBzeXNkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXG4gICogQHN5c2RhdGFfZmllbGRzOlx0U3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLlxuICAqIEBtc2djb3VudGVyOlx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXG4mIzQzOyAqIEByYXRlbGltaXQ6XHRPcGFxdWUgc3RydWN0dXJlIHRvIHJhdGVsaW1pdCBtZXNzYWdlc1xuJiM0MzsgKiBAcGVuZGluZ19kcm9wczogTWVzc2FnZXMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdCBub3RpY2Ugd2FzIHNlbnQuXG4gICogQHN0YXRzOlx0UGFja2V0IHNlbmQgc3RhdHMgZm9yIHRoZSB0YXJnZXQuIFVzZWQgZm9yIGRlYnVnZ2luZy5cbiAgKiBAc3RhdGU6XHRTdGF0ZSBvZiB0aGUgdGFyZ2V0LlxuICAqXHRcdFZpc2libGUgZnJvbSB1c2Vyc3BhY2UgKHJlYWQtd3JpdGUpLlxuQEAgLTIxOSw2ICYjNDM7MjIzLDggQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdHUzMlx0XHRcdHN5c2RhdGFfZmllbGRzO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi9cbiBcdHUzMlx0XHRcdG1zZ2NvdW50ZXI7XG4mIzQzO1x0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbiYjNDM7XHRzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlXHRyYXRlbGltaXQ7XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgc3RhdHM7XG4gXHRlbnVtIHRhcmdldF9zdGF0ZVx0c3RhdGU7XG5AQCAtMjgyLDYgJiM0MzsyODgsMzQgQEAgc3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4mIzQzO3tcbiYjNDM7XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZudC1cdTAwM2VyYXRlbGltaXQsIDAsIERFRkFVTFRfUkFURUxJTUlUX0JVUlNUKTtcbiYjNDM7XHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0LyogQSBsaW1pdCBtZWFudCBmb3Igc3RlYWR5LXN0YXRlIGxvZ2dpbmcgbXVzdCBub3QgZWF0IGEgY3Jhc2ggZHVtcC4gKi9cbiYjNDM7XHRpZiAob29wc19pbl9wcm9ncmVzcylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKF9fcmF0ZWxpbWl0KFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiBuZXRjb25zb2xlX3Rha2VfZHJvcHMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHUzMiBkcm9wcyA9IG50LVx1MDAzZXBlbmRpbmdfZHJvcHM7XG4mIzQzO1xuJiM0MztcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMgPSAwO1xuJiM0MztcdHJldHVybiBkcm9wcztcbiYjNDM7fVxuJiM0MztcbiAjZWxzZVx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxuQEAgLTMxOCw2ICYjNDM7MzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG4gXG4gLyogQ2hlY2sgaWYgdGhlIHRhcmdldCB3YXMgYm91bmQgYnkgbWFjIGFkZHJlc3MuICovXG5AQCAtNjg2LDYgJiM0Mzs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KG50KTtcbiBcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XG4gXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG5AQCAtOTEyLDYgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsbHVcXG5cJiMzNDssIHhtaXRfZHJvcF9jb3VudCAmIzQzOyBlbm9tZW1fY291bnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIGppZmZpZXNfdG9fbXNlY3MoUkVBRF9PTkNFKG50LVx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCkpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2J1cnN0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBSRUFEX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmJ1cnN0KSk7XG4mIzQzO31cbiYjNDM7XG4gLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbkBAIC0xMzA3LDYgJiM0MzsxMzcxLDUwIEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBqaWZzO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsIFx1MDAyNmludGVydmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0amlmcyA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpO1xuJiM0MztcdGlmIChqaWZzIFx1MDAzZSBJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4mIzQzO1x0V1JJVEVfT05DRShudC1cdTAwM2VyYXRlbGltaXQuaW50ZXJ2YWwsIGppZnMpO1xuJiM0MztcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuJiM0MztcdHVuc2lnbmVkIGludCBidXJzdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdWludChidWYsIDEwLCBcdTAwMjZidXJzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChidXJzdCBcdTAwM2UgSU5UX01BWClcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuJiM0MztcdFdSSVRFX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmJ1cnN0LCBidXJzdCk7XG4mIzQzO1x0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IHVzZXJkYXR1bSB7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbiBcdGNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dO1xuQEAgLTE2NzEsNiAmIzQzOzE3NzksOCBAQCBDT05GSUdGU19BVFRSX1JPKCwgbG9jYWxfbWFjKTtcbiBDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XG4gQ09ORklHRlNfQVRUUigsIHJlbGVhc2UpO1xuIENPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xuJiM0MztDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2ludGVydmFsX21zKTtcbiYjNDM7Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2VuYWJsZWQsXG5AQCAtMTY4NCw2ICYjNDM7MTc5NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xuIFx0XHUwMDI2YXR0cl9sb2NhbF9tYWMsXG4gXHRcdTAwMjZhdHRyX3JlbW90ZV9tYWMsXG4gXHRcdTAwMjZhdHRyX3RyYW5zbWl0X2Vycm9ycyxcbiYjNDM7XHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9pbnRlcnZhbF9tcyxcbiYjNDM7XHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9idXJzdCxcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC0yNDYzLDYgJiM0MzsyNTc1LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcbiYjNDM7e1xuJiM0MztcdGludCBsZW4gPSAwO1xuJiM0MztcdHU2NCB0c191c2VjO1xuJiM0MztcdHUzMiBkcm9wcztcbiYjNDM7XG4mIzQzO1x0ZHJvcHMgPSBuZXRjb25zb2xlX3Rha2VfZHJvcHMobnQpO1xuJiM0MztcdGlmICghZHJvcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChleHRlbmRlZCkge1xuJiM0MztcdFx0LyogYXBwZW5kIHRoZSBleHRlbmRlZCBoZWFkZXJzICovXG4mIzQzO1x0XHRpZiAobnQtXHUwMDNlcmVsZWFzZSlcbiYjNDM7XHRcdFx0bGVuID0gc2NucHJpbnRmKG50LVx1MDAzZWJ1Ziwgc2l6ZW9mKG50LVx1MDAzZWJ1ZiksIFwmIzM0OyVzLFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpO1xuJiM0MztcbiYjNDM7XHRcdHRzX3VzZWMgPSBkaXZfdTY0KGxvY2FsX2Nsb2NrKCksIE5TRUNfUEVSX1VTRUMpO1xuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYobnQtXHUwMDNlYnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LVx1MDAzZWJ1ZikgLSBsZW4sXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyV1LDAsJWxsdSwtO1wmIzM0OywgTE9HTEVWRUxfV0FSTklORywgdHNfdXNlYyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgJiM0MzsgbGVuLCBzaXplb2YobnQtXHUwMDNlYnVmKSAtIGxlbixcbiYjNDM7XHRcdFx0IFwmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGRyb3BzKTtcbiYjNDM7XG4mIzQzO1x0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG4gICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG5AQCAtMjQ4Miw2ICYjNDM7MjYyMiw5IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuIFx0XHQgICAgIW5ldGlmX3J1bm5pbmcobnQtXHUwMDNlbnAuZGV2KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmIChuZXRjb25zb2xlX3JhdGVsaW1pdGVkKG50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHQvKiBJZiBuYmNvbl9lbnRlcl91bnNhZmUoKSBmYWlscywganVzdCByZXR1cm4gZ2l2ZW4gbmV0Y29uc29sZVxuIFx0XHQgKiBsb3N0IHRoZSBvd25lcnNoaXAsIGFuZCBpdGVyYXRpbmcgb3ZlciB0aGUgdGFyZ2V0cyB3aWxsIG5vdFxuIFx0XHQgKiBiZSBhYmxlIHRvIHJlLWFjcXVpcmUuXG5AQCAtMjQ4OSw2ICYjNDM7MjYzMiw4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuIFx0XHRpZiAoIW5iY29uX2VudGVyX3Vuc2FmZSh3Y3R4dCkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuJiM0MztcdFx0c2VuZF9yYXRlbGltaXRfbm90aWNlKG50LCBleHRlbmRlZCk7XG4mIzQzO1xuIFx0XHRpZiAoZXh0ZW5kZWQpXG4gXHRcdFx0c2VuZF9leHRfbXNnX3VkcChudCwgd2N0eHQpO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbmluZGV4IGYwNjc0YzAwMTdmYzQuLjA0Y2NlNDBmMTYyZTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0bmV0Y29uc19jbWRsaW5lLnNoIFxcXG4gXHRuZXRjb25zX2ZyYWdtZW50ZWRfbXNnLnNoIFxcXG4gXHRuZXRjb25zX292ZXJmbG93LnNoIFxcXG4mIzQzO1x0bmV0Y29uc19yYXRlbGltaXQuc2ggXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxuQEAgLTAsMCAmIzQzOzEsMTYwIEBAXG4mIzQzOyMhL3Vzci9iaW4vZW52IGJhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7IyBUaGlzIHRlc3QgZXhlcmNpc2VzIHRoZSBwZXItdGFyZ2V0IHJhdGUgbGltaXQuIEl0IGNvbmZpZ3VyZXMgYSBzbWFsbCBidXJzdFxuJiM0MzsjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55XG4mIzQzOyMgbW9yZSBtZXNzYWdlcyB0aGFuIHRoZSBidXJzdCBhbGxvd3MsIGFuZCBjaGVja3MgdGhhdCB0aGUgdGFyZ2V0IHN0b3BzXG4mIzQzOyMgdHJhbnNtaXR0aW5nIG9uY2UgdGhlIGJ1Y2tldCBpcyBlbXB0eS5cbiYjNDM7I1xuJiM0MzsjIENsZWFyaW5nIHRoZSBpbnRlcnZhbCBoYXMgdG8gcmVzdG9yZSB1bmxpbWl0ZWQgZGVsaXZlcnkgYW5kIHRlbGwgdGhlXG4mIzQzOyMgcmVjZWl2ZXIgaG93IG1hbnkgbWVzc2FnZXMgaXQgbWlzc2VkLCB3aGljaCBpcyB2ZXJpZmllZCBsYXN0LlxuJiM0MzsjXG4mIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7XG4mIzQzO3NldCAtZXVvIHBpcGVmYWlsXG4mIzQzO1xuJiM0MztTQ1JJUFRESVI9JChkaXJuYW1lIFwmIzM0OyQocmVhZGxpbmsgLWUgXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7KVxuJiM0MztcbiYjNDM7c291cmNlIFwmIzM0OyR7U0NSSVBURElSfVwmIzM0Oy8uLi9saWIvc2gvbGliX25ldGNvbnMuc2hcbiYjNDM7XG4mIzQzOyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXRcbiYjNDM7IyB0aGUgYnVja2V0IGlzIGRyYWluZWRcbiYjNDM7TVNHX0NPVU5UPTUwXG4mIzQzO0JVUlNUPTVcbiYjNDM7IyBMb25nIGVub3VnaCB0aGF0IHRoZSBidWNrZXQgaXMgbm90IHJlZmlsbGVkIHdoaWxlIHRoZSB0ZXN0IHJ1bnNcbiYjNDM7SU5URVJWQUxfTVM9NjAwMDBcbiYjNDM7IyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3RcbiYjNDM7REVGQVVMVF9CVVJTVD0xMFxuJiM0MzsjIFdoYXQgdGhlIHRhcmdldCBzZW5kcyBvbmNlIGl0IGNhbiB0cmFuc21pdCBhZ2FpblxuJiM0MztEUk9QX05PVElDRT1cJiMzNDttZXNzYWdlcyBkcm9wcGVkIGJ5IHJhdGUgbGltaXRcJiMzNDtcbiYjNDM7XG4mIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxuJiM0MztPVVRQVVRfRklMRT1cJiMzNDsvdG1wLyR7VEFSR0VUfVwmIzM0O1xuJiM0MztcbiYjNDM7ZnVuY3Rpb24gY291bnRfbXNncygpIHtcbiYjNDM7XHRsb2NhbCBGSUxFPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgWyAhIC1mIFwmIzM0OyR7RklMRX1cJiMzNDsgXVxuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gMFxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0IyBncmVwIGV4aXRzIDEgb24gbm8gbWF0Y2gsIHdoaWNoIGlzIGEgdmFsaWQgcmVzdWx0IGhlcmVcbiYjNDM7XHRncmVwIC1jIFwmIzM0OyR7TVNHfVwmIzM0OyBcJiMzNDske0ZJTEV9XCYjMzQ7IHx8IHRydWVcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gc2VuZF9tc2dzKCkge1xuJiM0MztcdGxvY2FsIENPVU5UPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBJXG4mIzQzO1xuJiM0MztcdGZvciBJIGluICQoc2VxIFwmIzM0OyR7Q09VTlR9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7SX1cJiMzNDsgXHUwMDNlIC9kZXYva21zZ1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBBIGZyZXNobHkgY3JlYXRlZCB0YXJnZXQgaGFzIHRvIGJlIHVubGltaXRlZCwgb3RoZXJ3aXNlIGV2ZXJ5IGV4aXN0aW5nXG4mIzQzOyMgbmV0Y29uc29sZSB1c2VyIHdvdWxkIHN0YXJ0IGRyb3BwaW5nIG1lc3NhZ2VzIGFmdGVyIGFuIHVwZ3JhZGVcbiYjNDM7ZnVuY3Rpb24gY2hlY2tfZGVmYXVsdHMoKSB7XG4mIzQzO1x0bG9jYWwgSU5URVJWQUwgQlVSU1RfREVGQVVMVFxuJiM0MztcbiYjNDM7XHRJTlRFUlZBTD0kKGNhdCBcJiMzNDske05FVENPTlNfUEFUSH1cJiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zKVxuJiM0MztcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXCYjMzQ7JHtORVRDT05TX1BBVEh9XCYjMzQ7L3JhdGVsaW1pdF9idXJzdClcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDske0lOVEVSVkFMfVwmIzM0OyAtbmUgMCBdIHx8XG4mIzQzO1x0ICAgWyBcJiMzNDske0JVUlNUX0RFRkFVTFR9XCYjMzQ7IC1uZSBcJiMzNDske0RFRkFVTFRfQlVSU1R9XCYjMzQ7IF1cbiYjNDM7XHR0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IHVuZXhwZWN0ZWQgcmF0ZSBsaW1pdCBkZWZhdWx0czpcJiMzNDsgXFxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7aW50ZXJ2YWw9JHtJTlRFUlZBTH0gYnVyc3Q9JHtCVVJTVF9ERUZBVUxUfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IFwmIzM0OyR7a3NmdF9mYWlsfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGNoZWNrX2xpbWl0ZWQoKSB7XG4mIzQzO1x0bG9jYWwgUkVDRUlWRURcbiYjNDM7XG4mIzQzO1x0UkVDRUlWRUQ9JChjb3VudF9tc2dzIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7KVxuJiM0MztcbiYjNDM7XHQjIFVucmVsYXRlZCBrZXJuZWwgbWVzc2FnZXMgc2hhcmUgdGhlIGJ1Y2tldCwgc28gZmV3ZXIgdGhhbiBCVVJTVCBvZlxuJiM0MztcdCMgb3VycyBjYW4gZ2V0IHRocm91Z2gsIGJ1dCBuZXZlciBtb3JlXG4mIzQzO1x0aWYgWyBcJiMzNDske1JFQ0VJVkVEfVwmIzM0OyAtZ3QgXCYjMzQ7JHtCVVJTVH1cJiMzNDsgXVxuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogcmVjZWl2ZWQgJHtSRUNFSVZFRH0gbWVzc2FnZXMgd2l0aCByYXRlbGltaXRfYnVyc3Q9JHtCVVJTVH1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0Y2F0IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBUaGUgbm90aWNlIGJlbG93IHRyYXZlbHMgYWhlYWQgb2YgdGhlIG1lc3NhZ2UgdGhhdCByZW9wZW5lZCB0aGUgYnVja2V0LCBzb1xuJiM0MzsjIHdhaXRpbmcgZm9yIHRoZSBmaWxlIHRvIGFwcGVhciBpcyBub3QgZW5vdWdoXG4mIzQzO2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcbiYjNDM7XHRncmVwIC1xIFwmIzM0OyR7TVNHfVwmIzM0OyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OyAyXHUwMDNlIC9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFRoZSBtZXNzYWdlcyBsb3N0IGFib3ZlIGhhdmUgdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHJlY2VpdmVyXG4mIzQzO2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xuJiM0MztcdGlmICEgZ3JlcCAtcSBcJiMzNDske0RST1BfTk9USUNFfVwmIzM0OyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogbm8gcmF0ZSBsaW1pdCBub3RpY2UgaW4gJHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0Y2F0IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7IyBTdGFydCBoZXJlICNcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7XG4mIzQzO21vZHByb2JlIG5ldGRldnNpbSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4mIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcbiYjNDM7IyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXG4mIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXG4mIzQzO2VjaG8gXCYjMzQ7NiA1XCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xuJiM0MzsjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xuJiM0MztzZXRfbmV0d29ya1xuJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlXG4mIzQzO2NyZWF0ZV9keW5hbWljX3RhcmdldFxuJiM0MztcbiYjNDM7Y2hlY2tfZGVmYXVsdHNcbiYjNDM7XG4mIzQzOyMgU2V0IHRoZSBidXJzdCBiZWZvcmUgdGhlIGludGVydmFsLCBzbyB0aGF0IG5vIG1lc3NhZ2UgZXNjYXBlcyB3aGlsZSB0aGVcbiYjNDM7IyB0YXJnZXQgc3RpbGwgY2FycmllcyB0aGUgZGVmYXVsdCBidXJzdFxuJiM0MztlY2hvIFwmIzM0OyR7QlVSU1R9XCYjMzQ7IFx1MDAzZSBcJiMzNDske05FVENPTlNfUEFUSH1cJiMzNDsvcmF0ZWxpbWl0X2J1cnN0XG4mIzQzO2VjaG8gXCYjMzQ7JHtJTlRFUlZBTF9NU31cJiMzNDsgXHUwMDNlIFwmIzM0OyR7TkVUQ09OU19QQVRIfVwmIzM0Oy9yYXRlbGltaXRfaW50ZXJ2YWxfbXNcbiYjNDM7XG4mIzQzO2xpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAyNlxuJiM0Mzt3YWl0X2Zvcl9wb3J0IFwmIzM0OyR7TkFNRVNQQUNFfVwmIzM0OyBcJiMzNDske1BPUlR9XCYjMzQ7IFwmIzM0O2lwdjRcJiMzNDtcbiYjNDM7c2VuZF9tc2dzIFwmIzM0OyR7TVNHX0NPVU5UfVwmIzM0O1xuJiM0MzsjIFRoaXMgaGFsZiBvZiB0aGUgdGVzdCBpcyBhYm91dCBtZXNzYWdlcyB0aGF0IG5ldmVyIGFycml2ZSwgc28gdGhlcmUgaXNcbiYjNDM7IyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uXG4mIzQzO3NsZWVwIDFcbiYjNDM7cGtpbGxfc29jYXRcbiYjNDM7Y2hlY2tfbGltaXRlZFxuJiM0MztybSAtZiBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0MztcbiYjNDM7IyBEcm9wcGluZyB0aGUgaW50ZXJ2YWwgYmFjayB0byB6ZXJvIGhhcyB0byBtYWtlIHRoZSB0YXJnZXQgdW5saW1pdGVkIGFnYWluXG4mIzQzO2VjaG8gMCBcdTAwM2UgXCYjMzQ7JHtORVRDT05TX1BBVEh9XCYjMzQ7L3JhdGVsaW1pdF9pbnRlcnZhbF9tc1xuJiM0MztcbiYjNDM7bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDI2XG4mIzQzO3dhaXRfZm9yX3BvcnQgXCYjMzQ7JHtOQU1FU1BBQ0V9XCYjMzQ7IFwmIzM0OyR7UE9SVH1cJiMzNDsgXCYjMzQ7aXB2NFwmIzM0O1xuJiM0MztzZW5kX21zZ3MgMVxuJiM0MztpZiAhIGJ1c3l3YWl0IFwmIzM0OyR7QlVTWVdBSVRfVElNRU9VVH1cJiMzNDsgbXNnX3JlY2VpdmVkXG4mIzQzO3RoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O0ZBSUw6IFRpbWVkIG91dCB3YWl0aW5nICgke0JVU1lXQUlUX1RJTUVPVVR9IG1zKSBmb3IgbmV0Y29uc29sZVwmIzM0OyBcXFxuJiM0MztcdCAgICAgXCYjMzQ7bWVzc2FnZSBpbiAke09VVFBVVF9GSUxFfSBhZnRlciBjbGVhcmluZyB0aGUgcmF0ZSBsaW1pdFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0ZXhpdCBcJiMzNDske2tzZnRfZmFpbH1cJiMzNDtcbiYjNDM7ZmlcbiYjNDM7dmFsaWRhdGVfbXNnIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO2NoZWNrX2Ryb3BzX3JlcG9ydGVkXG4mIzQzO3BraWxsX3NvY2F0XG4mIzQzO3JtIC1mIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO1xuJiM0Mzt0cmFwIC0gRVhJVFxuJiM0MztjbGVhbnVwXG4mIzQzO2V4aXQgXCYjMzQ7JHtrc2Z0X3Bhc3N9XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfYnVyc3Rfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CmluZGV4IDRhYjVkN2IwNWNmMTAuLjczNjljZDg5YWU3NmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKQEAgLTE3Nyw2ICYjNDM7MTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OgogIGNhdCBjbWRsaW5lMS9yZW1vdGVfaXAKICAxMC4wLjAuMwogCiYjNDM7UmF0ZSBsaW1pdGluZwomIzQzOy0tLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXQKJiM0Mztsb2dzIGNvbnRpbnVvdXNseSBjYW4gc2F0dXJhdGUgdGhlIHJlY2VpdmluZyBhZ2VudC4gRWFjaCB0YXJnZXQgY2FycmllcyBhIHRva2VuCiYjNDM7YnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5CiYjNDM7dHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OgomIzQzOwomIzQzOyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW4KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMuIFplcm8sIHRoZSBkZWZhdWx0LCBzZW5kcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuCiYjNDM7ICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA7IHplcm8gZHJvcHMgZXZlcnkgbWVzc2FnZS4KJiM0MzsgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztVbmxpa2UgbW9zdCB0YXJnZXQgcGFyYW1ldGVycywgYm90aCBrbm9icyBjYW4gYmUgd3JpdHRlbiB3aGlsZSB0aGUgdGFyZ2V0IGlzCiYjNDM7ZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLgomIzQzOwomIzQzO1RoZSBsaW1pdCBpcyBhcHBsaWVkIHBlciBtZXNzYWdlLCBub3QgcGVyIHBhY2tldCwgc28gYSBtZXNzYWdlIGJpZyBlbm91Z2ggdG8gYmUKJiM0MztzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLgomIzQzOwomIzQzO0NyYXNoIG91dHB1dCBieXBhc3NlcyB0aGUgYnVja2V0LiBXaGlsZSBhbiBvb3BzLCBCVUcoKSBvciBwYW5pYygpIGlzIGluCiYjNDM7cHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdAomIzQzO2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC4KJiM0MzsKJiM0MztBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzCiYjNDM7c29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjoKJiM0MzsKJiM0MzsgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdAomIzQzOwomIzQzO1RoZSBub3RpY2Ugb25seSB0cmF2ZWxzIHdpdGggdGhlIG5leHQgbWVzc2FnZSB0aGUgYnVja2V0IGFsbG93cy4gQSBob3N0IHRoYXQKJiM0Mztnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9ncwomIzQzO2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLgomIzQzOwomIzQzO25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW4KJiM0MztleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uCiYjNDM7CiYjNDM7Q2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OgomIzQzOwomIzQzOyAgZWNobyA2MDAwMCAmZ3Q7IHJhdGVsaW1pdF9pbnRlcnZhbF9tcwomIzQzOyAgZWNobyA1MDAgJmd0OyByYXRlbGltaXRfYnVyc3QKJiM0MzsKIEFwcGVuZCBVc2VyIERhdGEKIC0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTQ5LDYgJiM0Mzs0OSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmF0ZWxpbWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2Nsb2NrLmgmZ3Q7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtNYXR0IE1hY2thbGwgJmx0O21wbUBzZWxlbmljLmNvbSZndDsmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtDb25zb2xlIGRyaXZlciBmb3IgbmV0d29yayBpbnRlcmZhY2VzJiMzNDspOwpAQCAtMTc1LDYgJiM0MzsxNzcsOCBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7CiAgKiBAc3lzZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKICAqIEBzeXNkYXRhX2ZpZWxkczoJU3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLgogICogQG1zZ2NvdW50ZXI6CU1lc3NhZ2Ugc2VudCBjb3VudGVyLgomIzQzOyAqIEByYXRlbGltaXQ6CU9wYXF1ZSBzdHJ1Y3R1cmUgdG8gcmF0ZWxpbWl0IG1lc3NhZ2VzCiYjNDM7ICogQHBlbmRpbmdfZHJvcHM6IE1lc3NhZ2VzIGRyb3BwZWQgc2luY2UgdGhlIGxhc3Qgbm90aWNlIHdhcyBzZW50LgogICogQHN0YXRzOglQYWNrZXQgc2VuZCBzdGF0cyBmb3IgdGhlIHRhcmdldC4gVXNlZCBmb3IgZGVidWdnaW5nLgogICogQHN0YXRlOglTdGF0ZSBvZiB0aGUgdGFyZ2V0LgogICoJCVZpc2libGUgZnJvbSB1c2Vyc3BhY2UgKHJlYWQtd3JpdGUpLgpAQCAtMjE5LDYgJiM0MzsyMjMsOCBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogCXUzMgkJCXN5c2RhdGFfZmllbGRzOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovCiAJdTMyCQkJbXNnY291bnRlcjsKJiM0MzsJdTMyCQkJcGVuZGluZ19kcm9wczsKJiM0MzsJc3RydWN0IHJhdGVsaW1pdF9zdGF0ZQlyYXRlbGltaXQ7CiAjZW5kaWYKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgc3RhdHM7CiAJZW51bSB0YXJnZXRfc3RhdGUJc3RhdGU7CkBAIC0yODIsNiAmIzQzOzI4OCwzNCBAQCBzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZHluYW1pY19uZXRjb25zb2xlX211dGV4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXJhdGVsaW1pdF9zdGF0ZV9pbml0KCZhbXA7bnQtJmd0O3JhdGVsaW1pdCwgMCwgREVGQVVMVF9SQVRFTElNSVRfQlVSU1QpOwomIzQzOwlyYXRlbGltaXRfc2V0X2ZsYWdzKCZhbXA7bnQtJmd0O3JhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQomIzQzO3sKJiM0MzsJLyogQSBsaW1pdCBtZWFudCBmb3Igc3RlYWR5LXN0YXRlIGxvZ2dpbmcgbXVzdCBub3QgZWF0IGEgY3Jhc2ggZHVtcC4gKi8KJiM0MzsJaWYgKG9vcHNfaW5fcHJvZ3Jlc3MpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChfX3JhdGVsaW1pdCgmYW1wO250LSZndDtyYXRlbGltaXQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwludC0mZ3Q7cGVuZGluZ19kcm9wcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQomIzQzO3sKJiM0MzsJdTMyIGRyb3BzID0gbnQtJmd0O3BlbmRpbmdfZHJvcHM7CiYjNDM7CiYjNDM7CW50LSZndDtwZW5kaW5nX2Ryb3BzID0gMDsKJiM0MzsJcmV0dXJuIGRyb3BzOwomIzQzO30KJiM0MzsKICNlbHNlCS8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpCkBAIC0zMTgsNiAmIzQzOzM1MiwyMCBAQCBzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpCiB7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYJLyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqLwogCiAvKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi8KQEAgLTY4Niw2ICYjNDM7NzM0LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZCkKIAludC0mZ3Q7cmVtb3RlX3BvcnQgPSA2NjY2OwogCWV0aF9icm9hZGNhc3RfYWRkcihudC0mZ3Q7cmVtb3RlX21hYyk7CiAJbnQtJmd0O3N0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiYjNDM7CW5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQobnQpOwogCUlOSVRfV09SSygmYW1wO250LSZndDtyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7CiAJLyogU2V0IHVwIHRoZSBza2IgcG9vbCBwcmltaXRpdmVzIG9uY2U7IGVuYWJsaW5nIG9ubHkgcmVmaWxscyBpdC4gKi8KIAlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7bnQtJmd0O3NrYl9wb29sKTsKQEAgLTkxMiw2ICYjNDM7OTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbGx1XG4mIzM0OywgeG1pdF9kcm9wX2NvdW50ICYjNDM7IGVub21lbV9jb3VudCk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiYjNDM7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDsldVxuJiMzNDssCiYjNDM7CQkJICBqaWZmaWVzX3RvX21zZWNzKFJFQURfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmludGVydmFsKSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiYjNDM7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIFJFQURfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmJ1cnN0KSk7CiYjNDM7fQomIzQzOwogLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovCiBzdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CkBAIC0xMzA3LDYgJiM0MzsxMzcxLDUwIEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiYjNDM7CQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcnZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBqaWZzOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvdWludChidWYsIDEwLCAmYW1wO2ludGVydmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWppZnMgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTsKJiM0MzsJaWYgKGppZnMgJmd0OyBJTlRfTUFYKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiYjNDM7CVdSSVRFX09OQ0UobnQtJmd0O3JhdGVsaW1pdC5pbnRlcnZhbCwgamlmcyk7CiYjNDM7CWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsJdW5zaWduZWQgaW50IGJ1cnN0OwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvdWludChidWYsIDEwLCAmYW1wO2J1cnN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChidXJzdCAmZ3Q7IElOVF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKJiM0MzsJV1JJVEVfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmJ1cnN0LCBidXJzdCk7CiYjNDM7CWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKIHN0cnVjdCB1c2VyZGF0dW0gewogCXN0cnVjdCBjb25maWdfaXRlbSBpdGVtOwogCWNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dOwpAQCAtMTY3MSw2ICYjNDM7MTc3OSw4IEBAIENPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpOwogQ09ORklHRlNfQVRUUigsIHJlbW90ZV9tYWMpOwogQ09ORklHRlNfQVRUUigsIHJlbGVhc2UpOwogQ09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7CiYjNDM7Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7CiYjNDM7Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0gewogCSZhbXA7YXR0cl9lbmFibGVkLApAQCAtMTY4NCw2ICYjNDM7MTc5NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0gewogCSZhbXA7YXR0cl9sb2NhbF9tYWMsCiAJJmFtcDthdHRyX3JlbW90ZV9tYWMsCiAJJmFtcDthdHRyX3RyYW5zbWl0X2Vycm9ycywKJiM0MzsJJmFtcDthdHRyX3JhdGVsaW1pdF9pbnRlcnZhbF9tcywKJiM0MzsJJmFtcDthdHRyX3JhdGVsaW1pdF9idXJzdCwKIAlOVUxMLAogfTsKIApAQCAtMjQ2Myw2ICYjNDM7MjU3NSwzNCBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNlbmRfcmF0ZWxpbWl0X25vdGljZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBib29sIGV4dGVuZGVkKQomIzQzO3sKJiM0MzsJaW50IGxlbiA9IDA7CiYjNDM7CXU2NCB0c191c2VjOwomIzQzOwl1MzIgZHJvcHM7CiYjNDM7CiYjNDM7CWRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTsKJiM0MzsJaWYgKCFkcm9wcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGV4dGVuZGVkKSB7CiYjNDM7CQkvKiBhcHBlbmQgdGhlIGV4dGVuZGVkIGhlYWRlcnMgKi8KJiM0MzsJCWlmIChudC0mZ3Q7cmVsZWFzZSkKJiM0MzsJCQlsZW4gPSBzY25wcmludGYobnQtJmd0O2J1Ziwgc2l6ZW9mKG50LSZndDtidWYpLCAmIzM0OyVzLCYjMzQ7LAomIzQzOwkJCQkJaW5pdF91dHNuYW1lKCktJmd0O3JlbGVhc2UpOwomIzQzOwomIzQzOwkJdHNfdXNlYyA9IGRpdl91NjQobG9jYWxfY2xvY2soKSwgTlNFQ19QRVJfVVNFQyk7CiYjNDM7CQlsZW4gJiM0Mzs9IHNjbnByaW50ZihudC0mZ3Q7YnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LSZndDtidWYpIC0gbGVuLAomIzQzOwkJCQkgJiMzNDsldSwwLCVsbHUsLTsmIzM0OywgTE9HTEVWRUxfV0FSTklORywgdHNfdXNlYyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuICYjNDM7PSBzY25wcmludGYobnQtJmd0O2J1ZiAmIzQzOyBsZW4sIHNpemVvZihudC0mZ3Q7YnVmKSAtIGxlbiwKJiM0MzsJCQkgJiMzNDtuZXRjb25zb2xlOiAldSBtZXNzYWdlcyBkcm9wcGVkIGJ5IHJhdGUgbGltaXRcbiYjMzQ7LAomIzQzOwkJCSBkcm9wcyk7CiYjNDM7CiYjNDM7CXNlbmRfdWRwKG50LCBudC0mZ3Q7YnVmLCBsZW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0cwogICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0CkBAIC0yNDgyLDYgJiM0MzsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpCiAJCSAgICAhbmV0aWZfcnVubmluZyhudC0mZ3Q7bnAuZGV2KSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qIElmIG5iY29uX2VudGVyX3Vuc2FmZSgpIGZhaWxzLCBqdXN0IHJldHVybiBnaXZlbiBuZXRjb25zb2xlCiAJCSAqIGxvc3QgdGhlIG93bmVyc2hpcCwgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSB0YXJnZXRzIHdpbGwgbm90CiAJCSAqIGJlIGFibGUgdG8gcmUtYWNxdWlyZS4KQEAgLTI0ODksNiAmIzQzOzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZCkKIAkJaWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKQogCQkJcmV0dXJuOwogCiYjNDM7CQlzZW5kX3JhdGVsaW1pdF9ub3RpY2UobnQsIGV4dGVuZGVkKTsKJiM0MzsKIAkJaWYgKGV4dGVuZGVkKQogCQkJc2VuZF9leHRfbXNnX3VkcChudCwgd2N0eHQpOwogCQllbHNlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQppbmRleCBmMDY3NGMwMDE3ZmM0Li4wNGNjZTQwZjE2MmU5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKQEAgLTEwLDYgJiM0MzsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCW5ldGNvbnNfY21kbGluZS5zaCBcCiAJbmV0Y29uc19mcmFnbWVudGVkX21zZy5zaCBcCiAJbmV0Y29uc19vdmVyZmxvdy5zaCBcCiYjNDM7CW5ldGNvbnNfcmF0ZWxpbWl0LnNoIFwKIAluZXRjb25zX3Jlc3VtZS5zaCBcCiAJbmV0Y29uc19zeXNkYXRhLnNoIFwKIAluZXRjb25zX3RvcnR1cmUuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2gKQEAgLTAsMCAmIzQzOzEsMTYwIEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIHBlci10YXJnZXQgcmF0ZSBsaW1pdC4gSXQgY29uZmlndXJlcyBhIHNtYWxsIGJ1cnN0CiYjNDM7IyBvdmVyIGFuIGludGVydmFsIGxvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBuZXZlciByZWZpbGxlZCwgc2VuZHMgbWFueQomIzQzOyMgbW9yZSBtZXNzYWdlcyB0aGFuIHRoZSBidXJzdCBhbGxvd3MsIGFuZCBjaGVja3MgdGhhdCB0aGUgdGFyZ2V0IHN0b3BzCiYjNDM7IyB0cmFuc21pdHRpbmcgb25jZSB0aGUgYnVja2V0IGlzIGVtcHR5LgomIzQzOyMKJiM0MzsjIENsZWFyaW5nIHRoZSBpbnRlcnZhbCBoYXMgdG8gcmVzdG9yZSB1bmxpbWl0ZWQgZGVsaXZlcnkgYW5kIHRlbGwgdGhlCiYjNDM7IyByZWNlaXZlciBob3cgbWFueSBtZXNzYWdlcyBpdCBtaXNzZWQsIHdoaWNoIGlzIHZlcmlmaWVkIGxhc3QuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtZXVvIHBpcGVmYWlsCiYjNDM7CiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWUgJiMzNDske0JBU0hfU09VUkNFWzBdfSYjMzQ7KSYjMzQ7KQomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBURElSfSYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaAomIzQzOwomIzQzOyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXQKJiM0MzsjIHRoZSBidWNrZXQgaXMgZHJhaW5lZAomIzQzO01TR19DT1VOVD01MAomIzQzO0JVUlNUPTUKJiM0MzsjIExvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBub3QgcmVmaWxsZWQgd2hpbGUgdGhlIHRlc3QgcnVucwomIzQzO0lOVEVSVkFMX01TPTYwMDAwCiYjNDM7IyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3QKJiM0MztERUZBVUxUX0JVUlNUPTEwCiYjNDM7IyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW4KJiM0MztEUk9QX05PVElDRT0mIzM0O21lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdCYjMzQ7CiYjNDM7CiYjNDM7IyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlCiYjNDM7T1VUUFVUX0ZJTEU9JiMzNDsvdG1wLyR7VEFSR0VUfSYjMzQ7CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY291bnRfbXNncygpIHsKJiM0MzsJbG9jYWwgRklMRT0mIzM0OyR7MX0mIzM0OwomIzQzOwomIzQzOwlpZiBbICEgLWYgJiMzNDske0ZJTEV9JiMzNDsgXQomIzQzOwl0aGVuCiYjNDM7CQllY2hvIDAKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwkjIGdyZXAgZXhpdHMgMSBvbiBubyBtYXRjaCwgd2hpY2ggaXMgYSB2YWxpZCByZXN1bHQgaGVyZQomIzQzOwlncmVwIC1jICYjMzQ7JHtNU0d9JiMzNDsgJiMzNDske0ZJTEV9JiMzNDsgfHwgdHJ1ZQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBzZW5kX21zZ3MoKSB7CiYjNDM7CWxvY2FsIENPVU5UPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CWxvY2FsIEkKJiM0MzsKJiM0MzsJZm9yIEkgaW4gJChzZXEgJiMzNDske0NPVU5UfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJZWNobyAmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7SX0mIzM0OyAmZ3Q7IC9kZXYva21zZwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgQSBmcmVzaGx5IGNyZWF0ZWQgdGFyZ2V0IGhhcyB0byBiZSB1bmxpbWl0ZWQsIG90aGVyd2lzZSBldmVyeSBleGlzdGluZwomIzQzOyMgbmV0Y29uc29sZSB1c2VyIHdvdWxkIHN0YXJ0IGRyb3BwaW5nIG1lc3NhZ2VzIGFmdGVyIGFuIHVwZ3JhZGUKJiM0MztmdW5jdGlvbiBjaGVja19kZWZhdWx0cygpIHsKJiM0MzsJbG9jYWwgSU5URVJWQUwgQlVSU1RfREVGQVVMVAomIzQzOwomIzQzOwlJTlRFUlZBTD0kKGNhdCAmIzM0OyR7TkVUQ09OU19QQVRIfSYjMzQ7L3JhdGVsaW1pdF9pbnRlcnZhbF9tcykKJiM0MzsJQlVSU1RfREVGQVVMVD0kKGNhdCAmIzM0OyR7TkVUQ09OU19QQVRIfSYjMzQ7L3JhdGVsaW1pdF9idXJzdCkKJiM0MzsKJiM0MzsJaWYgWyAmIzM0OyR7SU5URVJWQUx9JiMzNDsgLW5lIDAgXSB8fAomIzQzOwkgICBbICYjMzQ7JHtCVVJTVF9ERUZBVUxUfSYjMzQ7IC1uZSAmIzM0OyR7REVGQVVMVF9CVVJTVH0mIzM0OyBdCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiB1bmV4cGVjdGVkIHJhdGUgbGltaXQgZGVmYXVsdHM6JiMzNDsgXAomIzQzOwkJICAgICAmIzM0O2ludGVydmFsPSR7SU5URVJWQUx9IGJ1cnN0PSR7QlVSU1RfREVGQVVMVH0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY2hlY2tfbGltaXRlZCgpIHsKJiM0MzsJbG9jYWwgUkVDRUlWRUQKJiM0MzsKJiM0MzsJUkVDRUlWRUQ9JChjb3VudF9tc2dzICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OykKJiM0MzsKJiM0MzsJIyBVbnJlbGF0ZWQga2VybmVsIG1lc3NhZ2VzIHNoYXJlIHRoZSBidWNrZXQsIHNvIGZld2VyIHRoYW4gQlVSU1Qgb2YKJiM0MzsJIyBvdXJzIGNhbiBnZXQgdGhyb3VnaCwgYnV0IG5ldmVyIG1vcmUKJiM0MzsJaWYgWyAmIzM0OyR7UkVDRUlWRUR9JiMzNDsgLWd0ICYjMzQ7JHtCVVJTVH0mIzM0OyBdCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiByZWNlaXZlZCAke1JFQ0VJVkVEfSBtZXNzYWdlcyB3aXRoIHJhdGVsaW1pdF9idXJzdD0ke0JVUlNUfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWNhdCAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzOyMgVGhlIG5vdGljZSBiZWxvdyB0cmF2ZWxzIGFoZWFkIG9mIHRoZSBtZXNzYWdlIHRoYXQgcmVvcGVuZWQgdGhlIGJ1Y2tldCwgc28KJiM0MzsjIHdhaXRpbmcgZm9yIHRoZSBmaWxlIHRvIGFwcGVhciBpcyBub3QgZW5vdWdoCiYjNDM7ZnVuY3Rpb24gbXNnX3JlY2VpdmVkKCkgewomIzQzOwlncmVwIC1xICYjMzQ7JHtNU0d9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7IDImZ3Q7IC9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0MzsjIFRoZSBtZXNzYWdlcyBsb3N0IGFib3ZlIGhhdmUgdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHJlY2VpdmVyCiYjNDM7ZnVuY3Rpb24gY2hlY2tfZHJvcHNfcmVwb3J0ZWQoKSB7CiYjNDM7CWlmICEgZ3JlcCAtcSAmIzM0OyR7RFJPUF9OT1RJQ0V9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBubyByYXRlIGxpbWl0IG5vdGljZSBpbiAke09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWNhdCAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzOyMgPT09PT09PT09PSAjCiYjNDM7IyBTdGFydCBoZXJlICMKJiM0MzsjID09PT09PT09PT0gIwomIzQzOwomIzQzO21vZHByb2JlIG5ldGRldnNpbSAyJmd0OyAvZGV2L251bGwgfHwgdHJ1ZQomIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0MzsKJiM0MzsjIENoZWNrIGZvciBiYXNpYyBzeXN0ZW0gZGVwZW5kZW5jeSBhbmQgZXhpdCBpZiBub3QgZm91bmQKJiM0MztjaGVja19mb3JfZGVwZW5kZW5jaWVzCiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdAomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpCiYjNDM7ZWNobyAmIzM0OzYgNSYjMzQ7ICZndDsgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGsKJiM0MzsjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlcwomIzQzO3NldF9uZXR3b3JrCiYjNDM7IyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZQomIzQzO2NyZWF0ZV9keW5hbWljX3RhcmdldAomIzQzOwomIzQzO2NoZWNrX2RlZmF1bHRzCiYjNDM7CiYjNDM7IyBTZXQgdGhlIGJ1cnN0IGJlZm9yZSB0aGUgaW50ZXJ2YWwsIHNvIHRoYXQgbm8gbWVzc2FnZSBlc2NhcGVzIHdoaWxlIHRoZQomIzQzOyMgdGFyZ2V0IHN0aWxsIGNhcnJpZXMgdGhlIGRlZmF1bHQgYnVyc3QKJiM0MztlY2hvICYjMzQ7JHtCVVJTVH0mIzM0OyAmZ3Q7ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2J1cnN0CiYjNDM7ZWNobyAmIzM0OyR7SU5URVJWQUxfTVN9JiMzNDsgJmd0OyAmIzM0OyR7TkVUQ09OU19QQVRIfSYjMzQ7L3JhdGVsaW1pdF9pbnRlcnZhbF9tcwomIzQzOwomIzQzO2xpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmYW1wOwomIzQzO3dhaXRfZm9yX3BvcnQgJiMzNDske05BTUVTUEFDRX0mIzM0OyAmIzM0OyR7UE9SVH0mIzM0OyAmIzM0O2lwdjQmIzM0OwomIzQzO3NlbmRfbXNncyAmIzM0OyR7TVNHX0NPVU5UfSYjMzQ7CiYjNDM7IyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzCiYjNDM7IyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uCiYjNDM7c2xlZXAgMQomIzQzO3BraWxsX3NvY2F0CiYjNDM7Y2hlY2tfbGltaXRlZAomIzQzO3JtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOyMgRHJvcHBpbmcgdGhlIGludGVydmFsIGJhY2sgdG8gemVybyBoYXMgdG8gbWFrZSB0aGUgdGFyZ2V0IHVubGltaXRlZCBhZ2FpbgomIzQzO2VjaG8gMCAmZ3Q7ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zCiYjNDM7CiYjNDM7bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZhbXA7CiYjNDM7d2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7aXB2NCYjMzQ7CiYjNDM7c2VuZF9tc2dzIDEKJiM0MztpZiAhIGJ1c3l3YWl0ICYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfSYjMzQ7IG1zZ19yZWNlaXZlZAomIzQzO3RoZW4KJiM0MzsJZWNobyAmIzM0O0ZBSUw6IFRpbWVkIG91dCB3YWl0aW5nICgke0JVU1lXQUlUX1RJTUVPVVR9IG1zKSBmb3IgbmV0Y29uc29sZSYjMzQ7IFwKJiM0MzsJICAgICAmIzM0O21lc3NhZ2UgaW4gJHtPVVRQVVRfRklMRX0gYWZ0ZXIgY2xlYXJpbmcgdGhlIHJhdGUgbGltaXQmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzO2ZpCiYjNDM7dmFsaWRhdGVfbXNnICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzO2NoZWNrX2Ryb3BzX3JlcG9ydGVkCiYjNDM7cGtpbGxfc29jYXQKJiM0MztybSAtZiAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsKJiM0MzsKJiM0Mzt0cmFwIC0gRVhJVAomIzQzO2NsZWFudXAKJiM0MztleGl0ICYjMzQ7JHtrc2Z0X3Bhc3N9JiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIHRvIG5ldGNvbnNvbGUuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgcGxhY2UuIFRoZXkmIzM5O3JlIGFkZGluZyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgYXMgY29uZmlnZnMgYXR0cmlidXRlcywgd2hpY2ggaXMgYSBzZW5zaWJsZSBhcHByb2FjaCBmb3IgY29udHJvbGxpbmcgdGhlIHJhdGUgbGltaXRpbmcgcGFyYW1ldGVycy4gSSBzZWUgdGhleSYjMzk7cmUgdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAgYW5kIGBfX3JhdGVsaW1pdGAsIHdoaWNoIHN1Z2dlc3RzIHRoZXkgYXJlIHVzaW5nIHRoZSBleGlzdGluZyBrZXJuZWwgcmF0ZWxpbWl0IGluZnJhc3RydWN0dXJlIGVmZmVjdGl2ZWx5LiBQbHVzLCBhIG5vdGlmaWNhdGlvbiBmb3IgZHJvcHBlZCBtZXNzYWdlcz8gR29vZCwgdGhhdCYjMzk7cyBjcnVjaWFsIGZvciBvYnNlcnZhYmlsaXR5LgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlIGNydWNpYWwgYml0cyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCYjMzk7cyBpbnNpZGUgdGhlIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBibG9jay4gV2FpdCwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY29uZmlybWluZy4uLiB5ZXMsIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCAqaXMqIGFsc28gZGVmaW5lZCB3aXRoaW4gdGhhdCBzYW1lIGAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYmxvY2suIE9rYXksIGFsbCBsb29rcyBnb29kIHNvIGZhci4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IGluIG91ciBzZXR1cCwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIHdlbGwtc2NvcGVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE0PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTY6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3LVx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zMTE9c3RhdGljIHUzMiBuZXRjb25zb2xlX3Rha2VfZHJvcHMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMxOTojZWxzZVx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM2ND1zdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzY5OiNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM3MC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Nzk2PXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODIwOiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyMS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAwNj1zdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LX1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDI5OiNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMzAtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyODY9c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzMC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzMyLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzMzM9c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMzc6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzgtXHRcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzUwPXN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM1OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzU5OiNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2MC1cdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQwNzojaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDgtXHRzeXNkYXRhX3B0ciA9IG50LVx1MDAzZXN5c2RhdGE7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MzI9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTQzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDQ6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTQ1LVx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjc2OD1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxMS1cdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgxMjpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MTMtXHRcdFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjgzMD1zdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODM1LVx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODM2OiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MzctXHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjg2MD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg3My1cdFx0XHRpZiAoSVNfRVJSKG50KSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4NzQ6XHRcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODc1LVx0XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSByYXRlIGxpbWl0aW5nIGZvciBOZXRjb25zb2xlIGlzIGhhbmRsZWQgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcmF0ZSBsaW1pdGluZyBpcyBjb25maWd1cmVkIGFuZCBjb250cm9sbGVkLiBUaGUgY2x1ZSBpcyB0aGF0IEkgc2VlIG1lbnRpb24gb2YgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgYW5kIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLiBUaG9zZSBzb3VuZCBsaWtlIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiBkeW5hbWljIGNvbmZpZ3VyYXRpb24uIFRoZSBrZXJuZWwgb2Z0ZW4gdXNlcyBjb25maWdmcyBmb3Igc3lzZnMtbGlrZSBpbnRlcmZhY2VzIHRoYXQgY2FuIGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUuCgpJIGFsc28gcmVtZW1iZXIgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIGR5bmFtaWMgY29uZmlndXJhdGlvbiBpcyB1c3VhbGx5IGEgc2VwYXJhdGUgZmVhdHVyZS4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgdG8gc2VlIHRoZSBtZWNoYW5pc21zIHVzZWQgdG8gY29udHJvbCB0aGUgbGltaXRpbmcgYmVoYXZpb3IuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRldGFpbHMgb24gd2hlcmUgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyByZXNpZGUgYW5kIGhvdyB0aGVzZSBhdHRyaWJ1dGUgdmFsdWVzIGltcGFjdCB0aGUgcmF0ZSBsaW1pdGluZyBsb2dpYyB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGl0c2VsZi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHRpbWVyIG9yIGNvdW50ZXItYmFzZWQgaW1wbGVtZW50YXRpb24sIGJ1dCBJIHdhbnQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzQ4PXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM3NDpzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzUtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbnNvbGUgUmF0ZSBMaW1pdGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0ZSBsaW1pdGluZyBiZWhhdmlvciBpbiB0aGUgbmV0d29yayBjb25zb2xlLiBUaGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoYXQgaXMgaW4gdGhlIGNvcmUgZHJpdmVyIGZpbGU6IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgcmVsYXRlZCB0byByYXRlIGxpbWl0aW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZSBjb25maWd1cmF0aW9uIG9yIHN0b3JhZ2Ugb2YgYnVyc3QgbGltaXRzLiBNeSB0YXJnZXQgaXMgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAuIFRoYXQgbmFtZSBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgc28gaXQgc2hvdWxkIGxlYWQgbWUgcmlnaHQgdG8gdGhlIHJlbGV2YW50IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF0ZWxpbWl0X2J1cnN0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM5NzpzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM5OC1cdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIE5ldGNvbnNvbGUgUmF0ZWxpbWl0aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0d29yayBjb25zb2xlIGhhbmRsZXMgcmF0ZSBsaW1pdGluZy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBmbG9vZGluZyBtaWdodCBiZSBhbiBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBmdW5jdGlvbiwgYXNzdW1pbmcgaXQgZXhpc3RzLiBUaGlzIGlzIGEgY29tbW9uIG5hbWluZyBjb252ZW50aW9uLCBhbmQgaXQmIzM5O3MgbGlrZWx5IHRvIGJlIHRoZSBlbnRyeSBwb2ludCBvciBjZW50cmFsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmF0ZSBsaW1pdGluZyB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgbW9kdWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBsb2dpYywgdW5kZXJzdGFuZCB0aGUgYWxnb3JpdGhtIHRoZXkgdXNlLCBhbmQgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBwb3RlbnRpYWxseSBvdmVyd2hlbG1pbmcgbmV0d29yayB0cmFmZmljLiBJIHdpbGwgdGhlbiBjcm9zcyByZWZlcmVuY2Ugb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGUgYmFzZSB0aGF0IGFyZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV9yYXRlbGltaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjkxPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI5NzpzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzU1PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM1OTpzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzYwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYxMz1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjI1Olx0XHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNi1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIE5ldyBSYXRlIExpbWl0aW5nIEZlYXR1cmUqKgoKT2theSwgc28gdGhpcyBmZWF0dXJlIGxvb2tzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBhZGRpbmcgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgYW5kIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLCB3aGljaCBhcmUgY29uZmlnZnMgYXR0cmlidXRlcy4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCB0aGVpciBjb3VudGVycGFydCBgc2hvd2AgZnVuY3Rpb25zOiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGtleSBsaW1pdGluZyBmdW5jdGlvbnMsIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBhbmQgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgc3RhdGljPyBZZXAsIGl0IGlzLiBIbW0sIHdhaXQgYSBzZWNvbmQuLi4gY29uZmlnZnMgYHN0b3JlYCBhbmQgYHNob3dgIGZ1bmN0aW9ucyBhcmUgKnVzdWFsbHkqIHN0YXRpYyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgY29uZmlnZnNfYXR0cmlidXRlYCBzdHJ1Y3R1cmUuIEJ1dCB0aGUgcHJvbXB0IGlzIGFza2luZyB0byBwcmVmZXIgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIEFyZSB0aGVyZSBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoPwoKTGV0IG1lIHJldmlldyB0aGUgZnVuY3Rpb25zIGFkZGVkIGJ5IHRoaXMgcGF0Y2ggdG8gc2VlIHdoaWNoIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gT2theSwgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCwgaXQmIzM5O3M6CgoqICAgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgIChzdGF0aWMpCiogICBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAgKHN0YXRpYykKKiAgIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgIChzdGF0aWMpCiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgIChzdGF0aWMpCiogICBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgIChzdGF0aWMpCiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCAoc3RhdGljKQoqICAgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAgKHN0YXRpYykKKiAgIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIChzdGF0aWMpCgpEYW1uISBUaGV5JiMzOTtyZSAqYWxsKiBzdGF0aWMuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29uZmlnZnMgYXR0cmlidXRlIGZ1bmN0aW9ucyBhcyB0aGV5IGFyZSB1c2VkIGluIGEgdW5pcXVlIHdheSB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIG1haW4gd3JpdGUgZnVuY3Rpb24sIGBuZXRjb25zb2xlX3dyaXRlYC4KCkJ1dCBob2xkIG9uLCB0aGUgcHJvbXB0ICpzcGVjaWZpY2FsbHkqIHdhbnRzIG1lIHRvIHByZWZlciBub24tc3RhdGljLiBUaGUgcHJvbXB0IHNheXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gQnV0IEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSAqbm90KiBpbmxpbmVkLiBUaGV5IGFyZSBub3QgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gYW5kIHB1dCBpbnRvIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUuIFNvIGl0JiMzOTtzIHN0aWxsIGdvb2QuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGV5IGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19BVFRSLipyYXRlbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3ODE9Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4MjpDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2ludGVydmFsX21zKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzgzOkNPTkZJR0ZTX0FUVFIoLCByYXRlbGltaXRfYnVyc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcmF0ZSBsaW1pdGluZyBpcyBoYW5kbGVkIGluIHRoZSBgbmV0Y29uc29sZWAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBgQ09ORklHRlNfQVRUUmAgaXMgdXNlZC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHRoaXMgbWFjcm8gc29tZWhvdyBpbmxpbmVkIG9yIGRpcmVjdGx5IHVzZWQgZnVuY3Rpb25zIGxpa2UgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgYW5kIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AuIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIGl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0FUVFJgIGdlbmVyYXRlcyBhIGBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlYCBuYW1lZCBgYXR0cl9yYXRlbGltaXRfaW50ZXJ2YWxfbXNgLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqcGFzc2VkKiB0byB0aGlzIGdlbmVyYXRlZCBzdHJ1Y3R1cmUuCgpUaGF0IG1ha2VzIG1vcmUgc2Vuc2UuIFRoZSBtYWNybyBuZWVkcyBgbmFtZV9zdG9yZWAgYW5kIGBuYW1lX3Nob3dgIHRvIGV4aXN0LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIG1lYW5zIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmVuJiMzOTt0IGJlaW5nIGlubGluZWQsIGFzIEkgaW5pdGlhbGx5IGFzc3VtZWQuIFRoaXMgYWxzbyBtZWFucyB3ZSBjYW4sIGFuZCBzaG91bGQsIGluY2x1ZGUgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYC4KCk5vdywgbW92aW5nIHVwc3RyZWFtLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3Igd3JpdGluZyBtZXNzYWdlcyBhcHBlYXJzIHRvIGJlIGBuZXRjb25zb2xlX3dyaXRlYC4gVGhpcyBmdW5jdGlvbiwgSSBiZWxpZXZlLCBjYWxscyBpbnRvIHRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljLCBuYW1lbHkgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBuZXRjb25zb2xlX3dyaXRlYCBpcyBub3Qgc3RhdGljLiBUaGF0IGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU3OD1zdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwNi0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjA3OiAqIG5ldGNvbnNvbGVfd3JpdGUgLSBHZW5lcmljIGZ1bmN0aW9uIHRvIHNlbmQgYSBtc2cgdG8gYWxsIHRhcmdldHNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjA4LSAqIEB3Y3R4dDogbmJjb24gd3JpdGUgY29udGV4dFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjEyLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MTM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxNC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjQ3LVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjQ4LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQ5Olx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1MC19XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjUyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1My1cdFx0XHRcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU0LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU1Olx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTYtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODQyPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0NC1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX0VYVEVOREVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NTpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODQ2Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDctXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODUxPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODUzLVx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODU0Olx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1NTpcdC53cml0ZV9hdG9taWMgPSBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NTYtXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRjb25zb2xlIEltcGxlbWVudGF0aW9uIFBsYW4qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmV0Y29uc29sZWAgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgd3JpdGUgZnVuY3Rpb24sIGBuZXRjb25zb2xlX3dyaXRlYCwgaXMgYWN0dWFsbHkgc3RhdGljLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdlcmUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLCBidXQgdGhvc2UgYXJlIGFsc28gc3RhdGljLCB0b28uIEl0IG1ha2VzIHNlbnNlIG5vdyAtIHRoZXkmIzM5O3JlIGNhbGxlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGF0IGBzdHJ1Y3QgY29uc29sZWAuIEFscmlnaHQsIHRoYXQgY2xlYXJzIHRoYXQgdXAuCgpTbywgSSB0aGluayBJIGNhbiBpbmNsdWRlIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYHJhdGVsaW1pdF9idXJzdF9zaG93YCwgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCwgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBpbiB0aGUgbmV3IHBsYW4uIAoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcm9hZCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWw6IHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSYjMzk7bGwgbmVlZCB0byB3b3JrIHdpdGg/IEkga25vdyB0aGVyZSYjMzk7cyBgQ09ORklHX05FVENPTlNPTEVgLCBhbmQgSSB0aGluayB0aGVyZSYjMzk7cyBhIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBhcyB3ZWxsLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgYXJlIHRoZSBjb3JyZWN0IG5hbWVzLiBCZXN0IHRvIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCYjMzk7cyBoZWFkIHRoZXJlIGFuZCB2ZXJpZnkgdGhlc2UgYXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGFjY291bnQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzQ0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZGVwZW5kZW5jaWVzOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2Ag4oCTIGltcG9ydGFudCBvcHRpb25zIGluIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgSSBwcmVzdW1lLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBtYXAgb3V0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBvcHRpb25zLCBoYXJkd2FyZSwgb3IgbGlicmFyaWVzIGFyZSBjb250aW5nZW50IG9uIHRoZXNlIGJlaW5nIGVuYWJsZWQsIGFuZCwgY29udmVyc2VseSwgd2hhdCB0aGVzZSBkZXBlbmQgb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIG1vZHVsZSwgb3IgYXJlIHRoZXJlIHdpZGVyIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbSYjMzk7cyBuZXR3b3JrIHN0YWNrPwoKSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9ucyBmb3IgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBhbmQgYGRlZmF1bHRgIHN0YXRlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGVhY2guIFRoYXQgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGVuYWJsaW5nIG9uZSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMsIG9yIGltcGxpZXMsIHRoZSBvdGhlciwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmZsaWN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGRpcmVjdCBhbmQgaW5kaXJlY3QgcmVsYXRpb25zaGlwcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgbmV0d29yayBkcml2ZXJzLCBjb3JlIG5ldHdvcmtpbmcgbW9kdWxlcywgb3IgcG90ZW50aWFsbHkgdGhpbmdzIGxpa2UgbG9nZ2luZyBmcmFtZXdvcmtzPwoKRnVydGhlcm1vcmUsIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmVoYXZpb3IgaGVyZS4gRG9lcyB0aGUgZGVwZW5kZW5jeSB0cmVlIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIENQVSBhcmNoaXRlY3R1cmUsIHRoZSBib2FyZCwgb3IgdGhlIGNob3NlbiBuZXR3b3JraW5nIGhhcmR3YXJlPyBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gcmV2aWV3IGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGVpciBwdXJwb3NlIG9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHdhcm5pbmdzIG9yIG5vdGVzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBmZWF0dXJlcywgc3VjaCBhcyBmaXJld2FsbHMsIHJvdXRpbmcgcHJvdG9jb2xzLCBvciBldmVuIHBvd2VyIG1hbmFnZW1lbnQuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgYSBjb25jaXNlIGFuZCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhhdCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIGFzIGl0IHNob3VsZCBiZSwgd2l0aG91dCBjb25mbGljdHMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZW5hYmxpbmcgdGhlc2Ugb3B0aW9uczsgaXQmIzM5O3MgYWJvdXQgbWFraW5nIGluZm9ybWVkIGNob2ljZXMgdGhhdCBhbGlnbiB3aXRoIHRoZSBzcGVjaWZpYyBuZWVkcyBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCBndWFyYW50ZWUgb3B0aW1hbCBiZWhhdmlvciwgc3RhYmlsaXR5LCBhbmQgc2VjdXJpdHkgaW4gdGhlIHRhcmdldCBkZXBsb3ltZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyNzpcdGNvbmZpZyBORVRDT05TT0xFXG4gMzI4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4gMzI5Olx0XHRkZXBlbmRzIG9uIFBSSU5US1xuIDMzMDpcdFx0aGVscFxuIDMzMTpcdFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxuIDMzMjpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzMzOlx0XG4gMzM0Olx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuIDMzNTpcdFx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiAzMzY6XHRcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBcXFxuIDMzNzpcdFx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuIDMzODpcdFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXG4gMzM5Olx0XHRoZWxwXG4gMzQwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XG4gMzQxOlx0XHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXG4gMzQyOlx0XHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXG4gMzQzOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzNDQ6XHRcbiAzNDU6XHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbiAzNDY6XHRcdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgTkVUQ09OU09MRWAgbW9kdWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0JiMzOTtzIGNsZWFyIEkmIzM5O2xsIG5lZWQgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBlbmFibGVkLiBBbHNvLCBgQ09ORklHRlNfRlNgIGlzIGEgZGVmaW5pdGUgcmVxdWlyZW1lbnQuIEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBQUklOVEtgIGFuZCBgU1lTRlNgIGFyZSBlbmFibGVkIHNpbmNlIHRob3NlIGFyZSB1c3VhbGx5IGEgZ2l2ZW4uIFNvIGZhciwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGxvb2tzIGxpa2UgdGhpczogYFsmIzM0O05FVENPTlNPTEUmIzM0OywgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywgJiMzNDtDT05GSUdGU19GUyYjMzQ7XWAuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBwYXRjaCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24uIEkgc2VlIGEgZmV3IGtleSBvbmVzOiBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAsIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCwgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AsIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcmF0ZS1saW1pdGluZyBwYXJhbWV0ZXJzIGxpa2UgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYHJhdGVsaW1pdF9idXJzdF9zaG93YCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAsIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLCBhbmQgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG9yIG9uZXMgdGhhdCBoYXZlIHRoZWlyIGFkZHJlc3NlcyB0YWtlbi4gTGV0IG1lIHNlZS4uLiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCwgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgIGFyZSB0aGUgb25lcyB0aGF0IGp1bXAgb3V0LgoKTGV0JiMzOTtzIHNlZSwgaXMgYG5ldGNvbnNvbGVfd3JpdGVgIGFkZHJlc3MtdGFrZW4/IE5vLCBidXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGFyZS4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIFNvIEkgY2FuIGluY2x1ZGUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEFuZCBJIHRoaW5rIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmUgYWxzbyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZm9jdXMgb24uCgpGaW5hbGx5LCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgYXJlIGV2ZW4gcHJlc2VudCBpbiB0aGUga2VybmVsIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHRoZSByaWdodCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlX3dyaXRlX2V4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYxMz1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQ2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDctXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODQyPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0NC1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX0VYVEVOREVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NTpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODQ2Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDctXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgRm9jdXNlZCBTeW1ib2xzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGZvciBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGFuZCB5ZXMsIEkmIzM5O3ZlIGdvdCBhIGxpc3QgYWxyZWFkeS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3Q6CiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYAoqICAgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAKKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AKKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AKCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGlubGluaW5nLiBgbmV0Y29uc29sZV93cml0ZWAgaXMgc3RhdGljLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLCBhbG9uZyB3aXRoIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIGFuZCBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG8gcHV0IGludG8gYEZvY3VzU3ltYm9sc2AuCgpTbywgY29uc2lkZXJpbmcgaW5saW5pbmcsIEkgaGF2ZSBhIHByZWxpbWluYXJ5IGxpc3QsIHdoaWNoIGlzOgoKKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgCiogICBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYAoqICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YAoqICAgYHJhdGVsaW1pdF9idXJzdF9zaG93YAoqICAgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YAoqICAgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgCgpXYWl0IGEgbWludXRlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgbWlnaHQgYmUgaG90IHBhdGhzIGlmIHRoZXJlIGFyZSBtYW55IHByaW50a3MsIGFuZCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IGBwcmludGtgIGlmIG5ldGNvbnNvbGUgaXMgZW5hYmxlZC4gU2luY2UgYHByaW50a2AgY2FuIGJlIGEgaG90IHBhdGgsIHRoaXMgaXMgYSBiaXQgb2YgYSBkaWxlbW1hLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHJhdGVsaW1pdCBzdG9yZSBmdW5jdGlvbnMgZGVmaW5pdGVseSBhcmUgbm90IGhvdCBwYXRocy4gU28sIHNpbmNlIHRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIHNwZWNpZmljIGNvbmZpZ2ZzIHN0b3JlIGZ1bmN0aW9ucywgSSBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGZ1bmN0aW9ucy4KCkxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMuLi4gYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgIGlzIGNhbGxlZCBmcm9tIGBhbGxvY19hbmRfaW5pdGAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGEgbmV3IHRhcmdldCBpcyBjcmVhdGVkLiBIbW0uLi4gY291bGQgSSBhZGQgYGFsbG9jX2FuZF9pbml0YCBvciBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGA/IExldCYjMzk7cyBzZWU6IGBhbGxvY19hbmRfaW5pdGAgaXMgc3RhdGljOyBpdCBzZWVtcyB0aGF0IGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCBpcyB0aGUgY29uZmlnZnMgYG1ha2VfaXRlbWAgY2FsbGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ha2VfbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE4MzM9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqZmluZF9jbWRsaW5lX3RhcmdldChjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTQ6c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1NS1cdFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyBuZXRjb25zb2xlX3N1YnN5c19ncm91cF9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk0MTpcdC5tYWtlX2dyb3VwXHQ9IG1ha2VfbmV0Y29uc29sZV90YXJnZXQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk0Mi1cdC5kcm9wX2l0ZW1cdD0gZHJvcF9uZXRjb25zb2xlX3RhcmdldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMDUKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogNzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYG1ha2VfbmV0Y29uc29sZV90YXJnZXRgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IG1vZGlmaWVkLiBIb3dldmVyLCB0aGUgYGFsbG9jX2FuZF9pbml0YCBmdW5jdGlvbiAqaXMqIGNoYW5nZWQgdG8gY2FsbCBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAsIHNvIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIE15IGZvY3VzLCB0aG91Z2gsIG5lZWRzIHRvIGJlIG9uIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGlzIG5ldyByYXRlIGxpbWl0aW5nIGZlYXR1cmU6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYC4KCkxvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlIGl0JiMzOTtzIGludHJvZHVjaW5nIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBhcyBhdHRyaWJ1dGVzIHdpdGhpbiBgbmV0Y29uc29sZV90YXJnZXRfYXR0cnNgLiBJdCYjMzk7cyBhbHNvIGFkZGluZyB0aGUgY29ycmVzcG9uZGluZyBzdG9yZSBhbmQgc2hvdyBmdW5jdGlvbnM6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AuIENydWNpYWxseSwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYCBhcmUgaW50cm9kdWNlZCBhbmQgdXNlZCB3aXRoaW4gYG5ldGNvbnNvbGVfd3JpdGVgLgoKVGhlcmVmb3JlLCBteSAqRm9jdXNTeW1ib2xzKiBmb3IgdGhlIGZ1enppbmcgZWZmb3J0cyB3aWxsIGJlOgoKKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgCiogICBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYAoqICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YAoqICAgYHJhdGVsaW1pdF9idXJzdF9zaG93YAoKSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIHRoZSByYXRlIGxpbWl0aW5nIGFjdHVhbGx5ICpoYXBwZW5zKi4gVGhhdCYjMzk7cyB3aXRoaW4gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBBcmUgdGhlc2UgaG90IHBhdGhzPyBBYnNvbHV0ZWx5LiBFdmVyeSBgcHJpbnRrYCB0aGF0IGdvZXMgdGhyb3VnaCBuZXRjb25zb2xlLCB3aGVuIGVuYWJsZWQsIGhpdHMgdGhlc2UgZnVuY3Rpb25zLiBXZSBzaG91bGQgZXhjbHVkZSB0aGVtIGZyb20gZGlyZWN0IGZ1enppbmcgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgc2luY2UgdGhleSBhcmUgY29yZSBmdW5jdGlvbmFsaXR5LgoKTm93LCBvbiB0byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGUgZmVhdHVyZSBkZXBlbmRzIG9uIHRoZXNlIGBFbmFibGVDb25maWdzYDoKCiogICBgTkVUQ09OU09MRWAKKiAgIGBORVRDT05TT0xFX0RZTkFNSUNgCiogICBgQ09ORklHRlNfRlNgCgpPdGhlciBkZXBlbmRlbmNpZXMgYXJlIGxpa2VseSBgUFJJTlRLYCBhbmQgYFNZU0ZTYCwgYnV0IHRob3NlIGFyZSB1c3VhbGx5IGVuYWJsZWQuIFNvLCB0aGUga2V5IGRlcGVuZGVuY2llcyByZW1haW4gdGhlIHRocmVlIG1lbnRpb25lZCBhYm92ZS4KCk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgdG8gcHJldmVudCBuZXRjb25zb2xlIHRhcmdldHMgZnJvbSBiZWluZyBvdmVyd2hlbG1lZCBieSBjb250aW51b3VzIGxvZ2dpbmcuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgKGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgLCBgcmF0ZWxpbWl0X2J1cnN0YCkgdG8gY29uZmlndXJlIGEgcmF0ZSBsaW1pdCAqcGVyKiB0YXJnZXQuIFRoZSBjb3JlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIGBuZXRjb25zb2xlX3dyaXRlYCwgbWFraW5nIHVzZSBvZiBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSwgdGhlcmVmb3JlLCBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgQ09ORklHRlNfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUsIGFuZCBpdCBpczsgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldGAgY29uZmlybXMgaXQuIEkgYWxzbyBkb3VibGUtY2hlY2tlZCB0aGUgZXhhY3QgbmFtZXMgb2YgdGhlIHN0b3JlIGFuZCBzaG93IGZ1bmN0aW9ucywgYW5kIHRoZXkgYXJlIGFzIGV4cGVjdGVkOiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCwgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgLgoKSSYjMzk7bSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byBwcm92aWRlIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7cmF0ZWxpbWl0X2J1cnN0X3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93JiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zaG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzIHRvIHByZXZlbnQgYSBob3N0IGZyb20gc2F0dXJhdGluZyB0aGUgcmVjZWl2aW5nIGFnZW50IHdpdGggY29udGludW91cyBsb2dzLiBJdCBhZGRzIG5ldyBjb25maWdmcyBhdHRyaWJ1dGVzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCB0byBjb25maWd1cmUgdGhlIHJhdGUgbGltaXQgcGVyIHRhcmdldC4gVGhlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnNvbGUgd3JpdGUgcGF0aCB1c2luZyBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgYW5kIHRoZSBwcmludGsgY29uc29sZSB3cml0ZSBwYXRoLiBUaGUgY29uZmlnZnMgc3RvcmUvc2hvdyBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19ORVRDT05TT0xFYCwgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR19DT05GSUdGU19GU2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfYnVyc3Rfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cblxuVGhlIG5vdGljZSBpcyBmb3JtYXR0ZWQgdXNpbmcgYHNjbnByaW50ZmAgaW50byB0aGUgdGFyZ2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXHUwMDNlYnVmYCksIGFuZCB0aGUgZXhhY3QgbGVuZ3RoIHJldHVybmVkIGJ5IGBzY25wcmludGZgIGlzIHBhc3NlZCB0byBgc2VuZF91ZHBgLiBgc2NucHJpbnRmYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnl0ZXMgaXQgd3JpdGVzLCBhbmQgYHNlbmRfdWRwYCBvbmx5IHJlYWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBidWZmZXIgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLlxuXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxuXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OTA2ZDhiZDFmZWJmNjM5Njc0OTE1OTY3Mjg1ODE5NjVmYThkYTE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTE6MTY6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNzM2OWNkODlhZTc2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdApAQCAtMTc3LDYgJiM0MzsxNzcsNDkgQEAgWW91IGNhbiBtb2RpZnkgdGhlc2UgdGFyZ2V0cyBpbiBydW50aW1lIGJ5IGNyZWF0aW5nIHRoZSBmb2xsb3dpbmcgdGFyZ2V0czo6CiAgY2F0IGNtZGxpbmUxL3JlbW90ZV9pcAogIDEwLjAuMC4zCiAKJiM0MztSYXRlIGxpbWl0aW5nCiYjNDM7LS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO05ldGNvbnNvbGUgaGFuZHMgZXZlcnkgY29uc29sZSBtZXNzYWdlIHRvIGV2ZXJ5IGVuYWJsZWQgdGFyZ2V0LCBzbyBhIGhvc3QgdGhhdAomIzQzO2xvZ3MgY29udGludW91c2x5IGNhbiBzYXR1cmF0ZSB0aGUgcmVjZWl2aW5nIGFnZW50LiBFYWNoIHRhcmdldCBjYXJyaWVzIGEgdG9rZW4KJiM0MztidWNrZXQgdGhhdCBkcm9wcyBtZXNzYWdlcyBvbmNlIHRoZSBjb25maWd1cmVkIHJhdGUgaXMgZXhjZWVkZWQsIGNvbnRyb2xsZWQgYnkKJiM0Mzt0d28gZmlsZXMgaW4gdGhlIHRhcmdldCBkaXJlY3Rvcnk6CiYjNDM7CiYjNDM7ICAgICAgICA9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICAgICAgICByYXRlbGltaXRfaW50ZXJ2YWxfbXMgTGVuZ3RoIG9mIHRoZSBhY2NvdW50aW5nIGludGVydmFsLCBpbgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcy4gWmVybywgdGhlIGRlZmF1bHQsIHNlbmRzCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnl0aGluZy4KJiM0MzsgICAgICAgIHJhdGVsaW1pdF9idXJzdCAgICAgICBNZXNzYWdlcyBhbGxvd2VkIHBlciBpbnRlcnZhbC4gRGVmYXVsdHMgdG8KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDsgemVybyBkcm9wcyBldmVyeSBtZXNzYWdlLgomIzQzOyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1VubGlrZSBtb3N0IHRhcmdldCBwYXJhbWV0ZXJzLCBib3RoIGtub2JzIGNhbiBiZSB3cml0dGVuIHdoaWxlIHRoZSB0YXJnZXQgaXMKJiM0MztlbmFibGVkLCB3aGljaCBpcyB3aGVuIGEgZmxvb2RpbmcgdGFyZ2V0IG1vc3QgbGlrZWx5IG5lZWRzIHRoZW0uCiYjNDM7CiYjNDM7VGhlIGxpbWl0IGlzIGFwcGxpZWQgcGVyIG1lc3NhZ2UsIG5vdCBwZXIgcGFja2V0LCBzbyBhIG1lc3NhZ2UgYmlnIGVub3VnaCB0byBiZQomIzQzO3NwbGl0IGludG8gc2V2ZXJhbCBgbmNmcmFnYCBwYWNrZXRzIGlzIGVpdGhlciBzZW50IHdob2xlIG9yIG5vdCBhdCBhbGwuCiYjNDM7CiYjNDM7Q3Jhc2ggb3V0cHV0IGJ5cGFzc2VzIHRoZSBidWNrZXQuIFdoaWxlIGFuIG9vcHMsIEJVRygpIG9yIHBhbmljKCkgaXMgaW4KJiM0Mztwcm9ncmVzcyBldmVyeSBtZXNzYWdlIGlzIHNlbnQsIHdoYXRldmVyIHRoZSBsaW1pdCBzYXlzLCBzbyBhIHNtYWxsIGJ1cnN0CiYjNDM7Y2Fubm90IGNvc3QgeW91IHBhcnQgb2YgYSBjcmFzaCBkdW1wLgomIzQzOwomIzQzO0EgZHJvcCBsZWF2ZXMgbm90aGluZyBvbiB0aGUgd2lyZSwgc28gdGhlIHJlY2VpdmVyIGlzIHRvbGQgd2hhdCBpdCBtaXNzZWQgYXMKJiM0Mztzb29uIGFzIGEgbWVzc2FnZSBnZXRzIHRocm91Z2ggYWdhaW46OgomIzQzOwomIzQzOyAgbmV0Y29uc29sZTogNDUgbWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0CiYjNDM7CiYjNDM7VGhlIG5vdGljZSBvbmx5IHRyYXZlbHMgd2l0aCB0aGUgbmV4dCBtZXNzYWdlIHRoZSBidWNrZXQgYWxsb3dzLiBBIGhvc3QgdGhhdAomIzQzO2dvZXMgcXVpZXQgcmlnaHQgYWZ0ZXIgYmVpbmcgbGltaXRlZCByZXBvcnRzIHRoZSBkcm9wcyBsYXRlciwgd2hlbiBpdCBsb2dzCiYjNDM7YWdhaW4sIGFuZCBhIHRhcmdldCB3aXRoIGEgYHJhdGVsaW1pdF9idXJzdGAgb2YgemVybyBuZXZlciByZXBvcnRzIHRoZW0uCiYjNDM7CiYjNDM7bmV0Y29uc29sZSBnZW5lcmF0ZXMgdGhlIG5vdGljZSBpdHNlbGYgaW5zdGVhZCBvZiBsb2dnaW5nIGl0LCBzbyBvbiBhbgomIzQzO2V4dGVuZGVkIHRhcmdldCB0aGUgcmVjb3JkIGNhcnJpZXMgYSBzZXF1ZW5jZSBudW1iZXIgb2YgemVyby4KJiM0MzsKJiM0MztDYXBwaW5nIGEgdGFyZ2V0IGF0IDUwMCBtZXNzYWdlcyBhIG1pbnV0ZTo6CiYjNDM7CiYjNDM7ICBlY2hvIDYwMDAwICZndDsgcmF0ZWxpbWl0X2ludGVydmFsX21zCiYjNDM7ICBlY2hvIDUwMCAmZ3Q7IHJhdGVsaW1pdF9idXJzdAomIzQzOwogQXBwZW5kIFVzZXIgRGF0YQogLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggYjM1OGU1YzM2NzM1MS4uMGFmMmU1YjQzMzVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtNDksNiAmIzQzOzQ5LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yYXRlbGltaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY2xvY2suaCZndDsKIAogTU9EVUxFX0FVVEhPUigmIzM0O01hdHQgTWFja2FsbCAmbHQ7bXBtQHNlbGVuaWMuY29tJmd0OyYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXMmIzM0Oyk7CkBAIC0xNzUsNiAmIzQzOzE3Nyw4IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHsKICAqIEBzeXNkYXRhOgkJQ2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZAogICogQHN5c2RhdGFfZmllbGRzOglTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuCiAgKiBAbXNnY291bnRlcjoJTWVzc2FnZSBzZW50IGNvdW50ZXIuCiYjNDM7ICogQHJhdGVsaW1pdDoJT3BhcXVlIHN0cnVjdHVyZSB0byByYXRlbGltaXQgbWVzc2FnZXMKJiM0MzsgKiBAcGVuZGluZ19kcm9wczogTWVzc2FnZXMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdCBub3RpY2Ugd2FzIHNlbnQuCiAgKiBAc3RhdHM6CVBhY2tldCBzZW5kIHN0YXRzIGZvciB0aGUgdGFyZ2V0LiBVc2VkIGZvciBkZWJ1Z2dpbmcuCiAgKiBAc3RhdGU6CVN0YXRlIG9mIHRoZSB0YXJnZXQuCiAgKgkJVmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuCkBAIC0yMTksNiAmIzQzOzIyMyw4IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJdTMyCQkJc3lzZGF0YV9maWVsZHM7CiAJLyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi8KIAl1MzIJCQltc2djb3VudGVyOwomIzQzOwl1MzIJCQlwZW5kaW5nX2Ryb3BzOwomIzQzOwlzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlCXJhdGVsaW1pdDsKICNlbmRpZgogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0czsKIAllbnVtIHRhcmdldF9zdGF0ZQlzdGF0ZTsKQEAgLTI4Miw2ICYjNDM7Mjg4LDM0IEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZCkKIAltdXRleF91bmxvY2soJmFtcDtkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQomIzQzO3sKJiM0MzsJcmF0ZWxpbWl0X3N0YXRlX2luaXQoJmFtcDtudC0mZ3Q7cmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7CiYjNDM7CXJhdGVsaW1pdF9zZXRfZmxhZ3MoJmFtcDtudC0mZ3Q7cmF0ZWxpbWl0LCBSQVRFTElNSVRfTVNHX09OX1JFTEVBU0UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwkvKiBBIGxpbWl0IG1lYW50IGZvciBzdGVhZHktc3RhdGUgbG9nZ2luZyBtdXN0IG5vdCBlYXQgYSBjcmFzaCBkdW1wLiAqLwomIzQzOwlpZiAob29wc19pbl9wcm9ncmVzcykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKF9fcmF0ZWxpbWl0KCZhbXA7bnQtJmd0O3JhdGVsaW1pdCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW50LSZndDtwZW5kaW5nX2Ryb3BzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwl1MzIgZHJvcHMgPSBudC0mZ3Q7cGVuZGluZ19kcm9wczsKJiM0MzsKJiM0MzsJbnQtJmd0O3BlbmRpbmdfZHJvcHMgPSAwOwomIzQzOwlyZXR1cm4gZHJvcHM7CiYjNDM7fQomIzQzOwogI2Vsc2UJLyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi8KIAogc3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZCkKQEAgLTMxOCw2ICYjNDM7MzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZCkKIHsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiBuZXRjb25zb2xlX3Rha2VfZHJvcHMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNlbmRpZgkvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovCiAKIC8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqLwpAQCAtNjg2LDYgJiM0Mzs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKQogCW50LSZndDtyZW1vdGVfcG9ydCA9IDY2NjY7CiAJZXRoX2Jyb2FkY2FzdF9hZGRyKG50LSZndDtyZW1vdGVfbWFjKTsKIAludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKJiM0MzsJbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChudCk7CiAJSU5JVF9XT1JLKCZhbXA7bnQtJmd0O3Jlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTsKIAkvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqLwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtudC0mZ3Q7c2tiX3Bvb2wpOwpAQCAtOTEyLDYgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVsbHVcbiYjMzQ7LCB4bWl0X2Ryb3BfY291bnQgJiM0MzsgZW5vbWVtX2NvdW50KTsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywKJiM0MzsJCQkgIGppZmZpZXNfdG9fbXNlY3MoUkVBRF9PTkNFKG50LSZndDtyYXRlbGltaXQuaW50ZXJ2YWwpKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVkXG4mIzM0OywgUkVBRF9PTkNFKG50LSZndDtyYXRlbGltaXQuYnVyc3QpKTsKJiM0Mzt9CiYjNDM7CiAvKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiBjcHVfbnIgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi8KIHN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKQEAgLTEzMDcsNiAmIzQzOzEzNzEsNTAgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKJiM0MzsJCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsJdW5zaWduZWQgaW50IGludGVydmFsOwomIzQzOwl1bnNpZ25lZCBsb25nIGppZnM7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsICZhbXA7aW50ZXJ2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJamlmcyA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpOwomIzQzOwlpZiAoamlmcyAmZ3Q7IElOVF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKJiM0MzsJV1JJVEVfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmludGVydmFsLCBqaWZzKTsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKJiM0MzsJCQkJICAgICBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwomIzQzOwl1bnNpZ25lZCBpbnQgYnVyc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsICZhbXA7YnVyc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGJ1cnN0ICZndDsgSU5UX01BWCkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwomIzQzOwlXUklURV9PTkNFKG50LSZndDtyYXRlbGltaXQuYnVyc3QsIGJ1cnN0KTsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwogc3RydWN0IHVzZXJkYXR1bSB7CiAJc3RydWN0IGNvbmZpZ19pdGVtIGl0ZW07CiAJY2hhciB2YWx1ZVtNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTl07CkBAIC0xNjcxLDYgJiM0MzsxNzc5LDggQEAgQ09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7CiBDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7CiBDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7CiBDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTsKJiM0MztDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2ludGVydmFsX21zKTsKJiM0MztDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2J1cnN0KTsKIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7CiAJJmFtcDthdHRyX2VuYWJsZWQsCkBAIC0xNjg0LDYgJiM0MzsxNzk0LDggQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7CiAJJmFtcDthdHRyX2xvY2FsX21hYywKIAkmYW1wO2F0dHJfcmVtb3RlX21hYywKIAkmYW1wO2F0dHJfdHJhbnNtaXRfZXJyb3JzLAomIzQzOwkmYW1wO2F0dHJfcmF0ZWxpbWl0X2ludGVydmFsX21zLAomIzQzOwkmYW1wO2F0dHJfcmF0ZWxpbWl0X2J1cnN0LAogCU5VTEwsCiB9OwogCkBAIC0yNDYzLDYgJiM0MzsyNTc1LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpCiYjNDM7ewomIzQzOwlpbnQgbGVuID0gMDsKJiM0MzsJdTY0IHRzX3VzZWM7CiYjNDM7CXUzMiBkcm9wczsKJiM0MzsKJiM0MzsJZHJvcHMgPSBuZXRjb25zb2xlX3Rha2VfZHJvcHMobnQpOwomIzQzOwlpZiAoIWRyb3BzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQpIHsKJiM0MzsJCS8qIGFwcGVuZCB0aGUgZXh0ZW5kZWQgaGVhZGVycyAqLwomIzQzOwkJaWYgKG50LSZndDtyZWxlYXNlKQomIzQzOwkJCWxlbiA9IHNjbnByaW50ZihudC0mZ3Q7YnVmLCBzaXplb2YobnQtJmd0O2J1ZiksICYjMzQ7JXMsJiMzNDssCiYjNDM7CQkJCQlpbml0X3V0c25hbWUoKS0mZ3Q7cmVsZWFzZSk7CiYjNDM7CiYjNDM7CQl0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKG50LSZndDtidWYgJiM0MzsgbGVuLCBzaXplb2YobnQtJmd0O2J1ZikgLSBsZW4sCiYjNDM7CQkJCSAmIzM0OyV1LDAsJWxsdSwtOyYjMzQ7LCBMT0dMRVZFTF9XQVJOSU5HLCB0c191c2VjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gJiM0Mzs9IHNjbnByaW50ZihudC0mZ3Q7YnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LSZndDtidWYpIC0gbGVuLAomIzQzOwkJCSAmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuJiMzNDssCiYjNDM7CQkJIGRyb3BzKTsKJiM0MzsKJiM0MzsJc2VuZF91ZHAobnQsIG50LSZndDtidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzCiAgKiBAd2N0eHQ6IG5iY29uIHdyaXRlIGNvbnRleHQKQEAgLTI0ODIsNiAmIzQzOzI2MjIsOSBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZCkKIAkJICAgICFuZXRpZl9ydW5uaW5nKG50LSZndDtucC5kZXYpKQogCQkJY29udGludWU7CiAKJiM0MzsJCWlmIChuZXRjb25zb2xlX3JhdGVsaW1pdGVkKG50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogSWYgbmJjb25fZW50ZXJfdW5zYWZlKCkgZmFpbHMsIGp1c3QgcmV0dXJuIGdpdmVuIG5ldGNvbnNvbGUKIAkJICogbG9zdCB0aGUgb3duZXJzaGlwLCBhbmQgaXRlcmF0aW5nIG92ZXIgdGhlIHRhcmdldHMgd2lsbCBub3QKIAkJICogYmUgYWJsZSB0byByZS1hY3F1aXJlLgpAQCAtMjQ4OSw2ICYjNDM7MjYzMiw4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKQogCQlpZiAoIW5iY29uX2VudGVyX3Vuc2FmZSh3Y3R4dCkpCiAJCQlyZXR1cm47CiAKJiM0MzsJCXNlbmRfcmF0ZWxpbWl0X25vdGljZShudCwgZXh0ZW5kZWQpOwomIzQzOwogCQlpZiAoZXh0ZW5kZWQpCiAJCQlzZW5kX2V4dF9tc2dfdWRwKG50LCB3Y3R4dCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCmluZGV4IGYwNjc0YzAwMTdmYzQuLjA0Y2NlNDBmMTYyZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQpAQCAtMTAsNiAmIzQzOzEwLDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJbmV0Y29uc19jbWRsaW5lLnNoIFwKIAluZXRjb25zX2ZyYWdtZW50ZWRfbXNnLnNoIFwKIAluZXRjb25zX292ZXJmbG93LnNoIFwKJiM0MzsJbmV0Y29uc19yYXRlbGltaXQuc2ggXAogCW5ldGNvbnNfcmVzdW1lLnNoIFwKIAluZXRjb25zX3N5c2RhdGEuc2ggXAogCW5ldGNvbnNfdG9ydHVyZS5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi4zOGRkMTU5OWZlNTdkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaApAQCAtMCwwICYjNDM7MSwxNjAgQEAKJiM0MzsjIS91c3IvYmluL2VudiBiYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgcGVyLXRhcmdldCByYXRlIGxpbWl0LiBJdCBjb25maWd1cmVzIGEgc21hbGwgYnVyc3QKJiM0MzsjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55CiYjNDM7IyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHMKJiM0MzsjIHRyYW5zbWl0dGluZyBvbmNlIHRoZSBidWNrZXQgaXMgZW1wdHkuCiYjNDM7IwomIzQzOyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGUKJiM0MzsjIHJlY2VpdmVyIGhvdyBtYW55IG1lc3NhZ2VzIGl0IG1pc3NlZCwgd2hpY2ggaXMgdmVyaWZpZWQgbGFzdC4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7c2V0IC1ldW8gcGlwZWZhaWwKJiM0MzsKJiM0MztTQ1JJUFRESVI9JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDspCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7JHtTQ1JJUFRESVJ9JiMzNDsvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoCiYjNDM7CiYjNDM7IyBNZXNzYWdlcyBzZW50IHdoaWxlIHRoZSBsaW1pdCBpcyBpbiBwbGFjZSwgY29tZm9ydGFibHkgYWJvdmUgQlVSU1Qgc28gdGhhdAomIzQzOyMgdGhlIGJ1Y2tldCBpcyBkcmFpbmVkCiYjNDM7TVNHX0NPVU5UPTUwCiYjNDM7QlVSU1Q9NQomIzQzOyMgTG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5vdCByZWZpbGxlZCB3aGlsZSB0aGUgdGVzdCBydW5zCiYjNDM7SU5URVJWQUxfTVM9NjAwMDAKJiM0MzsjIERlZmF1bHQgdGhlIHRhcmdldCBzdGFydHMgd2l0aCwgYXMgZG9jdW1lbnRlZCBpbiBuZXRjb25zb2xlLnJzdAomIzQzO0RFRkFVTFRfQlVSU1Q9MTAKJiM0MzsjIFdoYXQgdGhlIHRhcmdldCBzZW5kcyBvbmNlIGl0IGNhbiB0cmFuc21pdCBhZ2FpbgomIzQzO0RST1BfTk9USUNFPSYjMzQ7bWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0JiMzNDsKJiM0MzsKJiM0MzsjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGUKJiM0MztPVVRQVVRfRklMRT0mIzM0Oy90bXAvJHtUQVJHRVR9JiMzNDsKJiM0MzsKJiM0MztmdW5jdGlvbiBjb3VudF9tc2dzKCkgewomIzQzOwlsb2NhbCBGSUxFPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CiYjNDM7CWlmIFsgISAtZiAmIzM0OyR7RklMRX0mIzM0OyBdCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gMAomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CSMgZ3JlcCBleGl0cyAxIG9uIG5vIG1hdGNoLCB3aGljaCBpcyBhIHZhbGlkIHJlc3VsdCBoZXJlCiYjNDM7CWdyZXAgLWMgJiMzNDske01TR30mIzM0OyAmIzM0OyR7RklMRX0mIzM0OyB8fCB0cnVlCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIHNlbmRfbXNncygpIHsKJiM0MzsJbG9jYWwgQ09VTlQ9JiMzNDskezF9JiMzNDsKJiM0MzsJbG9jYWwgSQomIzQzOwomIzQzOwlmb3IgSSBpbiAkKHNlcSAmIzM0OyR7Q09VTlR9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQllY2hvICYjMzQ7JHtNU0d9OiAke1RBUkdFVH0gJHtJfSYjMzQ7ICZndDsgL2Rldi9rbXNnCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBBIGZyZXNobHkgY3JlYXRlZCB0YXJnZXQgaGFzIHRvIGJlIHVubGltaXRlZCwgb3RoZXJ3aXNlIGV2ZXJ5IGV4aXN0aW5nCiYjNDM7IyBuZXRjb25zb2xlIHVzZXIgd291bGQgc3RhcnQgZHJvcHBpbmcgbWVzc2FnZXMgYWZ0ZXIgYW4gdXBncmFkZQomIzQzO2Z1bmN0aW9uIGNoZWNrX2RlZmF1bHRzKCkgewomIzQzOwlsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUCiYjNDM7CiYjNDM7CUlOVEVSVkFMPSQoY2F0ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zKQomIzQzOwlCVVJTVF9ERUZBVUxUPSQoY2F0ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2J1cnN0KQomIzQzOwomIzQzOwlpZiBbICYjMzQ7JHtJTlRFUlZBTH0mIzM0OyAtbmUgMCBdIHx8CiYjNDM7CSAgIFsgJiMzNDske0JVUlNUX0RFRkFVTFR9JiMzNDsgLW5lICYjMzQ7JHtERUZBVUxUX0JVUlNUfSYjMzQ7IF0KJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHVuZXhwZWN0ZWQgcmF0ZSBsaW1pdCBkZWZhdWx0czomIzM0OyBcCiYjNDM7CQkgICAgICYjMzQ7aW50ZXJ2YWw9JHtJTlRFUlZBTH0gYnVyc3Q9JHtCVVJTVF9ERUZBVUxUfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBjaGVja19saW1pdGVkKCkgewomIzQzOwlsb2NhbCBSRUNFSVZFRAomIzQzOwomIzQzOwlSRUNFSVZFRD0kKGNvdW50X21zZ3MgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7KQomIzQzOwomIzQzOwkjIFVucmVsYXRlZCBrZXJuZWwgbWVzc2FnZXMgc2hhcmUgdGhlIGJ1Y2tldCwgc28gZmV3ZXIgdGhhbiBCVVJTVCBvZgomIzQzOwkjIG91cnMgY2FuIGdldCB0aHJvdWdoLCBidXQgbmV2ZXIgbW9yZQomIzQzOwlpZiBbICYjMzQ7JHtSRUNFSVZFRH0mIzM0OyAtZ3QgJiMzNDske0JVUlNUfSYjMzQ7IF0KJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBUaGUgbm90aWNlIGJlbG93IHRyYXZlbHMgYWhlYWQgb2YgdGhlIG1lc3NhZ2UgdGhhdCByZW9wZW5lZCB0aGUgYnVja2V0LCBzbwomIzQzOyMgd2FpdGluZyBmb3IgdGhlIGZpbGUgdG8gYXBwZWFyIGlzIG5vdCBlbm91Z2gKJiM0MztmdW5jdGlvbiBtc2dfcmVjZWl2ZWQoKSB7CiYjNDM7CWdyZXAgLXEgJiMzNDske01TR30mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgMiZndDsgL2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzOyMgVGhlIG1lc3NhZ2VzIGxvc3QgYWJvdmUgaGF2ZSB0byBiZSByZXBvcnRlZCB0byB0aGUgcmVjZWl2ZXIKJiM0MztmdW5jdGlvbiBjaGVja19kcm9wc19yZXBvcnRlZCgpIHsKJiM0MzsJaWYgISBncmVwIC1xICYjMzQ7JHtEUk9QX05PVElDRX0mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsKJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IG5vIHJhdGUgbGltaXQgbm90aWNlIGluICR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyA9PT09PT09PT09ICMKJiM0MzsjIFN0YXJ0IGhlcmUgIwomIzQzOyMgPT09PT09PT09PSAjCiYjNDM7CiYjNDM7bW9kcHJvYmUgbmV0ZGV2c2ltIDImZ3Q7IC9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7bW9kcHJvYmUgbmV0Y29uc29sZSAyJmd0OyAvZGV2L251bGwgfHwgdHJ1ZQomIzQzOwomIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZAomIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXMKJiM0MzsjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0CiYjNDM7dHJhcCBjbGVhbnVwIEVYSVQKJiM0MzsKJiM0MzsjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSkKJiM0MztlY2hvICYjMzQ7NiA1JiMzNDsgJmd0OyAvcHJvYy9zeXMva2VybmVsL3ByaW50awomIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzCiYjNDM7c2V0X25ldHdvcmsKJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlCiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0CiYjNDM7CiYjNDM7Y2hlY2tfZGVmYXVsdHMKJiM0MzsKJiM0MzsjIFNldCB0aGUgYnVyc3QgYmVmb3JlIHRoZSBpbnRlcnZhbCwgc28gdGhhdCBubyBtZXNzYWdlIGVzY2FwZXMgd2hpbGUgdGhlCiYjNDM7IyB0YXJnZXQgc3RpbGwgY2FycmllcyB0aGUgZGVmYXVsdCBidXJzdAomIzQzO2VjaG8gJiMzNDske0JVUlNUfSYjMzQ7ICZndDsgJiMzNDske05FVENPTlNfUEFUSH0mIzM0Oy9yYXRlbGltaXRfYnVyc3QKJiM0MztlY2hvICYjMzQ7JHtJTlRFUlZBTF9NU30mIzM0OyAmZ3Q7ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zCiYjNDM7CiYjNDM7bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZhbXA7CiYjNDM7d2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7aXB2NCYjMzQ7CiYjNDM7c2VuZF9tc2dzICYjMzQ7JHtNU0dfQ09VTlR9JiMzNDsKJiM0MzsjIFRoaXMgaGFsZiBvZiB0aGUgdGVzdCBpcyBhYm91dCBtZXNzYWdlcyB0aGF0IG5ldmVyIGFycml2ZSwgc28gdGhlcmUgaXMKJiM0MzsjIG5vdGhpbmcgdG8gYnVzeXdhaXQgb24KJiM0MztzbGVlcCAxCiYjNDM7cGtpbGxfc29jYXQKJiM0MztjaGVja19saW1pdGVkCiYjNDM7cm0gLWYgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CiYjNDM7IyBEcm9wcGluZyB0aGUgaW50ZXJ2YWwgYmFjayB0byB6ZXJvIGhhcyB0byBtYWtlIHRoZSB0YXJnZXQgdW5saW1pdGVkIGFnYWluCiYjNDM7ZWNobyAwICZndDsgJiMzNDske05FVENPTlNfUEFUSH0mIzM0Oy9yYXRlbGltaXRfaW50ZXJ2YWxfbXMKJiM0MzsKJiM0MztsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmFtcDsKJiM0Mzt3YWl0X2Zvcl9wb3J0ICYjMzQ7JHtOQU1FU1BBQ0V9JiMzNDsgJiMzNDske1BPUlR9JiMzNDsgJiMzNDtpcHY0JiMzNDsKJiM0MztzZW5kX21zZ3MgMQomIzQzO2lmICEgYnVzeXdhaXQgJiMzNDske0JVU1lXQUlUX1RJTUVPVVR9JiMzNDsgbXNnX3JlY2VpdmVkCiYjNDM7dGhlbgomIzQzOwllY2hvICYjMzQ7RkFJTDogVGltZWQgb3V0IHdhaXRpbmcgKCR7QlVTWVdBSVRfVElNRU9VVH0gbXMpIGZvciBuZXRjb25zb2xlJiMzNDsgXAomIzQzOwkgICAgICYjMzQ7bWVzc2FnZSBpbiAke09VVFBVVF9GSUxFfSBhZnRlciBjbGVhcmluZyB0aGUgcmF0ZSBsaW1pdCYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7ZmkKJiM0Mzt2YWxpZGF0ZV9tc2cgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7Y2hlY2tfZHJvcHNfcmVwb3J0ZWQKJiM0Mztwa2lsbF9zb2NhdAomIzQzO3JtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzO3RyYXAgLSBFWElUCiYjNDM7Y2xlYW51cAomIzQzO2V4aXQgJiMzNDske2tzZnRfcGFzc30mIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIHJhdGUgbGltaXRpbmcgdG8gbmV0Y29uc29sZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIGludHJvZHVjZXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIHRvIHRoZSBuZXRjb25zb2xlIHRhcmdldCBjb25maWd1cmF0aW9uLCBhbmQgdXNlcyBhIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB3aXRoaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuICBBIGBwZW5kaW5nX2Ryb3BzYCBjb3VudGVyIGlzIGFkZGVkOyB3aGVuIHRoZSByYXRlIGxpbWl0IGlzIGV4Y2VlZGVkLCBtZXNzYWdlcyBnZXQgZHJvcHBlZCBhbmQgdGhpcyBjb3VudGVyIGluY3JlbWVudHMuIFdoZW4gYSBtZXNzYWdlICppcyogYWxsb3dlZCwgaXQgY2hlY2tzIGlmIGBwZW5kaW5nX2Ryb3BzYCBpcyAmZ3Q7IDAgYW5kLCBpZiBzbywgc2VuZHMgYSAmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuJiMzNDsgbm90aWNlLiBUaGlzIG5vdGljZSBpcyBzZW50IHZpYSBgc2VuZF9yYXRlbGltaXRfbm90aWNlKClgLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2UoKWAuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBmdW5jdGlvbiBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJhdGUgbGltaXRpbmcgaXMgYWN0dWFsbHkgKmFubm91bmNlZCouICBJJiMzOTttIHJlYWRpbmcgdGhlIGNvZGUsIGFuZCBteSBtYWluIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGJ1ZmZlciBvdmVyZmxvd3MuCgpgYGBjCiYjNDM7c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpCiYjNDM7ewomIzQzOwlpbnQgbGVuID0gMDsKJiM0MzsJdTY0IHRzX3VzZWM7CiYjNDM7CXUzMiBkcm9wczsKJiM0MzsKJiM0MzsJZHJvcHMgPSBuZXRjb25zb2xlX3Rha2VfZHJvcHMobnQpOwomIzQzOwlpZiAoIWRyb3BzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQpIHsKJiM0MzsJCS8qIGFwcGVuZCB0aGUgZXh0ZW5kZWQgaGVhZGVycyAqLwomIzQzOwkJaWYgKG50LSZndDtyZWxlYXNlKQomIzQzOwkJCWxlbiA9IHNjbnByaW50ZihudC0mZ3Q7YnVmLCBzaXplb2YobnQtJmd0O2J1ZiksICYjMzQ7JXMsJiMzNDssCiYjNDM7CQkJCQlpbml0X3V0c25hbWUoKS0mZ3Q7cmVsZWFzZSk7CiYjNDM7CiYjNDM7CQl0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKG50LSZndDtidWYgJiM0MzsgbGVuLCBzaXplb2YobnQtJmd0O2J1ZikgLSBsZW4sCiYjNDM7CQkJCSAmIzM0OyV1LDAsJWxsdSwtOyYjMzQ7LCBMT0dMRVZFTF9XQVJOSU5HLCB0c191c2VjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gJiM0Mzs9IHNjbnByaW50ZihudC0mZ3Q7YnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LSZndDtidWYpIC0gbGVuLAomIzQzOwkJCSAmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuJiMzNDssCiYjNDM7CQkJIGRyb3BzKTsKJiM0MzsKJiM0MzsJc2VuZF91ZHAobnQsIG50LSZndDtidWYsIGxlbik7CiYjNDM7fQpgYGAKCk9rYXksIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSBub3RpY2UgbWVzc2FnZSBpcyBmb3JtYXR0ZWQgaW50byBgbnQtJmd0O2J1ZmAsIGFuZCB0aGVuIGBzZW5kX3VkcCgpYCBpcyBjYWxsZWQuICBUaGUga2V5IGhlcmUgaXMgdW5kZXJzdGFuZGluZyBleGFjdGx5ICpob3cqIGBudC0mZ3Q7YnVmYCBpcyB1c2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIGBudC0mZ3Q7YnVmYCBwcm9wZXJseSBpbml0aWFsaXplZD8gT3IgY291bGQgd2UgYmUgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeT8KCmBzY25wcmludGZgIHdyaXRlcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuIGBzY25wcmludGZgIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuICpleGNsdWRpbmcqIHRoZSBudWxsIHRlcm1pbmF0b3IuIFRoZSBjb2RlIHRoZW4gY2FsbHMgYHNlbmRfdWRwKG50LCBudC0mZ3Q7YnVmLCBsZW4pYCwgc28gaXQgc2VlbXMgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgc2VuZGluZyBleGFjdGx5IGBsZW5gIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlci4KCk5vdywgY29uc2lkZXIgdGhlIGBpZiAobnQtJmd0O3JlbGVhc2UpYCBibG9jay4gSWYgYG50LSZndDtyZWxlYXNlYCBpcyB0cnVlLCB0aGVuIHdlIGFwcGVuZCBhZGRpdGlvbmFsIGhlYWRlcnMuIElmIGl0JiMzOTtzIGZhbHNlLCBgbGVuYCBpcyBpbml0aWFsaXplZCB0byAwLiAgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHdpdGggZWFjaCBzdWJzZXF1ZW50IGNhbGwgdG8gYHNjbnByaW50ZmAsIGl0JiMzOTtzIGFkZGluZyB0byB0aGUgZXhpc3RpbmcgY29udGVudCBhbmQgZW5zdXJpbmcgaXQgaXMgbnVsbC10ZXJtaW5hdGVkLiBBbmQsIGluIGFsbCBjYXNlcywgd2UmIzM5O3JlIHVzaW5nIHRoZSByZXR1cm5lZCBsZW5ndGggdmFsdWUuIFRoZSBmaW5hbCBjYWxsIHRvIGBzY25wcmludGZgIHdpbGwgd3JpdGUgdGhlICYjMzQ7bmV0Y29uc29sZTogLi4uJiMzNDsgbWVzc2FnZS4gVGhlIGBzY25wcmludGZgIGZ1bmN0aW9uICpzaG91bGQqIGhhbmRsZSB0aGUgbnVsbCB0ZXJtaW5hdGlvbi4gVGh1cywgYHNlbmRfdWRwKClgIGlzIG9ubHkgcmVhZGluZyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2UmIzM5O3ZlIGV4cGxpY2l0bHkgd3JpdHRlbiB0byB0aGUgYnVmZmVyIHZpYSBgc2NucHJpbnRmYCAuIFNvLCBubywgdGhlcmUgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgY29tYmluYXRpb24gb2YgYHNjbnByaW50ZmAgYW5kIHRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgbGVuYCBpbiBgc2VuZF91ZHAoKWAgcHJldmVudHMgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHRyYW5zbWl0dGVkLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBzZW5kX3VkcGAgYW5kIGBudC0mZ3Q7YnVmYCBhcmUgY29ycmVjdGx5IGRlZmluZWQgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgaGF2ZSBjb25maXJtZWQgdGhhdCBgbnQtJmd0O2J1ZmAgaXMgaW5kZWVkIGEgY2hhcmFjdGVyIGFycmF5IHdpdGggYSBkZWZpbmVkIHNpemUuIENoZWNraW5nIGBzZW5kX3VkcGAgY29uZmlybXMgdGhhdCBpdCB0YWtlcyBhIHBvaW50ZXIgdG8gYSBidWZmZXIgYW5kIGEgbGVuZ3RoLCBhbmQgaXQgc2ltcGx5IHNlbmRzIGEgVURQIHBhY2tldCBjb250YWluaW5nIHRob3NlIGJ5dGVzLiBTaW5jZSBgc2NucHJpbnRmYCBpcyBmb3JtYXR0aW5nIGEgc3RyaW5nIGludG8gdGhlIGJ1ZmZlciBjb3JyZWN0bHksIHRoYXQgbWVhbnMgd2UmIzM5O3JlIGluIGdvb2Qgc2hhcGUuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGdvdGNoYXMuIEkgc2F3IGBtc2djb3VudGVyYCwgYHBlbmRpbmdfZHJvcHNgLCBhbmQgYHJhdGVsaW1pdGAuIFRoZXNlIGFyZSBwcmltaXRpdmUgdHlwZXMgYW5kIGEgc3RydWN0LCB3aGljaCBpcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2FuZF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTg9c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDA2LS8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQwNzogKiBoZWFkIGFuZCByZWZpbGwgd29yayBhcmUgc2V0IHVwIG9uY2UgaW4gYWxsb2NfYW5kX2luaXQoKTsgdGhpcyBvbmx5XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDA4LSAqIChyZSlmaWxscyB0aGUgcG9vbC4gUGFpciB3aXRoIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKS5cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjU3PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcxNy0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MTg6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MTkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODU0PXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzM6XHRudCA9IGFsbG9jX2FuZF9pbml0KCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3NC1cdGlmICghbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3Njg9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3NzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc3NDpcdG50ID0gYWxsb2NfYW5kX2luaXQoKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzc1LVx0aWYgKCFudCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBhbGxvY19hbmRfaW5pdGAgZm9yIGBremFsbG9jYCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgYWxsb2NfYW5kX2luaXRgIGZ1bmN0aW9uLiBUaGUgcHJpbWFyeSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24gdXRpbGl6ZXMgYGt6YWxsb2NgIGludGVybmFsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIGBhbGxvY19hbmRfaW5pdGAgaXMgemVyb2VkIG91dC4gSWYgaXQgaXMsIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSBhcmVhIG9mIGV4cGVydGlzZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjb2RlIHdpdGhpbiBgYWxsb2NfYW5kX2luaXRgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZGlyZWN0IGNhbGxzIHRvIGBremFsbG9jYCBvciBhbnkgYWxsb2NhdGlvbiBwYXRod2F5cyB0aGF0IG1pZ2h0IHVsdGltYXRlbHkgbGVhZCB0byBhIHplcm9pbmctb3V0IG9wZXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgYXMgdG8gd2hpY2ggYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyB1dGlsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxODpcdHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXG4gNzE5Olx0e1xuIDcyMDpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbiA3MjE6XHRcbiA3MjI6XHRcdG50ID0ga3phbGxvY19vYmooKm50KTtcbiA3MjM6XHRcdGlmICghbnQpXG4gNzI0Olx0XHRcdHJldHVybiBudDtcbiA3MjU6XHRcbiA3MjY6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0VYVEVOREVEX0xPRykpXG4gNzI3Olx0XHRcdG50LVx1MDAzZWV4dGVuZGVkID0gdHJ1ZTtcbiA3Mjg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRSkpXG4gNzI5Olx0XHRcdG50LVx1MDAzZXJlbGVhc2UgPSB0cnVlO1xuIDczMDpcdFxuIDczMTpcdFx0bnQtXHUwMDNlbnAubmFtZSA9IFwmIzM0O25ldGNvbnNvbGVcJiMzNDs7XG4gNzMyOlx0XHRzdHJzY3B5KG50LVx1MDAzZW5wLmRldl9uYW1lLCBcJiMzNDtldGgwXCYjMzQ7LCBJRk5BTVNJWik7XG4gNzMzOlx0XHRudC1cdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcbiA3MzQ6XHRcdG50LVx1MDAzZXJlbW90ZV9wb3J0ID0gNjY2NjtcbiA3MzU6XHRcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiA3MzY6XHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gNzM3Olx0XHRuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KG50KTtcbiA3Mzg6XHRcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XG4gNzM5Olx0XHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xuIDc0MDpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gNzQxOlx0XHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuIDc0MjpcdFxuIDc0MzpcdFx0cmV0dXJuIG50O1xuIDc0NDpcdH1cbiA3NDU6XHRcbiA3NDY6XHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXG4gNzQ3Olx0ICogdGhlIG1haW4gdGFyZ2V0X2xpc3QuXG4gNzQ4Olx0ICovXG4gNzQ5Olx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiA3NTA6XHR7XG4gNzUxOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xuIDc1MjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA3NTM6XHRcbiA3NTQ6XHRcdC8qIFRoZSBjbGVhbnVwIG5lZWRzIFJUTkwgbG9ja2VkICovXG4gNzU1Olx0XHRBU1NFUlRfUlROTCgpO1xuIDc1NjpcdFxuIDc1NzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuIDc1ODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHtcbiA3NTk6XHRcdFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xuIDc2MDpcdFx0XHRXQVJOX09OX09OQ0UobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCk7XG4gNzYxOlx0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIDc2MjpcdFx0XHRuZXRjb25zX3JlbGVhc2VfZGV2KG50KTtcbiA3NjM6XHRcdFx0LyogbW92ZWQgdGhlIGNsZWFuZWQgdGFyZ2V0IHRvIHRhcmdldF9saXN0LiBOZWVkIHRvIGhvbGQgYm90aFxuIDc2NDpcdFx0XHQgKiBsb2Nrc1xuIDc2NTpcdFx0XHQgKi9cbiA3NjY6XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuIDc2NzpcdFx0XHRsaXN0X21vdmUoXHUwMDI2bnQtXHUwMDNlbGlzdCwgXHUwMDI2dGFyZ2V0X2xpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUmF0ZSBMaW1pdGluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXRjb25zb2xlIHJhdGUgbGltaXRpbmcgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIHNvdW5kLiBGaXJzdCwgYGt6YWxsb2Nfb2JqKCpudClgIGlzIGJlaW5nIHVzZWQsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgYGt6YWxsb2NgIHdpdGggdGhlIHNpemUgb2YgdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LCBhbmQgdGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBldmVyeXRoaW5nJiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuIEkmIzM5O2QgZXhwZWN0IGBwZW5kaW5nX2Ryb3BzYCB0byBiZSB6ZXJvIGluaXRpYWxseSwgYW5kIHRoZSBgcmF0ZWxpbWl0YCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgLCB3aGljaCBjYWxscyBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLiAgTm8gaW1tZWRpYXRlIHJlZCBmbGFncy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gSSYjMzk7bGwgZXhhbWluZSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgcmF0ZSBsaW1pdGluZyBtZWNoYW5pc20uIFRoZSBmaXJzdCBpcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYC4gU2VlbXMgcmVhc29uYWJsZTsgaXQgY29udmVydHMgdGhlIGludGVydmFsIGZyb20gbWlsbGlzZWNvbmRzIHRvIGppZmZpZXMsIGNoZWNrcyBmb3IgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNvbnZlcnRpbmcgdG8gamlmZmllcywgYW5kIHRoZW4gdXNlcyBgV1JJVEVfT05DRWAgdG8gdXBkYXRlIHRoZSBgaW50ZXJ2YWxgIGZpZWxkIGluIHRoZSBgcmF0ZWxpbWl0YCBzdHJ1Y3Qgd2l0aGluIGEgbXV0ZXguIFRoYXQmIzM5O3MgYSBzYWZlIGFuZCBlZmZlY3RpdmUgd2F5IHRvIGhhbmRsZSBjb25jdXJyZW50IGFjY2Vzcy4gIFRoZSBpbnRlZ2VyIGNvbnZlcnNpb24gaXMgY29ycmVjdCwgYXMgaXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBtdXRleC4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYC4gVGhpcyBjaGVja3MgaWYgYW4gb29wcyBpcyBpbiBwcm9ncmVzcywgcmV0dXJuaW5nIGZhbHNlIGlmIGl0IGlzIChpbXBvcnRhbnQsIHdlIGRvbiYjMzk7dCB3YW50IHRvIHJhdGUgbGltaXQgY3Jhc2ggZHVtcHMpLiBJdCB0aGVuIGNhbGxzIGBfX3JhdGVsaW1pdGAgYW5kIGluY3JlbWVudHMgYG50LSZndDtwZW5kaW5nX2Ryb3BzYCBpZiB0aGUgcmF0ZSBsaW1pdCBpcyBleGNlZWRlZC4gTm8gaXNzdWVzIGhlcmUuCgpGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgLiAgVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLiBUaGUgY29kZSBjaGVja3MgYG50LSZndDtwZW5kaW5nX2Ryb3BzYCwgYW5kIGZvcm1hdHMgYSBzdHJpbmcgaW50byBgbnQtJmd0O2J1ZmAuICBJdCB1c2VzIGBzY25wcmludGZgLCB3aGljaCBpcyBnb29kIHNpbmNlIGl0JiMzOTtzIHNhZmUgdG8gdXNlIHdpdGggYm91bmRlZCBidWZmZXJzLCBidXQgKmlzIHRoZSBidWZmZXIgbGFyZ2UgZW5vdWdoPyogVGhlIGNvZGUgKmRvZXMqIHVzZSBgc2l6ZW9mKG50LSZndDtidWYpYCBpbiBgc2NucHJpbnRmYCwgc28gdGhhdCYjMzk7cyBnb29kLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNpemUgb2YgYG50LSZndDtidWZgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gaGFuZGxlIGFsbCB0aGUgcG9zc2libGUgZm9ybWF0dGVkIHN0cmluZyBsZW5ndGhzLiBOb3csIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjU9c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE0OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgZGVidWdnaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFRoaXMgc3RydWN0IGlzIHRoZSBoZWFydCBvZiB3aGVyZSB0aGUgbmV0Y29uc29sZSBkcml2ZXIgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciB0YXJnZXQgc3lzdGVtIGl0JiMzOTtzIHN1cHBvc2VkIHRvIHNlbmQgY29uc29sZSBtZXNzYWdlcyB0by4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIGRlc2NyaXB0b3IgZm9yIGVhY2ggcmVtb3RlIGNvbnNvbGUgd2UmIzM5O3JlIHRyeWluZyB0byByZWFjaC4KCkZpcnN0IG9mZiwgSSYjMzk7ZCBiZSBsb29raW5nIGF0IHRoZSBzb2NrZXQgYWRkcmVzcyBpbmZvcm1hdGlvbi4gSXQgaGFzIHRvIGNvbnRhaW4gdGhlIElQIGFkZHJlc3MgKHY0IG9yIHY2LCBtb3N0IGxpa2VseSkgYW5kIHRoZSBVRFAgcG9ydCBudW1iZXIgb2YgdGhlIHJlbW90ZSBtYWNoaW5lJiMzOTtzIG5ldGNvbnNvbGUgbGlzdGVuZXIuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBUaGUgZmllbGRzIHRoYXQgaG9sZCB0aGlzIGluZm8gYXJlIHRoZSBtb3N0IGNyaXRpY2FsLiBJJiMzOTtkIGJlIGNyb3NzLXJlZmVyZW5jaW5nIHRoaXMgc3RydWN0dXJlIHdpdGggdGhlIHNvY2tldCBhbmQgVURQIGNvZGUsIG1ha2luZyBzdXJlIHRoZSBhZGRyZXNzIGZhbWlsaWVzIGFuZCBwb3J0IGhhbmRsaW5nIGFyZSBjb25zaXN0ZW50IGFuZCByb2J1c3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgYmVpbmcgbWFuYWdlZCB0aHJlYWQtc2FmZWx5LCB0b28uIFdlIGRvbuKAmXQgd2FudCB0byBiZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBkYXRhIHJhY2VzIHByZXZlbnQgdGhlIG1lc3NhZ2VzIGZyb20gZ2V0dGluZyB0aHJvdWdoLgoKVGhlbiwgdGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZSBzdGF0ZSB0cmFja2luZy4gSXMgaXQgYWN0aXZlbHkgY29ubmVjdGVkIG9yIHRyeWluZyB0byByZWNvbm5lY3Q/IFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNvY2tldCBpcyByZWFkeSB0byBhY2NlcHQgZGF0YS4gU29tZSBraW5kIG9mIGVycm9yIGNvdW50ZXIgb3IgdGltZXN0YW1wIG1pZ2h0IGV4aXN0IHRvIHNlZSBob3cgbG9uZyBpdCYjMzk7cyBiZWVuIHNpbmNlIGEgc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gYW5kIHNlZSBpZiBhIHRhcmdldCBpcyBwZXJtYW5lbnRseSB1bnJlYWNoYWJsZS4gSSYjMzk7ZCBleHBlY3QgYW4gZXhwb25lbnRpYWwgYmFja29mZiBzdHJhdGVneSBpZiB0aGUgdGFyZ2V0IGlzIGRvd24uCgpJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBsb2NraW5nIG1lY2hhbmlzbSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJ1Y3QuIElmIHRoZSBrZXJuZWwgaGFzIG11bHRpcGxlIHRocmVhZHMgb3IgaW50ZXJydXB0IGhhbmRsZXJzIHBvdGVudGlhbGx5IHRyeWluZyB0byB1c2UgdGhlIHNhbWUgdGFyZ2V0IGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgbmVlZHMgdG8gYmUgbG9ja2VkIGRvd24gdG8gcHJldmVudCBjb3JydXB0aW9uLiBBIHNwaW5sb2NrIG9yIGEgbXV0ZXggd291bGQgYmUgdHlwaWNhbCBoZXJlLiBJJiMzOTtkIGhhdmUgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgY29ycmVjdGx5IGFuZCBpc24mIzM5O3QgYSBib3R0bGVuZWNrLiBXaGF0IGtpbmQgb2YgaW50ZXJydXB0IGNvbnRleHRzIGFyZSB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXMgYWJsZSB0byBmdW5jdGlvbiBpbj8KCkZpbmFsbHksIHRoZXJlIHdpbGwgcHJvYmFibHkgYmUgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE1heWJlIGFuIE1UVSBzZXR0aW5nIHRvIHR1bmUgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGVudmlyb25tZW50cy4gUGVyaGFwcyBhIGZsYWcgdG8gY29udHJvbCB3aGV0aGVyIHRpbWVzdGFtcHMgYXJlIGluY2x1ZGVkIGluIHRoZSBtZXNzYWdlcy4gUG9zc2libHkgZXZlbiBRb1Mgc2V0dGluZ3MuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBsaW5raW5nIHRoZXNlIHRvIHRoZSBicm9hZGVyIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc2V0dGluZ3MgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSwgYW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGNoYW5nZSB0aGVtIHdpdGhvdXQgY2F1c2luZyB0aGUgd2hvbGUgdGhpbmcgdG8gbG9jayB1cC4KClNvLCBpbiBlc3NlbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHN0cnVjdCB0byBlbmNhcHN1bGF0ZSBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIGFuZCBzdGF0ZSBmb3IgY29tbXVuaWNhdGluZyBkZWJ1ZyBpbmZvcm1hdGlvbiB0byBhIHJlbW90ZSBzeXN0ZW0uIEl04oCZcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBpbiBlbmFibGluZyByZW1vdGUga2VybmVsIGRlYnVnZ2luZywgYW5kIGl0cyBkZXNpZ24gaGFzIHRvIGJlIHJvY2stc29saWQgdG8ga2VlcCB0aGluZ3MgcnVubmluZyB3aGVuIGEgc3lzdGVtIGlzIG90aGVyd2lzZSBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE0Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiAyMTU6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjE2Olx0I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gMjE3Olx0XHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHRncm91cDtcbiAyMTg6XHRcdHN0cnVjdCBjb25maWdfZ3JvdXBcdHVzZXJkYXRhX2dyb3VwO1xuIDIxOTpcdFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xuIDIyMDpcdFx0Y2hhclx0XHRcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XG4gMjIxOlx0XG4gMjIyOlx0XHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXG4gMjIzOlx0XHR1MzJcdFx0XHRzeXNkYXRhX2ZpZWxkcztcbiAyMjQ6XHRcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovXG4gMjI1Olx0XHR1MzJcdFx0XHRtc2djb3VudGVyO1xuIDIyNjpcdFx0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbiAyMjc6XHRcdHN0cnVjdCByYXRlbGltaXRfc3RhdGVcdHJhdGVsaW1pdDtcbiAyMjg6XHQjZW5kaWZcbiAyMjk6XHRcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcbiAyMzA6XHRcdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbiAyMzE6XHRcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiAyMzI6XHRcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIDIzMzpcdFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4gMjM0Olx0XHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbiAyMzU6XHRcdGJvb2xcdFx0XHRpcHY2O1xuIDIzNjpcdFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gMjM3Olx0XHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIDIzODpcdFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbiAyMzk6XHRcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXG4gMjQwOlx0XHQgKi9cbiAyNDE6XHRcdGNoYXJcdFx0XHRidWZbTUFYX1BSSU5UX0NIVU5LICYjNDM7IDFdO1xuIDI0MjpcdFx0c3RydWN0IHdvcmtfc3RydWN0XHRyZXN1bWVfd3E7XG4gMjQzOlx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRza2JfcG9vbDtcbiAyNDQ6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVmaWxsX3dxO1xuIDI0NTpcdH07XG4gMjQ2Olx0XG4gMjQ3Olx0I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gMjQ4Olx0XG4gMjQ5Olx0c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XG4gMjUwOlx0c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuIDI1MTpcdFxuIDI1MjpcdHN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpXG4gMjUzOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIHVzaW5nIGBidWZgLCB3aGljaCBpcyBhIGNoYXJhY3RlciBhcnJheSwgYGNoYXIgYnVmW01BWF9QUklOVF9DSFVOSyAmIzQzOyAxXWAuIEFuZCBgTUFYX1BSSU5UX0NIVU5LYCBsb29rcyB0byBiZSBhcm91bmQgMTAwMCwgc28gdGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2l6ZSBmb3IgYSBidWZmZXIuIFRoZSBzdHJpbmcgd2UmIzM5O3JlIGZvcm1hdHRpbmcgaW4gYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgaXMgYCVzLCAldSwwLCVsbHUsLTsgbmV0Y29uc29sZTogJXUgbWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0XG5gLiBCYXNlZCBvbiB0aGUgdHlwaWNhbCB2YWx1ZXMgb2YgcmVsZWFzZSBzdHJpbmdzLCBhbmQgdGhlIG51bWVyaWNhbCB2YWx1ZXMsIHRoaXMgc2hvdWxkIGVhc2lseSBmaXQgd2l0aGluIGBNQVhfUFJJTlRfQ0hVTksgJiM0MzsgMWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHdlIHNlbmRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBgc2NucHJpbnRmYCBoYW5kbGVzIHRoYXQsIHdyaXRpbmcgY2hhcmFjdGVycyBhbmQgcmV0dXJuaW5nIHRoZSBsZW5ndGguIEFuZCBgc2VuZF91ZHBgIG9ubHkgc2VuZHMgKmV4YWN0bHkqIGBsZW5gIGJ5dGVzLiBTaW5jZSBgc2NucHJpbnRmYCBwb3B1bGF0ZXMgYWxsIGBsZW5gIGJ5dGVzLCBubyB3b3JyaWVzIHRoZXJlLCBub3RoaW5nIGlzIHVuaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBzZW5kaW5nLgoKV2hhdCBhYm91dCB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgKnJlYWQqPyBgbnQtJmd0O3JlbGVhc2VgIGlzIGEgYm9vbGVhbiwgc28gdGhhdCYjMzk7cyBmaW5lLiBgaW5pdF91dHNuYW1lKCktJmd0O3JlbGVhc2VgIGlzIGEgc3RyaW5nLCBhbmQgYGxvY2FsX2Nsb2NrKClgIHJldHVybnMgYSBgdTY0YC4gVGhlbiBgZHJvcHNgIGlzIGEgYHUzMmAuIE9rYXksIHNvIHRob3NlIGFyZSBhbGwgaW5pdGlhbGl6ZWQgdmFsdWVzLiBXZSYjMzk7cmUgZ29vZC4KCklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWxhdGVkIHRvIGBudC0mZ3Q7cmF0ZWxpbWl0YD8gTm8sIGJlY2F1c2UgaXQgaXMgaW5pdGlhbGl6ZWQgYnkgYHJhdGVsaW1pdF9zdGF0ZV9pbml0YC4gQW5kIGBudC0mZ3Q7cGVuZGluZ19kcm9wc2AgaXMgYWxzbyB6ZXJvZWQgb3V0IGJ5IGBremFsbG9jYC4gU28sIHRoYXQmIzM5O3MgY292ZXJlZC4KClRoZSBvbmx5IHJlbWFpbmluZyBxdWVzdGlvbiBpcyBob3cgYHNlbmRfdWRwYCB3b3JrcyBpbnRlcm5hbGx5LiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2VuZF91ZHBgIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCB0cnkgdG8gcmVhZCBiZXlvbmQgdGhlIGBsZW5gIGJ5dGVzIHBhc3NlZCB0byBpdC4gQnV0IGZyb20gd2hhdCBJIGhhdmUgc2VlbiBzbyBmYXIgSSBkbyBub3QgZXhwZWN0IGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbmRfdWRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjYyPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODY6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVx0XHRcdCAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzIzLS8qKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjQ6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjUtICogQG50OiB0YXJnZXQgdG8gc2VuZCBtZXNzYWdlIHRvXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjgtICpcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzI5OiAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzMwLSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzMxOiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzItICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMzpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzNC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzNTpcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzNi1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM1MD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzODItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4MzpcdHNlbmRfdWRwKG50LCBudC1cdTAwM2VidWYsIG1zZ19sZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzODQtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ4MjpcdFx0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgYnVmX29mZnNldCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4My1cdH1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzMj1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NDAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU0MTpcdC8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NDItXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1NjQ9c3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU3MS1cdFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NzI6XHRcdHNlbmRfdWRwKG50LCB0bXAsIGZyYWcpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzMtXHRcdHRtcCAmIzQzOz0gZnJhZztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU3OD1zdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAzOlx0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjA0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4ODUKCQkJCQkJCW91dHB1dDogMjkyCgkJCQkJCQl0aG91Z2h0czogMTY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYHNlbmRfdWRwYCBmdW5jdGlvbiBpdHNlbGYgbG9va3Mgc29saWQuIEl0JiMzOTtzIHByb3Blcmx5IHRha2luZyBhIGBjb25zdCBjaGFyICptc2dgIGFuZCBgaW50IGxlbmAsIGFsbG9jYXRpbmcgYW4gU0tCLCBhbmQgY29weWluZyBgbGVuYCBieXRlcy4gIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZSwgYXQgbGVhc3Qgbm90IGluIHRoZSBvcmlnaW5hbCBjYWxsIGNoYWluLgoKTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4uLiBJJiMzOTttIHNlZWluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgLCBhbmQgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AuIFRoZSBpbml0IGZ1bmN0aW9uIGp1c3Qgc2V0cyB1cCB0aGUgYHJhdGVsaW1pdF9zdGF0ZWAgc3RydWN0dXJlLCB3aGljaCBhcHBlYXJzIHN0YW5kYXJkLiBUaGUgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGZ1bmN0aW9uIHV0aWxpemVzIGBfX3JhdGVsaW1pdGAsIGEgd2VsbC1rbm93biBrZXJuZWwgZnVuY3Rpb24sIGFuZCBpbXBvcnRhbnRseSwgaXQgaW5jbHVkZXMgYSBjaGVjayBmb3IgYG9vcHNfaW5fcHJvZ3Jlc3NgIHRvIGF2b2lkIHJhdGUtbGltaXRpbmcgZHVyaW5nIGEgY3Jhc2ggZHVtcC4gIFRoYXQmIzM5O3MgYSBnb29kIHNhZmVndWFyZC4gIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgIGFwcGVhcnMgc2FmZSwgc2ltcGx5IHJlc2V0dGluZyB0aGUgY291bnRlci4KClRoZSBzeXNmcyBpbnRlcmZhY2VzIGZvciB0aGUgcmF0ZSBsaW1pdGluZyBwYXJhbWV0ZXJzIChpbnRlcnZhbCBhbmQgYnVyc3QpIGFyZSBhbHNvIGZpbmUsIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoZSBzdG9yZSBmdW5jdGlvbnMgYXJlIGFsc28gc2FmZSwgdXNpbmcgbXV0ZXhlcyBhcm91bmQgdGhlIHdyaXRlcyB0byBgcmF0ZWxpbWl0LmludGVydmFsYCBhbmQgYHJhdGVsaW1pdC5idXJzdGAsIGFuZCB0aGV5IGFyZSBwcm9wZXJseSB2YWxpZGF0aW5nIHRoZSBpbnB1dCB2YWx1ZXMgdXNpbmcgYGtzdHJ0b3VpbnRgIGFuZCBhdm9pZGluZyBpbnRlZ2VyIG92ZXJmbG93cy4gIFRoYXQmIzM5O3MgYWxsIHN0YW5kYXJkLCBzYWZlIGtlcm5lbCBwcmFjdGljZS4KClRoZW4gd2UgaGF2ZSBgc2VuZF9yYXRlbGltaXRfbm90aWNlYC4gIFRoaXMgaXMgdGhlIGludGVyZXN0aW5nIGJpdCB3aGVyZSB0aGUgZHJvcHBlZCBtZXNzYWdlIGNvdW50IGlzIGZvcm1hdHRlZC4gVGhlIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGBzY25wcmludGZgLCBpcyBjb3JyZWN0IGluIHRoaXMgY29udGV4dCwgYWx3YXlzIGVuc3VyaW5nIHRoZSBzdHJpbmcgaXMgcHJvcGVybHkgdGVybWluYXRlZCwgYW5kIGluaXRpYWxpemVkIHVwIHRvIGxlbiwgcmV0dXJuaW5nIGxlbiB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIGZvcm1hdHRlZCB0byB0aGUgYnVmZmVyLiBUaGUgZXh0ZW5kZWQgaGVhZGVycyBhcmUgY29uZGl0aW9uYWwsIGJ1dCB0aGUgZm9ybWF0dGluZyBpcyBjb3JyZWN0LiBUaGUgY2FsbCB0byBgc2VuZF91ZHBgIHVzZXMgdGhlIGNvcnJlY3QgYGxlbmAgdmFsdWUuIFRoZSBmdW5jdGlvbiBzZWVtcyBzYWZlLgoKRmluYWxseSwgdGhlIGFkZGVkIGxvZ2ljIGluIGBuZXRjb25zb2xlX3dyaXRlYCBwcm9wZXJseSBjaGVja3MgaWYgYSB0YXJnZXQgaXMgcmF0ZWxpbWl0ZWQgKmJlZm9yZSogY2FsbGluZyBgbmJjb25fZW50ZXJfdW5zYWZlYCAoaW1wb3J0YW50ISksIGFuZCB0aGF0IGlzIGFsc28gd2hlcmUgd2Ugc2VlIHRoZSByYXRlIGxpbWl0aW5nIG5vdGlmaWNhdGlvbiBiZWluZyBzZW50LCB3aXRoIHRoZSByaWdodCBmb3JtYXR0aW5nLgoKTXkgZmluYWwgY29uY2x1c2lvbiBpcyB0aGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGFuIGluZm8gbGVhayB0byB1c2VyLXNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGUgc3RydWN0IGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBgc2NucHJpbnRmYCBjYWxscyBhbmQgdGhlIHN1YnNlcXVlbnQgdXNlIG9mIGBsZW5gIGluIGBzZW5kX3VkcGAgcHJldmVudCBhbnkgYWNjaWRlbnRhbCB0cmFuc21pc3Npb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudC4gSSB3aWxsIG5vdyBzZXQgdGhlIHJlc3VsdCBhcyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgbXkgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cy4gSXQgYWRkcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdXNlcyBgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZWAgdG8gdHJhY2sgbWVzc2FnZSByYXRlcy4gV2hlbiBtZXNzYWdlcyBhcmUgZHJvcHBlZCwgaXQgc2VuZHMgYSBub3RpY2UgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIGRyb3BwZWQgbWVzc2FnZXMuXG5cblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCYjMzk7cyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciAoYG50LVx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cblxuVGhlIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgcmF0ZWxpbWl0YCB2aWEgYHJhdGVsaW1pdF9zdGF0ZV9pbml0YCwgYW5kIGBwZW5kaW5nX2Ryb3BzYCBpcyB6ZXJvLWluaXRpYWxpemVkIHNpbmNlIHRoZSB0YXJnZXQgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC5cblxuVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcGFkZGluZyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIG5vciBpcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cblxuVGhlIG5vdGljZSBpcyBmb3JtYXR0ZWQgdXNpbmcgYHNjbnByaW50ZmAgaW50byB0aGUgdGFyZ2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXHUwMDNlYnVmYCksIGFuZCB0aGUgZXhhY3QgbGVuZ3RoIHJldHVybmVkIGJ5IGBzY25wcmludGZgIGlzIHBhc3NlZCB0byBgc2VuZF91ZHBgLiBgc2NucHJpbnRmYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnl0ZXMgaXQgd3JpdGVzLCBhbmQgYHNlbmRfdWRwYCBvbmx5IHJlYWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBidWZmZXIgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLlxuXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxuXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoxNS4xODA1NDI0NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5ODUwNzAwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3N0b3JlXCIsXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd1wiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3Nob3dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cXG5cXG5UaGUgbm90aWNlIGlzIGZvcm1hdHRlZCB1c2luZyBgc2NucHJpbnRmYCBpbnRvIHRoZSB0YXJnZXQncyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciAoYG50LVxcdTAwM2VidWZgKSwgYW5kIHRoZSBleGFjdCBsZW5ndGggcmV0dXJuZWQgYnkgYHNjbnByaW50ZmAgaXMgcGFzc2VkIHRvIGBzZW5kX3VkcGAuIGBzY25wcmludGZgIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBieXRlcyBpdCB3cml0ZXMsIGFuZCBgc2VuZF91ZHBgIG9ubHkgcmVhZHMgdGhlIHNwZWNpZmllZCBsZW5ndGgsIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIGJ1ZmZlciBpcyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuXFxuXFxuVGhlIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgcmF0ZWxpbWl0YCB2aWEgYHJhdGVsaW1pdF9zdGF0ZV9pbml0YCwgYW5kIGBwZW5kaW5nX2Ryb3BzYCBpcyB6ZXJvLWluaXRpYWxpemVkIHNpbmNlIHRoZSB0YXJnZXQgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC5cXG5cXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzIHRvIHByZXZlbnQgYSBob3N0IGZyb20gc2F0dXJhdGluZyB0aGUgcmVjZWl2aW5nIGFnZW50IHdpdGggY29udGludW91cyBsb2dzLiBJdCBhZGRzIG5ldyBjb25maWdmcyBhdHRyaWJ1dGVzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCB0byBjb25maWd1cmUgdGhlIHJhdGUgbGltaXQgcGVyIHRhcmdldC4gVGhlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnNvbGUgd3JpdGUgcGF0aCB1c2luZyBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgYW5kIHRoZSBwcmludGsgY29uc29sZSB3cml0ZSBwYXRoLiBUaGUgY29uZmlnZnMgc3RvcmUvc2hvdyBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19ORVRDT05TT0xFYCwgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR19DT05GSUdGU19GU2AuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjE1LjE4MDU0Nzg1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDI3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMToxNjoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXG5pbmRleCA0YWI1ZDdiMDVjZjEwLi43MzY5Y2Q4OWFlNzZjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcbkBAIC0xNzcsNiArMTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OlxcbiAgY2F0IGNtZGxpbmUxL3JlbW90ZV9pcFxcbiAgMTAuMC4wLjNcXG4gXFxuK1JhdGUgbGltaXRpbmdcXG4rLS0tLS0tLS0tLS0tLVxcbitcXG4rTmV0Y29uc29sZSBoYW5kcyBldmVyeSBjb25zb2xlIG1lc3NhZ2UgdG8gZXZlcnkgZW5hYmxlZCB0YXJnZXQsIHNvIGEgaG9zdCB0aGF0XFxuK2xvZ3MgY29udGludW91c2x5IGNhbiBzYXR1cmF0ZSB0aGUgcmVjZWl2aW5nIGFnZW50LiBFYWNoIHRhcmdldCBjYXJyaWVzIGEgdG9rZW5cXG4rYnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5XFxuK3R3byBmaWxlcyBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeTpcXG4rXFxuKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisgICAgICAgIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyBMZW5ndGggb2YgdGhlIGFjY291bnRpbmcgaW50ZXJ2YWwsIGluXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcy4gWmVybywgdGhlIGRlZmF1bHQsIHNlbmRzXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuXFxuKyAgICAgICAgcmF0ZWxpbWl0X2J1cnN0ICAgICAgIE1lc3NhZ2VzIGFsbG93ZWQgcGVyIGludGVydmFsLiBEZWZhdWx0cyB0b1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDsgemVybyBkcm9wcyBldmVyeSBtZXNzYWdlLlxcbisgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1VubGlrZSBtb3N0IHRhcmdldCBwYXJhbWV0ZXJzLCBib3RoIGtub2JzIGNhbiBiZSB3cml0dGVuIHdoaWxlIHRoZSB0YXJnZXQgaXNcXG4rZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLlxcbitcXG4rVGhlIGxpbWl0IGlzIGFwcGxpZWQgcGVyIG1lc3NhZ2UsIG5vdCBwZXIgcGFja2V0LCBzbyBhIG1lc3NhZ2UgYmlnIGVub3VnaCB0byBiZVxcbitzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLlxcbitcXG4rQ3Jhc2ggb3V0cHV0IGJ5cGFzc2VzIHRoZSBidWNrZXQuIFdoaWxlIGFuIG9vcHMsIEJVRygpIG9yIHBhbmljKCkgaXMgaW5cXG4rcHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdFxcbitjYW5ub3QgY29zdCB5b3UgcGFydCBvZiBhIGNyYXNoIGR1bXAuXFxuK1xcbitBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzXFxuK3Nvb24gYXMgYSBtZXNzYWdlIGdldHMgdGhyb3VnaCBhZ2Fpbjo6XFxuK1xcbisgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcbitcXG4rVGhlIG5vdGljZSBvbmx5IHRyYXZlbHMgd2l0aCB0aGUgbmV4dCBtZXNzYWdlIHRoZSBidWNrZXQgYWxsb3dzLiBBIGhvc3QgdGhhdFxcbitnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9nc1xcbithZ2FpbiwgYW5kIGEgdGFyZ2V0IHdpdGggYSBgcmF0ZWxpbWl0X2J1cnN0YCBvZiB6ZXJvIG5ldmVyIHJlcG9ydHMgdGhlbS5cXG4rXFxuK25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW5cXG4rZXh0ZW5kZWQgdGFyZ2V0IHRoZSByZWNvcmQgY2FycmllcyBhIHNlcXVlbmNlIG51bWJlciBvZiB6ZXJvLlxcbitcXG4rQ2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OlxcbitcXG4rICBlY2hvIDYwMDAwIFxcdTAwM2UgcmF0ZWxpbWl0X2ludGVydmFsX21zXFxuKyAgZWNobyA1MDAgXFx1MDAzZSByYXRlbGltaXRfYnVyc3RcXG4rXFxuIEFwcGVuZCBVc2VyIERhdGFcXG4gLS0tLS0tLS0tLS0tLS0tLVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuaW5kZXggYjM1OGU1YzM2NzM1MS4uMGFmMmU1YjQzMzVjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5AQCAtNDksNiArNDksOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYXRlbGltaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcXHUwMDNlXFxuIFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJNYXR0IE1hY2thbGwgXFx1MDAzY21wbUBzZWxlbmljLmNvbVxcdTAwM2VcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb25zb2xlIGRyaXZlciBmb3IgbmV0d29yayBpbnRlcmZhY2VzXFxcIik7XFxuQEAgLTE3NSw2ICsxNzcsOCBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuICAqIEBzeXNkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcXG4gICogQHN5c2RhdGFfZmllbGRzOlxcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cXG4gICogQG1zZ2NvdW50ZXI6XFx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXFxuKyAqIEByYXRlbGltaXQ6XFx0T3BhcXVlIHN0cnVjdHVyZSB0byByYXRlbGltaXQgbWVzc2FnZXNcXG4rICogQHBlbmRpbmdfZHJvcHM6IE1lc3NhZ2VzIGRyb3BwZWQgc2luY2UgdGhlIGxhc3Qgbm90aWNlIHdhcyBzZW50LlxcbiAgKiBAc3RhdHM6XFx0UGFja2V0IHNlbmQgc3RhdHMgZm9yIHRoZSB0YXJnZXQuIFVzZWQgZm9yIGRlYnVnZ2luZy5cXG4gICogQHN0YXRlOlxcdFN0YXRlIG9mIHRoZSB0YXJnZXQuXFxuICAqXFx0XFx0VmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuXFxuQEAgLTIxOSw2ICsyMjMsOCBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiBcXHR1MzJcXHRcXHRcXHRzeXNkYXRhX2ZpZWxkcztcXG4gXFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi9cXG4gXFx0dTMyXFx0XFx0XFx0bXNnY291bnRlcjtcXG4rXFx0dTMyXFx0XFx0XFx0cGVuZGluZ19kcm9wcztcXG4rXFx0c3RydWN0IHJhdGVsaW1pdF9zdGF0ZVxcdHJhdGVsaW1pdDtcXG4gI2VuZGlmXFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcXG4gXFx0ZW51bSB0YXJnZXRfc3RhdGVcXHRzdGF0ZTtcXG5AQCAtMjgyLDYgKzI4OCwzNCBAQCBzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZudC1cXHUwMDNlcmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7XFxuK1xcdHJhdGVsaW1pdF9zZXRfZmxhZ3MoXFx1MDAyNm50LVxcdTAwM2VyYXRlbGltaXQsIFJBVEVMSU1JVF9NU0dfT05fUkVMRUFTRSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4re1xcbitcXHQvKiBBIGxpbWl0IG1lYW50IGZvciBzdGVhZHktc3RhdGUgbG9nZ2luZyBtdXN0IG5vdCBlYXQgYSBjcmFzaCBkdW1wLiAqL1xcbitcXHRpZiAob29wc19pbl9wcm9ncmVzcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKF9fcmF0ZWxpbWl0KFxcdTAwMjZudC1cXHUwMDNlcmF0ZWxpbWl0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bnQtXFx1MDAzZXBlbmRpbmdfZHJvcHMrKztcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHUzMiBkcm9wcyA9IG50LVxcdTAwM2VwZW5kaW5nX2Ryb3BzO1xcbitcXG4rXFx0bnQtXFx1MDAzZXBlbmRpbmdfZHJvcHMgPSAwO1xcbitcXHRyZXR1cm4gZHJvcHM7XFxuK31cXG4rXFxuICNlbHNlXFx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpXFxuQEAgLTMxOCw2ICszNTIsMjAgQEAgc3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbiB7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAjZW5kaWZcXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuIFxcbiAvKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cXG5AQCAtNjg2LDYgKzczNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuIFxcdG50LVxcdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XFxuIFxcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbitcXHRuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KG50KTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZudC1cXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xcbiBcXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZudC1cXHUwMDNlc2tiX3Bvb2wpO1xcbkBAIC05MTIsNiArOTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiBcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbGx1XFxcXG5cXFwiLCB4bWl0X2Ryb3BfY291bnQgKyBlbm9tZW1fY291bnQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgamlmZmllc190b19tc2VjcyhSRUFEX09OQ0UobnQtXFx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCkpKTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2J1cnN0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4rXFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCBSRUFEX09OQ0UobnQtXFx1MDAzZXJhdGVsaW1pdC5idXJzdCkpO1xcbit9XFxuK1xcbiAvKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiBjcHVfbnIgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuQEAgLTEzMDcsNiArMTM3MSw1MCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XFxuK1xcdHVuc2lnbmVkIGxvbmcgamlmcztcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsIFxcdTAwMjZpbnRlcnZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRqaWZzID0gbXNlY3NfdG9famlmZmllcyhpbnRlcnZhbCk7XFxuK1xcdGlmIChqaWZzIFxcdTAwM2UgSU5UX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbitcXHRXUklURV9PTkNFKG50LVxcdTAwM2VyYXRlbGltaXQuaW50ZXJ2YWwsIGppZnMpO1xcbitcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4rXFx0dW5zaWduZWQgaW50IGJ1cnN0O1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXFx1MDAyNmJ1cnN0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChidXJzdCBcXHUwMDNlIElOVF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG4rXFx0V1JJVEVfT05DRShudC1cXHUwMDNlcmF0ZWxpbWl0LmJ1cnN0LCBidXJzdCk7XFxuK1xcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4gc3RydWN0IHVzZXJkYXR1bSB7XFxuIFxcdHN0cnVjdCBjb25maWdfaXRlbSBpdGVtO1xcbiBcXHRjaGFyIHZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcXG5AQCAtMTY3MSw2ICsxNzc5LDggQEAgQ09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XFxuIENPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcXG4gQ09ORklHRlNfQVRUUigsIHJlbGVhc2UpO1xcbiBDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcXG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XFxuK0NPTkZJR0ZTX0FUVFIoLCByYXRlbGltaXRfYnVyc3QpO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuQEAgLTE2ODQsNiArMTc5NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2YXR0cl9sb2NhbF9tYWMsXFxuIFxcdFxcdTAwMjZhdHRyX3JlbW90ZV9tYWMsXFxuIFxcdFxcdTAwMjZhdHRyX3RyYW5zbWl0X2Vycm9ycyxcXG4rXFx0XFx1MDAyNmF0dHJfcmF0ZWxpbWl0X2ludGVydmFsX21zLFxcbitcXHRcXHUwMDI2YXR0cl9yYXRlbGltaXRfYnVyc3QsXFxuIFxcdE5VTEwsXFxuIH07XFxuIFxcbkBAIC0yNDYzLDYgKzI1NzUsMzQgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcXG4re1xcbitcXHRpbnQgbGVuID0gMDtcXG4rXFx0dTY0IHRzX3VzZWM7XFxuK1xcdHUzMiBkcm9wcztcXG4rXFxuK1xcdGRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTtcXG4rXFx0aWYgKCFkcm9wcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGV4dGVuZGVkKSB7XFxuK1xcdFxcdC8qIGFwcGVuZCB0aGUgZXh0ZW5kZWQgaGVhZGVycyAqL1xcbitcXHRcXHRpZiAobnQtXFx1MDAzZXJlbGVhc2UpXFxuK1xcdFxcdFxcdGxlbiA9IHNjbnByaW50ZihudC1cXHUwMDNlYnVmLCBzaXplb2YobnQtXFx1MDAzZWJ1ZiksIFxcXCIlcyxcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRpbml0X3V0c25hbWUoKS1cXHUwMDNlcmVsZWFzZSk7XFxuK1xcbitcXHRcXHR0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTtcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihudC1cXHUwMDNlYnVmICsgbGVuLCBzaXplb2YobnQtXFx1MDAzZWJ1ZikgLSBsZW4sXFxuK1xcdFxcdFxcdFxcdCBcXFwiJXUsMCwlbGx1LC07XFxcIiwgTE9HTEVWRUxfV0FSTklORywgdHNfdXNlYyk7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbiArPSBzY25wcmludGYobnQtXFx1MDAzZWJ1ZiArIGxlbiwgc2l6ZW9mKG50LVxcdTAwM2VidWYpIC0gbGVuLFxcbitcXHRcXHRcXHQgXFxcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGRyb3BzKTtcXG4rXFxuK1xcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBsZW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xcbiAgKiBAd2N0eHQ6IG5iY29uIHdyaXRlIGNvbnRleHRcXG5AQCAtMjQ4Miw2ICsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuIFxcdFxcdCAgICAhbmV0aWZfcnVubmluZyhudC1cXHUwMDNlbnAuZGV2KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LyogSWYgbmJjb25fZW50ZXJfdW5zYWZlKCkgZmFpbHMsIGp1c3QgcmV0dXJuIGdpdmVuIG5ldGNvbnNvbGVcXG4gXFx0XFx0ICogbG9zdCB0aGUgb3duZXJzaGlwLCBhbmQgaXRlcmF0aW5nIG92ZXIgdGhlIHRhcmdldHMgd2lsbCBub3RcXG4gXFx0XFx0ICogYmUgYWJsZSB0byByZS1hY3F1aXJlLlxcbkBAIC0yNDg5LDYgKzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG4gXFx0XFx0aWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRcXHRzZW5kX3JhdGVsaW1pdF9ub3RpY2UobnQsIGV4dGVuZGVkKTtcXG4rXFxuIFxcdFxcdGlmIChleHRlbmRlZClcXG4gXFx0XFx0XFx0c2VuZF9leHRfbXNnX3VkcChudCwgd2N0eHQpO1xcbiBcXHRcXHRlbHNlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuaW5kZXggZjA2NzRjMDAxN2ZjNC4uMDRjY2U0MGYxNjJlOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbkBAIC0xMCw2ICsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRuZXRjb25zX2NtZGxpbmUuc2ggXFxcXFxcbiBcXHRuZXRjb25zX2ZyYWdtZW50ZWRfbXNnLnNoIFxcXFxcXG4gXFx0bmV0Y29uc19vdmVyZmxvdy5zaCBcXFxcXFxuK1xcdG5ldGNvbnNfcmF0ZWxpbWl0LnNoIFxcXFxcXG4gXFx0bmV0Y29uc19yZXN1bWUuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXFxuQEAgLTAsMCArMSwxNjAgQEBcXG4rIyEvdXNyL2Jpbi9lbnYgYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIHBlci10YXJnZXQgcmF0ZSBsaW1pdC4gSXQgY29uZmlndXJlcyBhIHNtYWxsIGJ1cnN0XFxuKyMgb3ZlciBhbiBpbnRlcnZhbCBsb25nIGVub3VnaCB0aGF0IHRoZSBidWNrZXQgaXMgbmV2ZXIgcmVmaWxsZWQsIHNlbmRzIG1hbnlcXG4rIyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHNcXG4rIyB0cmFuc21pdHRpbmcgb25jZSB0aGUgYnVja2V0IGlzIGVtcHR5LlxcbisjXFxuKyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGVcXG4rIyByZWNlaXZlciBob3cgbWFueSBtZXNzYWdlcyBpdCBtaXNzZWQsIHdoaWNoIGlzIHZlcmlmaWVkIGxhc3QuXFxuKyNcXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcXHUwMDNlXFxuK1xcbitzZXQgLWV1byBwaXBlZmFpbFxcbitcXG4rU0NSSVBURElSPSQoZGlybmFtZSBcXFwiJChyZWFkbGluayAtZSBcXFwiJHtCQVNIX1NPVVJDRVswXX1cXFwiKVxcXCIpXFxuK1xcbitzb3VyY2UgXFxcIiR7U0NSSVBURElSfVxcXCIvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXFxuK1xcbisjIE1lc3NhZ2VzIHNlbnQgd2hpbGUgdGhlIGxpbWl0IGlzIGluIHBsYWNlLCBjb21mb3J0YWJseSBhYm92ZSBCVVJTVCBzbyB0aGF0XFxuKyMgdGhlIGJ1Y2tldCBpcyBkcmFpbmVkXFxuK01TR19DT1VOVD01MFxcbitCVVJTVD01XFxuKyMgTG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5vdCByZWZpbGxlZCB3aGlsZSB0aGUgdGVzdCBydW5zXFxuK0lOVEVSVkFMX01TPTYwMDAwXFxuKyMgRGVmYXVsdCB0aGUgdGFyZ2V0IHN0YXJ0cyB3aXRoLCBhcyBkb2N1bWVudGVkIGluIG5ldGNvbnNvbGUucnN0XFxuK0RFRkFVTFRfQlVSU1Q9MTBcXG4rIyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW5cXG4rRFJPUF9OT1RJQ0U9XFxcIm1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcXCJcXG4rXFxuKyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxcbitPVVRQVVRfRklMRT1cXFwiL3RtcC8ke1RBUkdFVH1cXFwiXFxuK1xcbitmdW5jdGlvbiBjb3VudF9tc2dzKCkge1xcbitcXHRsb2NhbCBGSUxFPVxcXCIkezF9XFxcIlxcbitcXG4rXFx0aWYgWyAhIC1mIFxcXCIke0ZJTEV9XFxcIiBdXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyAwXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXG4rXFx0IyBncmVwIGV4aXRzIDEgb24gbm8gbWF0Y2gsIHdoaWNoIGlzIGEgdmFsaWQgcmVzdWx0IGhlcmVcXG4rXFx0Z3JlcCAtYyBcXFwiJHtNU0d9XFxcIiBcXFwiJHtGSUxFfVxcXCIgfHwgdHJ1ZVxcbit9XFxuK1xcbitmdW5jdGlvbiBzZW5kX21zZ3MoKSB7XFxuK1xcdGxvY2FsIENPVU5UPVxcXCIkezF9XFxcIlxcbitcXHRsb2NhbCBJXFxuK1xcbitcXHRmb3IgSSBpbiAkKHNlcSBcXFwiJHtDT1VOVH1cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRlY2hvIFxcXCIke01TR306ICR7VEFSR0VUfSAke0l9XFxcIiBcXHUwMDNlIC9kZXYva21zZ1xcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgQSBmcmVzaGx5IGNyZWF0ZWQgdGFyZ2V0IGhhcyB0byBiZSB1bmxpbWl0ZWQsIG90aGVyd2lzZSBldmVyeSBleGlzdGluZ1xcbisjIG5ldGNvbnNvbGUgdXNlciB3b3VsZCBzdGFydCBkcm9wcGluZyBtZXNzYWdlcyBhZnRlciBhbiB1cGdyYWRlXFxuK2Z1bmN0aW9uIGNoZWNrX2RlZmF1bHRzKCkge1xcbitcXHRsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUXFxuK1xcbitcXHRJTlRFUlZBTD0kKGNhdCBcXFwiJHtORVRDT05TX1BBVEh9XFxcIi9yYXRlbGltaXRfaW50ZXJ2YWxfbXMpXFxuK1xcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXFxcIiR7TkVUQ09OU19QQVRIfVxcXCIvcmF0ZWxpbWl0X2J1cnN0KVxcbitcXG4rXFx0aWYgWyBcXFwiJHtJTlRFUlZBTH1cXFwiIC1uZSAwIF0gfHxcXG4rXFx0ICAgWyBcXFwiJHtCVVJTVF9ERUZBVUxUfVxcXCIgLW5lIFxcXCIke0RFRkFVTFRfQlVSU1R9XFxcIiBdXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogdW5leHBlY3RlZCByYXRlIGxpbWl0IGRlZmF1bHRzOlxcXCIgXFxcXFxcbitcXHRcXHQgICAgIFxcXCJpbnRlcnZhbD0ke0lOVEVSVkFMfSBidXJzdD0ke0JVUlNUX0RFRkFVTFR9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitmdW5jdGlvbiBjaGVja19saW1pdGVkKCkge1xcbitcXHRsb2NhbCBSRUNFSVZFRFxcbitcXG4rXFx0UkVDRUlWRUQ9JChjb3VudF9tc2dzIFxcXCIke09VVFBVVF9GSUxFfVxcXCIpXFxuK1xcbitcXHQjIFVucmVsYXRlZCBrZXJuZWwgbWVzc2FnZXMgc2hhcmUgdGhlIGJ1Y2tldCwgc28gZmV3ZXIgdGhhbiBCVVJTVCBvZlxcbitcXHQjIG91cnMgY2FuIGdldCB0aHJvdWdoLCBidXQgbmV2ZXIgbW9yZVxcbitcXHRpZiBbIFxcXCIke1JFQ0VJVkVEfVxcXCIgLWd0IFxcXCIke0JVUlNUfVxcXCIgXVxcbitcXHR0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0Y2F0IFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBUaGUgbm90aWNlIGJlbG93IHRyYXZlbHMgYWhlYWQgb2YgdGhlIG1lc3NhZ2UgdGhhdCByZW9wZW5lZCB0aGUgYnVja2V0LCBzb1xcbisjIHdhaXRpbmcgZm9yIHRoZSBmaWxlIHRvIGFwcGVhciBpcyBub3QgZW5vdWdoXFxuK2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcXG4rXFx0Z3JlcCAtcSBcXFwiJHtNU0d9XFxcIiBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIDJcXHUwMDNlIC9kZXYvbnVsbFxcbit9XFxuK1xcbisjIFRoZSBtZXNzYWdlcyBsb3N0IGFib3ZlIGhhdmUgdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHJlY2VpdmVyXFxuK2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xcbitcXHRpZiAhIGdyZXAgLXEgXFxcIiR7RFJPUF9OT1RJQ0V9XFxcIiBcXFwiJHtPVVRQVVRfRklMRX1cXFwiXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbm8gcmF0ZSBsaW1pdCBub3RpY2UgaW4gJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRjYXQgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbisjID09PT09PT09PT0gI1xcbisjIFN0YXJ0IGhlcmUgI1xcbisjID09PT09PT09PT0gI1xcbitcXG4rbW9kcHJvYmUgbmV0ZGV2c2ltIDJcXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXFxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlxcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcXG4rXFxuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxcbitjaGVja19mb3JfZGVwZW5kZW5jaWVzXFxuKyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXRcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuKyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxcbitlY2hvIFxcXCI2IDVcXFwiIFxcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcXG4rc2V0X25ldHdvcmtcXG4rIyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxcbitjcmVhdGVfZHluYW1pY190YXJnZXRcXG4rXFxuK2NoZWNrX2RlZmF1bHRzXFxuK1xcbisjIFNldCB0aGUgYnVyc3QgYmVmb3JlIHRoZSBpbnRlcnZhbCwgc28gdGhhdCBubyBtZXNzYWdlIGVzY2FwZXMgd2hpbGUgdGhlXFxuKyMgdGFyZ2V0IHN0aWxsIGNhcnJpZXMgdGhlIGRlZmF1bHQgYnVyc3RcXG4rZWNobyBcXFwiJHtCVVJTVH1cXFwiIFxcdTAwM2UgXFxcIiR7TkVUQ09OU19QQVRIfVxcXCIvcmF0ZWxpbWl0X2J1cnN0XFxuK2VjaG8gXFxcIiR7SU5URVJWQUxfTVN9XFxcIiBcXHUwMDNlIFxcXCIke05FVENPTlNfUEFUSH1cXFwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tc1xcbitcXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDI2XFxuK3dhaXRfZm9yX3BvcnQgXFxcIiR7TkFNRVNQQUNFfVxcXCIgXFxcIiR7UE9SVH1cXFwiIFxcXCJpcHY0XFxcIlxcbitzZW5kX21zZ3MgXFxcIiR7TVNHX0NPVU5UfVxcXCJcXG4rIyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzXFxuKyMgbm90aGluZyB0byBidXN5d2FpdCBvblxcbitzbGVlcCAxXFxuK3BraWxsX3NvY2F0XFxuK2NoZWNrX2xpbWl0ZWRcXG4rcm0gLWYgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbitcXG4rIyBEcm9wcGluZyB0aGUgaW50ZXJ2YWwgYmFjayB0byB6ZXJvIGhhcyB0byBtYWtlIHRoZSB0YXJnZXQgdW5saW1pdGVkIGFnYWluXFxuK2VjaG8gMCBcXHUwMDNlIFxcXCIke05FVENPTlNfUEFUSH1cXFwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tc1xcbitcXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDI2XFxuK3dhaXRfZm9yX3BvcnQgXFxcIiR7TkFNRVNQQUNFfVxcXCIgXFxcIiR7UE9SVH1cXFwiIFxcXCJpcHY0XFxcIlxcbitzZW5kX21zZ3MgMVxcbitpZiAhIGJ1c3l3YWl0IFxcXCIke0JVU1lXQUlUX1RJTUVPVVR9XFxcIiBtc2dfcmVjZWl2ZWRcXG4rdGhlblxcbitcXHRlY2hvIFxcXCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyAoJHtCVVNZV0FJVF9USU1FT1VUfSBtcykgZm9yIG5ldGNvbnNvbGVcXFwiIFxcXFxcXG4rXFx0ICAgICBcXFwibWVzc2FnZSBpbiAke09VVFBVVF9GSUxFfSBhZnRlciBjbGVhcmluZyB0aGUgcmF0ZSBsaW1pdFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rZmlcXG4rdmFsaWRhdGVfbXNnIFxcXCIke09VVFBVVF9GSUxFfVxcXCJcXG4rY2hlY2tfZHJvcHNfcmVwb3J0ZWRcXG4rcGtpbGxfc29jYXRcXG4rcm0gLWYgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbitcXG4rdHJhcCAtIEVYSVRcXG4rY2xlYW51cFxcbitleGl0IFxcXCIke2tzZnRfcGFzc31cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjE1LjY1MjI3NDg1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3MzExODg4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMgdG8gcHJldmVudCBhIGhvc3QgZnJvbSBzYXR1cmF0aW5nIHRoZSByZWNlaXZpbmcgYWdlbnQgd2l0aCBjb250aW51b3VzIGxvZ3MuIEl0IGFkZHMgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIHRvIGNvbmZpZ3VyZSB0aGUgcmF0ZSBsaW1pdCBwZXIgdGFyZ2V0LiBUaGUgcmF0ZSBsaW1pdGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgY29uc29sZSB3cml0ZSBwYXRoIHVzaW5nIGByYXRlbGltaXRfc3RhdGVgLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBjb25maWdmcyBhbmQgdGhlIHByaW50ayBjb25zb2xlIHdyaXRlIHBhdGguIFRoZSBjb25maWdmcyBzdG9yZS9zaG93IGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05FVENPTlNPTEVgLCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHX0NPTkZJR0ZTX0ZTYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi43MzY5Y2Q4OWFlNzZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNzcsNiArMTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OlxuICBjYXQgY21kbGluZTEvcmVtb3RlX2lwXG4gIDEwLjAuMC4zXG4gXG4rUmF0ZSBsaW1pdGluZ1xuKy0tLS0tLS0tLS0tLS1cbitcbitOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXRcbitsb2dzIGNvbnRpbnVvdXNseSBjYW4gc2F0dXJhdGUgdGhlIHJlY2VpdmluZyBhZ2VudC4gRWFjaCB0YXJnZXQgY2FycmllcyBhIHRva2VuXG4rYnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5XG4rdHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OlxuK1xuKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW5cbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMuIFplcm8sIHRoZSBkZWZhdWx0LCBzZW5kc1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuXG4rICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA7IHplcm8gZHJvcHMgZXZlcnkgbWVzc2FnZS5cbisgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitVbmxpa2UgbW9zdCB0YXJnZXQgcGFyYW1ldGVycywgYm90aCBrbm9icyBjYW4gYmUgd3JpdHRlbiB3aGlsZSB0aGUgdGFyZ2V0IGlzXG4rZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLlxuK1xuK1RoZSBsaW1pdCBpcyBhcHBsaWVkIHBlciBtZXNzYWdlLCBub3QgcGVyIHBhY2tldCwgc28gYSBtZXNzYWdlIGJpZyBlbm91Z2ggdG8gYmVcbitzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLlxuK1xuK0NyYXNoIG91dHB1dCBieXBhc3NlcyB0aGUgYnVja2V0LiBXaGlsZSBhbiBvb3BzLCBCVUcoKSBvciBwYW5pYygpIGlzIGluXG4rcHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdFxuK2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC5cbitcbitBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzXG4rc29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjpcbitcbisgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuK1xuK1RoZSBub3RpY2Ugb25seSB0cmF2ZWxzIHdpdGggdGhlIG5leHQgbWVzc2FnZSB0aGUgYnVja2V0IGFsbG93cy4gQSBob3N0IHRoYXRcbitnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9nc1xuK2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLlxuK1xuK25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW5cbitleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uXG4rXG4rQ2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OlxuK1xuKyAgZWNobyA2MDAwMCBcdTAwM2UgcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rICBlY2hvIDUwMCBcdTAwM2UgcmF0ZWxpbWl0X2J1cnN0XG4rXG4gQXBwZW5kIFVzZXIgRGF0YVxuIC0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTQ5LDYgKzQ5LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhdGVsaW1pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCJNYXR0IE1hY2thbGwgXHUwMDNjbXBtQHNlbGVuaWMuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXNcIik7XG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuKyAqIEByYXRlbGltaXQ6XHRPcGFxdWUgc3RydWN0dXJlIHRvIHJhdGVsaW1pdCBtZXNzYWdlc1xuKyAqIEBwZW5kaW5nX2Ryb3BzOiBNZXNzYWdlcyBkcm9wcGVkIHNpbmNlIHRoZSBsYXN0IG5vdGljZSB3YXMgc2VudC5cbiAgKiBAc3RhdHM6XHRQYWNrZXQgc2VuZCBzdGF0cyBmb3IgdGhlIHRhcmdldC4gVXNlZCBmb3IgZGVidWdnaW5nLlxuICAqIEBzdGF0ZTpcdFN0YXRlIG9mIHRoZSB0YXJnZXQuXG4gICpcdFx0VmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuXG5AQCAtMjE5LDYgKzIyMyw4IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHR1MzJcdFx0XHRzeXNkYXRhX2ZpZWxkcztcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovXG4gXHR1MzJcdFx0XHRtc2djb3VudGVyO1xuK1x0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbitcdHN0cnVjdCByYXRlbGltaXRfc3RhdGVcdHJhdGVsaW1pdDtcbiAjZW5kaWZcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcbiBcdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbkBAIC0yODIsNiArMjg4LDM0IEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXHUwMDI2bnQtXHUwMDNlcmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7XG4rXHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdC8qIEEgbGltaXQgbWVhbnQgZm9yIHN0ZWFkeS1zdGF0ZSBsb2dnaW5nIG11c3Qgbm90IGVhdCBhIGNyYXNoIGR1bXAuICovXG4rXHRpZiAob29wc19pbl9wcm9ncmVzcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKF9fcmF0ZWxpbWl0KFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMrKztcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdHUzMiBkcm9wcyA9IG50LVx1MDAzZXBlbmRpbmdfZHJvcHM7XG4rXG4rXHRudC1cdTAwM2VwZW5kaW5nX2Ryb3BzID0gMDtcbitcdHJldHVybiBkcm9wcztcbit9XG4rXG4gI2Vsc2VcdC8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG4gXG4gc3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbkBAIC0zMTgsNiArMzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiB7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuIFxuIC8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuQEAgLTY4Niw2ICs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbitcdG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQobnQpO1xuIFx0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcbiBcdC8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovXG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm50LVx1MDAzZXNrYl9wb29sKTtcbkBAIC05MTIsNiArOTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsbHVcXG5cIiwgeG1pdF9kcm9wX2NvdW50ICsgZW5vbWVtX2NvdW50KTtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIldVxcblwiLFxuK1x0XHRcdCAgamlmZmllc190b19tc2VjcyhSRUFEX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmludGVydmFsKSkpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIFJFQURfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QpKTtcbit9XG4rXG4gLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbkBAIC0xMzA3LDYgKzEzNzEsNTAgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4rXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4rXHR1bnNpZ25lZCBsb25nIGppZnM7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2aW50ZXJ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGppZnMgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTtcbitcdGlmIChqaWZzIFx1MDAzZSBJTlRfTUFYKVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4rXHRXUklURV9PTkNFKG50LVx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCwgamlmcyk7XG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbitcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgYnVyc3Q7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2YnVyc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChidXJzdCBcdTAwM2UgSU5UX01BWClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuK1x0V1JJVEVfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QsIGJ1cnN0KTtcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gc3RydWN0IHVzZXJkYXR1bSB7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbiBcdGNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dO1xuQEAgLTE2NzEsNiArMTc3OSw4IEBAIENPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xuIENPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcbiBDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG4gQ09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2VuYWJsZWQsXG5AQCAtMTY4NCw2ICsxNzk0LDggQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2xvY2FsX21hYyxcbiBcdFx1MDAyNmF0dHJfcmVtb3RlX21hYyxcbiBcdFx1MDAyNmF0dHJfdHJhbnNtaXRfZXJyb3JzLFxuK1x0XHUwMDI2YXR0cl9yYXRlbGltaXRfaW50ZXJ2YWxfbXMsXG4rXHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9idXJzdCxcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC0yNDYzLDYgKzI1NzUsMzQgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXG4re1xuK1x0aW50IGxlbiA9IDA7XG4rXHR1NjQgdHNfdXNlYztcbitcdHUzMiBkcm9wcztcbitcbitcdGRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTtcbitcdGlmICghZHJvcHMpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChleHRlbmRlZCkge1xuK1x0XHQvKiBhcHBlbmQgdGhlIGV4dGVuZGVkIGhlYWRlcnMgKi9cbitcdFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4rXHRcdFx0bGVuID0gc2NucHJpbnRmKG50LVx1MDAzZWJ1Ziwgc2l6ZW9mKG50LVx1MDAzZWJ1ZiksIFwiJXMsXCIsXG4rXHRcdFx0XHRcdGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpO1xuK1xuK1x0XHR0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTtcbitcdFx0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdFx0IFwiJXUsMCwlbGx1LC07XCIsIExPR0xFVkVMX1dBUk5JTkcsIHRzX3VzZWMpO1xuK1x0fVxuK1xuK1x0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdCBcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwiLFxuK1x0XHRcdCBkcm9wcyk7XG4rXG4rXHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG4gICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG5AQCAtMjQ4Miw2ICsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4gXHRcdCAgICAhbmV0aWZfcnVubmluZyhudC1cdTAwM2VucC5kZXYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIElmIG5iY29uX2VudGVyX3Vuc2FmZSgpIGZhaWxzLCBqdXN0IHJldHVybiBnaXZlbiBuZXRjb25zb2xlXG4gXHRcdCAqIGxvc3QgdGhlIG93bmVyc2hpcCwgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSB0YXJnZXRzIHdpbGwgbm90XG4gXHRcdCAqIGJlIGFibGUgdG8gcmUtYWNxdWlyZS5cbkBAIC0yNDg5LDYgKzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbiBcdFx0aWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKVxuIFx0XHRcdHJldHVybjtcbiBcbitcdFx0c2VuZF9yYXRlbGltaXRfbm90aWNlKG50LCBleHRlbmRlZCk7XG4rXG4gXHRcdGlmIChleHRlbmRlZClcbiBcdFx0XHRzZW5kX2V4dF9tc2dfdWRwKG50LCB3Y3R4dCk7XG4gXHRcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggZjA2NzRjMDAxN2ZjNC4uMDRjY2U0MGYxNjJlOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMCw2ICsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfY21kbGluZS5zaCBcXFxuIFx0bmV0Y29uc19mcmFnbWVudGVkX21zZy5zaCBcXFxuIFx0bmV0Y29uc19vdmVyZmxvdy5zaCBcXFxuK1x0bmV0Y29uc19yYXRlbGltaXQuc2ggXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxuQEAgLTAsMCArMSwxNjAgQEBcbisjIS91c3IvYmluL2VudiBiYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgcGVyLXRhcmdldCByYXRlIGxpbWl0LiBJdCBjb25maWd1cmVzIGEgc21hbGwgYnVyc3RcbisjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55XG4rIyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHNcbisjIHRyYW5zbWl0dGluZyBvbmNlIHRoZSBidWNrZXQgaXMgZW1wdHkuXG4rI1xuKyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGVcbisjIHJlY2VpdmVyIGhvdyBtYW55IG1lc3NhZ2VzIGl0IG1pc3NlZCwgd2hpY2ggaXMgdmVyaWZpZWQgbGFzdC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rU0NSSVBURElSPSQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiKVxuK1xuK3NvdXJjZSBcIiR7U0NSSVBURElSfVwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuK1xuKyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXRcbisjIHRoZSBidWNrZXQgaXMgZHJhaW5lZFxuK01TR19DT1VOVD01MFxuK0JVUlNUPTVcbisjIExvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBub3QgcmVmaWxsZWQgd2hpbGUgdGhlIHRlc3QgcnVuc1xuK0lOVEVSVkFMX01TPTYwMDAwXG4rIyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3RcbitERUZBVUxUX0JVUlNUPTEwXG4rIyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW5cbitEUk9QX05PVElDRT1cIm1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFwiXG4rXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXG4rT1VUUFVUX0ZJTEU9XCIvdG1wLyR7VEFSR0VUfVwiXG4rXG4rZnVuY3Rpb24gY291bnRfbXNncygpIHtcbitcdGxvY2FsIEZJTEU9XCIkezF9XCJcbitcbitcdGlmIFsgISAtZiBcIiR7RklMRX1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gMFxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHQjIGdyZXAgZXhpdHMgMSBvbiBubyBtYXRjaCwgd2hpY2ggaXMgYSB2YWxpZCByZXN1bHQgaGVyZVxuK1x0Z3JlcCAtYyBcIiR7TVNHfVwiIFwiJHtGSUxFfVwiIHx8IHRydWVcbit9XG4rXG4rZnVuY3Rpb24gc2VuZF9tc2dzKCkge1xuK1x0bG9jYWwgQ09VTlQ9XCIkezF9XCJcbitcdGxvY2FsIElcbitcbitcdGZvciBJIGluICQoc2VxIFwiJHtDT1VOVH1cIilcbitcdGRvXG4rXHRcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfSAke0l9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0ZG9uZVxuK31cbitcbisjIEEgZnJlc2hseSBjcmVhdGVkIHRhcmdldCBoYXMgdG8gYmUgdW5saW1pdGVkLCBvdGhlcndpc2UgZXZlcnkgZXhpc3RpbmdcbisjIG5ldGNvbnNvbGUgdXNlciB3b3VsZCBzdGFydCBkcm9wcGluZyBtZXNzYWdlcyBhZnRlciBhbiB1cGdyYWRlXG4rZnVuY3Rpb24gY2hlY2tfZGVmYXVsdHMoKSB7XG4rXHRsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUXG4rXG4rXHRJTlRFUlZBTD0kKGNhdCBcIiR7TkVUQ09OU19QQVRIfVwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tcylcbitcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfYnVyc3QpXG4rXG4rXHRpZiBbIFwiJHtJTlRFUlZBTH1cIiAtbmUgMCBdIHx8XG4rXHQgICBbIFwiJHtCVVJTVF9ERUZBVUxUfVwiIC1uZSBcIiR7REVGQVVMVF9CVVJTVH1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiB1bmV4cGVjdGVkIHJhdGUgbGltaXQgZGVmYXVsdHM6XCIgXFxcbitcdFx0ICAgICBcImludGVydmFsPSR7SU5URVJWQUx9IGJ1cnN0PSR7QlVSU1RfREVGQVVMVH1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gY2hlY2tfbGltaXRlZCgpIHtcbitcdGxvY2FsIFJFQ0VJVkVEXG4rXG4rXHRSRUNFSVZFRD0kKGNvdW50X21zZ3MgXCIke09VVFBVVF9GSUxFfVwiKVxuK1xuK1x0IyBVbnJlbGF0ZWQga2VybmVsIG1lc3NhZ2VzIHNoYXJlIHRoZSBidWNrZXQsIHNvIGZld2VyIHRoYW4gQlVSU1Qgb2ZcbitcdCMgb3VycyBjYW4gZ2V0IHRocm91Z2gsIGJ1dCBuZXZlciBtb3JlXG4rXHRpZiBbIFwiJHtSRUNFSVZFRH1cIiAtZ3QgXCIke0JVUlNUfVwiIF1cbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjIFRoZSBub3RpY2UgYmVsb3cgdHJhdmVscyBhaGVhZCBvZiB0aGUgbWVzc2FnZSB0aGF0IHJlb3BlbmVkIHRoZSBidWNrZXQsIHNvXG4rIyB3YWl0aW5nIGZvciB0aGUgZmlsZSB0byBhcHBlYXIgaXMgbm90IGVub3VnaFxuK2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcbitcdGdyZXAgLXEgXCIke01TR31cIiBcIiR7T1VUUFVUX0ZJTEV9XCIgMlx1MDAzZSAvZGV2L251bGxcbit9XG4rXG4rIyBUaGUgbWVzc2FnZXMgbG9zdCBhYm92ZSBoYXZlIHRvIGJlIHJlcG9ydGVkIHRvIHRoZSByZWNlaXZlclxuK2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xuK1x0aWYgISBncmVwIC1xIFwiJHtEUk9QX05PVElDRX1cIiBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IG5vIHJhdGUgbGltaXQgbm90aWNlIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjID09PT09PT09PT0gI1xuKyMgU3RhcnQgaGVyZSAjXG4rIyA9PT09PT09PT09ICNcbitcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK1xuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSlcbitlY2hvIFwiNiA1XCIgXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcbitzZXRfbmV0d29ya1xuKyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbitjcmVhdGVfZHluYW1pY190YXJnZXRcbitcbitjaGVja19kZWZhdWx0c1xuK1xuKyMgU2V0IHRoZSBidXJzdCBiZWZvcmUgdGhlIGludGVydmFsLCBzbyB0aGF0IG5vIG1lc3NhZ2UgZXNjYXBlcyB3aGlsZSB0aGVcbisjIHRhcmdldCBzdGlsbCBjYXJyaWVzIHRoZSBkZWZhdWx0IGJ1cnN0XG4rZWNobyBcIiR7QlVSU1R9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2J1cnN0XG4rZWNobyBcIiR7SU5URVJWQUxfTVN9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCIke09VVFBVVF9GSUxFfVwiIFx1MDAyNlxuK3dhaXRfZm9yX3BvcnQgXCIke05BTUVTUEFDRX1cIiBcIiR7UE9SVH1cIiBcImlwdjRcIlxuK3NlbmRfbXNncyBcIiR7TVNHX0NPVU5UfVwiXG4rIyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzXG4rIyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uXG4rc2xlZXAgMVxuK3BraWxsX3NvY2F0XG4rY2hlY2tfbGltaXRlZFxuK3JtIC1mIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuKyMgRHJvcHBpbmcgdGhlIGludGVydmFsIGJhY2sgdG8gemVybyBoYXMgdG8gbWFrZSB0aGUgdGFyZ2V0IHVubGltaXRlZCBhZ2FpblxuK2VjaG8gMCBcdTAwM2UgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfaW50ZXJ2YWxfbXNcbitcbitsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDI2XG4rd2FpdF9mb3JfcG9ydCBcIiR7TkFNRVNQQUNFfVwiIFwiJHtQT1JUfVwiIFwiaXB2NFwiXG4rc2VuZF9tc2dzIDFcbitpZiAhIGJ1c3l3YWl0IFwiJHtCVVNZV0FJVF9USU1FT1VUfVwiIG1zZ19yZWNlaXZlZFxuK3RoZW5cbitcdGVjaG8gXCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyAoJHtCVVNZV0FJVF9USU1FT1VUfSBtcykgZm9yIG5ldGNvbnNvbGVcIiBcXFxuK1x0ICAgICBcIm1lc3NhZ2UgaW4gJHtPVVRQVVRfRklMRX0gYWZ0ZXIgY2xlYXJpbmcgdGhlIHJhdGUgbGltaXRcIiBcdTAwM2VcdTAwMjYyXG4rXHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitmaVxuK3ZhbGlkYXRlX21zZyBcIiR7T1VUUFVUX0ZJTEV9XCJcbitjaGVja19kcm9wc19yZXBvcnRlZFxuK3BraWxsX3NvY2F0XG4rcm0gLWYgXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rdHJhcCAtIEVYSVRcbitjbGVhbnVwXG4rZXhpdCBcIiR7a3NmdF9wYXNzfVwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoxNS42NTIyNzY0MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQyNTcxNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIHRvIG5ldGNvbnNvbGUuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBwbGFjZS4gVGhleSdyZSBhZGRpbmcgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGFzIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGEgc2Vuc2libGUgYXBwcm9hY2ggZm9yIGNvbnRyb2xsaW5nIHRoZSByYXRlIGxpbWl0aW5nIHBhcmFtZXRlcnMuIEkgc2VlIHRoZXkncmUgdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAgYW5kIGBfX3JhdGVsaW1pdGAsIHdoaWNoIHN1Z2dlc3RzIHRoZXkgYXJlIHVzaW5nIHRoZSBleGlzdGluZyBrZXJuZWwgcmF0ZWxpbWl0IGluZnJhc3RydWN0dXJlIGVmZmVjdGl2ZWx5LiBQbHVzLCBhIG5vdGlmaWNhdGlvbiBmb3IgZHJvcHBlZCBtZXNzYWdlcz8gR29vZCwgdGhhdCdzIGNydWNpYWwgZm9yIG9ic2VydmFiaWxpdHkuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlIGNydWNpYWwgYml0cyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCdzIGluc2lkZSB0aGUgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGJsb2NrLiBXYWl0LCBJJ20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcuLi4geWVzLCBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAgKmlzKiBhbHNvIGRlZmluZWQgd2l0aGluIHRoYXQgc2FtZSBgI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGJsb2NrLiBPa2F5LCBhbGwgbG9va3MgZ29vZCBzbyBmYXIuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IGluIG91ciBzZXR1cCwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIHdlbGwtc2NvcGVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoyMC40OTQ4NTA1ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MDIxNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxND1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNjojaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy1cXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXFx0Z3JvdXA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDgtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzExPXN0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTk6I2Vsc2VcXHQvKiAhQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzY0PXN0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzY4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNjk6I2VuZGlmXFx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Nzk2PXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODIwOiNpZmRlZlxcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODIxLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMDY9c3RhdGljIGludCBwcmVwYXJlX3N5c2RhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LX1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAyOTojZW5kaWZcXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMzAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4Nj1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzAtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjMzMz1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzNzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzM4LVxcdFxcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzNTA9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNTgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNTk6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2MC1cXHRzeXNkYXRhID0gbnQtXFx1MDAzZXN5c2RhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM5ND1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwOC1cXHRzeXNkYXRhX3B0ciA9IG50LVxcdTAwM2VzeXNkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MzI9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NDMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDQ6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU0NS1cXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3Njg9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxMS1cXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgxMjpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MTMtXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODMwPXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgzNS1cXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4MzY6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODM3LVxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cXHUwMDNldXNlcmRhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODYwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NzMtXFx0XFx0XFx0aWYgKElTX0VSUihudCkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg3NDpcXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg3NS1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTY6MjAuNTQ3NDYwNDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNjU1NzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHJhdGUgbGltaXRpbmcgZm9yIE5ldGNvbnNvbGUgaXMgaGFuZGxlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhpcyByYXRlIGxpbWl0aW5nIGlzIGNvbmZpZ3VyZWQgYW5kIGNvbnRyb2xsZWQuIFRoZSBjbHVlIGlzIHRoYXQgSSBzZWUgbWVudGlvbiBvZiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCBhbmQgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAuIFRob3NlIHNvdW5kIGxpa2UgY29uZmlnZnMgYXR0cmlidXRlcywgYW5kIHRoYXQncyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3Igb2YgZHluYW1pYyBjb25maWd1cmF0aW9uLiBUaGUga2VybmVsIG9mdGVuIHVzZXMgY29uZmlnZnMgZm9yIHN5c2ZzLWxpa2UgaW50ZXJmYWNlcyB0aGF0IGNhbiBiZSBtb2RpZmllZCBhdCBydW50aW1lLlxuXG5JIGFsc28gcmVtZW1iZXIgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIGR5bmFtaWMgY29uZmlndXJhdGlvbiBpcyB1c3VhbGx5IGEgc2VwYXJhdGUgZmVhdHVyZS5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCB0byBzZWUgdGhlIG1lY2hhbmlzbXMgdXNlZCB0byBjb250cm9sIHRoZSBsaW1pdGluZyBiZWhhdmlvci4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXRhaWxzIG9uIHdoZXJlIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgcmVzaWRlIGFuZCBob3cgdGhlc2UgYXR0cmlidXRlIHZhbHVlcyBpbXBhY3QgdGhlIHJhdGUgbGltaXRpbmcgbG9naWMgd2l0aGluIHRoZSBuZXRjb25zb2xlIGRyaXZlciBpdHNlbGYuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHRpbWVyIG9yIGNvdW50ZXItYmFzZWQgaW1wbGVtZW50YXRpb24sIGJ1dCBJIHdhbnQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoyNS43NzQwMTk3MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2NzI4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM0OD1zdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNzQ6c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM3NS1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTY6MjUuODMwNjk2MjQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3Nzg2NjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25zb2xlIFJhdGUgTGltaXRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0ZSBsaW1pdGluZyBiZWhhdmlvciBpbiB0aGUgbmV0d29yayBjb25zb2xlLiBUaGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoYXQgaXMgaW4gdGhlIGNvcmUgZHJpdmVyIGZpbGU6IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHBpZWNlcyByZWxhdGVkIHRvIHJhdGUgbGltaXRpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvbmZpZ3VyYXRpb24gb3Igc3RvcmFnZSBvZiBidXJzdCBsaW1pdHMuIE15IHRhcmdldCBpcyBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYC4gVGhhdCBuYW1lIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LCBzbyBpdCBzaG91bGQgbGVhZCBtZSByaWdodCB0byB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjMxLjYwODU2NTY2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzNzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXRlbGltaXRfYnVyc3Rfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM5Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM5NzpzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTgtXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjMxLjY1NDQwOTA2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODMyMjUyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gTmV0Y29uc29sZSBSYXRlbGltaXRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldHdvcmsgY29uc29sZSBoYW5kbGVzIHJhdGUgbGltaXRpbmcuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBmbG9vZGluZyBtaWdodCBiZSBhbiBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBmdW5jdGlvbiwgYXNzdW1pbmcgaXQgZXhpc3RzLiBUaGlzIGlzIGEgY29tbW9uIG5hbWluZyBjb252ZW50aW9uLCBhbmQgaXQncyBsaWtlbHkgdG8gYmUgdGhlIGVudHJ5IHBvaW50IG9yIGNlbnRyYWwgZnVuY3Rpb24gcmVsYXRlZCB0byByYXRlIGxpbWl0aW5nIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBtb2R1bGUuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGxvZ2ljLCB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG0gdGhleSB1c2UsIGFuZCBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgb3ZlcndoZWxtaW5nIG5ldHdvcmsgdHJhZmZpYy4gSSB3aWxsIHRoZW4gY3Jvc3MgcmVmZXJlbmNlIG90aGVyIGFyZWFzIG9mIHRoZSBjb2RlIGJhc2UgdGhhdCBhcmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjozNS45Mzc2MzY4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNDYyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV9yYXRlbGltaXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI5MT1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyOTc6c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM1NT1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNTk6c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MTM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYyNTpcXHRcXHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MjYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjM1Ljk4MDk4NzM5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTU4MTUyMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBOZXcgUmF0ZSBMaW1pdGluZyBGZWF0dXJlKipcblxuT2theSwgc28gdGhpcyBmZWF0dXJlIGxvb2tzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJdCdzIGFkZGluZyBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCBhbmQgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIHdoaWNoIGFyZSBjb25maWdmcyBhdHRyaWJ1dGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0IGBzaG93YCBmdW5jdGlvbnM6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AuIEFuZCwgb2YgY291cnNlLCB0aGUga2V5IGxpbWl0aW5nIGZ1bmN0aW9ucywgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIHN0YXRpYz8gWWVwLCBpdCBpcy4gSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGNvbmZpZ2ZzIGBzdG9yZWAgYW5kIGBzaG93YCBmdW5jdGlvbnMgYXJlICp1c3VhbGx5KiBzdGF0aWMgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgYGNvbmZpZ2ZzX2F0dHJpYnV0ZWAgc3RydWN0dXJlLiBCdXQgdGhlIHByb21wdCBpcyBhc2tpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBBcmUgdGhlcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaD9cblxuTGV0IG1lIHJldmlldyB0aGUgZnVuY3Rpb25zIGFkZGVkIGJ5IHRoaXMgcGF0Y2ggdG8gc2VlIHdoaWNoIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gT2theSwgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCwgaXQnczpcblxuKiAgIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCAoc3RhdGljKVxuKiAgIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCAoc3RhdGljKVxuKiAgIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgIChzdGF0aWMpXG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCAoc3RhdGljKVxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AgKHN0YXRpYylcbiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCAoc3RhdGljKVxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgIChzdGF0aWMpXG4qICAgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgKHN0YXRpYylcblxuRGFtbiEgVGhleSdyZSAqYWxsKiBzdGF0aWMuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29uZmlnZnMgYXR0cmlidXRlIGZ1bmN0aW9ucyBhcyB0aGV5IGFyZSB1c2VkIGluIGEgdW5pcXVlIHdheSB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIG1haW4gd3JpdGUgZnVuY3Rpb24sIGBuZXRjb25zb2xlX3dyaXRlYC5cblxuQnV0IGhvbGQgb24sIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogd2FudHMgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMuIFRoZSBwcm9tcHQgc2F5cyBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiBCdXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgY29uZmlnZnMgc3RvcmUvc2hvdyBmdW5jdGlvbnMgYXJlICpub3QqIGlubGluZWQuIFRoZXkgYXJlIG5vdCBpbmxpbmVkIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBhbmQgcHV0IGludG8gc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZS4gU28gaXQncyBzdGlsbCBnb29kLiBJIHNob3VsZCBjaGVjayBob3cgdGhleSBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTY6NDUuOTM5MTQzNDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk2MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0FUVFIuKnJhdGVsaW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3ODE9Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3ODI6Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3ODM6Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjQ1Ljk4NDA0MjIwNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDI2MjkwNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHJhdGUgbGltaXRpbmcgaXMgaGFuZGxlZCBpbiB0aGUgYG5ldGNvbnNvbGVgIGNvZGUsIHNwZWNpZmljYWxseSBob3cgYENPTkZJR0ZTX0FUVFJgIGlzIHVzZWQuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCB0aGlzIG1hY3JvIHNvbWVob3cgaW5saW5lZCBvciBkaXJlY3RseSB1c2VkIGZ1bmN0aW9ucyBsaWtlIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBpdCBsb29rcyBsaWtlIGBDT05GSUdGU19BVFRSYCBnZW5lcmF0ZXMgYSBgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZWAgbmFtZWQgYGF0dHJfcmF0ZWxpbWl0X2ludGVydmFsX21zYCwgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnBhc3NlZCogdG8gdGhpcyBnZW5lcmF0ZWQgc3RydWN0dXJlLlxuXG5UaGF0IG1ha2VzIG1vcmUgc2Vuc2UuIFRoZSBtYWNybyBuZWVkcyBgbmFtZV9zdG9yZWAgYW5kIGBuYW1lX3Nob3dgIHRvIGV4aXN0LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIG1lYW5zIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmVuJ3QgYmVpbmcgaW5saW5lZCwgYXMgSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBhbHNvIG1lYW5zIHdlIGNhbiwgYW5kIHNob3VsZCwgaW5jbHVkZSB0aGVtIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIG1vdmluZyB1cHN0cmVhbSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHdyaXRpbmcgbWVzc2FnZXMgYXBwZWFycyB0byBiZSBgbmV0Y29uc29sZV93cml0ZWAuIFRoaXMgZnVuY3Rpb24sIEkgYmVsaWV2ZSwgY2FsbHMgaW50byB0aGUgcmF0ZSBsaW1pdGluZyBsb2dpYywgbmFtZWx5IGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBhbmQgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbmV0Y29uc29sZV93cml0ZWAgaXMgbm90IHN0YXRpYy4gVGhhdCBpcyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjU0LjAxMDMzNTExOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMTE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1Nzg9c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwNi0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwNzogKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MDgtICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYxMzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxNC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0Ny1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjQ4LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0OTpcXHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCB0cnVlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1MC19XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTI6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU1OlxcdG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjg0Mj1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0NC1cXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9FWFRFTkRFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODQ1OlxcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NjpcXHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDctXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODUxPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NTMtXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1NDpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1NTpcXHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg1Ni1cXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjo1NC4wNTM1NTA0MjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTY0NzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRjb25zb2xlIEltcGxlbWVudGF0aW9uIFBsYW4qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5ldGNvbnNvbGVgIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIHdyaXRlIGZ1bmN0aW9uLCBgbmV0Y29uc29sZV93cml0ZWAsIGlzIGFjdHVhbGx5IHN0YXRpYy4gVGhhdCdzIGludGVyZXN0aW5nLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdlcmUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLCBidXQgdGhvc2UgYXJlIGFsc28gc3RhdGljLCB0b28uIEl0IG1ha2VzIHNlbnNlIG5vdyAtIHRoZXkncmUgY2FsbGVkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIHRoYXQgYHN0cnVjdCBjb25zb2xlYC4gQWxyaWdodCwgdGhhdCBjbGVhcnMgdGhhdCB1cC5cblxuU28sIEkgdGhpbmsgSSBjYW4gaW5jbHVkZSBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCwgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaW4gdGhlIG5ldyBwbGFuLiBcblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcm9hZCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWw6IHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSdsbCBuZWVkIHRvIHdvcmsgd2l0aD8gSSBrbm93IHRoZXJlJ3MgYENPTkZJR19ORVRDT05TT0xFYCwgYW5kIEkgdGhpbmsgdGhlcmUncyBhIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBhcyB3ZWxsLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgYXJlIHRoZSBjb3JyZWN0IG5hbWVzLiBCZXN0IHRvIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCdzIGhlYWQgdGhlcmUgYW5kIHZlcmlmeSB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjU5LjExMzIwMDAyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4OTMyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRDT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjo1OS40MDIxMzg0NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1MDcwMzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llczpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCDigJMgaW1wb3J0YW50IG9wdGlvbnMgaW4gbmV0d29yayBjb25maWd1cmF0aW9uLCBJIHByZXN1bWUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG1hcCBvdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG9wdGlvbnMsIGhhcmR3YXJlLCBvciBsaWJyYXJpZXMgYXJlIGNvbnRpbmdlbnQgb24gdGhlc2UgYmVpbmcgZW5hYmxlZCwgYW5kLCBjb252ZXJzZWx5LCB3aGF0IHRoZXNlIGRlcGVuZCBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kdWxlLCBvciBhcmUgdGhlcmUgd2lkZXIgaW1wbGljYXRpb25zIGZvciB0aGUgc3lzdGVtJ3MgbmV0d29yayBzdGFjaz9cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbnMgZm9yIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYW5kIGBkZWZhdWx0YCBzdGF0ZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoLiBUaGF0IHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSBpZiBlbmFibGluZyBvbmUgYXV0b21hdGljYWxseSBlbmFibGVzLCBvciBpbXBsaWVzLCB0aGUgb3RoZXIsIG9yIGlmIHRoZXJlJ3MgYW55IGNvbmZsaWN0LiBJJ20gbG9va2luZyBmb3IgZGlyZWN0IGFuZCBpbmRpcmVjdCByZWxhdGlvbnNoaXBzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBuZXR3b3JrIGRyaXZlcnMsIGNvcmUgbmV0d29ya2luZyBtb2R1bGVzLCBvciBwb3RlbnRpYWxseSB0aGluZ3MgbGlrZSBsb2dnaW5nIGZyYW1ld29ya3M/XG5cbkZ1cnRoZXJtb3JlLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSdzIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmVoYXZpb3IgaGVyZS4gRG9lcyB0aGUgZGVwZW5kZW5jeSB0cmVlIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIENQVSBhcmNoaXRlY3R1cmUsIHRoZSBib2FyZCwgb3IgdGhlIGNob3NlbiBuZXR3b3JraW5nIGhhcmR3YXJlPyBJJ2xsIGFsc28gd2FudCB0byByZXZpZXcgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoZWlyIHB1cnBvc2Ugb3IgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSB3YXJuaW5ncyBvciBub3RlcyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMsIHN1Y2ggYXMgZmlyZXdhbGxzLCByb3V0aW5nIHByb3RvY29scywgb3IgZXZlbiBwb3dlciBtYW5hZ2VtZW50LlxuXG5VbHRpbWF0ZWx5LCBJIG5lZWQgYSBjb25jaXNlIGFuZCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhhdCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIGFzIGl0IHNob3VsZCBiZSwgd2l0aG91dCBjb25mbGljdHMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBlbmFibGluZyB0aGVzZSBvcHRpb25zOyBpdCdzIGFib3V0IG1ha2luZyBpbmZvcm1lZCBjaG9pY2VzIHRoYXQgYWxpZ24gd2l0aCB0aGUgc3BlY2lmaWMgbmVlZHMgb2YgdGhlIHN5c3RlbSwgYW5kIHRoYXQgZ3VhcmFudGVlIG9wdGltYWwgYmVoYXZpb3IsIHN0YWJpbGl0eSwgYW5kIHNlY3VyaXR5IGluIHRoZSB0YXJnZXQgZGVwbG95bWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzowNS4wNTI4NDQyMDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjc6XFx0Y29uZmlnIE5FVENPTlNPTEVcXG4gMzI4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG4gMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzowNS4wNTI5NDI5NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4NTY3ODM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgTkVUQ09OU09MRWAgbW9kdWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0J3MgY2xlYXIgSSdsbCBuZWVkIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgZW5hYmxlZC4gQWxzbywgYENPTkZJR0ZTX0ZTYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50LiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBQUklOVEtgIGFuZCBgU1lTRlNgIGFyZSBlbmFibGVkIHNpbmNlIHRob3NlIGFyZSB1c3VhbGx5IGEgZ2l2ZW4uIFNvIGZhciwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGxvb2tzIGxpa2UgdGhpczogYFtcIk5FVENPTlNPTEVcIiwgXCJORVRDT05TT0xFX0RZTkFNSUNcIiwgXCJDT05GSUdGU19GU1wiXWAuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgcGF0Y2ggdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uLiBJIHNlZSBhIGZldyBrZXkgb25lczogYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgLCBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAsIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgLCBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHJhdGUtbGltaXRpbmcgcGFyYW1ldGVycyBsaWtlIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYW5kIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgLlxuXG5TcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgb3Igb25lcyB0aGF0IGhhdmUgdGhlaXIgYWRkcmVzc2VzIHRha2VuLiBMZXQgbWUgc2VlLi4uIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AgYXJlIHRoZSBvbmVzIHRoYXQganVtcCBvdXQuXG5cbkxldCdzIHNlZSwgaXMgYG5ldGNvbnNvbGVfd3JpdGVgIGFkZHJlc3MtdGFrZW4/IE5vLCBidXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGFyZS4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIFNvIEkgY2FuIGluY2x1ZGUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEFuZCBJIHRoaW5rIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmUgYWxzbyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZm9jdXMgb24uXG5cbkZpbmFsbHksIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgZXZlbiBwcmVzZW50IGluIHRoZSBrZXJuZWwgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTc6MTEuOTM4NjIzNDQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE2MjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MTM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0Ny1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI4NDI9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDQtXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NTpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4NDY6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODQ3LVxcdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjExLjk4NTc5MTgzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzY3ODQ1NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBJZGVudGlmeWluZyBGb2N1c2VkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGZvciBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGFuZCB5ZXMsIEkndmUgZ290IGEgbGlzdCBhbHJlYWR5LiBMZXQncyBzZWUuLi4gSSd2ZSBnb3Q6XG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWBcbiogICBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYFxuKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2BcbiogICBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGlubGluaW5nLiBgbmV0Y29uc29sZV93cml0ZWAgaXMgc3RhdGljLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLCBhbG9uZyB3aXRoIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIGFuZCBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG8gcHV0IGludG8gYEZvY3VzU3ltYm9sc2AuXG5cblNvLCBjb25zaWRlcmluZyBpbmxpbmluZywgSSBoYXZlIGEgcHJlbGltaW5hcnkgbGlzdCwgd2hpY2ggaXM6XG5cbiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgXG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2BcbiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgXG4qICAgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgXG5cbldhaXQgYSBtaW51dGUsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBtaWdodCBiZSBob3QgcGF0aHMgaWYgdGhlcmUgYXJlIG1hbnkgcHJpbnRrcywgYW5kIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGNhbGxlZCBmb3IgZXZlcnkgYHByaW50a2AgaWYgbmV0Y29uc29sZSBpcyBlbmFibGVkLiBTaW5jZSBgcHJpbnRrYCBjYW4gYmUgYSBob3QgcGF0aCwgdGhpcyBpcyBhIGJpdCBvZiBhIGRpbGVtbWEuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgcmF0ZWxpbWl0IHN0b3JlIGZ1bmN0aW9ucyBkZWZpbml0ZWx5IGFyZSBub3QgaG90IHBhdGhzLiBTbywgc2luY2UgdGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gc3BlY2lmaWMgY29uZmlnZnMgc3RvcmUgZnVuY3Rpb25zLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgY29uZmlnZnMgc3RvcmUgZnVuY3Rpb25zLlxuXG5MZXQgbWUgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzLi4uIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgYWxsb2NfYW5kX2luaXRgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIG5ldyB0YXJnZXQgaXMgY3JlYXRlZC4gSG1tLi4uIGNvdWxkIEkgYWRkIGBhbGxvY19hbmRfaW5pdGAgb3IgYG1ha2VfbmV0Y29uc29sZV90YXJnZXRgPyBMZXQncyBzZWU6IGBhbGxvY19hbmRfaW5pdGAgaXMgc3RhdGljOyBpdCBzZWVtcyB0aGF0IGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCBpcyB0aGUgY29uZmlnZnMgYG1ha2VfaXRlbWAgY2FsbGJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjE5LjM1MzY0MTQyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzIwNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ha2VfbmV0Y29uc29sZV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODMzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODU0OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTQxOlxcdC5tYWtlX2dyb3VwXFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQyLVxcdC5kcm9wX2l0ZW1cXHQ9IGRyb3BfbmV0Y29uc29sZV90YXJnZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjE5LjU0NDM2NzI3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM0NDI1NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKipcblxuT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoLiBJbml0aWFsbHksIEkgdGhvdWdodCBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBpdCdzIG5vdCBkaXJlY3RseSBtb2RpZmllZC4gSG93ZXZlciwgdGhlIGBhbGxvY19hbmRfaW5pdGAgZnVuY3Rpb24gKmlzKiBjaGFuZ2VkIHRvIGNhbGwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgLCBzbyB0aGVyZSdzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIE15IGZvY3VzLCB0aG91Z2gsIG5lZWRzIHRvIGJlIG9uIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGlzIG5ldyByYXRlIGxpbWl0aW5nIGZlYXR1cmU6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYC5cblxuTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgdGhlIHBhdGNoIGl0c2VsZiwgSSBzZWUgaXQncyBpbnRyb2R1Y2luZyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgYXMgYXR0cmlidXRlcyB3aXRoaW4gYG5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzYC4gSXQncyBhbHNvIGFkZGluZyB0aGUgY29ycmVzcG9uZGluZyBzdG9yZSBhbmQgc2hvdyBmdW5jdGlvbnM6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AuIENydWNpYWxseSwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYCBhcmUgaW50cm9kdWNlZCBhbmQgdXNlZCB3aXRoaW4gYG5ldGNvbnNvbGVfd3JpdGVgLlxuXG5UaGVyZWZvcmUsIG15ICpGb2N1c1N5bWJvbHMqIGZvciB0aGUgZnV6emluZyBlZmZvcnRzIHdpbGwgYmU6XG5cbiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgXG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2BcblxuSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIHRoZSByYXRlIGxpbWl0aW5nIGFjdHVhbGx5ICpoYXBwZW5zKi4gVGhhdCdzIHdpdGhpbiBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIEFyZSB0aGVzZSBob3QgcGF0aHM/IEFic29sdXRlbHkuIEV2ZXJ5IGBwcmludGtgIHRoYXQgZ29lcyB0aHJvdWdoIG5ldGNvbnNvbGUsIHdoZW4gZW5hYmxlZCwgaGl0cyB0aGVzZSBmdW5jdGlvbnMuIFdlIHNob3VsZCBleGNsdWRlIHRoZW0gZnJvbSBkaXJlY3QgZnV6emluZyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLCBzaW5jZSB0aGV5IGFyZSBjb3JlIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gVGhlIGZlYXR1cmUgZGVwZW5kcyBvbiB0aGVzZSBgRW5hYmxlQ29uZmlnc2A6XG5cbiogICBgTkVUQ09OU09MRWBcbiogICBgTkVUQ09OU09MRV9EWU5BTUlDYFxuKiAgIGBDT05GSUdGU19GU2BcblxuT3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBsaWtlbHkgYFBSSU5US2AgYW5kIGBTWVNGU2AsIGJ1dCB0aG9zZSBhcmUgdXN1YWxseSBlbmFibGVkLiBTbywgdGhlIGtleSBkZXBlbmRlbmNpZXMgcmVtYWluIHRoZSB0aHJlZSBtZW50aW9uZWQgYWJvdmUuXG5cbk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgdG8gcHJldmVudCBuZXRjb25zb2xlIHRhcmdldHMgZnJvbSBiZWluZyBvdmVyd2hlbG1lZCBieSBjb250aW51b3VzIGxvZ2dpbmcuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgKGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgLCBgcmF0ZWxpbWl0X2J1cnN0YCkgdG8gY29uZmlndXJlIGEgcmF0ZSBsaW1pdCAqcGVyKiB0YXJnZXQuIFRoZSBjb3JlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIGBuZXRjb25zb2xlX3dyaXRlYCwgbWFraW5nIHVzZSBvZiBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSwgdGhlcmVmb3JlLCBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYENPTkZJR0ZTX0ZTYCBpcyB0aGUgY29ycmVjdCBuYW1lLCBhbmQgaXQgaXM7IHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSBpbiBgZHJpdmVycy9uZXRgIGNvbmZpcm1zIGl0LiBJIGFsc28gZG91YmxlLWNoZWNrZWQgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBzdG9yZSBhbmQgc2hvdyBmdW5jdGlvbnMsIGFuZCB0aGV5IGFyZSBhcyBleHBlY3RlZDogYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAsIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLCBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgLCBhbmQgYHJhdGVsaW1pdF9idXJzdF9zaG93YC5cblxuSSdtIHJlYWR5IHRvIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHByb3ZpZGUgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjA1LCJPdXRwdXRUb2tlbnMiOjIyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzozMi44ODg2MjQzNDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTUzNjM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3N0b3JlXCIsXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd1wiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMgdG8gcHJldmVudCBhIGhvc3QgZnJvbSBzYXR1cmF0aW5nIHRoZSByZWNlaXZpbmcgYWdlbnQgd2l0aCBjb250aW51b3VzIGxvZ3MuIEl0IGFkZHMgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIHRvIGNvbmZpZ3VyZSB0aGUgcmF0ZSBsaW1pdCBwZXIgdGFyZ2V0LiBUaGUgcmF0ZSBsaW1pdGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgY29uc29sZSB3cml0ZSBwYXRoIHVzaW5nIGByYXRlbGltaXRfc3RhdGVgLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBjb25maWdmcyBhbmQgdGhlIHByaW50ayBjb25zb2xlIHdyaXRlIHBhdGguIFRoZSBjb25maWdmcyBzdG9yZS9zaG93IGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05FVENPTlNPTEVgLCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHX0NPTkZJR0ZTX0ZTYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTc6MzIuOTY0MTY2OTA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTIwMTQzNDQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjMyLjk2NDY2Mjg2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTIwMDkzNDk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMuIEl0IGFkZHMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHVzZXMgYHN0cnVjdCByYXRlbGltaXRfc3RhdGVgIHRvIHRyYWNrIG1lc3NhZ2UgcmF0ZXMuIFdoZW4gbWVzc2FnZXMgYXJlIGRyb3BwZWQsIGl0IHNlbmRzIGEgbm90aWNlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcGVkIG1lc3NhZ2VzLlxcblxcblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCdzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXFx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cXG5cXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxcblxcblRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBub3IgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi43MzY5Y2Q4OWFlNzZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNzcsNiArMTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OlxuICBjYXQgY21kbGluZTEvcmVtb3RlX2lwXG4gIDEwLjAuMC4zXG4gXG4rUmF0ZSBsaW1pdGluZ1xuKy0tLS0tLS0tLS0tLS1cbitcbitOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXRcbitsb2dzIGNvbnRpbnVvdXNseSBjYW4gc2F0dXJhdGUgdGhlIHJlY2VpdmluZyBhZ2VudC4gRWFjaCB0YXJnZXQgY2FycmllcyBhIHRva2VuXG4rYnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5XG4rdHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OlxuK1xuKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW5cbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMuIFplcm8sIHRoZSBkZWZhdWx0LCBzZW5kc1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuXG4rICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA7IHplcm8gZHJvcHMgZXZlcnkgbWVzc2FnZS5cbisgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitVbmxpa2UgbW9zdCB0YXJnZXQgcGFyYW1ldGVycywgYm90aCBrbm9icyBjYW4gYmUgd3JpdHRlbiB3aGlsZSB0aGUgdGFyZ2V0IGlzXG4rZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLlxuK1xuK1RoZSBsaW1pdCBpcyBhcHBsaWVkIHBlciBtZXNzYWdlLCBub3QgcGVyIHBhY2tldCwgc28gYSBtZXNzYWdlIGJpZyBlbm91Z2ggdG8gYmVcbitzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLlxuK1xuK0NyYXNoIG91dHB1dCBieXBhc3NlcyB0aGUgYnVja2V0LiBXaGlsZSBhbiBvb3BzLCBCVUcoKSBvciBwYW5pYygpIGlzIGluXG4rcHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdFxuK2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC5cbitcbitBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzXG4rc29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjpcbitcbisgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuK1xuK1RoZSBub3RpY2Ugb25seSB0cmF2ZWxzIHdpdGggdGhlIG5leHQgbWVzc2FnZSB0aGUgYnVja2V0IGFsbG93cy4gQSBob3N0IHRoYXRcbitnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9nc1xuK2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLlxuK1xuK25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW5cbitleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uXG4rXG4rQ2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OlxuK1xuKyAgZWNobyA2MDAwMCBcdTAwM2UgcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rICBlY2hvIDUwMCBcdTAwM2UgcmF0ZWxpbWl0X2J1cnN0XG4rXG4gQXBwZW5kIFVzZXIgRGF0YVxuIC0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTQ5LDYgKzQ5LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhdGVsaW1pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCJNYXR0IE1hY2thbGwgXHUwMDNjbXBtQHNlbGVuaWMuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXNcIik7XG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuKyAqIEByYXRlbGltaXQ6XHRPcGFxdWUgc3RydWN0dXJlIHRvIHJhdGVsaW1pdCBtZXNzYWdlc1xuKyAqIEBwZW5kaW5nX2Ryb3BzOiBNZXNzYWdlcyBkcm9wcGVkIHNpbmNlIHRoZSBsYXN0IG5vdGljZSB3YXMgc2VudC5cbiAgKiBAc3RhdHM6XHRQYWNrZXQgc2VuZCBzdGF0cyBmb3IgdGhlIHRhcmdldC4gVXNlZCBmb3IgZGVidWdnaW5nLlxuICAqIEBzdGF0ZTpcdFN0YXRlIG9mIHRoZSB0YXJnZXQuXG4gICpcdFx0VmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuXG5AQCAtMjE5LDYgKzIyMyw4IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHR1MzJcdFx0XHRzeXNkYXRhX2ZpZWxkcztcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovXG4gXHR1MzJcdFx0XHRtc2djb3VudGVyO1xuK1x0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbitcdHN0cnVjdCByYXRlbGltaXRfc3RhdGVcdHJhdGVsaW1pdDtcbiAjZW5kaWZcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcbiBcdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbkBAIC0yODIsNiArMjg4LDM0IEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXHUwMDI2bnQtXHUwMDNlcmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7XG4rXHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdC8qIEEgbGltaXQgbWVhbnQgZm9yIHN0ZWFkeS1zdGF0ZSBsb2dnaW5nIG11c3Qgbm90IGVhdCBhIGNyYXNoIGR1bXAuICovXG4rXHRpZiAob29wc19pbl9wcm9ncmVzcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKF9fcmF0ZWxpbWl0KFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMrKztcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdHUzMiBkcm9wcyA9IG50LVx1MDAzZXBlbmRpbmdfZHJvcHM7XG4rXG4rXHRudC1cdTAwM2VwZW5kaW5nX2Ryb3BzID0gMDtcbitcdHJldHVybiBkcm9wcztcbit9XG4rXG4gI2Vsc2VcdC8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG4gXG4gc3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbkBAIC0zMTgsNiArMzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiB7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuIFxuIC8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuQEAgLTY4Niw2ICs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbitcdG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQobnQpO1xuIFx0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcbiBcdC8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovXG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm50LVx1MDAzZXNrYl9wb29sKTtcbkBAIC05MTIsNiArOTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsbHVcXG5cIiwgeG1pdF9kcm9wX2NvdW50ICsgZW5vbWVtX2NvdW50KTtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIldVxcblwiLFxuK1x0XHRcdCAgamlmZmllc190b19tc2VjcyhSRUFEX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmludGVydmFsKSkpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIFJFQURfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QpKTtcbit9XG4rXG4gLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbkBAIC0xMzA3LDYgKzEzNzEsNTAgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4rXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4rXHR1bnNpZ25lZCBsb25nIGppZnM7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2aW50ZXJ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGppZnMgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTtcbitcdGlmIChqaWZzIFx1MDAzZSBJTlRfTUFYKVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4rXHRXUklURV9PTkNFKG50LVx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCwgamlmcyk7XG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbitcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgYnVyc3Q7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2YnVyc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChidXJzdCBcdTAwM2UgSU5UX01BWClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuK1x0V1JJVEVfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QsIGJ1cnN0KTtcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gc3RydWN0IHVzZXJkYXR1bSB7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbiBcdGNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dO1xuQEAgLTE2NzEsNiArMTc3OSw4IEBAIENPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xuIENPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcbiBDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG4gQ09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2VuYWJsZWQsXG5AQCAtMTY4NCw2ICsxNzk0LDggQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2xvY2FsX21hYyxcbiBcdFx1MDAyNmF0dHJfcmVtb3RlX21hYyxcbiBcdFx1MDAyNmF0dHJfdHJhbnNtaXRfZXJyb3JzLFxuK1x0XHUwMDI2YXR0cl9yYXRlbGltaXRfaW50ZXJ2YWxfbXMsXG4rXHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9idXJzdCxcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC0yNDYzLDYgKzI1NzUsMzQgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXG4re1xuK1x0aW50IGxlbiA9IDA7XG4rXHR1NjQgdHNfdXNlYztcbitcdHUzMiBkcm9wcztcbitcbitcdGRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTtcbitcdGlmICghZHJvcHMpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChleHRlbmRlZCkge1xuK1x0XHQvKiBhcHBlbmQgdGhlIGV4dGVuZGVkIGhlYWRlcnMgKi9cbitcdFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4rXHRcdFx0bGVuID0gc2NucHJpbnRmKG50LVx1MDAzZWJ1Ziwgc2l6ZW9mKG50LVx1MDAzZWJ1ZiksIFwiJXMsXCIsXG4rXHRcdFx0XHRcdGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpO1xuK1xuK1x0XHR0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTtcbitcdFx0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdFx0IFwiJXUsMCwlbGx1LC07XCIsIExPR0xFVkVMX1dBUk5JTkcsIHRzX3VzZWMpO1xuK1x0fVxuK1xuK1x0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdCBcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwiLFxuK1x0XHRcdCBkcm9wcyk7XG4rXG4rXHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG4gICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG5AQCAtMjQ4Miw2ICsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4gXHRcdCAgICAhbmV0aWZfcnVubmluZyhudC1cdTAwM2VucC5kZXYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIElmIG5iY29uX2VudGVyX3Vuc2FmZSgpIGZhaWxzLCBqdXN0IHJldHVybiBnaXZlbiBuZXRjb25zb2xlXG4gXHRcdCAqIGxvc3QgdGhlIG93bmVyc2hpcCwgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSB0YXJnZXRzIHdpbGwgbm90XG4gXHRcdCAqIGJlIGFibGUgdG8gcmUtYWNxdWlyZS5cbkBAIC0yNDg5LDYgKzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbiBcdFx0aWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKVxuIFx0XHRcdHJldHVybjtcbiBcbitcdFx0c2VuZF9yYXRlbGltaXRfbm90aWNlKG50LCBleHRlbmRlZCk7XG4rXG4gXHRcdGlmIChleHRlbmRlZClcbiBcdFx0XHRzZW5kX2V4dF9tc2dfdWRwKG50LCB3Y3R4dCk7XG4gXHRcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggZjA2NzRjMDAxN2ZjNC4uMDRjY2U0MGYxNjJlOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMCw2ICsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfY21kbGluZS5zaCBcXFxuIFx0bmV0Y29uc19mcmFnbWVudGVkX21zZy5zaCBcXFxuIFx0bmV0Y29uc19vdmVyZmxvdy5zaCBcXFxuK1x0bmV0Y29uc19yYXRlbGltaXQuc2ggXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxuQEAgLTAsMCArMSwxNjAgQEBcbisjIS91c3IvYmluL2VudiBiYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgcGVyLXRhcmdldCByYXRlIGxpbWl0LiBJdCBjb25maWd1cmVzIGEgc21hbGwgYnVyc3RcbisjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55XG4rIyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHNcbisjIHRyYW5zbWl0dGluZyBvbmNlIHRoZSBidWNrZXQgaXMgZW1wdHkuXG4rI1xuKyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGVcbisjIHJlY2VpdmVyIGhvdyBtYW55IG1lc3NhZ2VzIGl0IG1pc3NlZCwgd2hpY2ggaXMgdmVyaWZpZWQgbGFzdC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rU0NSSVBURElSPSQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiKVxuK1xuK3NvdXJjZSBcIiR7U0NSSVBURElSfVwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuK1xuKyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXRcbisjIHRoZSBidWNrZXQgaXMgZHJhaW5lZFxuK01TR19DT1VOVD01MFxuK0JVUlNUPTVcbisjIExvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBub3QgcmVmaWxsZWQgd2hpbGUgdGhlIHRlc3QgcnVuc1xuK0lOVEVSVkFMX01TPTYwMDAwXG4rIyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3RcbitERUZBVUxUX0JVUlNUPTEwXG4rIyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW5cbitEUk9QX05PVElDRT1cIm1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFwiXG4rXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXG4rT1VUUFVUX0ZJTEU9XCIvdG1wLyR7VEFSR0VUfVwiXG4rXG4rZnVuY3Rpb24gY291bnRfbXNncygpIHtcbitcdGxvY2FsIEZJTEU9XCIkezF9XCJcbitcbitcdGlmIFsgISAtZiBcIiR7RklMRX1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gMFxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHQjIGdyZXAgZXhpdHMgMSBvbiBubyBtYXRjaCwgd2hpY2ggaXMgYSB2YWxpZCByZXN1bHQgaGVyZVxuK1x0Z3JlcCAtYyBcIiR7TVNHfVwiIFwiJHtGSUxFfVwiIHx8IHRydWVcbit9XG4rXG4rZnVuY3Rpb24gc2VuZF9tc2dzKCkge1xuK1x0bG9jYWwgQ09VTlQ9XCIkezF9XCJcbitcdGxvY2FsIElcbitcbitcdGZvciBJIGluICQoc2VxIFwiJHtDT1VOVH1cIilcbitcdGRvXG4rXHRcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfSAke0l9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0ZG9uZVxuK31cbitcbisjIEEgZnJlc2hseSBjcmVhdGVkIHRhcmdldCBoYXMgdG8gYmUgdW5saW1pdGVkLCBvdGhlcndpc2UgZXZlcnkgZXhpc3RpbmdcbisjIG5ldGNvbnNvbGUgdXNlciB3b3VsZCBzdGFydCBkcm9wcGluZyBtZXNzYWdlcyBhZnRlciBhbiB1cGdyYWRlXG4rZnVuY3Rpb24gY2hlY2tfZGVmYXVsdHMoKSB7XG4rXHRsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUXG4rXG4rXHRJTlRFUlZBTD0kKGNhdCBcIiR7TkVUQ09OU19QQVRIfVwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tcylcbitcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfYnVyc3QpXG4rXG4rXHRpZiBbIFwiJHtJTlRFUlZBTH1cIiAtbmUgMCBdIHx8XG4rXHQgICBbIFwiJHtCVVJTVF9ERUZBVUxUfVwiIC1uZSBcIiR7REVGQVVMVF9CVVJTVH1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiB1bmV4cGVjdGVkIHJhdGUgbGltaXQgZGVmYXVsdHM6XCIgXFxcbitcdFx0ICAgICBcImludGVydmFsPSR7SU5URVJWQUx9IGJ1cnN0PSR7QlVSU1RfREVGQVVMVH1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gY2hlY2tfbGltaXRlZCgpIHtcbitcdGxvY2FsIFJFQ0VJVkVEXG4rXG4rXHRSRUNFSVZFRD0kKGNvdW50X21zZ3MgXCIke09VVFBVVF9GSUxFfVwiKVxuK1xuK1x0IyBVbnJlbGF0ZWQga2VybmVsIG1lc3NhZ2VzIHNoYXJlIHRoZSBidWNrZXQsIHNvIGZld2VyIHRoYW4gQlVSU1Qgb2ZcbitcdCMgb3VycyBjYW4gZ2V0IHRocm91Z2gsIGJ1dCBuZXZlciBtb3JlXG4rXHRpZiBbIFwiJHtSRUNFSVZFRH1cIiAtZ3QgXCIke0JVUlNUfVwiIF1cbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjIFRoZSBub3RpY2UgYmVsb3cgdHJhdmVscyBhaGVhZCBvZiB0aGUgbWVzc2FnZSB0aGF0IHJlb3BlbmVkIHRoZSBidWNrZXQsIHNvXG4rIyB3YWl0aW5nIGZvciB0aGUgZmlsZSB0byBhcHBlYXIgaXMgbm90IGVub3VnaFxuK2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcbitcdGdyZXAgLXEgXCIke01TR31cIiBcIiR7T1VUUFVUX0ZJTEV9XCIgMlx1MDAzZSAvZGV2L251bGxcbit9XG4rXG4rIyBUaGUgbWVzc2FnZXMgbG9zdCBhYm92ZSBoYXZlIHRvIGJlIHJlcG9ydGVkIHRvIHRoZSByZWNlaXZlclxuK2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xuK1x0aWYgISBncmVwIC1xIFwiJHtEUk9QX05PVElDRX1cIiBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IG5vIHJhdGUgbGltaXQgbm90aWNlIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjID09PT09PT09PT0gI1xuKyMgU3RhcnQgaGVyZSAjXG4rIyA9PT09PT09PT09ICNcbitcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK1xuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSlcbitlY2hvIFwiNiA1XCIgXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcbitzZXRfbmV0d29ya1xuKyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbitjcmVhdGVfZHluYW1pY190YXJnZXRcbitcbitjaGVja19kZWZhdWx0c1xuK1xuKyMgU2V0IHRoZSBidXJzdCBiZWZvcmUgdGhlIGludGVydmFsLCBzbyB0aGF0IG5vIG1lc3NhZ2UgZXNjYXBlcyB3aGlsZSB0aGVcbisjIHRhcmdldCBzdGlsbCBjYXJyaWVzIHRoZSBkZWZhdWx0IGJ1cnN0XG4rZWNobyBcIiR7QlVSU1R9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2J1cnN0XG4rZWNobyBcIiR7SU5URVJWQUxfTVN9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCIke09VVFBVVF9GSUxFfVwiIFx1MDAyNlxuK3dhaXRfZm9yX3BvcnQgXCIke05BTUVTUEFDRX1cIiBcIiR7UE9SVH1cIiBcImlwdjRcIlxuK3NlbmRfbXNncyBcIiR7TVNHX0NPVU5UfVwiXG4rIyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzXG4rIyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uXG4rc2xlZXAgMVxuK3BraWxsX3NvY2F0XG4rY2hlY2tfbGltaXRlZFxuK3JtIC1mIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuKyMgRHJvcHBpbmcgdGhlIGludGVydmFsIGJhY2sgdG8gemVybyBoYXMgdG8gbWFrZSB0aGUgdGFyZ2V0IHVubGltaXRlZCBhZ2FpblxuK2VjaG8gMCBcdTAwM2UgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfaW50ZXJ2YWxfbXNcbitcbitsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDI2XG4rd2FpdF9mb3JfcG9ydCBcIiR7TkFNRVNQQUNFfVwiIFwiJHtQT1JUfVwiIFwiaXB2NFwiXG4rc2VuZF9tc2dzIDFcbitpZiAhIGJ1c3l3YWl0IFwiJHtCVVNZV0FJVF9USU1FT1VUfVwiIG1zZ19yZWNlaXZlZFxuK3RoZW5cbitcdGVjaG8gXCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyAoJHtCVVNZV0FJVF9USU1FT1VUfSBtcykgZm9yIG5ldGNvbnNvbGVcIiBcXFxuK1x0ICAgICBcIm1lc3NhZ2UgaW4gJHtPVVRQVVRfRklMRX0gYWZ0ZXIgY2xlYXJpbmcgdGhlIHJhdGUgbGltaXRcIiBcdTAwM2VcdTAwMjYyXG4rXHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitmaVxuK3ZhbGlkYXRlX21zZyBcIiR7T1VUUFVUX0ZJTEV9XCJcbitjaGVja19kcm9wc19yZXBvcnRlZFxuK3BraWxsX3NvY2F0XG4rcm0gLWYgXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rdHJhcCAtIEVYSVRcbitjbGVhbnVwXG4rZXhpdCBcIiR7a3NmdF9wYXNzfVwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzozMi45NjQ2NjM1NTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxNTg1NTg0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyByYXRlIGxpbWl0aW5nIHRvIG5ldGNvbnNvbGUuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IG1vZGlmaWVzIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBpbnRyb2R1Y2VzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCB0byB0aGUgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiwgYW5kIHVzZXMgYSBgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZWAgd2l0aGluIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiAgQSBgcGVuZGluZ19kcm9wc2AgY291bnRlciBpcyBhZGRlZDsgd2hlbiB0aGUgcmF0ZSBsaW1pdCBpcyBleGNlZWRlZCwgbWVzc2FnZXMgZ2V0IGRyb3BwZWQgYW5kIHRoaXMgY291bnRlciBpbmNyZW1lbnRzLiBXaGVuIGEgbWVzc2FnZSAqaXMqIGFsbG93ZWQsIGl0IGNoZWNrcyBpZiBgcGVuZGluZ19kcm9wc2AgaXMgXHUwMDNlIDAgYW5kLCBpZiBzbywgc2VuZHMgYSBcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwiIG5vdGljZS4gVGhpcyBub3RpY2UgaXMgc2VudCB2aWEgYHNlbmRfcmF0ZWxpbWl0X25vdGljZSgpYC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYHNlbmRfcmF0ZWxpbWl0X25vdGljZSgpYC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgZnVuY3Rpb24gYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHJhdGUgbGltaXRpbmcgaXMgYWN0dWFsbHkgKmFubm91bmNlZCouICBJJ20gcmVhZGluZyB0aGUgY29kZSwgYW5kIG15IG1haW4gY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYnVmZmVyIG92ZXJmbG93cy5cblxuYGBgY1xuK3N0YXRpYyB2b2lkIHNlbmRfcmF0ZWxpbWl0X25vdGljZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBib29sIGV4dGVuZGVkKVxuK3tcbitcdGludCBsZW4gPSAwO1xuK1x0dTY0IHRzX3VzZWM7XG4rXHR1MzIgZHJvcHM7XG4rXG4rXHRkcm9wcyA9IG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhudCk7XG4rXHRpZiAoIWRyb3BzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoZXh0ZW5kZWQpIHtcbitcdFx0LyogYXBwZW5kIHRoZSBleHRlbmRlZCBoZWFkZXJzICovXG4rXHRcdGlmIChudC1cdTAwM2VyZWxlYXNlKVxuK1x0XHRcdGxlbiA9IHNjbnByaW50ZihudC1cdTAwM2VidWYsIHNpemVvZihudC1cdTAwM2VidWYpLCBcIiVzLFwiLFxuK1x0XHRcdFx0XHRpbml0X3V0c25hbWUoKS1cdTAwM2VyZWxlYXNlKTtcbitcbitcdFx0dHNfdXNlYyA9IGRpdl91NjQobG9jYWxfY2xvY2soKSwgTlNFQ19QRVJfVVNFQyk7XG4rXHRcdGxlbiArPSBzY25wcmludGYobnQtXHUwMDNlYnVmICsgbGVuLCBzaXplb2YobnQtXHUwMDNlYnVmKSAtIGxlbixcbitcdFx0XHRcdCBcIiV1LDAsJWxsdSwtO1wiLCBMT0dMRVZFTF9XQVJOSU5HLCB0c191c2VjKTtcbitcdH1cbitcbitcdGxlbiArPSBzY25wcmludGYobnQtXHUwMDNlYnVmICsgbGVuLCBzaXplb2YobnQtXHUwMDNlYnVmKSAtIGxlbixcbitcdFx0XHQgXCJuZXRjb25zb2xlOiAldSBtZXNzYWdlcyBkcm9wcGVkIGJ5IHJhdGUgbGltaXRcXG5cIixcbitcdFx0XHQgZHJvcHMpO1xuK1xuK1x0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbGVuKTtcbit9XG5gYGBcblxuT2theSwgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgdGhlIG5vdGljZSBtZXNzYWdlIGlzIGZvcm1hdHRlZCBpbnRvIGBudC1cdTAwM2VidWZgLCBhbmQgdGhlbiBgc2VuZF91ZHAoKWAgaXMgY2FsbGVkLiAgVGhlIGtleSBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgZXhhY3RseSAqaG93KiBgbnQtXHUwMDNlYnVmYCBpcyB1c2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIGBudC1cdTAwM2VidWZgIHByb3Blcmx5IGluaXRpYWxpemVkPyBPciBjb3VsZCB3ZSBiZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1xuXG5gc2NucHJpbnRmYCB3cml0ZXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLiBgc2NucHJpbnRmYCB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiAqZXhjbHVkaW5nKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBUaGUgY29kZSB0aGVuIGNhbGxzIGBzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBsZW4pYCwgc28gaXQgc2VlbXMgdGhhdCBpdCdzIGNvcnJlY3RseSBzZW5kaW5nIGV4YWN0bHkgYGxlbmAgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyLlxuXG5Ob3csIGNvbnNpZGVyIHRoZSBgaWYgKG50LVx1MDAzZXJlbGVhc2UpYCBibG9jay4gSWYgYG50LVx1MDAzZXJlbGVhc2VgIGlzIHRydWUsIHRoZW4gd2UgYXBwZW5kIGFkZGl0aW9uYWwgaGVhZGVycy4gSWYgaXQncyBmYWxzZSwgYGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gIEknbSBwcmV0dHkgc3VyZSB0aGF0IHdpdGggZWFjaCBzdWJzZXF1ZW50IGNhbGwgdG8gYHNjbnByaW50ZmAsIGl0J3MgYWRkaW5nIHRvIHRoZSBleGlzdGluZyBjb250ZW50IGFuZCBlbnN1cmluZyBpdCBpcyBudWxsLXRlcm1pbmF0ZWQuIEFuZCwgaW4gYWxsIGNhc2VzLCB3ZSdyZSB1c2luZyB0aGUgcmV0dXJuZWQgbGVuZ3RoIHZhbHVlLiBUaGUgZmluYWwgY2FsbCB0byBgc2NucHJpbnRmYCB3aWxsIHdyaXRlIHRoZSBcIm5ldGNvbnNvbGU6IC4uLlwiIG1lc3NhZ2UuIFRoZSBgc2NucHJpbnRmYCBmdW5jdGlvbiAqc2hvdWxkKiBoYW5kbGUgdGhlIG51bGwgdGVybWluYXRpb24uIFRodXMsIGBzZW5kX3VkcCgpYCBpcyBvbmx5IHJlYWRpbmcgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdlJ3ZlIGV4cGxpY2l0bHkgd3JpdHRlbiB0byB0aGUgYnVmZmVyIHZpYSBgc2NucHJpbnRmYCAuIFNvLCBubywgdGhlcmUgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBjb21iaW5hdGlvbiBvZiBgc2NucHJpbnRmYCBhbmQgdGhlIHN1YnNlcXVlbnQgdXNlIG9mIGBsZW5gIGluIGBzZW5kX3VkcCgpYCBwcmV2ZW50cyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdHJhbnNtaXR0ZWQuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgc2VuZF91ZHBgIGFuZCBgbnQtXHUwMDNlYnVmYCBhcmUgY29ycmVjdGx5IGRlZmluZWQgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgaGF2ZSBjb25maXJtZWQgdGhhdCBgbnQtXHUwMDNlYnVmYCBpcyBpbmRlZWQgYSBjaGFyYWN0ZXIgYXJyYXkgd2l0aCBhIGRlZmluZWQgc2l6ZS4gQ2hlY2tpbmcgYHNlbmRfdWRwYCBjb25maXJtcyB0aGF0IGl0IHRha2VzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBhbmQgYSBsZW5ndGgsIGFuZCBpdCBzaW1wbHkgc2VuZHMgYSBVRFAgcGFja2V0IGNvbnRhaW5pbmcgdGhvc2UgYnl0ZXMuIFNpbmNlIGBzY25wcmludGZgIGlzIGZvcm1hdHRpbmcgYSBzdHJpbmcgaW50byB0aGUgYnVmZmVyIGNvcnJlY3RseSwgdGhhdCBtZWFucyB3ZSdyZSBpbiBnb29kIHNoYXBlLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwb3RlbnRpYWwgZ290Y2hhcy4gSSBzYXcgYG1zZ2NvdW50ZXJgLCBgcGVuZGluZ19kcm9wc2AsIGFuZCBgcmF0ZWxpbWl0YC4gVGhlc2UgYXJlIHByaW1pdGl2ZSB0eXBlcyBhbmQgYSBzdHJ1Y3QsIHdoaWNoIGlzXG5cbiIsIklucHV0VG9rZW5zIjo2ODI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjQ4LjEyMzIyNDIxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwOTA2OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfYW5kX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTg9c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MDYtLyogU2VlZCB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0by4gVGhlIHF1ZXVlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQwNzogKiBoZWFkIGFuZCByZWZpbGwgd29yayBhcmUgc2V0IHVwIG9uY2UgaW4gYWxsb2NfYW5kX2luaXQoKTsgdGhpcyBvbmx5XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQwOC0gKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjU3PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MTg6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODU0PXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzM6XFx0bnQgPSBhbGxvY19hbmRfaW5pdCgpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODc0LVxcdGlmICghbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjc2OD1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzczLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzc0OlxcdG50ID0gYWxsb2NfYW5kX2luaXQoKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc3NS1cXHRpZiAoIW50KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjQ4LjE4NzMxNzY3NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE1NjA5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGFsbG9jX2FuZF9pbml0YCBmb3IgYGt6YWxsb2NgIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGFsbG9jX2FuZF9pbml0YCBmdW5jdGlvbi4gVGhlIHByaW1hcnkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGBremFsbG9jYCBpbnRlcm5hbGx5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBgYWxsb2NfYW5kX2luaXRgIGlzIHplcm9lZCBvdXQuIElmIGl0IGlzLCB0aGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSBhcmVhIG9mIGV4cGVydGlzZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIGBhbGxvY19hbmRfaW5pdGAsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYGt6YWxsb2NgIG9yIGFueSBhbGxvY2F0aW9uIHBhdGh3YXlzIHRoYXQgbWlnaHQgdWx0aW1hdGVseSBsZWFkIHRvIGEgemVyb2luZy1vdXQgb3BlcmF0aW9uLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIGFzIHRvIHdoaWNoIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgdXRpbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzo1MS45MDI5MzExNjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTg6XFx0c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcXG4gNzE5OlxcdHtcXG4gNzIwOlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdG50ID0ga3phbGxvY19vYmooKm50KTtcXG4gNzIzOlxcdFxcdGlmICghbnQpXFxuIDcyNDpcXHRcXHRcXHRyZXR1cm4gbnQ7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0VYVEVOREVEX0xPRykpXFxuIDcyNzpcXHRcXHRcXHRudC1cXHUwMDNlZXh0ZW5kZWQgPSB0cnVlO1xcbiA3Mjg6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFKSlcXG4gNzI5OlxcdFxcdFxcdG50LVxcdTAwM2VyZWxlYXNlID0gdHJ1ZTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0bnQtXFx1MDAzZW5wLm5hbWUgPSBcXFwibmV0Y29uc29sZVxcXCI7XFxuIDczMjpcXHRcXHRzdHJzY3B5KG50LVxcdTAwM2VucC5kZXZfbmFtZSwgXFxcImV0aDBcXFwiLCBJRk5BTVNJWik7XFxuIDczMzpcXHRcXHRudC1cXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XFxuIDczNDpcXHRcXHRudC1cXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xcbiA3MzU6XFx0XFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gNzM2OlxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiA3Mzc6XFx0XFx0bmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChudCk7XFxuIDczODpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XFxuIDczOTpcXHRcXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xcbiA3NDA6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sKTtcXG4gNzQxOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0cmV0dXJuIG50O1xcbiA3NDQ6XFx0fVxcbiA3NDU6XFx0XFxuIDc0NjpcXHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXFxuIDc0NzpcXHQgKiB0aGUgbWFpbiB0YXJnZXRfbGlzdC5cXG4gNzQ4OlxcdCAqL1xcbiA3NDk6XFx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gNzUwOlxcdHtcXG4gNzUxOlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuIDc1MjpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA3NTM6XFx0XFxuIDc1NDpcXHRcXHQvKiBUaGUgY2xlYW51cCBuZWVkcyBSVE5MIGxvY2tlZCAqL1xcbiA3NTU6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4gNzU4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCBcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdCwgbGlzdCkge1xcbiA3NTk6XFx0XFx0XFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xcbiA3NjA6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKTtcXG4gNzYxOlxcdFxcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiA3NjI6XFx0XFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIDc2MzpcXHRcXHRcXHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXFxuIDc2NDpcXHRcXHRcXHQgKiBsb2Nrc1xcbiA3NjU6XFx0XFx0XFx0ICovXFxuIDc2NjpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbiA3Njc6XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZudC1cXHUwMDNlbGlzdCwgXFx1MDAyNnRhcmdldF9saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTc6NTEuOTAzMDk3MDQ3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY4MjY4MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXRjb25zb2xlIHJhdGUgbGltaXRpbmcgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0J3Mgc291bmQuIEZpcnN0LCBga3phbGxvY19vYmooKm50KWAgaXMgYmVpbmcgdXNlZCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBga3phbGxvY2Agd2l0aCB0aGUgc2l6ZSBvZiB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QsIGFuZCB0aGF0J3MgZ29vZDsgaXQgbWVhbnMgZXZlcnl0aGluZydzIHplcm8taW5pdGlhbGl6ZWQuIEknZCBleHBlY3QgYHBlbmRpbmdfZHJvcHNgIHRvIGJlIHplcm8gaW5pdGlhbGx5LCBhbmQgdGhlIGByYXRlbGltaXRgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB1c2luZyBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAsIHdoaWNoIGNhbGxzIGByYXRlbGltaXRfc3RhdGVfaW5pdGAuICBObyBpbW1lZGlhdGUgcmVkIGZsYWdzLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gSSdsbCBleGFtaW5lIHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSByYXRlIGxpbWl0aW5nIG1lY2hhbmlzbS4gVGhlIGZpcnN0IGlzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLiBTZWVtcyByZWFzb25hYmxlOyBpdCBjb252ZXJ0cyB0aGUgaW50ZXJ2YWwgZnJvbSBtaWxsaXNlY29uZHMgdG8gamlmZmllcywgY2hlY2tzIGZvciBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gY29udmVydGluZyB0byBqaWZmaWVzLCBhbmQgdGhlbiB1c2VzIGBXUklURV9PTkNFYCB0byB1cGRhdGUgdGhlIGBpbnRlcnZhbGAgZmllbGQgaW4gdGhlIGByYXRlbGltaXRgIHN0cnVjdCB3aXRoaW4gYSBtdXRleC4gVGhhdCdzIGEgc2FmZSBhbmQgZWZmZWN0aXZlIHdheSB0byBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MuICBUaGUgaW50ZWdlciBjb252ZXJzaW9uIGlzIGNvcnJlY3QsIGFzIGlzIHRoZSBoYW5kbGluZyBvZiB0aGUgbXV0ZXguXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYC4gVGhpcyBjaGVja3MgaWYgYW4gb29wcyBpcyBpbiBwcm9ncmVzcywgcmV0dXJuaW5nIGZhbHNlIGlmIGl0IGlzIChpbXBvcnRhbnQsIHdlIGRvbid0IHdhbnQgdG8gcmF0ZSBsaW1pdCBjcmFzaCBkdW1wcykuIEl0IHRoZW4gY2FsbHMgYF9fcmF0ZWxpbWl0YCBhbmQgaW5jcmVtZW50cyBgbnQtXHUwMDNlcGVuZGluZ19kcm9wc2AgaWYgdGhlIHJhdGUgbGltaXQgaXMgZXhjZWVkZWQuIE5vIGlzc3VlcyBoZXJlLlxuXG5GaW5hbGx5LCBJJ20gY2hlY2tpbmcgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuICBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMuIFRoZSBjb2RlIGNoZWNrcyBgbnQtXHUwMDNlcGVuZGluZ19kcm9wc2AsIGFuZCBmb3JtYXRzIGEgc3RyaW5nIGludG8gYG50LVx1MDAzZWJ1ZmAuICBJdCB1c2VzIGBzY25wcmludGZgLCB3aGljaCBpcyBnb29kIHNpbmNlIGl0J3Mgc2FmZSB0byB1c2Ugd2l0aCBib3VuZGVkIGJ1ZmZlcnMsIGJ1dCAqaXMgdGhlIGJ1ZmZlciBsYXJnZSBlbm91Z2g/KiBUaGUgY29kZSAqZG9lcyogdXNlIGBzaXplb2YobnQtXHUwMDNlYnVmKWAgaW4gYHNjbnByaW50ZmAsIHNvIHRoYXQncyBnb29kLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNpemUgb2YgYG50LVx1MDAzZWJ1ZmAgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBoYW5kbGUgYWxsIHRoZSBwb3NzaWJsZSBmb3JtYXR0ZWQgc3RyaW5nIGxlbmd0aHMuIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTg6MDIuNDcxMzY4Nzc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE2Njg0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1PXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNDpzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE4OjAyLjczMzA0MTY1MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODc3NjQyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgZGVidWdnaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFRoaXMgc3RydWN0IGlzIHRoZSBoZWFydCBvZiB3aGVyZSB0aGUgbmV0Y29uc29sZSBkcml2ZXIgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciB0YXJnZXQgc3lzdGVtIGl0J3Mgc3VwcG9zZWQgdG8gc2VuZCBjb25zb2xlIG1lc3NhZ2VzIHRvLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBkZXNjcmlwdG9yIGZvciBlYWNoIHJlbW90ZSBjb25zb2xlIHdlJ3JlIHRyeWluZyB0byByZWFjaC5cblxuRmlyc3Qgb2ZmLCBJJ2QgYmUgbG9va2luZyBhdCB0aGUgc29ja2V0IGFkZHJlc3MgaW5mb3JtYXRpb24uIEl0IGhhcyB0byBjb250YWluIHRoZSBJUCBhZGRyZXNzICh2NCBvciB2NiwgbW9zdCBsaWtlbHkpIGFuZCB0aGUgVURQIHBvcnQgbnVtYmVyIG9mIHRoZSByZW1vdGUgbWFjaGluZSdzIG5ldGNvbnNvbGUgbGlzdGVuZXIuIFRoYXQncyB0aGUgYmFzZWxpbmUuIFRoZSBmaWVsZHMgdGhhdCBob2xkIHRoaXMgaW5mbyBhcmUgdGhlIG1vc3QgY3JpdGljYWwuIEknZCBiZSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIHN0cnVjdHVyZSB3aXRoIHRoZSBzb2NrZXQgYW5kIFVEUCBjb2RlLCBtYWtpbmcgc3VyZSB0aGUgYWRkcmVzcyBmYW1pbGllcyBhbmQgcG9ydCBoYW5kbGluZyBhcmUgY29uc2lzdGVudCBhbmQgcm9idXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGJlaW5nIG1hbmFnZWQgdGhyZWFkLXNhZmVseSwgdG9vLiBXZSBkb27igJl0IHdhbnQgdG8gYmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgZGF0YSByYWNlcyBwcmV2ZW50IHRoZSBtZXNzYWdlcyBmcm9tIGdldHRpbmcgdGhyb3VnaC5cblxuVGhlbiwgdGhlcmUncyBwcm9iYWJseSBzb21lIHN0YXRlIHRyYWNraW5nLiBJcyBpdCBhY3RpdmVseSBjb25uZWN0ZWQgb3IgdHJ5aW5nIHRvIHJlY29ubmVjdD8gVGhlcmUncyBwcm9iYWJseSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzb2NrZXQgaXMgcmVhZHkgdG8gYWNjZXB0IGRhdGEuIFNvbWUga2luZCBvZiBlcnJvciBjb3VudGVyIG9yIHRpbWVzdGFtcCBtaWdodCBleGlzdCB0byBzZWUgaG93IGxvbmcgaXQncyBiZWVuIHNpbmNlIGEgc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gYW5kIHNlZSBpZiBhIHRhcmdldCBpcyBwZXJtYW5lbnRseSB1bnJlYWNoYWJsZS4gSSdkIGV4cGVjdCBhbiBleHBvbmVudGlhbCBiYWNrb2ZmIHN0cmF0ZWd5IGlmIHRoZSB0YXJnZXQgaXMgZG93bi5cblxuSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBraW5kIG9mIGxvY2tpbmcgbWVjaGFuaXNtIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0cnVjdC4gSWYgdGhlIGtlcm5lbCBoYXMgbXVsdGlwbGUgdGhyZWFkcyBvciBpbnRlcnJ1cHQgaGFuZGxlcnMgcG90ZW50aWFsbHkgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSB0YXJnZXQgYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBuZWVkcyB0byBiZSBsb2NrZWQgZG93biB0byBwcmV2ZW50IGNvcnJ1cHRpb24uIEEgc3BpbmxvY2sgb3IgYSBtdXRleCB3b3VsZCBiZSB0eXBpY2FsIGhlcmUuIEknZCBoYXZlIHRvIG1ha2Ugc3VyZSBpdCdzIGJlaW5nIHVzZWQgY29ycmVjdGx5IGFuZCBpc24ndCBhIGJvdHRsZW5lY2suIFdoYXQga2luZCBvZiBpbnRlcnJ1cHQgY29udGV4dHMgYXJlIHRoZXNlIGxvY2tpbmcgcHJpbWl0aXZlcyBhYmxlIHRvIGZ1bmN0aW9uIGluP1xuXG5GaW5hbGx5LCB0aGVyZSB3aWxsIHByb2JhYmx5IGJlIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNYXliZSBhbiBNVFUgc2V0dGluZyB0byB0dW5lIGZvciBkaWZmZXJlbnQgbmV0d29yayBlbnZpcm9ubWVudHMuIFBlcmhhcHMgYSBmbGFnIHRvIGNvbnRyb2wgd2hldGhlciB0aW1lc3RhbXBzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbWVzc2FnZXMuIFBvc3NpYmx5IGV2ZW4gUW9TIHNldHRpbmdzLiBJJ20gYWxyZWFkeSBtZW50YWxseSBsaW5raW5nIHRoZXNlIHRvIHRoZSBicm9hZGVyIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc2V0dGluZ3MgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSwgYW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGNoYW5nZSB0aGVtIHdpdGhvdXQgY2F1c2luZyB0aGUgd2hvbGUgdGhpbmcgdG8gbG9jayB1cC5cblxuU28sIGluIGVzc2VuY2UsIEknbSBleHBlY3RpbmcgdGhpcyBzdHJ1Y3QgdG8gZW5jYXBzdWxhdGUgYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBhbmQgc3RhdGUgZm9yIGNvbW11bmljYXRpbmcgZGVidWcgaW5mb3JtYXRpb24gdG8gYSByZW1vdGUgc3lzdGVtLiBJdOKAmXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgaW4gZW5hYmxpbmcgcmVtb3RlIGtlcm5lbCBkZWJ1Z2dpbmcsIGFuZCBpdHMgZGVzaWduIGhhcyB0byBiZSByb2NrLXNvbGlkIHRvIGtlZXAgdGhpbmdzIHJ1bm5pbmcgd2hlbiBhIHN5c3RlbSBpcyBvdGhlcndpc2UgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxODoxMC42MTA2ODYwNzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTQ6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gMjE1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAyMTY6XFx0I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiAyMTc6XFx0XFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdGdyb3VwO1xcbiAyMTg6XFx0XFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdHVzZXJkYXRhX2dyb3VwO1xcbiAyMTk6XFx0XFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xcbiAyMjA6XFx0XFx0Y2hhclxcdFxcdFxcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi9cXG4gMjIzOlxcdFxcdHUzMlxcdFxcdFxcdHN5c2RhdGFfZmllbGRzO1xcbiAyMjQ6XFx0XFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi9cXG4gMjI1OlxcdFxcdHUzMlxcdFxcdFxcdG1zZ2NvdW50ZXI7XFxuIDIyNjpcXHRcXHR1MzJcXHRcXHRcXHRwZW5kaW5nX2Ryb3BzO1xcbiAyMjc6XFx0XFx0c3RydWN0IHJhdGVsaW1pdF9zdGF0ZVxcdHJhdGVsaW1pdDtcXG4gMjI4OlxcdCNlbmRpZlxcbiAyMjk6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0X3N0YXRzIHN0YXRzO1xcbiAyMzA6XFx0XFx0ZW51bSB0YXJnZXRfc3RhdGVcXHRzdGF0ZTtcXG4gMjMxOlxcdFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZDtcXG4gMjMyOlxcdFxcdGJvb2xcXHRcXHRcXHRyZWxlYXNlO1xcbiAyMzM6XFx0XFx0c3RydWN0IG5ldHBvbGxcXHRcXHRucDtcXG4gMjM0OlxcdFxcdHVuaW9uIGluZXRfYWRkclxcdFxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIDIzNTpcXHRcXHRib29sXFx0XFx0XFx0aXB2NjtcXG4gMjM2OlxcdFxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbiAyMzc6XFx0XFx0dThcXHRcXHRcXHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcXG4gMjM4OlxcdFxcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyArMSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcXG4gMjM5OlxcdFxcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXFxuIDI0MDpcXHRcXHQgKi9cXG4gMjQxOlxcdFxcdGNoYXJcXHRcXHRcXHRidWZbTUFYX1BSSU5UX0NIVU5LICsgMV07XFxuIDI0MjpcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZXN1bWVfd3E7XFxuIDI0MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXFx0c2tiX3Bvb2w7XFxuIDI0NDpcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZWZpbGxfd3E7XFxuIDI0NTpcXHR9O1xcbiAyNDY6XFx0XFxuIDI0NzpcXHQjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIDI0ODpcXHRcXG4gMjQ5OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG5ldGNvbnNvbGVfc3Vic3lzO1xcbiAyNTA6XFx0c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxcbiAyNTM6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxODoxMC42MTA4MjM5ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyNjQ3NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSB1c2luZyBgYnVmYCwgd2hpY2ggaXMgYSBjaGFyYWN0ZXIgYXJyYXksIGBjaGFyIGJ1ZltNQVhfUFJJTlRfQ0hVTksgKyAxXWAuIEFuZCBgTUFYX1BSSU5UX0NIVU5LYCBsb29rcyB0byBiZSBhcm91bmQgMTAwMCwgc28gdGhhdCdzIGEgcmVhc29uYWJsZSBzaXplIGZvciBhIGJ1ZmZlci4gVGhlIHN0cmluZyB3ZSdyZSBmb3JtYXR0aW5nIGluIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIGlzIGAlcywgJXUsMCwlbGx1LC07IG5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcbmAuIEJhc2VkIG9uIHRoZSB0eXBpY2FsIHZhbHVlcyBvZiByZWxlYXNlIHN0cmluZ3MsIGFuZCB0aGUgbnVtZXJpY2FsIHZhbHVlcywgdGhpcyBzaG91bGQgZWFzaWx5IGZpdCB3aXRoaW4gYE1BWF9QUklOVF9DSFVOSyArIDFgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHdlIHNlbmRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBgc2NucHJpbnRmYCBoYW5kbGVzIHRoYXQsIHdyaXRpbmcgY2hhcmFjdGVycyBhbmQgcmV0dXJuaW5nIHRoZSBsZW5ndGguIEFuZCBgc2VuZF91ZHBgIG9ubHkgc2VuZHMgKmV4YWN0bHkqIGBsZW5gIGJ5dGVzLiBTaW5jZSBgc2NucHJpbnRmYCBwb3B1bGF0ZXMgYWxsIGBsZW5gIGJ5dGVzLCBubyB3b3JyaWVzIHRoZXJlLCBub3RoaW5nIGlzIHVuaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBzZW5kaW5nLlxuXG5XaGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyAqcmVhZCo/IGBudC1cdTAwM2VyZWxlYXNlYCBpcyBhIGJvb2xlYW4sIHNvIHRoYXQncyBmaW5lLiBgaW5pdF91dHNuYW1lKCktXHUwMDNlcmVsZWFzZWAgaXMgYSBzdHJpbmcsIGFuZCBgbG9jYWxfY2xvY2soKWAgcmV0dXJucyBhIGB1NjRgLiBUaGVuIGBkcm9wc2AgaXMgYSBgdTMyYC4gT2theSwgc28gdGhvc2UgYXJlIGFsbCBpbml0aWFsaXplZCB2YWx1ZXMuIFdlJ3JlIGdvb2QuXG5cbklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWxhdGVkIHRvIGBudC1cdTAwM2VyYXRlbGltaXRgPyBObywgYmVjYXVzZSBpdCBpcyBpbml0aWFsaXplZCBieSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLiBBbmQgYG50LVx1MDAzZXBlbmRpbmdfZHJvcHNgIGlzIGFsc28gemVyb2VkIG91dCBieSBga3phbGxvY2AuIFNvLCB0aGF0J3MgY292ZXJlZC5cblxuVGhlIG9ubHkgcmVtYWluaW5nIHF1ZXN0aW9uIGlzIGhvdyBgc2VuZF91ZHBgIHdvcmtzIGludGVybmFsbHkuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNlbmRfdWRwYCB0byBlbnN1cmUgaXQgZG9lc24ndCB0cnkgdG8gcmVhZCBiZXlvbmQgdGhlIGBsZW5gIGJ5dGVzIHBhc3NlZCB0byBpdC4gQnV0IGZyb20gd2hhdCBJIGhhdmUgc2VlbiBzbyBmYXIgSSBkbyBub3QgZXhwZWN0IGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTg6MTcuNzM3MzAxMTE3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIwODExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNjI9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI4NjpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjMtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjQ6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzI1LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjgtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMyOTogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzAtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMzpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzM1OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM1MD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4MzpcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgbXNnX2xlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTQ9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDgxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDgyOlxcdFxcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBidWZfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzMj1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU0MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU0MTpcXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU0Mi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU2ND1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzEtXFx0XFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTcyOlxcdFxcdHNlbmRfdWRwKG50LCB0bXAsIGZyYWcpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTczLVxcdFxcdHRtcCArPSBmcmFnO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1Nzg9c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwMzpcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE4OjE3Ljc4NjUxMzQxMloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDM3OTA2MTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBzZW5kX3VkcGAgZnVuY3Rpb24gaXRzZWxmIGxvb2tzIHNvbGlkLiBJdCdzIHByb3Blcmx5IHRha2luZyBhIGBjb25zdCBjaGFyICptc2dgIGFuZCBgaW50IGxlbmAsIGFsbG9jYXRpbmcgYW4gU0tCLCBhbmQgY29weWluZyBgbGVuYCBieXRlcy4gIFRoZXJlJ3Mgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoZXJlLCBhdCBsZWFzdCBub3QgaW4gdGhlIG9yaWdpbmFsIGNhbGwgY2hhaW4uXG5cbk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYuLi4gSSdtIHNlZWluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgLCBhbmQgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AuIFRoZSBpbml0IGZ1bmN0aW9uIGp1c3Qgc2V0cyB1cCB0aGUgYHJhdGVsaW1pdF9zdGF0ZWAgc3RydWN0dXJlLCB3aGljaCBhcHBlYXJzIHN0YW5kYXJkLiBUaGUgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGZ1bmN0aW9uIHV0aWxpemVzIGBfX3JhdGVsaW1pdGAsIGEgd2VsbC1rbm93biBrZXJuZWwgZnVuY3Rpb24sIGFuZCBpbXBvcnRhbnRseSwgaXQgaW5jbHVkZXMgYSBjaGVjayBmb3IgYG9vcHNfaW5fcHJvZ3Jlc3NgIHRvIGF2b2lkIHJhdGUtbGltaXRpbmcgZHVyaW5nIGEgY3Jhc2ggZHVtcC4gIFRoYXQncyBhIGdvb2Qgc2FmZWd1YXJkLiAgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AgYXBwZWFycyBzYWZlLCBzaW1wbHkgcmVzZXR0aW5nIHRoZSBjb3VudGVyLlxuXG5UaGUgc3lzZnMgaW50ZXJmYWNlcyBmb3IgdGhlIHJhdGUgbGltaXRpbmcgcGFyYW1ldGVycyAoaW50ZXJ2YWwgYW5kIGJ1cnN0KSBhcmUgYWxzbyBmaW5lLCB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYXRvbWljaXR5LiBUaGUgc3RvcmUgZnVuY3Rpb25zIGFyZSBhbHNvIHNhZmUsIHVzaW5nIG11dGV4ZXMgYXJvdW5kIHRoZSB3cml0ZXMgdG8gYHJhdGVsaW1pdC5pbnRlcnZhbGAgYW5kIGByYXRlbGltaXQuYnVyc3RgLCBhbmQgdGhleSBhcmUgcHJvcGVybHkgdmFsaWRhdGluZyB0aGUgaW5wdXQgdmFsdWVzIHVzaW5nIGBrc3RydG91aW50YCBhbmQgYXZvaWRpbmcgaW50ZWdlciBvdmVyZmxvd3MuICBUaGF0J3MgYWxsIHN0YW5kYXJkLCBzYWZlIGtlcm5lbCBwcmFjdGljZS5cblxuVGhlbiB3ZSBoYXZlIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgLiAgVGhpcyBpcyB0aGUgaW50ZXJlc3RpbmcgYml0IHdoZXJlIHRoZSBkcm9wcGVkIG1lc3NhZ2UgY291bnQgaXMgZm9ybWF0dGVkLiBUaGUgZm9ybWF0dGluZyBmdW5jdGlvbiwgYHNjbnByaW50ZmAsIGlzIGNvcnJlY3QgaW4gdGhpcyBjb250ZXh0LCBhbHdheXMgZW5zdXJpbmcgdGhlIHN0cmluZyBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkLCBhbmQgaW5pdGlhbGl6ZWQgdXAgdG8gbGVuLCByZXR1cm5pbmcgbGVuIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gZm9ybWF0dGVkIHRvIHRoZSBidWZmZXIuIFRoZSBleHRlbmRlZCBoZWFkZXJzIGFyZSBjb25kaXRpb25hbCwgYnV0IHRoZSBmb3JtYXR0aW5nIGlzIGNvcnJlY3QuIFRoZSBjYWxsIHRvIGBzZW5kX3VkcGAgdXNlcyB0aGUgY29ycmVjdCBgbGVuYCB2YWx1ZS4gVGhlIGZ1bmN0aW9uIHNlZW1zIHNhZmUuXG5cbkZpbmFsbHksIHRoZSBhZGRlZCBsb2dpYyBpbiBgbmV0Y29uc29sZV93cml0ZWAgcHJvcGVybHkgY2hlY2tzIGlmIGEgdGFyZ2V0IGlzIHJhdGVsaW1pdGVkICpiZWZvcmUqIGNhbGxpbmcgYG5iY29uX2VudGVyX3Vuc2FmZWAgKGltcG9ydGFudCEpLCBhbmQgdGhhdCBpcyBhbHNvIHdoZXJlIHdlIHNlZSB0aGUgcmF0ZSBsaW1pdGluZyBub3RpZmljYXRpb24gYmVpbmcgc2VudCwgd2l0aCB0aGUgcmlnaHQgZm9ybWF0dGluZy5cblxuTXkgZmluYWwgY29uY2x1c2lvbiBpcyB0aGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGFuIGluZm8gbGVhayB0byB1c2VyLXNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGUgc3RydWN0IGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBgc2NucHJpbnRmYCBjYWxscyBhbmQgdGhlIHN1YnNlcXVlbnQgdXNlIG9mIGBsZW5gIGluIGBzZW5kX3VkcGAgcHJldmVudCBhbnkgYWNjaWRlbnRhbCB0cmFuc21pc3Npb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudC4gSSB3aWxsIG5vdyBzZXQgdGhlIHJlc3VsdCBhcyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgbXkgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4NSwiT3V0cHV0VG9rZW5zIjoyOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE4OjM4LjE2NTU3NzU4OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMuIEl0IGFkZHMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHVzZXMgYHN0cnVjdCByYXRlbGltaXRfc3RhdGVgIHRvIHRyYWNrIG1lc3NhZ2UgcmF0ZXMuIFdoZW4gbWVzc2FnZXMgYXJlIGRyb3BwZWQsIGl0IHNlbmRzIGEgbm90aWNlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcGVkIG1lc3NhZ2VzLlxcblxcblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCdzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXFx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cXG5cXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxcblxcblRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBub3IgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMuIEl0IGFkZHMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHVzZXMgYHN0cnVjdCByYXRlbGltaXRfc3RhdGVgIHRvIHRyYWNrIG1lc3NhZ2UgcmF0ZXMuIFdoZW4gbWVzc2FnZXMgYXJlIGRyb3BwZWQsIGl0IHNlbmRzIGEgbm90aWNlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcGVkIG1lc3NhZ2VzLlxcblxcblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCdzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXFx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cXG5cXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxcblxcblRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBub3IgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8kt2c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 11:14:45 +0000 UTC FinishedAt: 2026-08-18 11:18:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "db39ca53-4660-4aa8-91f3-ebe7684c0785" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ratelimit_interval_ms_store", "ratelimit_burst_store", "ratelimit_interval_ms_show", "ratelimit_burst_show" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfYnVyc3Rfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cblxuVGhlIG5vdGljZSBpcyBmb3JtYXR0ZWQgdXNpbmcgYHNjbnByaW50ZmAgaW50byB0aGUgdGFyZ2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXHUwMDNlYnVmYCksIGFuZCB0aGUgZXhhY3QgbGVuZ3RoIHJldHVybmVkIGJ5IGBzY25wcmludGZgIGlzIHBhc3NlZCB0byBgc2VuZF91ZHBgLiBgc2NucHJpbnRmYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnl0ZXMgaXQgd3JpdGVzLCBhbmQgYHNlbmRfdWRwYCBvbmx5IHJlYWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBidWZmZXIgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLlxuXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxuXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNzM2OWNkODlhZTc2YyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5AQCAtMTc3LDYgJiM0MzsxNzcsNDkgQEAgWW91IGNhbiBtb2RpZnkgdGhlc2UgdGFyZ2V0cyBpbiBydW50aW1lIGJ5IGNyZWF0aW5nIHRoZSBmb2xsb3dpbmcgdGFyZ2V0czo6XG4gIGNhdCBjbWRsaW5lMS9yZW1vdGVfaXBcbiAgMTAuMC4wLjNcbiBcbiYjNDM7UmF0ZSBsaW1pdGluZ1xuJiM0MzstLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXRcbiYjNDM7bG9ncyBjb250aW51b3VzbHkgY2FuIHNhdHVyYXRlIHRoZSByZWNlaXZpbmcgYWdlbnQuIEVhY2ggdGFyZ2V0IGNhcnJpZXMgYSB0b2tlblxuJiM0MztidWNrZXQgdGhhdCBkcm9wcyBtZXNzYWdlcyBvbmNlIHRoZSBjb25maWd1cmVkIHJhdGUgaXMgZXhjZWVkZWQsIGNvbnRyb2xsZWQgYnlcbiYjNDM7dHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OlxuJiM0MztcbiYjNDM7ICAgICAgICA9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW5cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzLiBaZXJvLCB0aGUgZGVmYXVsdCwgc2VuZHNcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnl0aGluZy5cbiYjNDM7ICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOyB6ZXJvIGRyb3BzIGV2ZXJ5IG1lc3NhZ2UuXG4mIzQzOyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7VW5saWtlIG1vc3QgdGFyZ2V0IHBhcmFtZXRlcnMsIGJvdGgga25vYnMgY2FuIGJlIHdyaXR0ZW4gd2hpbGUgdGhlIHRhcmdldCBpc1xuJiM0MztlbmFibGVkLCB3aGljaCBpcyB3aGVuIGEgZmxvb2RpbmcgdGFyZ2V0IG1vc3QgbGlrZWx5IG5lZWRzIHRoZW0uXG4mIzQzO1xuJiM0MztUaGUgbGltaXQgaXMgYXBwbGllZCBwZXIgbWVzc2FnZSwgbm90IHBlciBwYWNrZXQsIHNvIGEgbWVzc2FnZSBiaWcgZW5vdWdoIHRvIGJlXG4mIzQzO3NwbGl0IGludG8gc2V2ZXJhbCBgbmNmcmFnYCBwYWNrZXRzIGlzIGVpdGhlciBzZW50IHdob2xlIG9yIG5vdCBhdCBhbGwuXG4mIzQzO1xuJiM0MztDcmFzaCBvdXRwdXQgYnlwYXNzZXMgdGhlIGJ1Y2tldC4gV2hpbGUgYW4gb29wcywgQlVHKCkgb3IgcGFuaWMoKSBpcyBpblxuJiM0Mztwcm9ncmVzcyBldmVyeSBtZXNzYWdlIGlzIHNlbnQsIHdoYXRldmVyIHRoZSBsaW1pdCBzYXlzLCBzbyBhIHNtYWxsIGJ1cnN0XG4mIzQzO2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC5cbiYjNDM7XG4mIzQzO0EgZHJvcCBsZWF2ZXMgbm90aGluZyBvbiB0aGUgd2lyZSwgc28gdGhlIHJlY2VpdmVyIGlzIHRvbGQgd2hhdCBpdCBtaXNzZWQgYXNcbiYjNDM7c29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjpcbiYjNDM7XG4mIzQzOyAgbmV0Y29uc29sZTogNDUgbWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0XG4mIzQzO1xuJiM0MztUaGUgbm90aWNlIG9ubHkgdHJhdmVscyB3aXRoIHRoZSBuZXh0IG1lc3NhZ2UgdGhlIGJ1Y2tldCBhbGxvd3MuIEEgaG9zdCB0aGF0XG4mIzQzO2dvZXMgcXVpZXQgcmlnaHQgYWZ0ZXIgYmVpbmcgbGltaXRlZCByZXBvcnRzIHRoZSBkcm9wcyBsYXRlciwgd2hlbiBpdCBsb2dzXG4mIzQzO2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLlxuJiM0MztcbiYjNDM7bmV0Y29uc29sZSBnZW5lcmF0ZXMgdGhlIG5vdGljZSBpdHNlbGYgaW5zdGVhZCBvZiBsb2dnaW5nIGl0LCBzbyBvbiBhblxuJiM0MztleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uXG4mIzQzO1xuJiM0MztDYXBwaW5nIGEgdGFyZ2V0IGF0IDUwMCBtZXNzYWdlcyBhIG1pbnV0ZTo6XG4mIzQzO1xuJiM0MzsgIGVjaG8gNjAwMDAgXHUwMDNlIHJhdGVsaW1pdF9pbnRlcnZhbF9tc1xuJiM0MzsgIGVjaG8gNTAwIFx1MDAzZSByYXRlbGltaXRfYnVyc3RcbiYjNDM7XG4gQXBwZW5kIFVzZXIgRGF0YVxuIC0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTQ5LDYgJiM0Mzs0OSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmF0ZWxpbWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7TWF0dCBNYWNrYWxsIFx1MDAzY21wbUBzZWxlbmljLmNvbVx1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXNcJiMzNDspO1xuQEAgLTE3NSw2ICYjNDM7MTc3LDggQEAgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuICAqIEBzeXNkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXG4gICogQHN5c2RhdGFfZmllbGRzOlx0U3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLlxuICAqIEBtc2djb3VudGVyOlx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXG4mIzQzOyAqIEByYXRlbGltaXQ6XHRPcGFxdWUgc3RydWN0dXJlIHRvIHJhdGVsaW1pdCBtZXNzYWdlc1xuJiM0MzsgKiBAcGVuZGluZ19kcm9wczogTWVzc2FnZXMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdCBub3RpY2Ugd2FzIHNlbnQuXG4gICogQHN0YXRzOlx0UGFja2V0IHNlbmQgc3RhdHMgZm9yIHRoZSB0YXJnZXQuIFVzZWQgZm9yIGRlYnVnZ2luZy5cbiAgKiBAc3RhdGU6XHRTdGF0ZSBvZiB0aGUgdGFyZ2V0LlxuICAqXHRcdFZpc2libGUgZnJvbSB1c2Vyc3BhY2UgKHJlYWQtd3JpdGUpLlxuQEAgLTIxOSw2ICYjNDM7MjIzLDggQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdHUzMlx0XHRcdHN5c2RhdGFfZmllbGRzO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi9cbiBcdHUzMlx0XHRcdG1zZ2NvdW50ZXI7XG4mIzQzO1x0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbiYjNDM7XHRzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlXHRyYXRlbGltaXQ7XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgc3RhdHM7XG4gXHRlbnVtIHRhcmdldF9zdGF0ZVx0c3RhdGU7XG5AQCAtMjgyLDYgJiM0MzsyODgsMzQgQEAgc3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4mIzQzO3tcbiYjNDM7XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZudC1cdTAwM2VyYXRlbGltaXQsIDAsIERFRkFVTFRfUkFURUxJTUlUX0JVUlNUKTtcbiYjNDM7XHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0LyogQSBsaW1pdCBtZWFudCBmb3Igc3RlYWR5LXN0YXRlIGxvZ2dpbmcgbXVzdCBub3QgZWF0IGEgY3Jhc2ggZHVtcC4gKi9cbiYjNDM7XHRpZiAob29wc19pbl9wcm9ncmVzcylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKF9fcmF0ZWxpbWl0KFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiBuZXRjb25zb2xlX3Rha2VfZHJvcHMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHUzMiBkcm9wcyA9IG50LVx1MDAzZXBlbmRpbmdfZHJvcHM7XG4mIzQzO1xuJiM0MztcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMgPSAwO1xuJiM0MztcdHJldHVybiBkcm9wcztcbiYjNDM7fVxuJiM0MztcbiAjZWxzZVx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxuQEAgLTMxOCw2ICYjNDM7MzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG4gXG4gLyogQ2hlY2sgaWYgdGhlIHRhcmdldCB3YXMgYm91bmQgYnkgbWFjIGFkZHJlc3MuICovXG5AQCAtNjg2LDYgJiM0Mzs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KG50KTtcbiBcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XG4gXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG5AQCAtOTEyLDYgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsbHVcXG5cJiMzNDssIHhtaXRfZHJvcF9jb3VudCAmIzQzOyBlbm9tZW1fY291bnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIGppZmZpZXNfdG9fbXNlY3MoUkVBRF9PTkNFKG50LVx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCkpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2J1cnN0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBSRUFEX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmJ1cnN0KSk7XG4mIzQzO31cbiYjNDM7XG4gLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbkBAIC0xMzA3LDYgJiM0MzsxMzcxLDUwIEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBqaWZzO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsIFx1MDAyNmludGVydmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0amlmcyA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpO1xuJiM0MztcdGlmIChqaWZzIFx1MDAzZSBJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4mIzQzO1x0V1JJVEVfT05DRShudC1cdTAwM2VyYXRlbGltaXQuaW50ZXJ2YWwsIGppZnMpO1xuJiM0MztcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuJiM0MztcdHVuc2lnbmVkIGludCBidXJzdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdWludChidWYsIDEwLCBcdTAwMjZidXJzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChidXJzdCBcdTAwM2UgSU5UX01BWClcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuJiM0MztcdFdSSVRFX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmJ1cnN0LCBidXJzdCk7XG4mIzQzO1x0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IHVzZXJkYXR1bSB7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbiBcdGNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dO1xuQEAgLTE2NzEsNiAmIzQzOzE3NzksOCBAQCBDT05GSUdGU19BVFRSX1JPKCwgbG9jYWxfbWFjKTtcbiBDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XG4gQ09ORklHRlNfQVRUUigsIHJlbGVhc2UpO1xuIENPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xuJiM0MztDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2ludGVydmFsX21zKTtcbiYjNDM7Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2VuYWJsZWQsXG5AQCAtMTY4NCw2ICYjNDM7MTc5NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xuIFx0XHUwMDI2YXR0cl9sb2NhbF9tYWMsXG4gXHRcdTAwMjZhdHRyX3JlbW90ZV9tYWMsXG4gXHRcdTAwMjZhdHRyX3RyYW5zbWl0X2Vycm9ycyxcbiYjNDM7XHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9pbnRlcnZhbF9tcyxcbiYjNDM7XHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9idXJzdCxcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC0yNDYzLDYgJiM0MzsyNTc1LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcbiYjNDM7e1xuJiM0MztcdGludCBsZW4gPSAwO1xuJiM0MztcdHU2NCB0c191c2VjO1xuJiM0MztcdHUzMiBkcm9wcztcbiYjNDM7XG4mIzQzO1x0ZHJvcHMgPSBuZXRjb25zb2xlX3Rha2VfZHJvcHMobnQpO1xuJiM0MztcdGlmICghZHJvcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChleHRlbmRlZCkge1xuJiM0MztcdFx0LyogYXBwZW5kIHRoZSBleHRlbmRlZCBoZWFkZXJzICovXG4mIzQzO1x0XHRpZiAobnQtXHUwMDNlcmVsZWFzZSlcbiYjNDM7XHRcdFx0bGVuID0gc2NucHJpbnRmKG50LVx1MDAzZWJ1Ziwgc2l6ZW9mKG50LVx1MDAzZWJ1ZiksIFwmIzM0OyVzLFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpO1xuJiM0MztcbiYjNDM7XHRcdHRzX3VzZWMgPSBkaXZfdTY0KGxvY2FsX2Nsb2NrKCksIE5TRUNfUEVSX1VTRUMpO1xuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYobnQtXHUwMDNlYnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LVx1MDAzZWJ1ZikgLSBsZW4sXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyV1LDAsJWxsdSwtO1wmIzM0OywgTE9HTEVWRUxfV0FSTklORywgdHNfdXNlYyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgJiM0MzsgbGVuLCBzaXplb2YobnQtXHUwMDNlYnVmKSAtIGxlbixcbiYjNDM7XHRcdFx0IFwmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGRyb3BzKTtcbiYjNDM7XG4mIzQzO1x0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG4gICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG5AQCAtMjQ4Miw2ICYjNDM7MjYyMiw5IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuIFx0XHQgICAgIW5ldGlmX3J1bm5pbmcobnQtXHUwMDNlbnAuZGV2KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmIChuZXRjb25zb2xlX3JhdGVsaW1pdGVkKG50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHQvKiBJZiBuYmNvbl9lbnRlcl91bnNhZmUoKSBmYWlscywganVzdCByZXR1cm4gZ2l2ZW4gbmV0Y29uc29sZVxuIFx0XHQgKiBsb3N0IHRoZSBvd25lcnNoaXAsIGFuZCBpdGVyYXRpbmcgb3ZlciB0aGUgdGFyZ2V0cyB3aWxsIG5vdFxuIFx0XHQgKiBiZSBhYmxlIHRvIHJlLWFjcXVpcmUuXG5AQCAtMjQ4OSw2ICYjNDM7MjYzMiw4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuIFx0XHRpZiAoIW5iY29uX2VudGVyX3Vuc2FmZSh3Y3R4dCkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuJiM0MztcdFx0c2VuZF9yYXRlbGltaXRfbm90aWNlKG50LCBleHRlbmRlZCk7XG4mIzQzO1xuIFx0XHRpZiAoZXh0ZW5kZWQpXG4gXHRcdFx0c2VuZF9leHRfbXNnX3VkcChudCwgd2N0eHQpO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbmluZGV4IGYwNjc0YzAwMTdmYzQuLjA0Y2NlNDBmMTYyZTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0bmV0Y29uc19jbWRsaW5lLnNoIFxcXG4gXHRuZXRjb25zX2ZyYWdtZW50ZWRfbXNnLnNoIFxcXG4gXHRuZXRjb25zX292ZXJmbG93LnNoIFxcXG4mIzQzO1x0bmV0Y29uc19yYXRlbGltaXQuc2ggXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxuQEAgLTAsMCAmIzQzOzEsMTYwIEBAXG4mIzQzOyMhL3Vzci9iaW4vZW52IGJhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7IyBUaGlzIHRlc3QgZXhlcmNpc2VzIHRoZSBwZXItdGFyZ2V0IHJhdGUgbGltaXQuIEl0IGNvbmZpZ3VyZXMgYSBzbWFsbCBidXJzdFxuJiM0MzsjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55XG4mIzQzOyMgbW9yZSBtZXNzYWdlcyB0aGFuIHRoZSBidXJzdCBhbGxvd3MsIGFuZCBjaGVja3MgdGhhdCB0aGUgdGFyZ2V0IHN0b3BzXG4mIzQzOyMgdHJhbnNtaXR0aW5nIG9uY2UgdGhlIGJ1Y2tldCBpcyBlbXB0eS5cbiYjNDM7I1xuJiM0MzsjIENsZWFyaW5nIHRoZSBpbnRlcnZhbCBoYXMgdG8gcmVzdG9yZSB1bmxpbWl0ZWQgZGVsaXZlcnkgYW5kIHRlbGwgdGhlXG4mIzQzOyMgcmVjZWl2ZXIgaG93IG1hbnkgbWVzc2FnZXMgaXQgbWlzc2VkLCB3aGljaCBpcyB2ZXJpZmllZCBsYXN0LlxuJiM0MzsjXG4mIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7XG4mIzQzO3NldCAtZXVvIHBpcGVmYWlsXG4mIzQzO1xuJiM0MztTQ1JJUFRESVI9JChkaXJuYW1lIFwmIzM0OyQocmVhZGxpbmsgLWUgXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7KVxuJiM0MztcbiYjNDM7c291cmNlIFwmIzM0OyR7U0NSSVBURElSfVwmIzM0Oy8uLi9saWIvc2gvbGliX25ldGNvbnMuc2hcbiYjNDM7XG4mIzQzOyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXRcbiYjNDM7IyB0aGUgYnVja2V0IGlzIGRyYWluZWRcbiYjNDM7TVNHX0NPVU5UPTUwXG4mIzQzO0JVUlNUPTVcbiYjNDM7IyBMb25nIGVub3VnaCB0aGF0IHRoZSBidWNrZXQgaXMgbm90IHJlZmlsbGVkIHdoaWxlIHRoZSB0ZXN0IHJ1bnNcbiYjNDM7SU5URVJWQUxfTVM9NjAwMDBcbiYjNDM7IyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3RcbiYjNDM7REVGQVVMVF9CVVJTVD0xMFxuJiM0MzsjIFdoYXQgdGhlIHRhcmdldCBzZW5kcyBvbmNlIGl0IGNhbiB0cmFuc21pdCBhZ2FpblxuJiM0MztEUk9QX05PVElDRT1cJiMzNDttZXNzYWdlcyBkcm9wcGVkIGJ5IHJhdGUgbGltaXRcJiMzNDtcbiYjNDM7XG4mIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxuJiM0MztPVVRQVVRfRklMRT1cJiMzNDsvdG1wLyR7VEFSR0VUfVwmIzM0O1xuJiM0MztcbiYjNDM7ZnVuY3Rpb24gY291bnRfbXNncygpIHtcbiYjNDM7XHRsb2NhbCBGSUxFPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgWyAhIC1mIFwmIzM0OyR7RklMRX1cJiMzNDsgXVxuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gMFxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0IyBncmVwIGV4aXRzIDEgb24gbm8gbWF0Y2gsIHdoaWNoIGlzIGEgdmFsaWQgcmVzdWx0IGhlcmVcbiYjNDM7XHRncmVwIC1jIFwmIzM0OyR7TVNHfVwmIzM0OyBcJiMzNDske0ZJTEV9XCYjMzQ7IHx8IHRydWVcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gc2VuZF9tc2dzKCkge1xuJiM0MztcdGxvY2FsIENPVU5UPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBJXG4mIzQzO1xuJiM0MztcdGZvciBJIGluICQoc2VxIFwmIzM0OyR7Q09VTlR9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7SX1cJiMzNDsgXHUwMDNlIC9kZXYva21zZ1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBBIGZyZXNobHkgY3JlYXRlZCB0YXJnZXQgaGFzIHRvIGJlIHVubGltaXRlZCwgb3RoZXJ3aXNlIGV2ZXJ5IGV4aXN0aW5nXG4mIzQzOyMgbmV0Y29uc29sZSB1c2VyIHdvdWxkIHN0YXJ0IGRyb3BwaW5nIG1lc3NhZ2VzIGFmdGVyIGFuIHVwZ3JhZGVcbiYjNDM7ZnVuY3Rpb24gY2hlY2tfZGVmYXVsdHMoKSB7XG4mIzQzO1x0bG9jYWwgSU5URVJWQUwgQlVSU1RfREVGQVVMVFxuJiM0MztcbiYjNDM7XHRJTlRFUlZBTD0kKGNhdCBcJiMzNDske05FVENPTlNfUEFUSH1cJiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zKVxuJiM0MztcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXCYjMzQ7JHtORVRDT05TX1BBVEh9XCYjMzQ7L3JhdGVsaW1pdF9idXJzdClcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDske0lOVEVSVkFMfVwmIzM0OyAtbmUgMCBdIHx8XG4mIzQzO1x0ICAgWyBcJiMzNDske0JVUlNUX0RFRkFVTFR9XCYjMzQ7IC1uZSBcJiMzNDske0RFRkFVTFRfQlVSU1R9XCYjMzQ7IF1cbiYjNDM7XHR0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IHVuZXhwZWN0ZWQgcmF0ZSBsaW1pdCBkZWZhdWx0czpcJiMzNDsgXFxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7aW50ZXJ2YWw9JHtJTlRFUlZBTH0gYnVyc3Q9JHtCVVJTVF9ERUZBVUxUfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IFwmIzM0OyR7a3NmdF9mYWlsfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGNoZWNrX2xpbWl0ZWQoKSB7XG4mIzQzO1x0bG9jYWwgUkVDRUlWRURcbiYjNDM7XG4mIzQzO1x0UkVDRUlWRUQ9JChjb3VudF9tc2dzIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7KVxuJiM0MztcbiYjNDM7XHQjIFVucmVsYXRlZCBrZXJuZWwgbWVzc2FnZXMgc2hhcmUgdGhlIGJ1Y2tldCwgc28gZmV3ZXIgdGhhbiBCVVJTVCBvZlxuJiM0MztcdCMgb3VycyBjYW4gZ2V0IHRocm91Z2gsIGJ1dCBuZXZlciBtb3JlXG4mIzQzO1x0aWYgWyBcJiMzNDske1JFQ0VJVkVEfVwmIzM0OyAtZ3QgXCYjMzQ7JHtCVVJTVH1cJiMzNDsgXVxuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogcmVjZWl2ZWQgJHtSRUNFSVZFRH0gbWVzc2FnZXMgd2l0aCByYXRlbGltaXRfYnVyc3Q9JHtCVVJTVH1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0Y2F0IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBUaGUgbm90aWNlIGJlbG93IHRyYXZlbHMgYWhlYWQgb2YgdGhlIG1lc3NhZ2UgdGhhdCByZW9wZW5lZCB0aGUgYnVja2V0LCBzb1xuJiM0MzsjIHdhaXRpbmcgZm9yIHRoZSBmaWxlIHRvIGFwcGVhciBpcyBub3QgZW5vdWdoXG4mIzQzO2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcbiYjNDM7XHRncmVwIC1xIFwmIzM0OyR7TVNHfVwmIzM0OyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OyAyXHUwMDNlIC9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFRoZSBtZXNzYWdlcyBsb3N0IGFib3ZlIGhhdmUgdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHJlY2VpdmVyXG4mIzQzO2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xuJiM0MztcdGlmICEgZ3JlcCAtcSBcJiMzNDske0RST1BfTk9USUNFfVwmIzM0OyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogbm8gcmF0ZSBsaW1pdCBub3RpY2UgaW4gJHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0Y2F0IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7IyBTdGFydCBoZXJlICNcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7XG4mIzQzO21vZHByb2JlIG5ldGRldnNpbSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4mIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcbiYjNDM7IyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXG4mIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7IyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXG4mIzQzO2VjaG8gXCYjMzQ7NiA1XCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xuJiM0MzsjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xuJiM0MztzZXRfbmV0d29ya1xuJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlXG4mIzQzO2NyZWF0ZV9keW5hbWljX3RhcmdldFxuJiM0MztcbiYjNDM7Y2hlY2tfZGVmYXVsdHNcbiYjNDM7XG4mIzQzOyMgU2V0IHRoZSBidXJzdCBiZWZvcmUgdGhlIGludGVydmFsLCBzbyB0aGF0IG5vIG1lc3NhZ2UgZXNjYXBlcyB3aGlsZSB0aGVcbiYjNDM7IyB0YXJnZXQgc3RpbGwgY2FycmllcyB0aGUgZGVmYXVsdCBidXJzdFxuJiM0MztlY2hvIFwmIzM0OyR7QlVSU1R9XCYjMzQ7IFx1MDAzZSBcJiMzNDske05FVENPTlNfUEFUSH1cJiMzNDsvcmF0ZWxpbWl0X2J1cnN0XG4mIzQzO2VjaG8gXCYjMzQ7JHtJTlRFUlZBTF9NU31cJiMzNDsgXHUwMDNlIFwmIzM0OyR7TkVUQ09OU19QQVRIfVwmIzM0Oy9yYXRlbGltaXRfaW50ZXJ2YWxfbXNcbiYjNDM7XG4mIzQzO2xpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAyNlxuJiM0Mzt3YWl0X2Zvcl9wb3J0IFwmIzM0OyR7TkFNRVNQQUNFfVwmIzM0OyBcJiMzNDske1BPUlR9XCYjMzQ7IFwmIzM0O2lwdjRcJiMzNDtcbiYjNDM7c2VuZF9tc2dzIFwmIzM0OyR7TVNHX0NPVU5UfVwmIzM0O1xuJiM0MzsjIFRoaXMgaGFsZiBvZiB0aGUgdGVzdCBpcyBhYm91dCBtZXNzYWdlcyB0aGF0IG5ldmVyIGFycml2ZSwgc28gdGhlcmUgaXNcbiYjNDM7IyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uXG4mIzQzO3NsZWVwIDFcbiYjNDM7cGtpbGxfc29jYXRcbiYjNDM7Y2hlY2tfbGltaXRlZFxuJiM0MztybSAtZiBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0MztcbiYjNDM7IyBEcm9wcGluZyB0aGUgaW50ZXJ2YWwgYmFjayB0byB6ZXJvIGhhcyB0byBtYWtlIHRoZSB0YXJnZXQgdW5saW1pdGVkIGFnYWluXG4mIzQzO2VjaG8gMCBcdTAwM2UgXCYjMzQ7JHtORVRDT05TX1BBVEh9XCYjMzQ7L3JhdGVsaW1pdF9pbnRlcnZhbF9tc1xuJiM0MztcbiYjNDM7bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDI2XG4mIzQzO3dhaXRfZm9yX3BvcnQgXCYjMzQ7JHtOQU1FU1BBQ0V9XCYjMzQ7IFwmIzM0OyR7UE9SVH1cJiMzNDsgXCYjMzQ7aXB2NFwmIzM0O1xuJiM0MztzZW5kX21zZ3MgMVxuJiM0MztpZiAhIGJ1c3l3YWl0IFwmIzM0OyR7QlVTWVdBSVRfVElNRU9VVH1cJiMzNDsgbXNnX3JlY2VpdmVkXG4mIzQzO3RoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O0ZBSUw6IFRpbWVkIG91dCB3YWl0aW5nICgke0JVU1lXQUlUX1RJTUVPVVR9IG1zKSBmb3IgbmV0Y29uc29sZVwmIzM0OyBcXFxuJiM0MztcdCAgICAgXCYjMzQ7bWVzc2FnZSBpbiAke09VVFBVVF9GSUxFfSBhZnRlciBjbGVhcmluZyB0aGUgcmF0ZSBsaW1pdFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0ZXhpdCBcJiMzNDske2tzZnRfZmFpbH1cJiMzNDtcbiYjNDM7ZmlcbiYjNDM7dmFsaWRhdGVfbXNnIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO2NoZWNrX2Ryb3BzX3JlcG9ydGVkXG4mIzQzO3BraWxsX3NvY2F0XG4mIzQzO3JtIC1mIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO1xuJiM0Mzt0cmFwIC0gRVhJVFxuJiM0MztjbGVhbnVwXG4mIzQzO2V4aXQgXCYjMzQ7JHtrc2Z0X3Bhc3N9XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfYnVyc3Rfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CmluZGV4IDRhYjVkN2IwNWNmMTAuLjczNjljZDg5YWU3NmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKQEAgLTE3Nyw2ICYjNDM7MTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OgogIGNhdCBjbWRsaW5lMS9yZW1vdGVfaXAKICAxMC4wLjAuMwogCiYjNDM7UmF0ZSBsaW1pdGluZwomIzQzOy0tLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXQKJiM0Mztsb2dzIGNvbnRpbnVvdXNseSBjYW4gc2F0dXJhdGUgdGhlIHJlY2VpdmluZyBhZ2VudC4gRWFjaCB0YXJnZXQgY2FycmllcyBhIHRva2VuCiYjNDM7YnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5CiYjNDM7dHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OgomIzQzOwomIzQzOyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW4KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMuIFplcm8sIHRoZSBkZWZhdWx0LCBzZW5kcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuCiYjNDM7ICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA7IHplcm8gZHJvcHMgZXZlcnkgbWVzc2FnZS4KJiM0MzsgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztVbmxpa2UgbW9zdCB0YXJnZXQgcGFyYW1ldGVycywgYm90aCBrbm9icyBjYW4gYmUgd3JpdHRlbiB3aGlsZSB0aGUgdGFyZ2V0IGlzCiYjNDM7ZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLgomIzQzOwomIzQzO1RoZSBsaW1pdCBpcyBhcHBsaWVkIHBlciBtZXNzYWdlLCBub3QgcGVyIHBhY2tldCwgc28gYSBtZXNzYWdlIGJpZyBlbm91Z2ggdG8gYmUKJiM0MztzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLgomIzQzOwomIzQzO0NyYXNoIG91dHB1dCBieXBhc3NlcyB0aGUgYnVja2V0LiBXaGlsZSBhbiBvb3BzLCBCVUcoKSBvciBwYW5pYygpIGlzIGluCiYjNDM7cHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdAomIzQzO2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC4KJiM0MzsKJiM0MztBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzCiYjNDM7c29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjoKJiM0MzsKJiM0MzsgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdAomIzQzOwomIzQzO1RoZSBub3RpY2Ugb25seSB0cmF2ZWxzIHdpdGggdGhlIG5leHQgbWVzc2FnZSB0aGUgYnVja2V0IGFsbG93cy4gQSBob3N0IHRoYXQKJiM0Mztnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9ncwomIzQzO2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLgomIzQzOwomIzQzO25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW4KJiM0MztleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uCiYjNDM7CiYjNDM7Q2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OgomIzQzOwomIzQzOyAgZWNobyA2MDAwMCAmZ3Q7IHJhdGVsaW1pdF9pbnRlcnZhbF9tcwomIzQzOyAgZWNobyA1MDAgJmd0OyByYXRlbGltaXRfYnVyc3QKJiM0MzsKIEFwcGVuZCBVc2VyIERhdGEKIC0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTQ5LDYgJiM0Mzs0OSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmF0ZWxpbWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2Nsb2NrLmgmZ3Q7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtNYXR0IE1hY2thbGwgJmx0O21wbUBzZWxlbmljLmNvbSZndDsmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtDb25zb2xlIGRyaXZlciBmb3IgbmV0d29yayBpbnRlcmZhY2VzJiMzNDspOwpAQCAtMTc1LDYgJiM0MzsxNzcsOCBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7CiAgKiBAc3lzZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKICAqIEBzeXNkYXRhX2ZpZWxkczoJU3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLgogICogQG1zZ2NvdW50ZXI6CU1lc3NhZ2Ugc2VudCBjb3VudGVyLgomIzQzOyAqIEByYXRlbGltaXQ6CU9wYXF1ZSBzdHJ1Y3R1cmUgdG8gcmF0ZWxpbWl0IG1lc3NhZ2VzCiYjNDM7ICogQHBlbmRpbmdfZHJvcHM6IE1lc3NhZ2VzIGRyb3BwZWQgc2luY2UgdGhlIGxhc3Qgbm90aWNlIHdhcyBzZW50LgogICogQHN0YXRzOglQYWNrZXQgc2VuZCBzdGF0cyBmb3IgdGhlIHRhcmdldC4gVXNlZCBmb3IgZGVidWdnaW5nLgogICogQHN0YXRlOglTdGF0ZSBvZiB0aGUgdGFyZ2V0LgogICoJCVZpc2libGUgZnJvbSB1c2Vyc3BhY2UgKHJlYWQtd3JpdGUpLgpAQCAtMjE5LDYgJiM0MzsyMjMsOCBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogCXUzMgkJCXN5c2RhdGFfZmllbGRzOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovCiAJdTMyCQkJbXNnY291bnRlcjsKJiM0MzsJdTMyCQkJcGVuZGluZ19kcm9wczsKJiM0MzsJc3RydWN0IHJhdGVsaW1pdF9zdGF0ZQlyYXRlbGltaXQ7CiAjZW5kaWYKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgc3RhdHM7CiAJZW51bSB0YXJnZXRfc3RhdGUJc3RhdGU7CkBAIC0yODIsNiAmIzQzOzI4OCwzNCBAQCBzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZHluYW1pY19uZXRjb25zb2xlX211dGV4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXJhdGVsaW1pdF9zdGF0ZV9pbml0KCZhbXA7bnQtJmd0O3JhdGVsaW1pdCwgMCwgREVGQVVMVF9SQVRFTElNSVRfQlVSU1QpOwomIzQzOwlyYXRlbGltaXRfc2V0X2ZsYWdzKCZhbXA7bnQtJmd0O3JhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQomIzQzO3sKJiM0MzsJLyogQSBsaW1pdCBtZWFudCBmb3Igc3RlYWR5LXN0YXRlIGxvZ2dpbmcgbXVzdCBub3QgZWF0IGEgY3Jhc2ggZHVtcC4gKi8KJiM0MzsJaWYgKG9vcHNfaW5fcHJvZ3Jlc3MpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChfX3JhdGVsaW1pdCgmYW1wO250LSZndDtyYXRlbGltaXQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwludC0mZ3Q7cGVuZGluZ19kcm9wcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQomIzQzO3sKJiM0MzsJdTMyIGRyb3BzID0gbnQtJmd0O3BlbmRpbmdfZHJvcHM7CiYjNDM7CiYjNDM7CW50LSZndDtwZW5kaW5nX2Ryb3BzID0gMDsKJiM0MzsJcmV0dXJuIGRyb3BzOwomIzQzO30KJiM0MzsKICNlbHNlCS8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpCkBAIC0zMTgsNiAmIzQzOzM1MiwyMCBAQCBzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpCiB7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYJLyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqLwogCiAvKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi8KQEAgLTY4Niw2ICYjNDM7NzM0LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZCkKIAludC0mZ3Q7cmVtb3RlX3BvcnQgPSA2NjY2OwogCWV0aF9icm9hZGNhc3RfYWRkcihudC0mZ3Q7cmVtb3RlX21hYyk7CiAJbnQtJmd0O3N0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiYjNDM7CW5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQobnQpOwogCUlOSVRfV09SSygmYW1wO250LSZndDtyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7CiAJLyogU2V0IHVwIHRoZSBza2IgcG9vbCBwcmltaXRpdmVzIG9uY2U7IGVuYWJsaW5nIG9ubHkgcmVmaWxscyBpdC4gKi8KIAlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7bnQtJmd0O3NrYl9wb29sKTsKQEAgLTkxMiw2ICYjNDM7OTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbGx1XG4mIzM0OywgeG1pdF9kcm9wX2NvdW50ICYjNDM7IGVub21lbV9jb3VudCk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiYjNDM7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDsldVxuJiMzNDssCiYjNDM7CQkJICBqaWZmaWVzX3RvX21zZWNzKFJFQURfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmludGVydmFsKSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiYjNDM7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIFJFQURfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmJ1cnN0KSk7CiYjNDM7fQomIzQzOwogLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovCiBzdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CkBAIC0xMzA3LDYgJiM0MzsxMzcxLDUwIEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiYjNDM7CQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcnZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBqaWZzOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvdWludChidWYsIDEwLCAmYW1wO2ludGVydmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWppZnMgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTsKJiM0MzsJaWYgKGppZnMgJmd0OyBJTlRfTUFYKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiYjNDM7CVdSSVRFX09OQ0UobnQtJmd0O3JhdGVsaW1pdC5pbnRlcnZhbCwgamlmcyk7CiYjNDM7CWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsJdW5zaWduZWQgaW50IGJ1cnN0OwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvdWludChidWYsIDEwLCAmYW1wO2J1cnN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChidXJzdCAmZ3Q7IElOVF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKJiM0MzsJV1JJVEVfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmJ1cnN0LCBidXJzdCk7CiYjNDM7CWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKIHN0cnVjdCB1c2VyZGF0dW0gewogCXN0cnVjdCBjb25maWdfaXRlbSBpdGVtOwogCWNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dOwpAQCAtMTY3MSw2ICYjNDM7MTc3OSw4IEBAIENPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpOwogQ09ORklHRlNfQVRUUigsIHJlbW90ZV9tYWMpOwogQ09ORklHRlNfQVRUUigsIHJlbGVhc2UpOwogQ09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7CiYjNDM7Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7CiYjNDM7Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0gewogCSZhbXA7YXR0cl9lbmFibGVkLApAQCAtMTY4NCw2ICYjNDM7MTc5NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0gewogCSZhbXA7YXR0cl9sb2NhbF9tYWMsCiAJJmFtcDthdHRyX3JlbW90ZV9tYWMsCiAJJmFtcDthdHRyX3RyYW5zbWl0X2Vycm9ycywKJiM0MzsJJmFtcDthdHRyX3JhdGVsaW1pdF9pbnRlcnZhbF9tcywKJiM0MzsJJmFtcDthdHRyX3JhdGVsaW1pdF9idXJzdCwKIAlOVUxMLAogfTsKIApAQCAtMjQ2Myw2ICYjNDM7MjU3NSwzNCBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNlbmRfcmF0ZWxpbWl0X25vdGljZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBib29sIGV4dGVuZGVkKQomIzQzO3sKJiM0MzsJaW50IGxlbiA9IDA7CiYjNDM7CXU2NCB0c191c2VjOwomIzQzOwl1MzIgZHJvcHM7CiYjNDM7CiYjNDM7CWRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTsKJiM0MzsJaWYgKCFkcm9wcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGV4dGVuZGVkKSB7CiYjNDM7CQkvKiBhcHBlbmQgdGhlIGV4dGVuZGVkIGhlYWRlcnMgKi8KJiM0MzsJCWlmIChudC0mZ3Q7cmVsZWFzZSkKJiM0MzsJCQlsZW4gPSBzY25wcmludGYobnQtJmd0O2J1Ziwgc2l6ZW9mKG50LSZndDtidWYpLCAmIzM0OyVzLCYjMzQ7LAomIzQzOwkJCQkJaW5pdF91dHNuYW1lKCktJmd0O3JlbGVhc2UpOwomIzQzOwomIzQzOwkJdHNfdXNlYyA9IGRpdl91NjQobG9jYWxfY2xvY2soKSwgTlNFQ19QRVJfVVNFQyk7CiYjNDM7CQlsZW4gJiM0Mzs9IHNjbnByaW50ZihudC0mZ3Q7YnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LSZndDtidWYpIC0gbGVuLAomIzQzOwkJCQkgJiMzNDsldSwwLCVsbHUsLTsmIzM0OywgTE9HTEVWRUxfV0FSTklORywgdHNfdXNlYyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuICYjNDM7PSBzY25wcmludGYobnQtJmd0O2J1ZiAmIzQzOyBsZW4sIHNpemVvZihudC0mZ3Q7YnVmKSAtIGxlbiwKJiM0MzsJCQkgJiMzNDtuZXRjb25zb2xlOiAldSBtZXNzYWdlcyBkcm9wcGVkIGJ5IHJhdGUgbGltaXRcbiYjMzQ7LAomIzQzOwkJCSBkcm9wcyk7CiYjNDM7CiYjNDM7CXNlbmRfdWRwKG50LCBudC0mZ3Q7YnVmLCBsZW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0cwogICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0CkBAIC0yNDgyLDYgJiM0MzsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpCiAJCSAgICAhbmV0aWZfcnVubmluZyhudC0mZ3Q7bnAuZGV2KSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCS8qIElmIG5iY29uX2VudGVyX3Vuc2FmZSgpIGZhaWxzLCBqdXN0IHJldHVybiBnaXZlbiBuZXRjb25zb2xlCiAJCSAqIGxvc3QgdGhlIG93bmVyc2hpcCwgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSB0YXJnZXRzIHdpbGwgbm90CiAJCSAqIGJlIGFibGUgdG8gcmUtYWNxdWlyZS4KQEAgLTI0ODksNiAmIzQzOzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZCkKIAkJaWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKQogCQkJcmV0dXJuOwogCiYjNDM7CQlzZW5kX3JhdGVsaW1pdF9ub3RpY2UobnQsIGV4dGVuZGVkKTsKJiM0MzsKIAkJaWYgKGV4dGVuZGVkKQogCQkJc2VuZF9leHRfbXNnX3VkcChudCwgd2N0eHQpOwogCQllbHNlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQppbmRleCBmMDY3NGMwMDE3ZmM0Li4wNGNjZTQwZjE2MmU5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKQEAgLTEwLDYgJiM0MzsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCW5ldGNvbnNfY21kbGluZS5zaCBcCiAJbmV0Y29uc19mcmFnbWVudGVkX21zZy5zaCBcCiAJbmV0Y29uc19vdmVyZmxvdy5zaCBcCiYjNDM7CW5ldGNvbnNfcmF0ZWxpbWl0LnNoIFwKIAluZXRjb25zX3Jlc3VtZS5zaCBcCiAJbmV0Y29uc19zeXNkYXRhLnNoIFwKIAluZXRjb25zX3RvcnR1cmUuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2gKQEAgLTAsMCAmIzQzOzEsMTYwIEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIHBlci10YXJnZXQgcmF0ZSBsaW1pdC4gSXQgY29uZmlndXJlcyBhIHNtYWxsIGJ1cnN0CiYjNDM7IyBvdmVyIGFuIGludGVydmFsIGxvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBuZXZlciByZWZpbGxlZCwgc2VuZHMgbWFueQomIzQzOyMgbW9yZSBtZXNzYWdlcyB0aGFuIHRoZSBidXJzdCBhbGxvd3MsIGFuZCBjaGVja3MgdGhhdCB0aGUgdGFyZ2V0IHN0b3BzCiYjNDM7IyB0cmFuc21pdHRpbmcgb25jZSB0aGUgYnVja2V0IGlzIGVtcHR5LgomIzQzOyMKJiM0MzsjIENsZWFyaW5nIHRoZSBpbnRlcnZhbCBoYXMgdG8gcmVzdG9yZSB1bmxpbWl0ZWQgZGVsaXZlcnkgYW5kIHRlbGwgdGhlCiYjNDM7IyByZWNlaXZlciBob3cgbWFueSBtZXNzYWdlcyBpdCBtaXNzZWQsIHdoaWNoIGlzIHZlcmlmaWVkIGxhc3QuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtZXVvIHBpcGVmYWlsCiYjNDM7CiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWUgJiMzNDske0JBU0hfU09VUkNFWzBdfSYjMzQ7KSYjMzQ7KQomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBURElSfSYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaAomIzQzOwomIzQzOyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXQKJiM0MzsjIHRoZSBidWNrZXQgaXMgZHJhaW5lZAomIzQzO01TR19DT1VOVD01MAomIzQzO0JVUlNUPTUKJiM0MzsjIExvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBub3QgcmVmaWxsZWQgd2hpbGUgdGhlIHRlc3QgcnVucwomIzQzO0lOVEVSVkFMX01TPTYwMDAwCiYjNDM7IyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3QKJiM0MztERUZBVUxUX0JVUlNUPTEwCiYjNDM7IyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW4KJiM0MztEUk9QX05PVElDRT0mIzM0O21lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdCYjMzQ7CiYjNDM7CiYjNDM7IyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlCiYjNDM7T1VUUFVUX0ZJTEU9JiMzNDsvdG1wLyR7VEFSR0VUfSYjMzQ7CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY291bnRfbXNncygpIHsKJiM0MzsJbG9jYWwgRklMRT0mIzM0OyR7MX0mIzM0OwomIzQzOwomIzQzOwlpZiBbICEgLWYgJiMzNDske0ZJTEV9JiMzNDsgXQomIzQzOwl0aGVuCiYjNDM7CQllY2hvIDAKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwkjIGdyZXAgZXhpdHMgMSBvbiBubyBtYXRjaCwgd2hpY2ggaXMgYSB2YWxpZCByZXN1bHQgaGVyZQomIzQzOwlncmVwIC1jICYjMzQ7JHtNU0d9JiMzNDsgJiMzNDske0ZJTEV9JiMzNDsgfHwgdHJ1ZQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBzZW5kX21zZ3MoKSB7CiYjNDM7CWxvY2FsIENPVU5UPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CWxvY2FsIEkKJiM0MzsKJiM0MzsJZm9yIEkgaW4gJChzZXEgJiMzNDske0NPVU5UfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJZWNobyAmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7SX0mIzM0OyAmZ3Q7IC9kZXYva21zZwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgQSBmcmVzaGx5IGNyZWF0ZWQgdGFyZ2V0IGhhcyB0byBiZSB1bmxpbWl0ZWQsIG90aGVyd2lzZSBldmVyeSBleGlzdGluZwomIzQzOyMgbmV0Y29uc29sZSB1c2VyIHdvdWxkIHN0YXJ0IGRyb3BwaW5nIG1lc3NhZ2VzIGFmdGVyIGFuIHVwZ3JhZGUKJiM0MztmdW5jdGlvbiBjaGVja19kZWZhdWx0cygpIHsKJiM0MzsJbG9jYWwgSU5URVJWQUwgQlVSU1RfREVGQVVMVAomIzQzOwomIzQzOwlJTlRFUlZBTD0kKGNhdCAmIzM0OyR7TkVUQ09OU19QQVRIfSYjMzQ7L3JhdGVsaW1pdF9pbnRlcnZhbF9tcykKJiM0MzsJQlVSU1RfREVGQVVMVD0kKGNhdCAmIzM0OyR7TkVUQ09OU19QQVRIfSYjMzQ7L3JhdGVsaW1pdF9idXJzdCkKJiM0MzsKJiM0MzsJaWYgWyAmIzM0OyR7SU5URVJWQUx9JiMzNDsgLW5lIDAgXSB8fAomIzQzOwkgICBbICYjMzQ7JHtCVVJTVF9ERUZBVUxUfSYjMzQ7IC1uZSAmIzM0OyR7REVGQVVMVF9CVVJTVH0mIzM0OyBdCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiB1bmV4cGVjdGVkIHJhdGUgbGltaXQgZGVmYXVsdHM6JiMzNDsgXAomIzQzOwkJICAgICAmIzM0O2ludGVydmFsPSR7SU5URVJWQUx9IGJ1cnN0PSR7QlVSU1RfREVGQVVMVH0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY2hlY2tfbGltaXRlZCgpIHsKJiM0MzsJbG9jYWwgUkVDRUlWRUQKJiM0MzsKJiM0MzsJUkVDRUlWRUQ9JChjb3VudF9tc2dzICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OykKJiM0MzsKJiM0MzsJIyBVbnJlbGF0ZWQga2VybmVsIG1lc3NhZ2VzIHNoYXJlIHRoZSBidWNrZXQsIHNvIGZld2VyIHRoYW4gQlVSU1Qgb2YKJiM0MzsJIyBvdXJzIGNhbiBnZXQgdGhyb3VnaCwgYnV0IG5ldmVyIG1vcmUKJiM0MzsJaWYgWyAmIzM0OyR7UkVDRUlWRUR9JiMzNDsgLWd0ICYjMzQ7JHtCVVJTVH0mIzM0OyBdCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiByZWNlaXZlZCAke1JFQ0VJVkVEfSBtZXNzYWdlcyB3aXRoIHJhdGVsaW1pdF9idXJzdD0ke0JVUlNUfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWNhdCAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzOyMgVGhlIG5vdGljZSBiZWxvdyB0cmF2ZWxzIGFoZWFkIG9mIHRoZSBtZXNzYWdlIHRoYXQgcmVvcGVuZWQgdGhlIGJ1Y2tldCwgc28KJiM0MzsjIHdhaXRpbmcgZm9yIHRoZSBmaWxlIHRvIGFwcGVhciBpcyBub3QgZW5vdWdoCiYjNDM7ZnVuY3Rpb24gbXNnX3JlY2VpdmVkKCkgewomIzQzOwlncmVwIC1xICYjMzQ7JHtNU0d9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7IDImZ3Q7IC9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0MzsjIFRoZSBtZXNzYWdlcyBsb3N0IGFib3ZlIGhhdmUgdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHJlY2VpdmVyCiYjNDM7ZnVuY3Rpb24gY2hlY2tfZHJvcHNfcmVwb3J0ZWQoKSB7CiYjNDM7CWlmICEgZ3JlcCAtcSAmIzM0OyR7RFJPUF9OT1RJQ0V9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBubyByYXRlIGxpbWl0IG5vdGljZSBpbiAke09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWNhdCAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzOyMgPT09PT09PT09PSAjCiYjNDM7IyBTdGFydCBoZXJlICMKJiM0MzsjID09PT09PT09PT0gIwomIzQzOwomIzQzO21vZHByb2JlIG5ldGRldnNpbSAyJmd0OyAvZGV2L251bGwgfHwgdHJ1ZQomIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0MzsKJiM0MzsjIENoZWNrIGZvciBiYXNpYyBzeXN0ZW0gZGVwZW5kZW5jeSBhbmQgZXhpdCBpZiBub3QgZm91bmQKJiM0MztjaGVja19mb3JfZGVwZW5kZW5jaWVzCiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdAomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7IyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpCiYjNDM7ZWNobyAmIzM0OzYgNSYjMzQ7ICZndDsgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGsKJiM0MzsjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlcwomIzQzO3NldF9uZXR3b3JrCiYjNDM7IyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZQomIzQzO2NyZWF0ZV9keW5hbWljX3RhcmdldAomIzQzOwomIzQzO2NoZWNrX2RlZmF1bHRzCiYjNDM7CiYjNDM7IyBTZXQgdGhlIGJ1cnN0IGJlZm9yZSB0aGUgaW50ZXJ2YWwsIHNvIHRoYXQgbm8gbWVzc2FnZSBlc2NhcGVzIHdoaWxlIHRoZQomIzQzOyMgdGFyZ2V0IHN0aWxsIGNhcnJpZXMgdGhlIGRlZmF1bHQgYnVyc3QKJiM0MztlY2hvICYjMzQ7JHtCVVJTVH0mIzM0OyAmZ3Q7ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2J1cnN0CiYjNDM7ZWNobyAmIzM0OyR7SU5URVJWQUxfTVN9JiMzNDsgJmd0OyAmIzM0OyR7TkVUQ09OU19QQVRIfSYjMzQ7L3JhdGVsaW1pdF9pbnRlcnZhbF9tcwomIzQzOwomIzQzO2xpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmYW1wOwomIzQzO3dhaXRfZm9yX3BvcnQgJiMzNDske05BTUVTUEFDRX0mIzM0OyAmIzM0OyR7UE9SVH0mIzM0OyAmIzM0O2lwdjQmIzM0OwomIzQzO3NlbmRfbXNncyAmIzM0OyR7TVNHX0NPVU5UfSYjMzQ7CiYjNDM7IyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzCiYjNDM7IyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uCiYjNDM7c2xlZXAgMQomIzQzO3BraWxsX3NvY2F0CiYjNDM7Y2hlY2tfbGltaXRlZAomIzQzO3JtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOyMgRHJvcHBpbmcgdGhlIGludGVydmFsIGJhY2sgdG8gemVybyBoYXMgdG8gbWFrZSB0aGUgdGFyZ2V0IHVubGltaXRlZCBhZ2FpbgomIzQzO2VjaG8gMCAmZ3Q7ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zCiYjNDM7CiYjNDM7bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZhbXA7CiYjNDM7d2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7aXB2NCYjMzQ7CiYjNDM7c2VuZF9tc2dzIDEKJiM0MztpZiAhIGJ1c3l3YWl0ICYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfSYjMzQ7IG1zZ19yZWNlaXZlZAomIzQzO3RoZW4KJiM0MzsJZWNobyAmIzM0O0ZBSUw6IFRpbWVkIG91dCB3YWl0aW5nICgke0JVU1lXQUlUX1RJTUVPVVR9IG1zKSBmb3IgbmV0Y29uc29sZSYjMzQ7IFwKJiM0MzsJICAgICAmIzM0O21lc3NhZ2UgaW4gJHtPVVRQVVRfRklMRX0gYWZ0ZXIgY2xlYXJpbmcgdGhlIHJhdGUgbGltaXQmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzO2ZpCiYjNDM7dmFsaWRhdGVfbXNnICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzO2NoZWNrX2Ryb3BzX3JlcG9ydGVkCiYjNDM7cGtpbGxfc29jYXQKJiM0MztybSAtZiAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsKJiM0MzsKJiM0Mzt0cmFwIC0gRVhJVAomIzQzO2NsZWFudXAKJiM0MztleGl0ICYjMzQ7JHtrc2Z0X3Bhc3N9JiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIHRvIG5ldGNvbnNvbGUuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgcGxhY2UuIFRoZXkmIzM5O3JlIGFkZGluZyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgYXMgY29uZmlnZnMgYXR0cmlidXRlcywgd2hpY2ggaXMgYSBzZW5zaWJsZSBhcHByb2FjaCBmb3IgY29udHJvbGxpbmcgdGhlIHJhdGUgbGltaXRpbmcgcGFyYW1ldGVycy4gSSBzZWUgdGhleSYjMzk7cmUgdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAgYW5kIGBfX3JhdGVsaW1pdGAsIHdoaWNoIHN1Z2dlc3RzIHRoZXkgYXJlIHVzaW5nIHRoZSBleGlzdGluZyBrZXJuZWwgcmF0ZWxpbWl0IGluZnJhc3RydWN0dXJlIGVmZmVjdGl2ZWx5LiBQbHVzLCBhIG5vdGlmaWNhdGlvbiBmb3IgZHJvcHBlZCBtZXNzYWdlcz8gR29vZCwgdGhhdCYjMzk7cyBjcnVjaWFsIGZvciBvYnNlcnZhYmlsaXR5LgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlIGNydWNpYWwgYml0cyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCYjMzk7cyBpbnNpZGUgdGhlIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBibG9jay4gV2FpdCwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY29uZmlybWluZy4uLiB5ZXMsIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCAqaXMqIGFsc28gZGVmaW5lZCB3aXRoaW4gdGhhdCBzYW1lIGAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYmxvY2suIE9rYXksIGFsbCBsb29rcyBnb29kIHNvIGZhci4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IGluIG91ciBzZXR1cCwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIHdlbGwtc2NvcGVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE0PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTY6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3LVx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zMTE9c3RhdGljIHUzMiBuZXRjb25zb2xlX3Rha2VfZHJvcHMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMxOTojZWxzZVx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM2ND1zdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzY5OiNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM3MC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Nzk2PXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODIwOiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyMS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAwNj1zdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LX1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDI5OiNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMzAtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyODY9c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzMC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzMyLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzMzM9c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMzc6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzgtXHRcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzUwPXN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM1OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzU5OiNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2MC1cdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQwNzojaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDgtXHRzeXNkYXRhX3B0ciA9IG50LVx1MDAzZXN5c2RhdGE7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MzI9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTQzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDQ6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTQ1LVx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjc2OD1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxMS1cdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgxMjpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MTMtXHRcdFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjgzMD1zdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODM1LVx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODM2OiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MzctXHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjg2MD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg3My1cdFx0XHRpZiAoSVNfRVJSKG50KSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4NzQ6XHRcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODc1LVx0XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSByYXRlIGxpbWl0aW5nIGZvciBOZXRjb25zb2xlIGlzIGhhbmRsZWQgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcmF0ZSBsaW1pdGluZyBpcyBjb25maWd1cmVkIGFuZCBjb250cm9sbGVkLiBUaGUgY2x1ZSBpcyB0aGF0IEkgc2VlIG1lbnRpb24gb2YgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgYW5kIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLiBUaG9zZSBzb3VuZCBsaWtlIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiBkeW5hbWljIGNvbmZpZ3VyYXRpb24uIFRoZSBrZXJuZWwgb2Z0ZW4gdXNlcyBjb25maWdmcyBmb3Igc3lzZnMtbGlrZSBpbnRlcmZhY2VzIHRoYXQgY2FuIGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUuCgpJIGFsc28gcmVtZW1iZXIgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIGR5bmFtaWMgY29uZmlndXJhdGlvbiBpcyB1c3VhbGx5IGEgc2VwYXJhdGUgZmVhdHVyZS4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgdG8gc2VlIHRoZSBtZWNoYW5pc21zIHVzZWQgdG8gY29udHJvbCB0aGUgbGltaXRpbmcgYmVoYXZpb3IuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRldGFpbHMgb24gd2hlcmUgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyByZXNpZGUgYW5kIGhvdyB0aGVzZSBhdHRyaWJ1dGUgdmFsdWVzIGltcGFjdCB0aGUgcmF0ZSBsaW1pdGluZyBsb2dpYyB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGl0c2VsZi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHRpbWVyIG9yIGNvdW50ZXItYmFzZWQgaW1wbGVtZW50YXRpb24sIGJ1dCBJIHdhbnQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzQ4PXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM3NDpzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzUtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbnNvbGUgUmF0ZSBMaW1pdGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0ZSBsaW1pdGluZyBiZWhhdmlvciBpbiB0aGUgbmV0d29yayBjb25zb2xlLiBUaGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoYXQgaXMgaW4gdGhlIGNvcmUgZHJpdmVyIGZpbGU6IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgcmVsYXRlZCB0byByYXRlIGxpbWl0aW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZSBjb25maWd1cmF0aW9uIG9yIHN0b3JhZ2Ugb2YgYnVyc3QgbGltaXRzLiBNeSB0YXJnZXQgaXMgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAuIFRoYXQgbmFtZSBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgc28gaXQgc2hvdWxkIGxlYWQgbWUgcmlnaHQgdG8gdGhlIHJlbGV2YW50IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF0ZWxpbWl0X2J1cnN0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM5NzpzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM5OC1cdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIE5ldGNvbnNvbGUgUmF0ZWxpbWl0aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0d29yayBjb25zb2xlIGhhbmRsZXMgcmF0ZSBsaW1pdGluZy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBmbG9vZGluZyBtaWdodCBiZSBhbiBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBmdW5jdGlvbiwgYXNzdW1pbmcgaXQgZXhpc3RzLiBUaGlzIGlzIGEgY29tbW9uIG5hbWluZyBjb252ZW50aW9uLCBhbmQgaXQmIzM5O3MgbGlrZWx5IHRvIGJlIHRoZSBlbnRyeSBwb2ludCBvciBjZW50cmFsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmF0ZSBsaW1pdGluZyB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgbW9kdWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBsb2dpYywgdW5kZXJzdGFuZCB0aGUgYWxnb3JpdGhtIHRoZXkgdXNlLCBhbmQgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBwb3RlbnRpYWxseSBvdmVyd2hlbG1pbmcgbmV0d29yayB0cmFmZmljLiBJIHdpbGwgdGhlbiBjcm9zcyByZWZlcmVuY2Ugb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGUgYmFzZSB0aGF0IGFyZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV9yYXRlbGltaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjkxPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI5NzpzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzU1PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM1OTpzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzYwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYxMz1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjI1Olx0XHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNi1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIE5ldyBSYXRlIExpbWl0aW5nIEZlYXR1cmUqKgoKT2theSwgc28gdGhpcyBmZWF0dXJlIGxvb2tzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBhZGRpbmcgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgYW5kIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLCB3aGljaCBhcmUgY29uZmlnZnMgYXR0cmlidXRlcy4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCB0aGVpciBjb3VudGVycGFydCBgc2hvd2AgZnVuY3Rpb25zOiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGtleSBsaW1pdGluZyBmdW5jdGlvbnMsIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBhbmQgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgc3RhdGljPyBZZXAsIGl0IGlzLiBIbW0sIHdhaXQgYSBzZWNvbmQuLi4gY29uZmlnZnMgYHN0b3JlYCBhbmQgYHNob3dgIGZ1bmN0aW9ucyBhcmUgKnVzdWFsbHkqIHN0YXRpYyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgY29uZmlnZnNfYXR0cmlidXRlYCBzdHJ1Y3R1cmUuIEJ1dCB0aGUgcHJvbXB0IGlzIGFza2luZyB0byBwcmVmZXIgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIEFyZSB0aGVyZSBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoPwoKTGV0IG1lIHJldmlldyB0aGUgZnVuY3Rpb25zIGFkZGVkIGJ5IHRoaXMgcGF0Y2ggdG8gc2VlIHdoaWNoIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gT2theSwgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCwgaXQmIzM5O3M6CgoqICAgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgIChzdGF0aWMpCiogICBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAgKHN0YXRpYykKKiAgIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgIChzdGF0aWMpCiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgIChzdGF0aWMpCiogICBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgIChzdGF0aWMpCiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCAoc3RhdGljKQoqICAgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAgKHN0YXRpYykKKiAgIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIChzdGF0aWMpCgpEYW1uISBUaGV5JiMzOTtyZSAqYWxsKiBzdGF0aWMuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29uZmlnZnMgYXR0cmlidXRlIGZ1bmN0aW9ucyBhcyB0aGV5IGFyZSB1c2VkIGluIGEgdW5pcXVlIHdheSB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIG1haW4gd3JpdGUgZnVuY3Rpb24sIGBuZXRjb25zb2xlX3dyaXRlYC4KCkJ1dCBob2xkIG9uLCB0aGUgcHJvbXB0ICpzcGVjaWZpY2FsbHkqIHdhbnRzIG1lIHRvIHByZWZlciBub24tc3RhdGljLiBUaGUgcHJvbXB0IHNheXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gQnV0IEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSAqbm90KiBpbmxpbmVkLiBUaGV5IGFyZSBub3QgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gYW5kIHB1dCBpbnRvIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUuIFNvIGl0JiMzOTtzIHN0aWxsIGdvb2QuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGV5IGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19BVFRSLipyYXRlbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3ODE9Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4MjpDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2ludGVydmFsX21zKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzgzOkNPTkZJR0ZTX0FUVFIoLCByYXRlbGltaXRfYnVyc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcmF0ZSBsaW1pdGluZyBpcyBoYW5kbGVkIGluIHRoZSBgbmV0Y29uc29sZWAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBgQ09ORklHRlNfQVRUUmAgaXMgdXNlZC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHRoaXMgbWFjcm8gc29tZWhvdyBpbmxpbmVkIG9yIGRpcmVjdGx5IHVzZWQgZnVuY3Rpb25zIGxpa2UgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAgYW5kIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AuIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIGl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0FUVFJgIGdlbmVyYXRlcyBhIGBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlYCBuYW1lZCBgYXR0cl9yYXRlbGltaXRfaW50ZXJ2YWxfbXNgLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqcGFzc2VkKiB0byB0aGlzIGdlbmVyYXRlZCBzdHJ1Y3R1cmUuCgpUaGF0IG1ha2VzIG1vcmUgc2Vuc2UuIFRoZSBtYWNybyBuZWVkcyBgbmFtZV9zdG9yZWAgYW5kIGBuYW1lX3Nob3dgIHRvIGV4aXN0LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIG1lYW5zIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmVuJiMzOTt0IGJlaW5nIGlubGluZWQsIGFzIEkgaW5pdGlhbGx5IGFzc3VtZWQuIFRoaXMgYWxzbyBtZWFucyB3ZSBjYW4sIGFuZCBzaG91bGQsIGluY2x1ZGUgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYC4KCk5vdywgbW92aW5nIHVwc3RyZWFtLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3Igd3JpdGluZyBtZXNzYWdlcyBhcHBlYXJzIHRvIGJlIGBuZXRjb25zb2xlX3dyaXRlYC4gVGhpcyBmdW5jdGlvbiwgSSBiZWxpZXZlLCBjYWxscyBpbnRvIHRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljLCBuYW1lbHkgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBuZXRjb25zb2xlX3dyaXRlYCBpcyBub3Qgc3RhdGljLiBUaGF0IGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU3OD1zdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwNi0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjA3OiAqIG5ldGNvbnNvbGVfd3JpdGUgLSBHZW5lcmljIGZ1bmN0aW9uIHRvIHNlbmQgYSBtc2cgdG8gYWxsIHRhcmdldHNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjA4LSAqIEB3Y3R4dDogbmJjb24gd3JpdGUgY29udGV4dFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjEyLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MTM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxNC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjQ3LVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjQ4LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQ5Olx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1MC19XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjUyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1My1cdFx0XHRcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU0LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU1Olx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTYtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODQyPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0NC1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX0VYVEVOREVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NTpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODQ2Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDctXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODUxPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODUzLVx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODU0Olx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1NTpcdC53cml0ZV9hdG9taWMgPSBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NTYtXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRjb25zb2xlIEltcGxlbWVudGF0aW9uIFBsYW4qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmV0Y29uc29sZWAgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgd3JpdGUgZnVuY3Rpb24sIGBuZXRjb25zb2xlX3dyaXRlYCwgaXMgYWN0dWFsbHkgc3RhdGljLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdlcmUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLCBidXQgdGhvc2UgYXJlIGFsc28gc3RhdGljLCB0b28uIEl0IG1ha2VzIHNlbnNlIG5vdyAtIHRoZXkmIzM5O3JlIGNhbGxlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGF0IGBzdHJ1Y3QgY29uc29sZWAuIEFscmlnaHQsIHRoYXQgY2xlYXJzIHRoYXQgdXAuCgpTbywgSSB0aGluayBJIGNhbiBpbmNsdWRlIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYHJhdGVsaW1pdF9idXJzdF9zaG93YCwgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCwgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBpbiB0aGUgbmV3IHBsYW4uIAoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcm9hZCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWw6IHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSYjMzk7bGwgbmVlZCB0byB3b3JrIHdpdGg/IEkga25vdyB0aGVyZSYjMzk7cyBgQ09ORklHX05FVENPTlNPTEVgLCBhbmQgSSB0aGluayB0aGVyZSYjMzk7cyBhIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBhcyB3ZWxsLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgYXJlIHRoZSBjb3JyZWN0IG5hbWVzLiBCZXN0IHRvIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCYjMzk7cyBoZWFkIHRoZXJlIGFuZCB2ZXJpZnkgdGhlc2UgYXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGFjY291bnQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzQ0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZGVwZW5kZW5jaWVzOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2Ag4oCTIGltcG9ydGFudCBvcHRpb25zIGluIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgSSBwcmVzdW1lLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBtYXAgb3V0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBvcHRpb25zLCBoYXJkd2FyZSwgb3IgbGlicmFyaWVzIGFyZSBjb250aW5nZW50IG9uIHRoZXNlIGJlaW5nIGVuYWJsZWQsIGFuZCwgY29udmVyc2VseSwgd2hhdCB0aGVzZSBkZXBlbmQgb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIG1vZHVsZSwgb3IgYXJlIHRoZXJlIHdpZGVyIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbSYjMzk7cyBuZXR3b3JrIHN0YWNrPwoKSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9ucyBmb3IgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBhbmQgYGRlZmF1bHRgIHN0YXRlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGVhY2guIFRoYXQgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGVuYWJsaW5nIG9uZSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMsIG9yIGltcGxpZXMsIHRoZSBvdGhlciwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmZsaWN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGRpcmVjdCBhbmQgaW5kaXJlY3QgcmVsYXRpb25zaGlwcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgbmV0d29yayBkcml2ZXJzLCBjb3JlIG5ldHdvcmtpbmcgbW9kdWxlcywgb3IgcG90ZW50aWFsbHkgdGhpbmdzIGxpa2UgbG9nZ2luZyBmcmFtZXdvcmtzPwoKRnVydGhlcm1vcmUsIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmVoYXZpb3IgaGVyZS4gRG9lcyB0aGUgZGVwZW5kZW5jeSB0cmVlIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIENQVSBhcmNoaXRlY3R1cmUsIHRoZSBib2FyZCwgb3IgdGhlIGNob3NlbiBuZXR3b3JraW5nIGhhcmR3YXJlPyBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gcmV2aWV3IGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGVpciBwdXJwb3NlIG9yIHJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHdhcm5pbmdzIG9yIG5vdGVzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBmZWF0dXJlcywgc3VjaCBhcyBmaXJld2FsbHMsIHJvdXRpbmcgcHJvdG9jb2xzLCBvciBldmVuIHBvd2VyIG1hbmFnZW1lbnQuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgYSBjb25jaXNlIGFuZCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhhdCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIGFzIGl0IHNob3VsZCBiZSwgd2l0aG91dCBjb25mbGljdHMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZW5hYmxpbmcgdGhlc2Ugb3B0aW9uczsgaXQmIzM5O3MgYWJvdXQgbWFraW5nIGluZm9ybWVkIGNob2ljZXMgdGhhdCBhbGlnbiB3aXRoIHRoZSBzcGVjaWZpYyBuZWVkcyBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCBndWFyYW50ZWUgb3B0aW1hbCBiZWhhdmlvciwgc3RhYmlsaXR5LCBhbmQgc2VjdXJpdHkgaW4gdGhlIHRhcmdldCBkZXBsb3ltZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyNzpcdGNvbmZpZyBORVRDT05TT0xFXG4gMzI4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4gMzI5Olx0XHRkZXBlbmRzIG9uIFBSSU5US1xuIDMzMDpcdFx0aGVscFxuIDMzMTpcdFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxuIDMzMjpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzMzOlx0XG4gMzM0Olx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuIDMzNTpcdFx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiAzMzY6XHRcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBcXFxuIDMzNzpcdFx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuIDMzODpcdFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXG4gMzM5Olx0XHRoZWxwXG4gMzQwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XG4gMzQxOlx0XHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXG4gMzQyOlx0XHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXG4gMzQzOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzNDQ6XHRcbiAzNDU6XHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbiAzNDY6XHRcdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgTkVUQ09OU09MRWAgbW9kdWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0JiMzOTtzIGNsZWFyIEkmIzM5O2xsIG5lZWQgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBlbmFibGVkLiBBbHNvLCBgQ09ORklHRlNfRlNgIGlzIGEgZGVmaW5pdGUgcmVxdWlyZW1lbnQuIEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBQUklOVEtgIGFuZCBgU1lTRlNgIGFyZSBlbmFibGVkIHNpbmNlIHRob3NlIGFyZSB1c3VhbGx5IGEgZ2l2ZW4uIFNvIGZhciwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGxvb2tzIGxpa2UgdGhpczogYFsmIzM0O05FVENPTlNPTEUmIzM0OywgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywgJiMzNDtDT05GSUdGU19GUyYjMzQ7XWAuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBwYXRjaCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24uIEkgc2VlIGEgZmV3IGtleSBvbmVzOiBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAsIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCwgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AsIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcmF0ZS1saW1pdGluZyBwYXJhbWV0ZXJzIGxpa2UgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYHJhdGVsaW1pdF9idXJzdF9zaG93YCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAsIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLCBhbmQgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG9yIG9uZXMgdGhhdCBoYXZlIHRoZWlyIGFkZHJlc3NlcyB0YWtlbi4gTGV0IG1lIHNlZS4uLiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCwgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgIGFyZSB0aGUgb25lcyB0aGF0IGp1bXAgb3V0LgoKTGV0JiMzOTtzIHNlZSwgaXMgYG5ldGNvbnNvbGVfd3JpdGVgIGFkZHJlc3MtdGFrZW4/IE5vLCBidXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGFyZS4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIFNvIEkgY2FuIGluY2x1ZGUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEFuZCBJIHRoaW5rIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmUgYWxzbyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZm9jdXMgb24uCgpGaW5hbGx5LCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgYXJlIGV2ZW4gcHJlc2VudCBpbiB0aGUga2VybmVsIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHRoZSByaWdodCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlX3dyaXRlX2V4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYxMz1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQ2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDctXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODQyPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0NC1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX0VYVEVOREVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NTpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODQ2Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDctXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgRm9jdXNlZCBTeW1ib2xzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGZvciBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGFuZCB5ZXMsIEkmIzM5O3ZlIGdvdCBhIGxpc3QgYWxyZWFkeS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3Q6CiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYAoqICAgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAKKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AKKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AKCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGlubGluaW5nLiBgbmV0Y29uc29sZV93cml0ZWAgaXMgc3RhdGljLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLCBhbG9uZyB3aXRoIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIGFuZCBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG8gcHV0IGludG8gYEZvY3VzU3ltYm9sc2AuCgpTbywgY29uc2lkZXJpbmcgaW5saW5pbmcsIEkgaGF2ZSBhIHByZWxpbWluYXJ5IGxpc3QsIHdoaWNoIGlzOgoKKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgCiogICBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYAoqICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YAoqICAgYHJhdGVsaW1pdF9idXJzdF9zaG93YAoqICAgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YAoqICAgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgCgpXYWl0IGEgbWludXRlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgbWlnaHQgYmUgaG90IHBhdGhzIGlmIHRoZXJlIGFyZSBtYW55IHByaW50a3MsIGFuZCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IGBwcmludGtgIGlmIG5ldGNvbnNvbGUgaXMgZW5hYmxlZC4gU2luY2UgYHByaW50a2AgY2FuIGJlIGEgaG90IHBhdGgsIHRoaXMgaXMgYSBiaXQgb2YgYSBkaWxlbW1hLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHJhdGVsaW1pdCBzdG9yZSBmdW5jdGlvbnMgZGVmaW5pdGVseSBhcmUgbm90IGhvdCBwYXRocy4gU28sIHNpbmNlIHRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIHNwZWNpZmljIGNvbmZpZ2ZzIHN0b3JlIGZ1bmN0aW9ucywgSSBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGZ1bmN0aW9ucy4KCkxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMuLi4gYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgIGlzIGNhbGxlZCBmcm9tIGBhbGxvY19hbmRfaW5pdGAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGEgbmV3IHRhcmdldCBpcyBjcmVhdGVkLiBIbW0uLi4gY291bGQgSSBhZGQgYGFsbG9jX2FuZF9pbml0YCBvciBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGA/IExldCYjMzk7cyBzZWU6IGBhbGxvY19hbmRfaW5pdGAgaXMgc3RhdGljOyBpdCBzZWVtcyB0aGF0IGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCBpcyB0aGUgY29uZmlnZnMgYG1ha2VfaXRlbWAgY2FsbGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ha2VfbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE4MzM9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqZmluZF9jbWRsaW5lX3RhcmdldChjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTQ6c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1NS1cdFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyBuZXRjb25zb2xlX3N1YnN5c19ncm91cF9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk0MTpcdC5tYWtlX2dyb3VwXHQ9IG1ha2VfbmV0Y29uc29sZV90YXJnZXQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk0Mi1cdC5kcm9wX2l0ZW1cdD0gZHJvcF9uZXRjb25zb2xlX3RhcmdldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMDUKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogNzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYG1ha2VfbmV0Y29uc29sZV90YXJnZXRgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IG1vZGlmaWVkLiBIb3dldmVyLCB0aGUgYGFsbG9jX2FuZF9pbml0YCBmdW5jdGlvbiAqaXMqIGNoYW5nZWQgdG8gY2FsbCBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAsIHNvIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIE15IGZvY3VzLCB0aG91Z2gsIG5lZWRzIHRvIGJlIG9uIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGlzIG5ldyByYXRlIGxpbWl0aW5nIGZlYXR1cmU6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYC4KCkxvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlIGl0JiMzOTtzIGludHJvZHVjaW5nIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBhcyBhdHRyaWJ1dGVzIHdpdGhpbiBgbmV0Y29uc29sZV90YXJnZXRfYXR0cnNgLiBJdCYjMzk7cyBhbHNvIGFkZGluZyB0aGUgY29ycmVzcG9uZGluZyBzdG9yZSBhbmQgc2hvdyBmdW5jdGlvbnM6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AuIENydWNpYWxseSwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYCBhcmUgaW50cm9kdWNlZCBhbmQgdXNlZCB3aXRoaW4gYG5ldGNvbnNvbGVfd3JpdGVgLgoKVGhlcmVmb3JlLCBteSAqRm9jdXNTeW1ib2xzKiBmb3IgdGhlIGZ1enppbmcgZWZmb3J0cyB3aWxsIGJlOgoKKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgCiogICBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYAoqICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YAoqICAgYHJhdGVsaW1pdF9idXJzdF9zaG93YAoKSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIHRoZSByYXRlIGxpbWl0aW5nIGFjdHVhbGx5ICpoYXBwZW5zKi4gVGhhdCYjMzk7cyB3aXRoaW4gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBBcmUgdGhlc2UgaG90IHBhdGhzPyBBYnNvbHV0ZWx5LiBFdmVyeSBgcHJpbnRrYCB0aGF0IGdvZXMgdGhyb3VnaCBuZXRjb25zb2xlLCB3aGVuIGVuYWJsZWQsIGhpdHMgdGhlc2UgZnVuY3Rpb25zLiBXZSBzaG91bGQgZXhjbHVkZSB0aGVtIGZyb20gZGlyZWN0IGZ1enppbmcgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgc2luY2UgdGhleSBhcmUgY29yZSBmdW5jdGlvbmFsaXR5LgoKTm93LCBvbiB0byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGUgZmVhdHVyZSBkZXBlbmRzIG9uIHRoZXNlIGBFbmFibGVDb25maWdzYDoKCiogICBgTkVUQ09OU09MRWAKKiAgIGBORVRDT05TT0xFX0RZTkFNSUNgCiogICBgQ09ORklHRlNfRlNgCgpPdGhlciBkZXBlbmRlbmNpZXMgYXJlIGxpa2VseSBgUFJJTlRLYCBhbmQgYFNZU0ZTYCwgYnV0IHRob3NlIGFyZSB1c3VhbGx5IGVuYWJsZWQuIFNvLCB0aGUga2V5IGRlcGVuZGVuY2llcyByZW1haW4gdGhlIHRocmVlIG1lbnRpb25lZCBhYm92ZS4KCk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgdG8gcHJldmVudCBuZXRjb25zb2xlIHRhcmdldHMgZnJvbSBiZWluZyBvdmVyd2hlbG1lZCBieSBjb250aW51b3VzIGxvZ2dpbmcuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgKGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgLCBgcmF0ZWxpbWl0X2J1cnN0YCkgdG8gY29uZmlndXJlIGEgcmF0ZSBsaW1pdCAqcGVyKiB0YXJnZXQuIFRoZSBjb3JlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIGBuZXRjb25zb2xlX3dyaXRlYCwgbWFraW5nIHVzZSBvZiBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSwgdGhlcmVmb3JlLCBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgQ09ORklHRlNfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUsIGFuZCBpdCBpczsgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldGAgY29uZmlybXMgaXQuIEkgYWxzbyBkb3VibGUtY2hlY2tlZCB0aGUgZXhhY3QgbmFtZXMgb2YgdGhlIHN0b3JlIGFuZCBzaG93IGZ1bmN0aW9ucywgYW5kIHRoZXkgYXJlIGFzIGV4cGVjdGVkOiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCwgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgLgoKSSYjMzk7bSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byBwcm92aWRlIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7cmF0ZWxpbWl0X2J1cnN0X3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93JiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zaG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzIHRvIHByZXZlbnQgYSBob3N0IGZyb20gc2F0dXJhdGluZyB0aGUgcmVjZWl2aW5nIGFnZW50IHdpdGggY29udGludW91cyBsb2dzLiBJdCBhZGRzIG5ldyBjb25maWdmcyBhdHRyaWJ1dGVzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCB0byBjb25maWd1cmUgdGhlIHJhdGUgbGltaXQgcGVyIHRhcmdldC4gVGhlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnNvbGUgd3JpdGUgcGF0aCB1c2luZyBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgYW5kIHRoZSBwcmludGsgY29uc29sZSB3cml0ZSBwYXRoLiBUaGUgY29uZmlnZnMgc3RvcmUvc2hvdyBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19ORVRDT05TT0xFYCwgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR19DT05GSUdGU19GU2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlJiMzNDssCiAgICAmIzM0O3JhdGVsaW1pdF9idXJzdF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtyYXRlbGltaXRfYnVyc3Rfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cblxuVGhlIG5vdGljZSBpcyBmb3JtYXR0ZWQgdXNpbmcgYHNjbnByaW50ZmAgaW50byB0aGUgdGFyZ2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXHUwMDNlYnVmYCksIGFuZCB0aGUgZXhhY3QgbGVuZ3RoIHJldHVybmVkIGJ5IGBzY25wcmludGZgIGlzIHBhc3NlZCB0byBgc2VuZF91ZHBgLiBgc2NucHJpbnRmYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnl0ZXMgaXQgd3JpdGVzLCBhbmQgYHNlbmRfdWRwYCBvbmx5IHJlYWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBidWZmZXIgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLlxuXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxuXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OTA2ZDhiZDFmZWJmNjM5Njc0OTE1OTY3Mjg1ODE5NjVmYThkYTE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTE6MTY6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNzM2OWNkODlhZTc2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdApAQCAtMTc3LDYgJiM0MzsxNzcsNDkgQEAgWW91IGNhbiBtb2RpZnkgdGhlc2UgdGFyZ2V0cyBpbiBydW50aW1lIGJ5IGNyZWF0aW5nIHRoZSBmb2xsb3dpbmcgdGFyZ2V0czo6CiAgY2F0IGNtZGxpbmUxL3JlbW90ZV9pcAogIDEwLjAuMC4zCiAKJiM0MztSYXRlIGxpbWl0aW5nCiYjNDM7LS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO05ldGNvbnNvbGUgaGFuZHMgZXZlcnkgY29uc29sZSBtZXNzYWdlIHRvIGV2ZXJ5IGVuYWJsZWQgdGFyZ2V0LCBzbyBhIGhvc3QgdGhhdAomIzQzO2xvZ3MgY29udGludW91c2x5IGNhbiBzYXR1cmF0ZSB0aGUgcmVjZWl2aW5nIGFnZW50LiBFYWNoIHRhcmdldCBjYXJyaWVzIGEgdG9rZW4KJiM0MztidWNrZXQgdGhhdCBkcm9wcyBtZXNzYWdlcyBvbmNlIHRoZSBjb25maWd1cmVkIHJhdGUgaXMgZXhjZWVkZWQsIGNvbnRyb2xsZWQgYnkKJiM0Mzt0d28gZmlsZXMgaW4gdGhlIHRhcmdldCBkaXJlY3Rvcnk6CiYjNDM7CiYjNDM7ICAgICAgICA9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICAgICAgICByYXRlbGltaXRfaW50ZXJ2YWxfbXMgTGVuZ3RoIG9mIHRoZSBhY2NvdW50aW5nIGludGVydmFsLCBpbgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcy4gWmVybywgdGhlIGRlZmF1bHQsIHNlbmRzCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnl0aGluZy4KJiM0MzsgICAgICAgIHJhdGVsaW1pdF9idXJzdCAgICAgICBNZXNzYWdlcyBhbGxvd2VkIHBlciBpbnRlcnZhbC4gRGVmYXVsdHMgdG8KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDsgemVybyBkcm9wcyBldmVyeSBtZXNzYWdlLgomIzQzOyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1VubGlrZSBtb3N0IHRhcmdldCBwYXJhbWV0ZXJzLCBib3RoIGtub2JzIGNhbiBiZSB3cml0dGVuIHdoaWxlIHRoZSB0YXJnZXQgaXMKJiM0MztlbmFibGVkLCB3aGljaCBpcyB3aGVuIGEgZmxvb2RpbmcgdGFyZ2V0IG1vc3QgbGlrZWx5IG5lZWRzIHRoZW0uCiYjNDM7CiYjNDM7VGhlIGxpbWl0IGlzIGFwcGxpZWQgcGVyIG1lc3NhZ2UsIG5vdCBwZXIgcGFja2V0LCBzbyBhIG1lc3NhZ2UgYmlnIGVub3VnaCB0byBiZQomIzQzO3NwbGl0IGludG8gc2V2ZXJhbCBgbmNmcmFnYCBwYWNrZXRzIGlzIGVpdGhlciBzZW50IHdob2xlIG9yIG5vdCBhdCBhbGwuCiYjNDM7CiYjNDM7Q3Jhc2ggb3V0cHV0IGJ5cGFzc2VzIHRoZSBidWNrZXQuIFdoaWxlIGFuIG9vcHMsIEJVRygpIG9yIHBhbmljKCkgaXMgaW4KJiM0Mztwcm9ncmVzcyBldmVyeSBtZXNzYWdlIGlzIHNlbnQsIHdoYXRldmVyIHRoZSBsaW1pdCBzYXlzLCBzbyBhIHNtYWxsIGJ1cnN0CiYjNDM7Y2Fubm90IGNvc3QgeW91IHBhcnQgb2YgYSBjcmFzaCBkdW1wLgomIzQzOwomIzQzO0EgZHJvcCBsZWF2ZXMgbm90aGluZyBvbiB0aGUgd2lyZSwgc28gdGhlIHJlY2VpdmVyIGlzIHRvbGQgd2hhdCBpdCBtaXNzZWQgYXMKJiM0Mztzb29uIGFzIGEgbWVzc2FnZSBnZXRzIHRocm91Z2ggYWdhaW46OgomIzQzOwomIzQzOyAgbmV0Y29uc29sZTogNDUgbWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0CiYjNDM7CiYjNDM7VGhlIG5vdGljZSBvbmx5IHRyYXZlbHMgd2l0aCB0aGUgbmV4dCBtZXNzYWdlIHRoZSBidWNrZXQgYWxsb3dzLiBBIGhvc3QgdGhhdAomIzQzO2dvZXMgcXVpZXQgcmlnaHQgYWZ0ZXIgYmVpbmcgbGltaXRlZCByZXBvcnRzIHRoZSBkcm9wcyBsYXRlciwgd2hlbiBpdCBsb2dzCiYjNDM7YWdhaW4sIGFuZCBhIHRhcmdldCB3aXRoIGEgYHJhdGVsaW1pdF9idXJzdGAgb2YgemVybyBuZXZlciByZXBvcnRzIHRoZW0uCiYjNDM7CiYjNDM7bmV0Y29uc29sZSBnZW5lcmF0ZXMgdGhlIG5vdGljZSBpdHNlbGYgaW5zdGVhZCBvZiBsb2dnaW5nIGl0LCBzbyBvbiBhbgomIzQzO2V4dGVuZGVkIHRhcmdldCB0aGUgcmVjb3JkIGNhcnJpZXMgYSBzZXF1ZW5jZSBudW1iZXIgb2YgemVyby4KJiM0MzsKJiM0MztDYXBwaW5nIGEgdGFyZ2V0IGF0IDUwMCBtZXNzYWdlcyBhIG1pbnV0ZTo6CiYjNDM7CiYjNDM7ICBlY2hvIDYwMDAwICZndDsgcmF0ZWxpbWl0X2ludGVydmFsX21zCiYjNDM7ICBlY2hvIDUwMCAmZ3Q7IHJhdGVsaW1pdF9idXJzdAomIzQzOwogQXBwZW5kIFVzZXIgRGF0YQogLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggYjM1OGU1YzM2NzM1MS4uMGFmMmU1YjQzMzVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtNDksNiAmIzQzOzQ5LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yYXRlbGltaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY2xvY2suaCZndDsKIAogTU9EVUxFX0FVVEhPUigmIzM0O01hdHQgTWFja2FsbCAmbHQ7bXBtQHNlbGVuaWMuY29tJmd0OyYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXMmIzM0Oyk7CkBAIC0xNzUsNiAmIzQzOzE3Nyw4IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHsKICAqIEBzeXNkYXRhOgkJQ2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZAogICogQHN5c2RhdGFfZmllbGRzOglTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuCiAgKiBAbXNnY291bnRlcjoJTWVzc2FnZSBzZW50IGNvdW50ZXIuCiYjNDM7ICogQHJhdGVsaW1pdDoJT3BhcXVlIHN0cnVjdHVyZSB0byByYXRlbGltaXQgbWVzc2FnZXMKJiM0MzsgKiBAcGVuZGluZ19kcm9wczogTWVzc2FnZXMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdCBub3RpY2Ugd2FzIHNlbnQuCiAgKiBAc3RhdHM6CVBhY2tldCBzZW5kIHN0YXRzIGZvciB0aGUgdGFyZ2V0LiBVc2VkIGZvciBkZWJ1Z2dpbmcuCiAgKiBAc3RhdGU6CVN0YXRlIG9mIHRoZSB0YXJnZXQuCiAgKgkJVmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuCkBAIC0yMTksNiAmIzQzOzIyMyw4IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJdTMyCQkJc3lzZGF0YV9maWVsZHM7CiAJLyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi8KIAl1MzIJCQltc2djb3VudGVyOwomIzQzOwl1MzIJCQlwZW5kaW5nX2Ryb3BzOwomIzQzOwlzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlCXJhdGVsaW1pdDsKICNlbmRpZgogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0czsKIAllbnVtIHRhcmdldF9zdGF0ZQlzdGF0ZTsKQEAgLTI4Miw2ICYjNDM7Mjg4LDM0IEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZCkKIAltdXRleF91bmxvY2soJmFtcDtkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQomIzQzO3sKJiM0MzsJcmF0ZWxpbWl0X3N0YXRlX2luaXQoJmFtcDtudC0mZ3Q7cmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7CiYjNDM7CXJhdGVsaW1pdF9zZXRfZmxhZ3MoJmFtcDtudC0mZ3Q7cmF0ZWxpbWl0LCBSQVRFTElNSVRfTVNHX09OX1JFTEVBU0UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwkvKiBBIGxpbWl0IG1lYW50IGZvciBzdGVhZHktc3RhdGUgbG9nZ2luZyBtdXN0IG5vdCBlYXQgYSBjcmFzaCBkdW1wLiAqLwomIzQzOwlpZiAob29wc19pbl9wcm9ncmVzcykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKF9fcmF0ZWxpbWl0KCZhbXA7bnQtJmd0O3JhdGVsaW1pdCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW50LSZndDtwZW5kaW5nX2Ryb3BzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwl1MzIgZHJvcHMgPSBudC0mZ3Q7cGVuZGluZ19kcm9wczsKJiM0MzsKJiM0MzsJbnQtJmd0O3BlbmRpbmdfZHJvcHMgPSAwOwomIzQzOwlyZXR1cm4gZHJvcHM7CiYjNDM7fQomIzQzOwogI2Vsc2UJLyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi8KIAogc3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZCkKQEAgLTMxOCw2ICYjNDM7MzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZCkKIHsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiBuZXRjb25zb2xlX3Rha2VfZHJvcHMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNlbmRpZgkvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovCiAKIC8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqLwpAQCAtNjg2LDYgJiM0Mzs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKQogCW50LSZndDtyZW1vdGVfcG9ydCA9IDY2NjY7CiAJZXRoX2Jyb2FkY2FzdF9hZGRyKG50LSZndDtyZW1vdGVfbWFjKTsKIAludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKJiM0MzsJbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChudCk7CiAJSU5JVF9XT1JLKCZhbXA7bnQtJmd0O3Jlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTsKIAkvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqLwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtudC0mZ3Q7c2tiX3Bvb2wpOwpAQCAtOTEyLDYgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVsbHVcbiYjMzQ7LCB4bWl0X2Ryb3BfY291bnQgJiM0MzsgZW5vbWVtX2NvdW50KTsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywKJiM0MzsJCQkgIGppZmZpZXNfdG9fbXNlY3MoUkVBRF9PTkNFKG50LSZndDtyYXRlbGltaXQuaW50ZXJ2YWwpKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVkXG4mIzM0OywgUkVBRF9PTkNFKG50LSZndDtyYXRlbGltaXQuYnVyc3QpKTsKJiM0Mzt9CiYjNDM7CiAvKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiBjcHVfbnIgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi8KIHN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKQEAgLTEzMDcsNiAmIzQzOzEzNzEsNTAgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKJiM0MzsJCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKJiM0MzsJdW5zaWduZWQgaW50IGludGVydmFsOwomIzQzOwl1bnNpZ25lZCBsb25nIGppZnM7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsICZhbXA7aW50ZXJ2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJamlmcyA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpOwomIzQzOwlpZiAoamlmcyAmZ3Q7IElOVF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKJiM0MzsJV1JJVEVfT05DRShudC0mZ3Q7cmF0ZWxpbWl0LmludGVydmFsLCBqaWZzKTsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKJiM0MzsJCQkJICAgICBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwomIzQzOwl1bnNpZ25lZCBpbnQgYnVyc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsICZhbXA7YnVyc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGJ1cnN0ICZndDsgSU5UX01BWCkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwomIzQzOwlXUklURV9PTkNFKG50LSZndDtyYXRlbGltaXQuYnVyc3QsIGJ1cnN0KTsKJiM0MzsJZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwogc3RydWN0IHVzZXJkYXR1bSB7CiAJc3RydWN0IGNvbmZpZ19pdGVtIGl0ZW07CiAJY2hhciB2YWx1ZVtNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTl07CkBAIC0xNjcxLDYgJiM0MzsxNzc5LDggQEAgQ09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7CiBDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7CiBDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7CiBDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTsKJiM0MztDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2ludGVydmFsX21zKTsKJiM0MztDT05GSUdGU19BVFRSKCwgcmF0ZWxpbWl0X2J1cnN0KTsKIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7CiAJJmFtcDthdHRyX2VuYWJsZWQsCkBAIC0xNjg0LDYgJiM0MzsxNzk0LDggQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7CiAJJmFtcDthdHRyX2xvY2FsX21hYywKIAkmYW1wO2F0dHJfcmVtb3RlX21hYywKIAkmYW1wO2F0dHJfdHJhbnNtaXRfZXJyb3JzLAomIzQzOwkmYW1wO2F0dHJfcmF0ZWxpbWl0X2ludGVydmFsX21zLAomIzQzOwkmYW1wO2F0dHJfcmF0ZWxpbWl0X2J1cnN0LAogCU5VTEwsCiB9OwogCkBAIC0yNDYzLDYgJiM0MzsyNTc1LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpCiYjNDM7ewomIzQzOwlpbnQgbGVuID0gMDsKJiM0MzsJdTY0IHRzX3VzZWM7CiYjNDM7CXUzMiBkcm9wczsKJiM0MzsKJiM0MzsJZHJvcHMgPSBuZXRjb25zb2xlX3Rha2VfZHJvcHMobnQpOwomIzQzOwlpZiAoIWRyb3BzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQpIHsKJiM0MzsJCS8qIGFwcGVuZCB0aGUgZXh0ZW5kZWQgaGVhZGVycyAqLwomIzQzOwkJaWYgKG50LSZndDtyZWxlYXNlKQomIzQzOwkJCWxlbiA9IHNjbnByaW50ZihudC0mZ3Q7YnVmLCBzaXplb2YobnQtJmd0O2J1ZiksICYjMzQ7JXMsJiMzNDssCiYjNDM7CQkJCQlpbml0X3V0c25hbWUoKS0mZ3Q7cmVsZWFzZSk7CiYjNDM7CiYjNDM7CQl0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKG50LSZndDtidWYgJiM0MzsgbGVuLCBzaXplb2YobnQtJmd0O2J1ZikgLSBsZW4sCiYjNDM7CQkJCSAmIzM0OyV1LDAsJWxsdSwtOyYjMzQ7LCBMT0dMRVZFTF9XQVJOSU5HLCB0c191c2VjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gJiM0Mzs9IHNjbnByaW50ZihudC0mZ3Q7YnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LSZndDtidWYpIC0gbGVuLAomIzQzOwkJCSAmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuJiMzNDssCiYjNDM7CQkJIGRyb3BzKTsKJiM0MzsKJiM0MzsJc2VuZF91ZHAobnQsIG50LSZndDtidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzCiAgKiBAd2N0eHQ6IG5iY29uIHdyaXRlIGNvbnRleHQKQEAgLTI0ODIsNiAmIzQzOzI2MjIsOSBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZCkKIAkJICAgICFuZXRpZl9ydW5uaW5nKG50LSZndDtucC5kZXYpKQogCQkJY29udGludWU7CiAKJiM0MzsJCWlmIChuZXRjb25zb2xlX3JhdGVsaW1pdGVkKG50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogSWYgbmJjb25fZW50ZXJfdW5zYWZlKCkgZmFpbHMsIGp1c3QgcmV0dXJuIGdpdmVuIG5ldGNvbnNvbGUKIAkJICogbG9zdCB0aGUgb3duZXJzaGlwLCBhbmQgaXRlcmF0aW5nIG92ZXIgdGhlIHRhcmdldHMgd2lsbCBub3QKIAkJICogYmUgYWJsZSB0byByZS1hY3F1aXJlLgpAQCAtMjQ4OSw2ICYjNDM7MjYzMiw4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKQogCQlpZiAoIW5iY29uX2VudGVyX3Vuc2FmZSh3Y3R4dCkpCiAJCQlyZXR1cm47CiAKJiM0MzsJCXNlbmRfcmF0ZWxpbWl0X25vdGljZShudCwgZXh0ZW5kZWQpOwomIzQzOwogCQlpZiAoZXh0ZW5kZWQpCiAJCQlzZW5kX2V4dF9tc2dfdWRwKG50LCB3Y3R4dCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCmluZGV4IGYwNjc0YzAwMTdmYzQuLjA0Y2NlNDBmMTYyZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQpAQCAtMTAsNiAmIzQzOzEwLDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJbmV0Y29uc19jbWRsaW5lLnNoIFwKIAluZXRjb25zX2ZyYWdtZW50ZWRfbXNnLnNoIFwKIAluZXRjb25zX292ZXJmbG93LnNoIFwKJiM0MzsJbmV0Y29uc19yYXRlbGltaXQuc2ggXAogCW5ldGNvbnNfcmVzdW1lLnNoIFwKIAluZXRjb25zX3N5c2RhdGEuc2ggXAogCW5ldGNvbnNfdG9ydHVyZS5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi4zOGRkMTU5OWZlNTdkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaApAQCAtMCwwICYjNDM7MSwxNjAgQEAKJiM0MzsjIS91c3IvYmluL2VudiBiYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgcGVyLXRhcmdldCByYXRlIGxpbWl0LiBJdCBjb25maWd1cmVzIGEgc21hbGwgYnVyc3QKJiM0MzsjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55CiYjNDM7IyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHMKJiM0MzsjIHRyYW5zbWl0dGluZyBvbmNlIHRoZSBidWNrZXQgaXMgZW1wdHkuCiYjNDM7IwomIzQzOyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGUKJiM0MzsjIHJlY2VpdmVyIGhvdyBtYW55IG1lc3NhZ2VzIGl0IG1pc3NlZCwgd2hpY2ggaXMgdmVyaWZpZWQgbGFzdC4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7c2V0IC1ldW8gcGlwZWZhaWwKJiM0MzsKJiM0MztTQ1JJUFRESVI9JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDspCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7JHtTQ1JJUFRESVJ9JiMzNDsvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoCiYjNDM7CiYjNDM7IyBNZXNzYWdlcyBzZW50IHdoaWxlIHRoZSBsaW1pdCBpcyBpbiBwbGFjZSwgY29tZm9ydGFibHkgYWJvdmUgQlVSU1Qgc28gdGhhdAomIzQzOyMgdGhlIGJ1Y2tldCBpcyBkcmFpbmVkCiYjNDM7TVNHX0NPVU5UPTUwCiYjNDM7QlVSU1Q9NQomIzQzOyMgTG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5vdCByZWZpbGxlZCB3aGlsZSB0aGUgdGVzdCBydW5zCiYjNDM7SU5URVJWQUxfTVM9NjAwMDAKJiM0MzsjIERlZmF1bHQgdGhlIHRhcmdldCBzdGFydHMgd2l0aCwgYXMgZG9jdW1lbnRlZCBpbiBuZXRjb25zb2xlLnJzdAomIzQzO0RFRkFVTFRfQlVSU1Q9MTAKJiM0MzsjIFdoYXQgdGhlIHRhcmdldCBzZW5kcyBvbmNlIGl0IGNhbiB0cmFuc21pdCBhZ2FpbgomIzQzO0RST1BfTk9USUNFPSYjMzQ7bWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0JiMzNDsKJiM0MzsKJiM0MzsjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGUKJiM0MztPVVRQVVRfRklMRT0mIzM0Oy90bXAvJHtUQVJHRVR9JiMzNDsKJiM0MzsKJiM0MztmdW5jdGlvbiBjb3VudF9tc2dzKCkgewomIzQzOwlsb2NhbCBGSUxFPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CiYjNDM7CWlmIFsgISAtZiAmIzM0OyR7RklMRX0mIzM0OyBdCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gMAomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CSMgZ3JlcCBleGl0cyAxIG9uIG5vIG1hdGNoLCB3aGljaCBpcyBhIHZhbGlkIHJlc3VsdCBoZXJlCiYjNDM7CWdyZXAgLWMgJiMzNDske01TR30mIzM0OyAmIzM0OyR7RklMRX0mIzM0OyB8fCB0cnVlCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIHNlbmRfbXNncygpIHsKJiM0MzsJbG9jYWwgQ09VTlQ9JiMzNDskezF9JiMzNDsKJiM0MzsJbG9jYWwgSQomIzQzOwomIzQzOwlmb3IgSSBpbiAkKHNlcSAmIzM0OyR7Q09VTlR9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQllY2hvICYjMzQ7JHtNU0d9OiAke1RBUkdFVH0gJHtJfSYjMzQ7ICZndDsgL2Rldi9rbXNnCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBBIGZyZXNobHkgY3JlYXRlZCB0YXJnZXQgaGFzIHRvIGJlIHVubGltaXRlZCwgb3RoZXJ3aXNlIGV2ZXJ5IGV4aXN0aW5nCiYjNDM7IyBuZXRjb25zb2xlIHVzZXIgd291bGQgc3RhcnQgZHJvcHBpbmcgbWVzc2FnZXMgYWZ0ZXIgYW4gdXBncmFkZQomIzQzO2Z1bmN0aW9uIGNoZWNrX2RlZmF1bHRzKCkgewomIzQzOwlsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUCiYjNDM7CiYjNDM7CUlOVEVSVkFMPSQoY2F0ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zKQomIzQzOwlCVVJTVF9ERUZBVUxUPSQoY2F0ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2J1cnN0KQomIzQzOwomIzQzOwlpZiBbICYjMzQ7JHtJTlRFUlZBTH0mIzM0OyAtbmUgMCBdIHx8CiYjNDM7CSAgIFsgJiMzNDske0JVUlNUX0RFRkFVTFR9JiMzNDsgLW5lICYjMzQ7JHtERUZBVUxUX0JVUlNUfSYjMzQ7IF0KJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHVuZXhwZWN0ZWQgcmF0ZSBsaW1pdCBkZWZhdWx0czomIzM0OyBcCiYjNDM7CQkgICAgICYjMzQ7aW50ZXJ2YWw9JHtJTlRFUlZBTH0gYnVyc3Q9JHtCVVJTVF9ERUZBVUxUfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBjaGVja19saW1pdGVkKCkgewomIzQzOwlsb2NhbCBSRUNFSVZFRAomIzQzOwomIzQzOwlSRUNFSVZFRD0kKGNvdW50X21zZ3MgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7KQomIzQzOwomIzQzOwkjIFVucmVsYXRlZCBrZXJuZWwgbWVzc2FnZXMgc2hhcmUgdGhlIGJ1Y2tldCwgc28gZmV3ZXIgdGhhbiBCVVJTVCBvZgomIzQzOwkjIG91cnMgY2FuIGdldCB0aHJvdWdoLCBidXQgbmV2ZXIgbW9yZQomIzQzOwlpZiBbICYjMzQ7JHtSRUNFSVZFRH0mIzM0OyAtZ3QgJiMzNDske0JVUlNUfSYjMzQ7IF0KJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBUaGUgbm90aWNlIGJlbG93IHRyYXZlbHMgYWhlYWQgb2YgdGhlIG1lc3NhZ2UgdGhhdCByZW9wZW5lZCB0aGUgYnVja2V0LCBzbwomIzQzOyMgd2FpdGluZyBmb3IgdGhlIGZpbGUgdG8gYXBwZWFyIGlzIG5vdCBlbm91Z2gKJiM0MztmdW5jdGlvbiBtc2dfcmVjZWl2ZWQoKSB7CiYjNDM7CWdyZXAgLXEgJiMzNDske01TR30mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgMiZndDsgL2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzOyMgVGhlIG1lc3NhZ2VzIGxvc3QgYWJvdmUgaGF2ZSB0byBiZSByZXBvcnRlZCB0byB0aGUgcmVjZWl2ZXIKJiM0MztmdW5jdGlvbiBjaGVja19kcm9wc19yZXBvcnRlZCgpIHsKJiM0MzsJaWYgISBncmVwIC1xICYjMzQ7JHtEUk9QX05PVElDRX0mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsKJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IG5vIHJhdGUgbGltaXQgbm90aWNlIGluICR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyA9PT09PT09PT09ICMKJiM0MzsjIFN0YXJ0IGhlcmUgIwomIzQzOyMgPT09PT09PT09PSAjCiYjNDM7CiYjNDM7bW9kcHJvYmUgbmV0ZGV2c2ltIDImZ3Q7IC9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7bW9kcHJvYmUgbmV0Y29uc29sZSAyJmd0OyAvZGV2L251bGwgfHwgdHJ1ZQomIzQzOwomIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZAomIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXMKJiM0MzsjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0CiYjNDM7dHJhcCBjbGVhbnVwIEVYSVQKJiM0MzsKJiM0MzsjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSkKJiM0MztlY2hvICYjMzQ7NiA1JiMzNDsgJmd0OyAvcHJvYy9zeXMva2VybmVsL3ByaW50awomIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzCiYjNDM7c2V0X25ldHdvcmsKJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlCiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0CiYjNDM7CiYjNDM7Y2hlY2tfZGVmYXVsdHMKJiM0MzsKJiM0MzsjIFNldCB0aGUgYnVyc3QgYmVmb3JlIHRoZSBpbnRlcnZhbCwgc28gdGhhdCBubyBtZXNzYWdlIGVzY2FwZXMgd2hpbGUgdGhlCiYjNDM7IyB0YXJnZXQgc3RpbGwgY2FycmllcyB0aGUgZGVmYXVsdCBidXJzdAomIzQzO2VjaG8gJiMzNDske0JVUlNUfSYjMzQ7ICZndDsgJiMzNDske05FVENPTlNfUEFUSH0mIzM0Oy9yYXRlbGltaXRfYnVyc3QKJiM0MztlY2hvICYjMzQ7JHtJTlRFUlZBTF9NU30mIzM0OyAmZ3Q7ICYjMzQ7JHtORVRDT05TX1BBVEh9JiMzNDsvcmF0ZWxpbWl0X2ludGVydmFsX21zCiYjNDM7CiYjNDM7bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZhbXA7CiYjNDM7d2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7aXB2NCYjMzQ7CiYjNDM7c2VuZF9tc2dzICYjMzQ7JHtNU0dfQ09VTlR9JiMzNDsKJiM0MzsjIFRoaXMgaGFsZiBvZiB0aGUgdGVzdCBpcyBhYm91dCBtZXNzYWdlcyB0aGF0IG5ldmVyIGFycml2ZSwgc28gdGhlcmUgaXMKJiM0MzsjIG5vdGhpbmcgdG8gYnVzeXdhaXQgb24KJiM0MztzbGVlcCAxCiYjNDM7cGtpbGxfc29jYXQKJiM0MztjaGVja19saW1pdGVkCiYjNDM7cm0gLWYgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CiYjNDM7IyBEcm9wcGluZyB0aGUgaW50ZXJ2YWwgYmFjayB0byB6ZXJvIGhhcyB0byBtYWtlIHRoZSB0YXJnZXQgdW5saW1pdGVkIGFnYWluCiYjNDM7ZWNobyAwICZndDsgJiMzNDske05FVENPTlNfUEFUSH0mIzM0Oy9yYXRlbGltaXRfaW50ZXJ2YWxfbXMKJiM0MzsKJiM0MztsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmFtcDsKJiM0Mzt3YWl0X2Zvcl9wb3J0ICYjMzQ7JHtOQU1FU1BBQ0V9JiMzNDsgJiMzNDske1BPUlR9JiMzNDsgJiMzNDtpcHY0JiMzNDsKJiM0MztzZW5kX21zZ3MgMQomIzQzO2lmICEgYnVzeXdhaXQgJiMzNDske0JVU1lXQUlUX1RJTUVPVVR9JiMzNDsgbXNnX3JlY2VpdmVkCiYjNDM7dGhlbgomIzQzOwllY2hvICYjMzQ7RkFJTDogVGltZWQgb3V0IHdhaXRpbmcgKCR7QlVTWVdBSVRfVElNRU9VVH0gbXMpIGZvciBuZXRjb25zb2xlJiMzNDsgXAomIzQzOwkgICAgICYjMzQ7bWVzc2FnZSBpbiAke09VVFBVVF9GSUxFfSBhZnRlciBjbGVhcmluZyB0aGUgcmF0ZSBsaW1pdCYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7ZmkKJiM0Mzt2YWxpZGF0ZV9tc2cgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7Y2hlY2tfZHJvcHNfcmVwb3J0ZWQKJiM0Mztwa2lsbF9zb2NhdAomIzQzO3JtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzO3RyYXAgLSBFWElUCiYjNDM7Y2xlYW51cAomIzQzO2V4aXQgJiMzNDske2tzZnRfcGFzc30mIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIHJhdGUgbGltaXRpbmcgdG8gbmV0Y29uc29sZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIGludHJvZHVjZXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIHRvIHRoZSBuZXRjb25zb2xlIHRhcmdldCBjb25maWd1cmF0aW9uLCBhbmQgdXNlcyBhIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB3aXRoaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuICBBIGBwZW5kaW5nX2Ryb3BzYCBjb3VudGVyIGlzIGFkZGVkOyB3aGVuIHRoZSByYXRlIGxpbWl0IGlzIGV4Y2VlZGVkLCBtZXNzYWdlcyBnZXQgZHJvcHBlZCBhbmQgdGhpcyBjb3VudGVyIGluY3JlbWVudHMuIFdoZW4gYSBtZXNzYWdlICppcyogYWxsb3dlZCwgaXQgY2hlY2tzIGlmIGBwZW5kaW5nX2Ryb3BzYCBpcyAmZ3Q7IDAgYW5kLCBpZiBzbywgc2VuZHMgYSAmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuJiMzNDsgbm90aWNlLiBUaGlzIG5vdGljZSBpcyBzZW50IHZpYSBgc2VuZF9yYXRlbGltaXRfbm90aWNlKClgLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2UoKWAuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBmdW5jdGlvbiBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJhdGUgbGltaXRpbmcgaXMgYWN0dWFsbHkgKmFubm91bmNlZCouICBJJiMzOTttIHJlYWRpbmcgdGhlIGNvZGUsIGFuZCBteSBtYWluIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGJ1ZmZlciBvdmVyZmxvd3MuCgpgYGBjCiYjNDM7c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpCiYjNDM7ewomIzQzOwlpbnQgbGVuID0gMDsKJiM0MzsJdTY0IHRzX3VzZWM7CiYjNDM7CXUzMiBkcm9wczsKJiM0MzsKJiM0MzsJZHJvcHMgPSBuZXRjb25zb2xlX3Rha2VfZHJvcHMobnQpOwomIzQzOwlpZiAoIWRyb3BzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQpIHsKJiM0MzsJCS8qIGFwcGVuZCB0aGUgZXh0ZW5kZWQgaGVhZGVycyAqLwomIzQzOwkJaWYgKG50LSZndDtyZWxlYXNlKQomIzQzOwkJCWxlbiA9IHNjbnByaW50ZihudC0mZ3Q7YnVmLCBzaXplb2YobnQtJmd0O2J1ZiksICYjMzQ7JXMsJiMzNDssCiYjNDM7CQkJCQlpbml0X3V0c25hbWUoKS0mZ3Q7cmVsZWFzZSk7CiYjNDM7CiYjNDM7CQl0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKG50LSZndDtidWYgJiM0MzsgbGVuLCBzaXplb2YobnQtJmd0O2J1ZikgLSBsZW4sCiYjNDM7CQkJCSAmIzM0OyV1LDAsJWxsdSwtOyYjMzQ7LCBMT0dMRVZFTF9XQVJOSU5HLCB0c191c2VjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gJiM0Mzs9IHNjbnByaW50ZihudC0mZ3Q7YnVmICYjNDM7IGxlbiwgc2l6ZW9mKG50LSZndDtidWYpIC0gbGVuLAomIzQzOwkJCSAmIzM0O25ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuJiMzNDssCiYjNDM7CQkJIGRyb3BzKTsKJiM0MzsKJiM0MzsJc2VuZF91ZHAobnQsIG50LSZndDtidWYsIGxlbik7CiYjNDM7fQpgYGAKCk9rYXksIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSBub3RpY2UgbWVzc2FnZSBpcyBmb3JtYXR0ZWQgaW50byBgbnQtJmd0O2J1ZmAsIGFuZCB0aGVuIGBzZW5kX3VkcCgpYCBpcyBjYWxsZWQuICBUaGUga2V5IGhlcmUgaXMgdW5kZXJzdGFuZGluZyBleGFjdGx5ICpob3cqIGBudC0mZ3Q7YnVmYCBpcyB1c2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIGBudC0mZ3Q7YnVmYCBwcm9wZXJseSBpbml0aWFsaXplZD8gT3IgY291bGQgd2UgYmUgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeT8KCmBzY25wcmludGZgIHdyaXRlcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuIGBzY25wcmludGZgIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuICpleGNsdWRpbmcqIHRoZSBudWxsIHRlcm1pbmF0b3IuIFRoZSBjb2RlIHRoZW4gY2FsbHMgYHNlbmRfdWRwKG50LCBudC0mZ3Q7YnVmLCBsZW4pYCwgc28gaXQgc2VlbXMgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgc2VuZGluZyBleGFjdGx5IGBsZW5gIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlci4KCk5vdywgY29uc2lkZXIgdGhlIGBpZiAobnQtJmd0O3JlbGVhc2UpYCBibG9jay4gSWYgYG50LSZndDtyZWxlYXNlYCBpcyB0cnVlLCB0aGVuIHdlIGFwcGVuZCBhZGRpdGlvbmFsIGhlYWRlcnMuIElmIGl0JiMzOTtzIGZhbHNlLCBgbGVuYCBpcyBpbml0aWFsaXplZCB0byAwLiAgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHdpdGggZWFjaCBzdWJzZXF1ZW50IGNhbGwgdG8gYHNjbnByaW50ZmAsIGl0JiMzOTtzIGFkZGluZyB0byB0aGUgZXhpc3RpbmcgY29udGVudCBhbmQgZW5zdXJpbmcgaXQgaXMgbnVsbC10ZXJtaW5hdGVkLiBBbmQsIGluIGFsbCBjYXNlcywgd2UmIzM5O3JlIHVzaW5nIHRoZSByZXR1cm5lZCBsZW5ndGggdmFsdWUuIFRoZSBmaW5hbCBjYWxsIHRvIGBzY25wcmludGZgIHdpbGwgd3JpdGUgdGhlICYjMzQ7bmV0Y29uc29sZTogLi4uJiMzNDsgbWVzc2FnZS4gVGhlIGBzY25wcmludGZgIGZ1bmN0aW9uICpzaG91bGQqIGhhbmRsZSB0aGUgbnVsbCB0ZXJtaW5hdGlvbi4gVGh1cywgYHNlbmRfdWRwKClgIGlzIG9ubHkgcmVhZGluZyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2UmIzM5O3ZlIGV4cGxpY2l0bHkgd3JpdHRlbiB0byB0aGUgYnVmZmVyIHZpYSBgc2NucHJpbnRmYCAuIFNvLCBubywgdGhlcmUgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgY29tYmluYXRpb24gb2YgYHNjbnByaW50ZmAgYW5kIHRoZSBzdWJzZXF1ZW50IHVzZSBvZiBgbGVuYCBpbiBgc2VuZF91ZHAoKWAgcHJldmVudHMgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHRyYW5zbWl0dGVkLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBzZW5kX3VkcGAgYW5kIGBudC0mZ3Q7YnVmYCBhcmUgY29ycmVjdGx5IGRlZmluZWQgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgaGF2ZSBjb25maXJtZWQgdGhhdCBgbnQtJmd0O2J1ZmAgaXMgaW5kZWVkIGEgY2hhcmFjdGVyIGFycmF5IHdpdGggYSBkZWZpbmVkIHNpemUuIENoZWNraW5nIGBzZW5kX3VkcGAgY29uZmlybXMgdGhhdCBpdCB0YWtlcyBhIHBvaW50ZXIgdG8gYSBidWZmZXIgYW5kIGEgbGVuZ3RoLCBhbmQgaXQgc2ltcGx5IHNlbmRzIGEgVURQIHBhY2tldCBjb250YWluaW5nIHRob3NlIGJ5dGVzLiBTaW5jZSBgc2NucHJpbnRmYCBpcyBmb3JtYXR0aW5nIGEgc3RyaW5nIGludG8gdGhlIGJ1ZmZlciBjb3JyZWN0bHksIHRoYXQgbWVhbnMgd2UmIzM5O3JlIGluIGdvb2Qgc2hhcGUuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGdvdGNoYXMuIEkgc2F3IGBtc2djb3VudGVyYCwgYHBlbmRpbmdfZHJvcHNgLCBhbmQgYHJhdGVsaW1pdGAuIFRoZXNlIGFyZSBwcmltaXRpdmUgdHlwZXMgYW5kIGEgc3RydWN0LCB3aGljaCBpcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2FuZF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTg9c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDA2LS8qIFNlZWQgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8uIFRoZSBxdWV1ZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQwNzogKiBoZWFkIGFuZCByZWZpbGwgd29yayBhcmUgc2V0IHVwIG9uY2UgaW4gYWxsb2NfYW5kX2luaXQoKTsgdGhpcyBvbmx5XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDA4LSAqIChyZSlmaWxscyB0aGUgcG9vbC4gUGFpciB3aXRoIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKS5cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjU3PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcxNy0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MTg6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MTkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODU0PXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzM6XHRudCA9IGFsbG9jX2FuZF9pbml0KCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3NC1cdGlmICghbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3Njg9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3NzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc3NDpcdG50ID0gYWxsb2NfYW5kX2luaXQoKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzc1LVx0aWYgKCFudCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBhbGxvY19hbmRfaW5pdGAgZm9yIGBremFsbG9jYCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgYWxsb2NfYW5kX2luaXRgIGZ1bmN0aW9uLiBUaGUgcHJpbWFyeSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24gdXRpbGl6ZXMgYGt6YWxsb2NgIGludGVybmFsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIGBhbGxvY19hbmRfaW5pdGAgaXMgemVyb2VkIG91dC4gSWYgaXQgaXMsIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSBhcmVhIG9mIGV4cGVydGlzZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjb2RlIHdpdGhpbiBgYWxsb2NfYW5kX2luaXRgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZGlyZWN0IGNhbGxzIHRvIGBremFsbG9jYCBvciBhbnkgYWxsb2NhdGlvbiBwYXRod2F5cyB0aGF0IG1pZ2h0IHVsdGltYXRlbHkgbGVhZCB0byBhIHplcm9pbmctb3V0IG9wZXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgYXMgdG8gd2hpY2ggYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyB1dGlsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxODpcdHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXG4gNzE5Olx0e1xuIDcyMDpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbiA3MjE6XHRcbiA3MjI6XHRcdG50ID0ga3phbGxvY19vYmooKm50KTtcbiA3MjM6XHRcdGlmICghbnQpXG4gNzI0Olx0XHRcdHJldHVybiBudDtcbiA3MjU6XHRcbiA3MjY6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0VYVEVOREVEX0xPRykpXG4gNzI3Olx0XHRcdG50LVx1MDAzZWV4dGVuZGVkID0gdHJ1ZTtcbiA3Mjg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRSkpXG4gNzI5Olx0XHRcdG50LVx1MDAzZXJlbGVhc2UgPSB0cnVlO1xuIDczMDpcdFxuIDczMTpcdFx0bnQtXHUwMDNlbnAubmFtZSA9IFwmIzM0O25ldGNvbnNvbGVcJiMzNDs7XG4gNzMyOlx0XHRzdHJzY3B5KG50LVx1MDAzZW5wLmRldl9uYW1lLCBcJiMzNDtldGgwXCYjMzQ7LCBJRk5BTVNJWik7XG4gNzMzOlx0XHRudC1cdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcbiA3MzQ6XHRcdG50LVx1MDAzZXJlbW90ZV9wb3J0ID0gNjY2NjtcbiA3MzU6XHRcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiA3MzY6XHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gNzM3Olx0XHRuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KG50KTtcbiA3Mzg6XHRcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XG4gNzM5Olx0XHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xuIDc0MDpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gNzQxOlx0XHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuIDc0MjpcdFxuIDc0MzpcdFx0cmV0dXJuIG50O1xuIDc0NDpcdH1cbiA3NDU6XHRcbiA3NDY6XHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXG4gNzQ3Olx0ICogdGhlIG1haW4gdGFyZ2V0X2xpc3QuXG4gNzQ4Olx0ICovXG4gNzQ5Olx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiA3NTA6XHR7XG4gNzUxOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xuIDc1MjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA3NTM6XHRcbiA3NTQ6XHRcdC8qIFRoZSBjbGVhbnVwIG5lZWRzIFJUTkwgbG9ja2VkICovXG4gNzU1Olx0XHRBU1NFUlRfUlROTCgpO1xuIDc1NjpcdFxuIDc1NzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuIDc1ODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QsIGxpc3QpIHtcbiA3NTk6XHRcdFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xuIDc2MDpcdFx0XHRXQVJOX09OX09OQ0UobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCk7XG4gNzYxOlx0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIDc2MjpcdFx0XHRuZXRjb25zX3JlbGVhc2VfZGV2KG50KTtcbiA3NjM6XHRcdFx0LyogbW92ZWQgdGhlIGNsZWFuZWQgdGFyZ2V0IHRvIHRhcmdldF9saXN0LiBOZWVkIHRvIGhvbGQgYm90aFxuIDc2NDpcdFx0XHQgKiBsb2Nrc1xuIDc2NTpcdFx0XHQgKi9cbiA3NjY6XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuIDc2NzpcdFx0XHRsaXN0X21vdmUoXHUwMDI2bnQtXHUwMDNlbGlzdCwgXHUwMDI2dGFyZ2V0X2xpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUmF0ZSBMaW1pdGluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXRjb25zb2xlIHJhdGUgbGltaXRpbmcgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIHNvdW5kLiBGaXJzdCwgYGt6YWxsb2Nfb2JqKCpudClgIGlzIGJlaW5nIHVzZWQsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgYGt6YWxsb2NgIHdpdGggdGhlIHNpemUgb2YgdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LCBhbmQgdGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBldmVyeXRoaW5nJiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuIEkmIzM5O2QgZXhwZWN0IGBwZW5kaW5nX2Ryb3BzYCB0byBiZSB6ZXJvIGluaXRpYWxseSwgYW5kIHRoZSBgcmF0ZWxpbWl0YCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgLCB3aGljaCBjYWxscyBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLiAgTm8gaW1tZWRpYXRlIHJlZCBmbGFncy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gSSYjMzk7bGwgZXhhbWluZSB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgcmF0ZSBsaW1pdGluZyBtZWNoYW5pc20uIFRoZSBmaXJzdCBpcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYC4gU2VlbXMgcmVhc29uYWJsZTsgaXQgY29udmVydHMgdGhlIGludGVydmFsIGZyb20gbWlsbGlzZWNvbmRzIHRvIGppZmZpZXMsIGNoZWNrcyBmb3IgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNvbnZlcnRpbmcgdG8gamlmZmllcywgYW5kIHRoZW4gdXNlcyBgV1JJVEVfT05DRWAgdG8gdXBkYXRlIHRoZSBgaW50ZXJ2YWxgIGZpZWxkIGluIHRoZSBgcmF0ZWxpbWl0YCBzdHJ1Y3Qgd2l0aGluIGEgbXV0ZXguIFRoYXQmIzM5O3MgYSBzYWZlIGFuZCBlZmZlY3RpdmUgd2F5IHRvIGhhbmRsZSBjb25jdXJyZW50IGFjY2Vzcy4gIFRoZSBpbnRlZ2VyIGNvbnZlcnNpb24gaXMgY29ycmVjdCwgYXMgaXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBtdXRleC4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYC4gVGhpcyBjaGVja3MgaWYgYW4gb29wcyBpcyBpbiBwcm9ncmVzcywgcmV0dXJuaW5nIGZhbHNlIGlmIGl0IGlzIChpbXBvcnRhbnQsIHdlIGRvbiYjMzk7dCB3YW50IHRvIHJhdGUgbGltaXQgY3Jhc2ggZHVtcHMpLiBJdCB0aGVuIGNhbGxzIGBfX3JhdGVsaW1pdGAgYW5kIGluY3JlbWVudHMgYG50LSZndDtwZW5kaW5nX2Ryb3BzYCBpZiB0aGUgcmF0ZSBsaW1pdCBpcyBleGNlZWRlZC4gTm8gaXNzdWVzIGhlcmUuCgpGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgLiAgVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLiBUaGUgY29kZSBjaGVja3MgYG50LSZndDtwZW5kaW5nX2Ryb3BzYCwgYW5kIGZvcm1hdHMgYSBzdHJpbmcgaW50byBgbnQtJmd0O2J1ZmAuICBJdCB1c2VzIGBzY25wcmludGZgLCB3aGljaCBpcyBnb29kIHNpbmNlIGl0JiMzOTtzIHNhZmUgdG8gdXNlIHdpdGggYm91bmRlZCBidWZmZXJzLCBidXQgKmlzIHRoZSBidWZmZXIgbGFyZ2UgZW5vdWdoPyogVGhlIGNvZGUgKmRvZXMqIHVzZSBgc2l6ZW9mKG50LSZndDtidWYpYCBpbiBgc2NucHJpbnRmYCwgc28gdGhhdCYjMzk7cyBnb29kLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNpemUgb2YgYG50LSZndDtidWZgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gaGFuZGxlIGFsbCB0aGUgcG9zc2libGUgZm9ybWF0dGVkIHN0cmluZyBsZW5ndGhzLiBOb3csIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjU9c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE0OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgZGVidWdnaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFRoaXMgc3RydWN0IGlzIHRoZSBoZWFydCBvZiB3aGVyZSB0aGUgbmV0Y29uc29sZSBkcml2ZXIgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciB0YXJnZXQgc3lzdGVtIGl0JiMzOTtzIHN1cHBvc2VkIHRvIHNlbmQgY29uc29sZSBtZXNzYWdlcyB0by4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIGRlc2NyaXB0b3IgZm9yIGVhY2ggcmVtb3RlIGNvbnNvbGUgd2UmIzM5O3JlIHRyeWluZyB0byByZWFjaC4KCkZpcnN0IG9mZiwgSSYjMzk7ZCBiZSBsb29raW5nIGF0IHRoZSBzb2NrZXQgYWRkcmVzcyBpbmZvcm1hdGlvbi4gSXQgaGFzIHRvIGNvbnRhaW4gdGhlIElQIGFkZHJlc3MgKHY0IG9yIHY2LCBtb3N0IGxpa2VseSkgYW5kIHRoZSBVRFAgcG9ydCBudW1iZXIgb2YgdGhlIHJlbW90ZSBtYWNoaW5lJiMzOTtzIG5ldGNvbnNvbGUgbGlzdGVuZXIuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBUaGUgZmllbGRzIHRoYXQgaG9sZCB0aGlzIGluZm8gYXJlIHRoZSBtb3N0IGNyaXRpY2FsLiBJJiMzOTtkIGJlIGNyb3NzLXJlZmVyZW5jaW5nIHRoaXMgc3RydWN0dXJlIHdpdGggdGhlIHNvY2tldCBhbmQgVURQIGNvZGUsIG1ha2luZyBzdXJlIHRoZSBhZGRyZXNzIGZhbWlsaWVzIGFuZCBwb3J0IGhhbmRsaW5nIGFyZSBjb25zaXN0ZW50IGFuZCByb2J1c3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgYmVpbmcgbWFuYWdlZCB0aHJlYWQtc2FmZWx5LCB0b28uIFdlIGRvbuKAmXQgd2FudCB0byBiZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBkYXRhIHJhY2VzIHByZXZlbnQgdGhlIG1lc3NhZ2VzIGZyb20gZ2V0dGluZyB0aHJvdWdoLgoKVGhlbiwgdGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZSBzdGF0ZSB0cmFja2luZy4gSXMgaXQgYWN0aXZlbHkgY29ubmVjdGVkIG9yIHRyeWluZyB0byByZWNvbm5lY3Q/IFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNvY2tldCBpcyByZWFkeSB0byBhY2NlcHQgZGF0YS4gU29tZSBraW5kIG9mIGVycm9yIGNvdW50ZXIgb3IgdGltZXN0YW1wIG1pZ2h0IGV4aXN0IHRvIHNlZSBob3cgbG9uZyBpdCYjMzk7cyBiZWVuIHNpbmNlIGEgc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gYW5kIHNlZSBpZiBhIHRhcmdldCBpcyBwZXJtYW5lbnRseSB1bnJlYWNoYWJsZS4gSSYjMzk7ZCBleHBlY3QgYW4gZXhwb25lbnRpYWwgYmFja29mZiBzdHJhdGVneSBpZiB0aGUgdGFyZ2V0IGlzIGRvd24uCgpJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBsb2NraW5nIG1lY2hhbmlzbSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJ1Y3QuIElmIHRoZSBrZXJuZWwgaGFzIG11bHRpcGxlIHRocmVhZHMgb3IgaW50ZXJydXB0IGhhbmRsZXJzIHBvdGVudGlhbGx5IHRyeWluZyB0byB1c2UgdGhlIHNhbWUgdGFyZ2V0IGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgbmVlZHMgdG8gYmUgbG9ja2VkIGRvd24gdG8gcHJldmVudCBjb3JydXB0aW9uLiBBIHNwaW5sb2NrIG9yIGEgbXV0ZXggd291bGQgYmUgdHlwaWNhbCBoZXJlLiBJJiMzOTtkIGhhdmUgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgY29ycmVjdGx5IGFuZCBpc24mIzM5O3QgYSBib3R0bGVuZWNrLiBXaGF0IGtpbmQgb2YgaW50ZXJydXB0IGNvbnRleHRzIGFyZSB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXMgYWJsZSB0byBmdW5jdGlvbiBpbj8KCkZpbmFsbHksIHRoZXJlIHdpbGwgcHJvYmFibHkgYmUgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE1heWJlIGFuIE1UVSBzZXR0aW5nIHRvIHR1bmUgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGVudmlyb25tZW50cy4gUGVyaGFwcyBhIGZsYWcgdG8gY29udHJvbCB3aGV0aGVyIHRpbWVzdGFtcHMgYXJlIGluY2x1ZGVkIGluIHRoZSBtZXNzYWdlcy4gUG9zc2libHkgZXZlbiBRb1Mgc2V0dGluZ3MuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBsaW5raW5nIHRoZXNlIHRvIHRoZSBicm9hZGVyIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc2V0dGluZ3MgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSwgYW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGNoYW5nZSB0aGVtIHdpdGhvdXQgY2F1c2luZyB0aGUgd2hvbGUgdGhpbmcgdG8gbG9jayB1cC4KClNvLCBpbiBlc3NlbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHN0cnVjdCB0byBlbmNhcHN1bGF0ZSBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIGFuZCBzdGF0ZSBmb3IgY29tbXVuaWNhdGluZyBkZWJ1ZyBpbmZvcm1hdGlvbiB0byBhIHJlbW90ZSBzeXN0ZW0uIEl04oCZcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBpbiBlbmFibGluZyByZW1vdGUga2VybmVsIGRlYnVnZ2luZywgYW5kIGl0cyBkZXNpZ24gaGFzIHRvIGJlIHJvY2stc29saWQgdG8ga2VlcCB0aGluZ3MgcnVubmluZyB3aGVuIGEgc3lzdGVtIGlzIG90aGVyd2lzZSBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE0Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiAyMTU6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjE2Olx0I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gMjE3Olx0XHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHRncm91cDtcbiAyMTg6XHRcdHN0cnVjdCBjb25maWdfZ3JvdXBcdHVzZXJkYXRhX2dyb3VwO1xuIDIxOTpcdFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xuIDIyMDpcdFx0Y2hhclx0XHRcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XG4gMjIxOlx0XG4gMjIyOlx0XHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXG4gMjIzOlx0XHR1MzJcdFx0XHRzeXNkYXRhX2ZpZWxkcztcbiAyMjQ6XHRcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovXG4gMjI1Olx0XHR1MzJcdFx0XHRtc2djb3VudGVyO1xuIDIyNjpcdFx0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbiAyMjc6XHRcdHN0cnVjdCByYXRlbGltaXRfc3RhdGVcdHJhdGVsaW1pdDtcbiAyMjg6XHQjZW5kaWZcbiAyMjk6XHRcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcbiAyMzA6XHRcdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbiAyMzE6XHRcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiAyMzI6XHRcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIDIzMzpcdFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4gMjM0Olx0XHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbiAyMzU6XHRcdGJvb2xcdFx0XHRpcHY2O1xuIDIzNjpcdFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gMjM3Olx0XHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIDIzODpcdFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbiAyMzk6XHRcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXG4gMjQwOlx0XHQgKi9cbiAyNDE6XHRcdGNoYXJcdFx0XHRidWZbTUFYX1BSSU5UX0NIVU5LICYjNDM7IDFdO1xuIDI0MjpcdFx0c3RydWN0IHdvcmtfc3RydWN0XHRyZXN1bWVfd3E7XG4gMjQzOlx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRza2JfcG9vbDtcbiAyNDQ6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVmaWxsX3dxO1xuIDI0NTpcdH07XG4gMjQ2Olx0XG4gMjQ3Olx0I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gMjQ4Olx0XG4gMjQ5Olx0c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XG4gMjUwOlx0c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuIDI1MTpcdFxuIDI1MjpcdHN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpXG4gMjUzOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIHVzaW5nIGBidWZgLCB3aGljaCBpcyBhIGNoYXJhY3RlciBhcnJheSwgYGNoYXIgYnVmW01BWF9QUklOVF9DSFVOSyAmIzQzOyAxXWAuIEFuZCBgTUFYX1BSSU5UX0NIVU5LYCBsb29rcyB0byBiZSBhcm91bmQgMTAwMCwgc28gdGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2l6ZSBmb3IgYSBidWZmZXIuIFRoZSBzdHJpbmcgd2UmIzM5O3JlIGZvcm1hdHRpbmcgaW4gYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgaXMgYCVzLCAldSwwLCVsbHUsLTsgbmV0Y29uc29sZTogJXUgbWVzc2FnZXMgZHJvcHBlZCBieSByYXRlIGxpbWl0XG5gLiBCYXNlZCBvbiB0aGUgdHlwaWNhbCB2YWx1ZXMgb2YgcmVsZWFzZSBzdHJpbmdzLCBhbmQgdGhlIG51bWVyaWNhbCB2YWx1ZXMsIHRoaXMgc2hvdWxkIGVhc2lseSBmaXQgd2l0aGluIGBNQVhfUFJJTlRfQ0hVTksgJiM0MzsgMWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHdlIHNlbmRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBgc2NucHJpbnRmYCBoYW5kbGVzIHRoYXQsIHdyaXRpbmcgY2hhcmFjdGVycyBhbmQgcmV0dXJuaW5nIHRoZSBsZW5ndGguIEFuZCBgc2VuZF91ZHBgIG9ubHkgc2VuZHMgKmV4YWN0bHkqIGBsZW5gIGJ5dGVzLiBTaW5jZSBgc2NucHJpbnRmYCBwb3B1bGF0ZXMgYWxsIGBsZW5gIGJ5dGVzLCBubyB3b3JyaWVzIHRoZXJlLCBub3RoaW5nIGlzIHVuaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBzZW5kaW5nLgoKV2hhdCBhYm91dCB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgKnJlYWQqPyBgbnQtJmd0O3JlbGVhc2VgIGlzIGEgYm9vbGVhbiwgc28gdGhhdCYjMzk7cyBmaW5lLiBgaW5pdF91dHNuYW1lKCktJmd0O3JlbGVhc2VgIGlzIGEgc3RyaW5nLCBhbmQgYGxvY2FsX2Nsb2NrKClgIHJldHVybnMgYSBgdTY0YC4gVGhlbiBgZHJvcHNgIGlzIGEgYHUzMmAuIE9rYXksIHNvIHRob3NlIGFyZSBhbGwgaW5pdGlhbGl6ZWQgdmFsdWVzLiBXZSYjMzk7cmUgZ29vZC4KCklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWxhdGVkIHRvIGBudC0mZ3Q7cmF0ZWxpbWl0YD8gTm8sIGJlY2F1c2UgaXQgaXMgaW5pdGlhbGl6ZWQgYnkgYHJhdGVsaW1pdF9zdGF0ZV9pbml0YC4gQW5kIGBudC0mZ3Q7cGVuZGluZ19kcm9wc2AgaXMgYWxzbyB6ZXJvZWQgb3V0IGJ5IGBremFsbG9jYC4gU28sIHRoYXQmIzM5O3MgY292ZXJlZC4KClRoZSBvbmx5IHJlbWFpbmluZyBxdWVzdGlvbiBpcyBob3cgYHNlbmRfdWRwYCB3b3JrcyBpbnRlcm5hbGx5LiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2VuZF91ZHBgIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCB0cnkgdG8gcmVhZCBiZXlvbmQgdGhlIGBsZW5gIGJ5dGVzIHBhc3NlZCB0byBpdC4gQnV0IGZyb20gd2hhdCBJIGhhdmUgc2VlbiBzbyBmYXIgSSBkbyBub3QgZXhwZWN0IGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbmRfdWRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjYyPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODY6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVx0XHRcdCAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzIzLS8qKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjQ6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjUtICogQG50OiB0YXJnZXQgdG8gc2VuZCBtZXNzYWdlIHRvXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjgtICpcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzI5OiAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzMwLSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzMxOiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzItICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMzpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzNC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzNTpcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzNi1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM1MD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzODItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4MzpcdHNlbmRfdWRwKG50LCBudC1cdTAwM2VidWYsIG1zZ19sZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzODQtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ4MjpcdFx0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgYnVmX29mZnNldCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4My1cdH1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzMj1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NDAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU0MTpcdC8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NDItXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1NjQ9c3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU3MS1cdFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NzI6XHRcdHNlbmRfdWRwKG50LCB0bXAsIGZyYWcpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzMtXHRcdHRtcCAmIzQzOz0gZnJhZztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU3OD1zdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAzOlx0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjA0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4ODUKCQkJCQkJCW91dHB1dDogMjkyCgkJCQkJCQl0aG91Z2h0czogMTY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYHNlbmRfdWRwYCBmdW5jdGlvbiBpdHNlbGYgbG9va3Mgc29saWQuIEl0JiMzOTtzIHByb3Blcmx5IHRha2luZyBhIGBjb25zdCBjaGFyICptc2dgIGFuZCBgaW50IGxlbmAsIGFsbG9jYXRpbmcgYW4gU0tCLCBhbmQgY29weWluZyBgbGVuYCBieXRlcy4gIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZSwgYXQgbGVhc3Qgbm90IGluIHRoZSBvcmlnaW5hbCBjYWxsIGNoYWluLgoKTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4uLiBJJiMzOTttIHNlZWluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgLCBhbmQgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AuIFRoZSBpbml0IGZ1bmN0aW9uIGp1c3Qgc2V0cyB1cCB0aGUgYHJhdGVsaW1pdF9zdGF0ZWAgc3RydWN0dXJlLCB3aGljaCBhcHBlYXJzIHN0YW5kYXJkLiBUaGUgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGZ1bmN0aW9uIHV0aWxpemVzIGBfX3JhdGVsaW1pdGAsIGEgd2VsbC1rbm93biBrZXJuZWwgZnVuY3Rpb24sIGFuZCBpbXBvcnRhbnRseSwgaXQgaW5jbHVkZXMgYSBjaGVjayBmb3IgYG9vcHNfaW5fcHJvZ3Jlc3NgIHRvIGF2b2lkIHJhdGUtbGltaXRpbmcgZHVyaW5nIGEgY3Jhc2ggZHVtcC4gIFRoYXQmIzM5O3MgYSBnb29kIHNhZmVndWFyZC4gIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgIGFwcGVhcnMgc2FmZSwgc2ltcGx5IHJlc2V0dGluZyB0aGUgY291bnRlci4KClRoZSBzeXNmcyBpbnRlcmZhY2VzIGZvciB0aGUgcmF0ZSBsaW1pdGluZyBwYXJhbWV0ZXJzIChpbnRlcnZhbCBhbmQgYnVyc3QpIGFyZSBhbHNvIGZpbmUsIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoZSBzdG9yZSBmdW5jdGlvbnMgYXJlIGFsc28gc2FmZSwgdXNpbmcgbXV0ZXhlcyBhcm91bmQgdGhlIHdyaXRlcyB0byBgcmF0ZWxpbWl0LmludGVydmFsYCBhbmQgYHJhdGVsaW1pdC5idXJzdGAsIGFuZCB0aGV5IGFyZSBwcm9wZXJseSB2YWxpZGF0aW5nIHRoZSBpbnB1dCB2YWx1ZXMgdXNpbmcgYGtzdHJ0b3VpbnRgIGFuZCBhdm9pZGluZyBpbnRlZ2VyIG92ZXJmbG93cy4gIFRoYXQmIzM5O3MgYWxsIHN0YW5kYXJkLCBzYWZlIGtlcm5lbCBwcmFjdGljZS4KClRoZW4gd2UgaGF2ZSBgc2VuZF9yYXRlbGltaXRfbm90aWNlYC4gIFRoaXMgaXMgdGhlIGludGVyZXN0aW5nIGJpdCB3aGVyZSB0aGUgZHJvcHBlZCBtZXNzYWdlIGNvdW50IGlzIGZvcm1hdHRlZC4gVGhlIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGBzY25wcmludGZgLCBpcyBjb3JyZWN0IGluIHRoaXMgY29udGV4dCwgYWx3YXlzIGVuc3VyaW5nIHRoZSBzdHJpbmcgaXMgcHJvcGVybHkgdGVybWluYXRlZCwgYW5kIGluaXRpYWxpemVkIHVwIHRvIGxlbiwgcmV0dXJuaW5nIGxlbiB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIGZvcm1hdHRlZCB0byB0aGUgYnVmZmVyLiBUaGUgZXh0ZW5kZWQgaGVhZGVycyBhcmUgY29uZGl0aW9uYWwsIGJ1dCB0aGUgZm9ybWF0dGluZyBpcyBjb3JyZWN0LiBUaGUgY2FsbCB0byBgc2VuZF91ZHBgIHVzZXMgdGhlIGNvcnJlY3QgYGxlbmAgdmFsdWUuIFRoZSBmdW5jdGlvbiBzZWVtcyBzYWZlLgoKRmluYWxseSwgdGhlIGFkZGVkIGxvZ2ljIGluIGBuZXRjb25zb2xlX3dyaXRlYCBwcm9wZXJseSBjaGVja3MgaWYgYSB0YXJnZXQgaXMgcmF0ZWxpbWl0ZWQgKmJlZm9yZSogY2FsbGluZyBgbmJjb25fZW50ZXJfdW5zYWZlYCAoaW1wb3J0YW50ISksIGFuZCB0aGF0IGlzIGFsc28gd2hlcmUgd2Ugc2VlIHRoZSByYXRlIGxpbWl0aW5nIG5vdGlmaWNhdGlvbiBiZWluZyBzZW50LCB3aXRoIHRoZSByaWdodCBmb3JtYXR0aW5nLgoKTXkgZmluYWwgY29uY2x1c2lvbiBpcyB0aGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGFuIGluZm8gbGVhayB0byB1c2VyLXNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGUgc3RydWN0IGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBgc2NucHJpbnRmYCBjYWxscyBhbmQgdGhlIHN1YnNlcXVlbnQgdXNlIG9mIGBsZW5gIGluIGBzZW5kX3VkcGAgcHJldmVudCBhbnkgYWNjaWRlbnRhbCB0cmFuc21pc3Npb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudC4gSSB3aWxsIG5vdyBzZXQgdGhlIHJlc3VsdCBhcyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgbXkgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cy4gSXQgYWRkcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdXNlcyBgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZWAgdG8gdHJhY2sgbWVzc2FnZSByYXRlcy4gV2hlbiBtZXNzYWdlcyBhcmUgZHJvcHBlZCwgaXQgc2VuZHMgYSBub3RpY2UgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIGRyb3BwZWQgbWVzc2FnZXMuXG5cblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCYjMzk7cyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciAoYG50LVx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cblxuVGhlIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgcmF0ZWxpbWl0YCB2aWEgYHJhdGVsaW1pdF9zdGF0ZV9pbml0YCwgYW5kIGBwZW5kaW5nX2Ryb3BzYCBpcyB6ZXJvLWluaXRpYWxpemVkIHNpbmNlIHRoZSB0YXJnZXQgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC5cblxuVGhlcmUgYXJlIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcGFkZGluZyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIG5vciBpcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cblxuVGhlIG5vdGljZSBpcyBmb3JtYXR0ZWQgdXNpbmcgYHNjbnByaW50ZmAgaW50byB0aGUgdGFyZ2V0JiMzOTtzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXHUwMDNlYnVmYCksIGFuZCB0aGUgZXhhY3QgbGVuZ3RoIHJldHVybmVkIGJ5IGBzY25wcmludGZgIGlzIHBhc3NlZCB0byBgc2VuZF91ZHBgLiBgc2NucHJpbnRmYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYnl0ZXMgaXQgd3JpdGVzLCBhbmQgYHNlbmRfdWRwYCBvbmx5IHJlYWRzIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBidWZmZXIgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLlxuXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxuXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoxNS4xODA1NDI0NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5ODUwNzAwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3N0b3JlXCIsXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd1wiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3Nob3dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzLiBJdCBhZGRzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VzIGBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlYCB0byB0cmFjayBtZXNzYWdlIHJhdGVzLiBXaGVuIG1lc3NhZ2VzIGFyZSBkcm9wcGVkLCBpdCBzZW5kcyBhIG5vdGljZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHBlZCBtZXNzYWdlcy5cXG5cXG5UaGUgbm90aWNlIGlzIGZvcm1hdHRlZCB1c2luZyBgc2NucHJpbnRmYCBpbnRvIHRoZSB0YXJnZXQncyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciAoYG50LVxcdTAwM2VidWZgKSwgYW5kIHRoZSBleGFjdCBsZW5ndGggcmV0dXJuZWQgYnkgYHNjbnByaW50ZmAgaXMgcGFzc2VkIHRvIGBzZW5kX3VkcGAuIGBzY25wcmludGZgIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBieXRlcyBpdCB3cml0ZXMsIGFuZCBgc2VuZF91ZHBgIG9ubHkgcmVhZHMgdGhlIHNwZWNpZmllZCBsZW5ndGgsIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIGJ1ZmZlciBpcyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuXFxuXFxuVGhlIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgcmF0ZWxpbWl0YCB2aWEgYHJhdGVsaW1pdF9zdGF0ZV9pbml0YCwgYW5kIGBwZW5kaW5nX2Ryb3BzYCBpcyB6ZXJvLWluaXRpYWxpemVkIHNpbmNlIHRoZSB0YXJnZXQgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC5cXG5cXG5UaGVyZSBhcmUgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmF0ZSBsaW1pdGluZyBmb3IgbmV0Y29uc29sZSB0YXJnZXRzIHRvIHByZXZlbnQgYSBob3N0IGZyb20gc2F0dXJhdGluZyB0aGUgcmVjZWl2aW5nIGFnZW50IHdpdGggY29udGludW91cyBsb2dzLiBJdCBhZGRzIG5ldyBjb25maWdmcyBhdHRyaWJ1dGVzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCB0byBjb25maWd1cmUgdGhlIHJhdGUgbGltaXQgcGVyIHRhcmdldC4gVGhlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnNvbGUgd3JpdGUgcGF0aCB1c2luZyBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgYW5kIHRoZSBwcmludGsgY29uc29sZSB3cml0ZSBwYXRoLiBUaGUgY29uZmlnZnMgc3RvcmUvc2hvdyBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19ORVRDT05TT0xFYCwgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR19DT05GSUdGU19GU2AuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjE1LjE4MDU0Nzg1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDI3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMToxNjoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXG5pbmRleCA0YWI1ZDdiMDVjZjEwLi43MzY5Y2Q4OWFlNzZjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcbkBAIC0xNzcsNiArMTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OlxcbiAgY2F0IGNtZGxpbmUxL3JlbW90ZV9pcFxcbiAgMTAuMC4wLjNcXG4gXFxuK1JhdGUgbGltaXRpbmdcXG4rLS0tLS0tLS0tLS0tLVxcbitcXG4rTmV0Y29uc29sZSBoYW5kcyBldmVyeSBjb25zb2xlIG1lc3NhZ2UgdG8gZXZlcnkgZW5hYmxlZCB0YXJnZXQsIHNvIGEgaG9zdCB0aGF0XFxuK2xvZ3MgY29udGludW91c2x5IGNhbiBzYXR1cmF0ZSB0aGUgcmVjZWl2aW5nIGFnZW50LiBFYWNoIHRhcmdldCBjYXJyaWVzIGEgdG9rZW5cXG4rYnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5XFxuK3R3byBmaWxlcyBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeTpcXG4rXFxuKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisgICAgICAgIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyBMZW5ndGggb2YgdGhlIGFjY291bnRpbmcgaW50ZXJ2YWwsIGluXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcy4gWmVybywgdGhlIGRlZmF1bHQsIHNlbmRzXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuXFxuKyAgICAgICAgcmF0ZWxpbWl0X2J1cnN0ICAgICAgIE1lc3NhZ2VzIGFsbG93ZWQgcGVyIGludGVydmFsLiBEZWZhdWx0cyB0b1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDsgemVybyBkcm9wcyBldmVyeSBtZXNzYWdlLlxcbisgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1VubGlrZSBtb3N0IHRhcmdldCBwYXJhbWV0ZXJzLCBib3RoIGtub2JzIGNhbiBiZSB3cml0dGVuIHdoaWxlIHRoZSB0YXJnZXQgaXNcXG4rZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLlxcbitcXG4rVGhlIGxpbWl0IGlzIGFwcGxpZWQgcGVyIG1lc3NhZ2UsIG5vdCBwZXIgcGFja2V0LCBzbyBhIG1lc3NhZ2UgYmlnIGVub3VnaCB0byBiZVxcbitzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLlxcbitcXG4rQ3Jhc2ggb3V0cHV0IGJ5cGFzc2VzIHRoZSBidWNrZXQuIFdoaWxlIGFuIG9vcHMsIEJVRygpIG9yIHBhbmljKCkgaXMgaW5cXG4rcHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdFxcbitjYW5ub3QgY29zdCB5b3UgcGFydCBvZiBhIGNyYXNoIGR1bXAuXFxuK1xcbitBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzXFxuK3Nvb24gYXMgYSBtZXNzYWdlIGdldHMgdGhyb3VnaCBhZ2Fpbjo6XFxuK1xcbisgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcbitcXG4rVGhlIG5vdGljZSBvbmx5IHRyYXZlbHMgd2l0aCB0aGUgbmV4dCBtZXNzYWdlIHRoZSBidWNrZXQgYWxsb3dzLiBBIGhvc3QgdGhhdFxcbitnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9nc1xcbithZ2FpbiwgYW5kIGEgdGFyZ2V0IHdpdGggYSBgcmF0ZWxpbWl0X2J1cnN0YCBvZiB6ZXJvIG5ldmVyIHJlcG9ydHMgdGhlbS5cXG4rXFxuK25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW5cXG4rZXh0ZW5kZWQgdGFyZ2V0IHRoZSByZWNvcmQgY2FycmllcyBhIHNlcXVlbmNlIG51bWJlciBvZiB6ZXJvLlxcbitcXG4rQ2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OlxcbitcXG4rICBlY2hvIDYwMDAwIFxcdTAwM2UgcmF0ZWxpbWl0X2ludGVydmFsX21zXFxuKyAgZWNobyA1MDAgXFx1MDAzZSByYXRlbGltaXRfYnVyc3RcXG4rXFxuIEFwcGVuZCBVc2VyIERhdGFcXG4gLS0tLS0tLS0tLS0tLS0tLVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuaW5kZXggYjM1OGU1YzM2NzM1MS4uMGFmMmU1YjQzMzVjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5AQCAtNDksNiArNDksOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYXRlbGltaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcXHUwMDNlXFxuIFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJNYXR0IE1hY2thbGwgXFx1MDAzY21wbUBzZWxlbmljLmNvbVxcdTAwM2VcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb25zb2xlIGRyaXZlciBmb3IgbmV0d29yayBpbnRlcmZhY2VzXFxcIik7XFxuQEAgLTE3NSw2ICsxNzcsOCBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuICAqIEBzeXNkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcXG4gICogQHN5c2RhdGFfZmllbGRzOlxcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cXG4gICogQG1zZ2NvdW50ZXI6XFx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXFxuKyAqIEByYXRlbGltaXQ6XFx0T3BhcXVlIHN0cnVjdHVyZSB0byByYXRlbGltaXQgbWVzc2FnZXNcXG4rICogQHBlbmRpbmdfZHJvcHM6IE1lc3NhZ2VzIGRyb3BwZWQgc2luY2UgdGhlIGxhc3Qgbm90aWNlIHdhcyBzZW50LlxcbiAgKiBAc3RhdHM6XFx0UGFja2V0IHNlbmQgc3RhdHMgZm9yIHRoZSB0YXJnZXQuIFVzZWQgZm9yIGRlYnVnZ2luZy5cXG4gICogQHN0YXRlOlxcdFN0YXRlIG9mIHRoZSB0YXJnZXQuXFxuICAqXFx0XFx0VmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuXFxuQEAgLTIxOSw2ICsyMjMsOCBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiBcXHR1MzJcXHRcXHRcXHRzeXNkYXRhX2ZpZWxkcztcXG4gXFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi9cXG4gXFx0dTMyXFx0XFx0XFx0bXNnY291bnRlcjtcXG4rXFx0dTMyXFx0XFx0XFx0cGVuZGluZ19kcm9wcztcXG4rXFx0c3RydWN0IHJhdGVsaW1pdF9zdGF0ZVxcdHJhdGVsaW1pdDtcXG4gI2VuZGlmXFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcXG4gXFx0ZW51bSB0YXJnZXRfc3RhdGVcXHRzdGF0ZTtcXG5AQCAtMjgyLDYgKzI4OCwzNCBAQCBzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZudC1cXHUwMDNlcmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7XFxuK1xcdHJhdGVsaW1pdF9zZXRfZmxhZ3MoXFx1MDAyNm50LVxcdTAwM2VyYXRlbGltaXQsIFJBVEVMSU1JVF9NU0dfT05fUkVMRUFTRSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4re1xcbitcXHQvKiBBIGxpbWl0IG1lYW50IGZvciBzdGVhZHktc3RhdGUgbG9nZ2luZyBtdXN0IG5vdCBlYXQgYSBjcmFzaCBkdW1wLiAqL1xcbitcXHRpZiAob29wc19pbl9wcm9ncmVzcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKF9fcmF0ZWxpbWl0KFxcdTAwMjZudC1cXHUwMDNlcmF0ZWxpbWl0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bnQtXFx1MDAzZXBlbmRpbmdfZHJvcHMrKztcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHUzMiBkcm9wcyA9IG50LVxcdTAwM2VwZW5kaW5nX2Ryb3BzO1xcbitcXG4rXFx0bnQtXFx1MDAzZXBlbmRpbmdfZHJvcHMgPSAwO1xcbitcXHRyZXR1cm4gZHJvcHM7XFxuK31cXG4rXFxuICNlbHNlXFx0LyogIUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfbmV0Y29uc29sZV9pbml0KHZvaWQpXFxuQEAgLTMxOCw2ICszNTIsMjAgQEAgc3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbiB7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZXRjb25zb2xlX3JhdGVsaW1pdGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAjZW5kaWZcXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuIFxcbiAvKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cXG5AQCAtNjg2LDYgKzczNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuIFxcdG50LVxcdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XFxuIFxcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbitcXHRuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KG50KTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZudC1cXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xcbiBcXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZudC1cXHUwMDNlc2tiX3Bvb2wpO1xcbkBAIC05MTIsNiArOTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiBcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbGx1XFxcXG5cXFwiLCB4bWl0X2Ryb3BfY291bnQgKyBlbm9tZW1fY291bnQpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgamlmZmllc190b19tc2VjcyhSRUFEX09OQ0UobnQtXFx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCkpKTtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2J1cnN0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4rXFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCBSRUFEX09OQ0UobnQtXFx1MDAzZXJhdGVsaW1pdC5idXJzdCkpO1xcbit9XFxuK1xcbiAvKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiBjcHVfbnIgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuQEAgLTEzMDcsNiArMTM3MSw1MCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XFxuK1xcdHVuc2lnbmVkIGxvbmcgamlmcztcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMTAsIFxcdTAwMjZpbnRlcnZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRqaWZzID0gbXNlY3NfdG9famlmZmllcyhpbnRlcnZhbCk7XFxuK1xcdGlmIChqaWZzIFxcdTAwM2UgSU5UX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbitcXHRXUklURV9PTkNFKG50LVxcdTAwM2VyYXRlbGltaXQuaW50ZXJ2YWwsIGppZnMpO1xcbitcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4rXFx0dW5zaWduZWQgaW50IGJ1cnN0O1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXFx1MDAyNmJ1cnN0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChidXJzdCBcXHUwMDNlIElOVF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG4rXFx0V1JJVEVfT05DRShudC1cXHUwMDNlcmF0ZWxpbWl0LmJ1cnN0LCBidXJzdCk7XFxuK1xcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4gc3RydWN0IHVzZXJkYXR1bSB7XFxuIFxcdHN0cnVjdCBjb25maWdfaXRlbSBpdGVtO1xcbiBcXHRjaGFyIHZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcXG5AQCAtMTY3MSw2ICsxNzc5LDggQEAgQ09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XFxuIENPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcXG4gQ09ORklHRlNfQVRUUigsIHJlbGVhc2UpO1xcbiBDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcXG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XFxuK0NPTkZJR0ZTX0FUVFIoLCByYXRlbGltaXRfYnVyc3QpO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuQEAgLTE2ODQsNiArMTc5NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2YXR0cl9sb2NhbF9tYWMsXFxuIFxcdFxcdTAwMjZhdHRyX3JlbW90ZV9tYWMsXFxuIFxcdFxcdTAwMjZhdHRyX3RyYW5zbWl0X2Vycm9ycyxcXG4rXFx0XFx1MDAyNmF0dHJfcmF0ZWxpbWl0X2ludGVydmFsX21zLFxcbitcXHRcXHUwMDI2YXR0cl9yYXRlbGltaXRfYnVyc3QsXFxuIFxcdE5VTEwsXFxuIH07XFxuIFxcbkBAIC0yNDYzLDYgKzI1NzUsMzQgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZW5kX3JhdGVsaW1pdF9ub3RpY2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgYm9vbCBleHRlbmRlZClcXG4re1xcbitcXHRpbnQgbGVuID0gMDtcXG4rXFx0dTY0IHRzX3VzZWM7XFxuK1xcdHUzMiBkcm9wcztcXG4rXFxuK1xcdGRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTtcXG4rXFx0aWYgKCFkcm9wcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGV4dGVuZGVkKSB7XFxuK1xcdFxcdC8qIGFwcGVuZCB0aGUgZXh0ZW5kZWQgaGVhZGVycyAqL1xcbitcXHRcXHRpZiAobnQtXFx1MDAzZXJlbGVhc2UpXFxuK1xcdFxcdFxcdGxlbiA9IHNjbnByaW50ZihudC1cXHUwMDNlYnVmLCBzaXplb2YobnQtXFx1MDAzZWJ1ZiksIFxcXCIlcyxcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRpbml0X3V0c25hbWUoKS1cXHUwMDNlcmVsZWFzZSk7XFxuK1xcbitcXHRcXHR0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTtcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihudC1cXHUwMDNlYnVmICsgbGVuLCBzaXplb2YobnQtXFx1MDAzZWJ1ZikgLSBsZW4sXFxuK1xcdFxcdFxcdFxcdCBcXFwiJXUsMCwlbGx1LC07XFxcIiwgTE9HTEVWRUxfV0FSTklORywgdHNfdXNlYyk7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbiArPSBzY25wcmludGYobnQtXFx1MDAzZWJ1ZiArIGxlbiwgc2l6ZW9mKG50LVxcdTAwM2VidWYpIC0gbGVuLFxcbitcXHRcXHRcXHQgXFxcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGRyb3BzKTtcXG4rXFxuK1xcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBsZW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xcbiAgKiBAd2N0eHQ6IG5iY29uIHdyaXRlIGNvbnRleHRcXG5AQCAtMjQ4Miw2ICsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuIFxcdFxcdCAgICAhbmV0aWZfcnVubmluZyhudC1cXHUwMDNlbnAuZGV2KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LyogSWYgbmJjb25fZW50ZXJfdW5zYWZlKCkgZmFpbHMsIGp1c3QgcmV0dXJuIGdpdmVuIG5ldGNvbnNvbGVcXG4gXFx0XFx0ICogbG9zdCB0aGUgb3duZXJzaGlwLCBhbmQgaXRlcmF0aW5nIG92ZXIgdGhlIHRhcmdldHMgd2lsbCBub3RcXG4gXFx0XFx0ICogYmUgYWJsZSB0byByZS1hY3F1aXJlLlxcbkBAIC0yNDg5LDYgKzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG4gXFx0XFx0aWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRcXHRzZW5kX3JhdGVsaW1pdF9ub3RpY2UobnQsIGV4dGVuZGVkKTtcXG4rXFxuIFxcdFxcdGlmIChleHRlbmRlZClcXG4gXFx0XFx0XFx0c2VuZF9leHRfbXNnX3VkcChudCwgd2N0eHQpO1xcbiBcXHRcXHRlbHNlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuaW5kZXggZjA2NzRjMDAxN2ZjNC4uMDRjY2U0MGYxNjJlOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbkBAIC0xMCw2ICsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRuZXRjb25zX2NtZGxpbmUuc2ggXFxcXFxcbiBcXHRuZXRjb25zX2ZyYWdtZW50ZWRfbXNnLnNoIFxcXFxcXG4gXFx0bmV0Y29uc19vdmVyZmxvdy5zaCBcXFxcXFxuK1xcdG5ldGNvbnNfcmF0ZWxpbWl0LnNoIFxcXFxcXG4gXFx0bmV0Y29uc19yZXN1bWUuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXFxuQEAgLTAsMCArMSwxNjAgQEBcXG4rIyEvdXNyL2Jpbi9lbnYgYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIHBlci10YXJnZXQgcmF0ZSBsaW1pdC4gSXQgY29uZmlndXJlcyBhIHNtYWxsIGJ1cnN0XFxuKyMgb3ZlciBhbiBpbnRlcnZhbCBsb25nIGVub3VnaCB0aGF0IHRoZSBidWNrZXQgaXMgbmV2ZXIgcmVmaWxsZWQsIHNlbmRzIG1hbnlcXG4rIyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHNcXG4rIyB0cmFuc21pdHRpbmcgb25jZSB0aGUgYnVja2V0IGlzIGVtcHR5LlxcbisjXFxuKyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGVcXG4rIyByZWNlaXZlciBob3cgbWFueSBtZXNzYWdlcyBpdCBtaXNzZWQsIHdoaWNoIGlzIHZlcmlmaWVkIGxhc3QuXFxuKyNcXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcXHUwMDNlXFxuK1xcbitzZXQgLWV1byBwaXBlZmFpbFxcbitcXG4rU0NSSVBURElSPSQoZGlybmFtZSBcXFwiJChyZWFkbGluayAtZSBcXFwiJHtCQVNIX1NPVVJDRVswXX1cXFwiKVxcXCIpXFxuK1xcbitzb3VyY2UgXFxcIiR7U0NSSVBURElSfVxcXCIvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXFxuK1xcbisjIE1lc3NhZ2VzIHNlbnQgd2hpbGUgdGhlIGxpbWl0IGlzIGluIHBsYWNlLCBjb21mb3J0YWJseSBhYm92ZSBCVVJTVCBzbyB0aGF0XFxuKyMgdGhlIGJ1Y2tldCBpcyBkcmFpbmVkXFxuK01TR19DT1VOVD01MFxcbitCVVJTVD01XFxuKyMgTG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5vdCByZWZpbGxlZCB3aGlsZSB0aGUgdGVzdCBydW5zXFxuK0lOVEVSVkFMX01TPTYwMDAwXFxuKyMgRGVmYXVsdCB0aGUgdGFyZ2V0IHN0YXJ0cyB3aXRoLCBhcyBkb2N1bWVudGVkIGluIG5ldGNvbnNvbGUucnN0XFxuK0RFRkFVTFRfQlVSU1Q9MTBcXG4rIyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW5cXG4rRFJPUF9OT1RJQ0U9XFxcIm1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcXCJcXG4rXFxuKyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxcbitPVVRQVVRfRklMRT1cXFwiL3RtcC8ke1RBUkdFVH1cXFwiXFxuK1xcbitmdW5jdGlvbiBjb3VudF9tc2dzKCkge1xcbitcXHRsb2NhbCBGSUxFPVxcXCIkezF9XFxcIlxcbitcXG4rXFx0aWYgWyAhIC1mIFxcXCIke0ZJTEV9XFxcIiBdXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyAwXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXG4rXFx0IyBncmVwIGV4aXRzIDEgb24gbm8gbWF0Y2gsIHdoaWNoIGlzIGEgdmFsaWQgcmVzdWx0IGhlcmVcXG4rXFx0Z3JlcCAtYyBcXFwiJHtNU0d9XFxcIiBcXFwiJHtGSUxFfVxcXCIgfHwgdHJ1ZVxcbit9XFxuK1xcbitmdW5jdGlvbiBzZW5kX21zZ3MoKSB7XFxuK1xcdGxvY2FsIENPVU5UPVxcXCIkezF9XFxcIlxcbitcXHRsb2NhbCBJXFxuK1xcbitcXHRmb3IgSSBpbiAkKHNlcSBcXFwiJHtDT1VOVH1cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRlY2hvIFxcXCIke01TR306ICR7VEFSR0VUfSAke0l9XFxcIiBcXHUwMDNlIC9kZXYva21zZ1xcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgQSBmcmVzaGx5IGNyZWF0ZWQgdGFyZ2V0IGhhcyB0byBiZSB1bmxpbWl0ZWQsIG90aGVyd2lzZSBldmVyeSBleGlzdGluZ1xcbisjIG5ldGNvbnNvbGUgdXNlciB3b3VsZCBzdGFydCBkcm9wcGluZyBtZXNzYWdlcyBhZnRlciBhbiB1cGdyYWRlXFxuK2Z1bmN0aW9uIGNoZWNrX2RlZmF1bHRzKCkge1xcbitcXHRsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUXFxuK1xcbitcXHRJTlRFUlZBTD0kKGNhdCBcXFwiJHtORVRDT05TX1BBVEh9XFxcIi9yYXRlbGltaXRfaW50ZXJ2YWxfbXMpXFxuK1xcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXFxcIiR7TkVUQ09OU19QQVRIfVxcXCIvcmF0ZWxpbWl0X2J1cnN0KVxcbitcXG4rXFx0aWYgWyBcXFwiJHtJTlRFUlZBTH1cXFwiIC1uZSAwIF0gfHxcXG4rXFx0ICAgWyBcXFwiJHtCVVJTVF9ERUZBVUxUfVxcXCIgLW5lIFxcXCIke0RFRkFVTFRfQlVSU1R9XFxcIiBdXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogdW5leHBlY3RlZCByYXRlIGxpbWl0IGRlZmF1bHRzOlxcXCIgXFxcXFxcbitcXHRcXHQgICAgIFxcXCJpbnRlcnZhbD0ke0lOVEVSVkFMfSBidXJzdD0ke0JVUlNUX0RFRkFVTFR9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitmdW5jdGlvbiBjaGVja19saW1pdGVkKCkge1xcbitcXHRsb2NhbCBSRUNFSVZFRFxcbitcXG4rXFx0UkVDRUlWRUQ9JChjb3VudF9tc2dzIFxcXCIke09VVFBVVF9GSUxFfVxcXCIpXFxuK1xcbitcXHQjIFVucmVsYXRlZCBrZXJuZWwgbWVzc2FnZXMgc2hhcmUgdGhlIGJ1Y2tldCwgc28gZmV3ZXIgdGhhbiBCVVJTVCBvZlxcbitcXHQjIG91cnMgY2FuIGdldCB0aHJvdWdoLCBidXQgbmV2ZXIgbW9yZVxcbitcXHRpZiBbIFxcXCIke1JFQ0VJVkVEfVxcXCIgLWd0IFxcXCIke0JVUlNUfVxcXCIgXVxcbitcXHR0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0Y2F0IFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBUaGUgbm90aWNlIGJlbG93IHRyYXZlbHMgYWhlYWQgb2YgdGhlIG1lc3NhZ2UgdGhhdCByZW9wZW5lZCB0aGUgYnVja2V0LCBzb1xcbisjIHdhaXRpbmcgZm9yIHRoZSBmaWxlIHRvIGFwcGVhciBpcyBub3QgZW5vdWdoXFxuK2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcXG4rXFx0Z3JlcCAtcSBcXFwiJHtNU0d9XFxcIiBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIDJcXHUwMDNlIC9kZXYvbnVsbFxcbit9XFxuK1xcbisjIFRoZSBtZXNzYWdlcyBsb3N0IGFib3ZlIGhhdmUgdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHJlY2VpdmVyXFxuK2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xcbitcXHRpZiAhIGdyZXAgLXEgXFxcIiR7RFJPUF9OT1RJQ0V9XFxcIiBcXFwiJHtPVVRQVVRfRklMRX1cXFwiXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbm8gcmF0ZSBsaW1pdCBub3RpY2UgaW4gJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRjYXQgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbisjID09PT09PT09PT0gI1xcbisjIFN0YXJ0IGhlcmUgI1xcbisjID09PT09PT09PT0gI1xcbitcXG4rbW9kcHJvYmUgbmV0ZGV2c2ltIDJcXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXFxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlxcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcXG4rXFxuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxcbitjaGVja19mb3JfZGVwZW5kZW5jaWVzXFxuKyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXRcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuKyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxcbitlY2hvIFxcXCI2IDVcXFwiIFxcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcXG4rc2V0X25ldHdvcmtcXG4rIyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxcbitjcmVhdGVfZHluYW1pY190YXJnZXRcXG4rXFxuK2NoZWNrX2RlZmF1bHRzXFxuK1xcbisjIFNldCB0aGUgYnVyc3QgYmVmb3JlIHRoZSBpbnRlcnZhbCwgc28gdGhhdCBubyBtZXNzYWdlIGVzY2FwZXMgd2hpbGUgdGhlXFxuKyMgdGFyZ2V0IHN0aWxsIGNhcnJpZXMgdGhlIGRlZmF1bHQgYnVyc3RcXG4rZWNobyBcXFwiJHtCVVJTVH1cXFwiIFxcdTAwM2UgXFxcIiR7TkVUQ09OU19QQVRIfVxcXCIvcmF0ZWxpbWl0X2J1cnN0XFxuK2VjaG8gXFxcIiR7SU5URVJWQUxfTVN9XFxcIiBcXHUwMDNlIFxcXCIke05FVENPTlNfUEFUSH1cXFwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tc1xcbitcXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDI2XFxuK3dhaXRfZm9yX3BvcnQgXFxcIiR7TkFNRVNQQUNFfVxcXCIgXFxcIiR7UE9SVH1cXFwiIFxcXCJpcHY0XFxcIlxcbitzZW5kX21zZ3MgXFxcIiR7TVNHX0NPVU5UfVxcXCJcXG4rIyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzXFxuKyMgbm90aGluZyB0byBidXN5d2FpdCBvblxcbitzbGVlcCAxXFxuK3BraWxsX3NvY2F0XFxuK2NoZWNrX2xpbWl0ZWRcXG4rcm0gLWYgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbitcXG4rIyBEcm9wcGluZyB0aGUgaW50ZXJ2YWwgYmFjayB0byB6ZXJvIGhhcyB0byBtYWtlIHRoZSB0YXJnZXQgdW5saW1pdGVkIGFnYWluXFxuK2VjaG8gMCBcXHUwMDNlIFxcXCIke05FVENPTlNfUEFUSH1cXFwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tc1xcbitcXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDI2XFxuK3dhaXRfZm9yX3BvcnQgXFxcIiR7TkFNRVNQQUNFfVxcXCIgXFxcIiR7UE9SVH1cXFwiIFxcXCJpcHY0XFxcIlxcbitzZW5kX21zZ3MgMVxcbitpZiAhIGJ1c3l3YWl0IFxcXCIke0JVU1lXQUlUX1RJTUVPVVR9XFxcIiBtc2dfcmVjZWl2ZWRcXG4rdGhlblxcbitcXHRlY2hvIFxcXCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyAoJHtCVVNZV0FJVF9USU1FT1VUfSBtcykgZm9yIG5ldGNvbnNvbGVcXFwiIFxcXFxcXG4rXFx0ICAgICBcXFwibWVzc2FnZSBpbiAke09VVFBVVF9GSUxFfSBhZnRlciBjbGVhcmluZyB0aGUgcmF0ZSBsaW1pdFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rZmlcXG4rdmFsaWRhdGVfbXNnIFxcXCIke09VVFBVVF9GSUxFfVxcXCJcXG4rY2hlY2tfZHJvcHNfcmVwb3J0ZWRcXG4rcGtpbGxfc29jYXRcXG4rcm0gLWYgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbitcXG4rdHJhcCAtIEVYSVRcXG4rY2xlYW51cFxcbitleGl0IFxcXCIke2tzZnRfcGFzc31cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjE1LjY1MjI3NDg1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc3MzExODg4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMgdG8gcHJldmVudCBhIGhvc3QgZnJvbSBzYXR1cmF0aW5nIHRoZSByZWNlaXZpbmcgYWdlbnQgd2l0aCBjb250aW51b3VzIGxvZ3MuIEl0IGFkZHMgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIHRvIGNvbmZpZ3VyZSB0aGUgcmF0ZSBsaW1pdCBwZXIgdGFyZ2V0LiBUaGUgcmF0ZSBsaW1pdGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgY29uc29sZSB3cml0ZSBwYXRoIHVzaW5nIGByYXRlbGltaXRfc3RhdGVgLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBjb25maWdmcyBhbmQgdGhlIHByaW50ayBjb25zb2xlIHdyaXRlIHBhdGguIFRoZSBjb25maWdmcyBzdG9yZS9zaG93IGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05FVENPTlNPTEVgLCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHX0NPTkZJR0ZTX0ZTYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi43MzY5Y2Q4OWFlNzZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNzcsNiArMTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OlxuICBjYXQgY21kbGluZTEvcmVtb3RlX2lwXG4gIDEwLjAuMC4zXG4gXG4rUmF0ZSBsaW1pdGluZ1xuKy0tLS0tLS0tLS0tLS1cbitcbitOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXRcbitsb2dzIGNvbnRpbnVvdXNseSBjYW4gc2F0dXJhdGUgdGhlIHJlY2VpdmluZyBhZ2VudC4gRWFjaCB0YXJnZXQgY2FycmllcyBhIHRva2VuXG4rYnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5XG4rdHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OlxuK1xuKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW5cbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMuIFplcm8sIHRoZSBkZWZhdWx0LCBzZW5kc1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuXG4rICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA7IHplcm8gZHJvcHMgZXZlcnkgbWVzc2FnZS5cbisgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitVbmxpa2UgbW9zdCB0YXJnZXQgcGFyYW1ldGVycywgYm90aCBrbm9icyBjYW4gYmUgd3JpdHRlbiB3aGlsZSB0aGUgdGFyZ2V0IGlzXG4rZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLlxuK1xuK1RoZSBsaW1pdCBpcyBhcHBsaWVkIHBlciBtZXNzYWdlLCBub3QgcGVyIHBhY2tldCwgc28gYSBtZXNzYWdlIGJpZyBlbm91Z2ggdG8gYmVcbitzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLlxuK1xuK0NyYXNoIG91dHB1dCBieXBhc3NlcyB0aGUgYnVja2V0LiBXaGlsZSBhbiBvb3BzLCBCVUcoKSBvciBwYW5pYygpIGlzIGluXG4rcHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdFxuK2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC5cbitcbitBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzXG4rc29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjpcbitcbisgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuK1xuK1RoZSBub3RpY2Ugb25seSB0cmF2ZWxzIHdpdGggdGhlIG5leHQgbWVzc2FnZSB0aGUgYnVja2V0IGFsbG93cy4gQSBob3N0IHRoYXRcbitnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9nc1xuK2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLlxuK1xuK25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW5cbitleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uXG4rXG4rQ2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OlxuK1xuKyAgZWNobyA2MDAwMCBcdTAwM2UgcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rICBlY2hvIDUwMCBcdTAwM2UgcmF0ZWxpbWl0X2J1cnN0XG4rXG4gQXBwZW5kIFVzZXIgRGF0YVxuIC0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTQ5LDYgKzQ5LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhdGVsaW1pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCJNYXR0IE1hY2thbGwgXHUwMDNjbXBtQHNlbGVuaWMuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXNcIik7XG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuKyAqIEByYXRlbGltaXQ6XHRPcGFxdWUgc3RydWN0dXJlIHRvIHJhdGVsaW1pdCBtZXNzYWdlc1xuKyAqIEBwZW5kaW5nX2Ryb3BzOiBNZXNzYWdlcyBkcm9wcGVkIHNpbmNlIHRoZSBsYXN0IG5vdGljZSB3YXMgc2VudC5cbiAgKiBAc3RhdHM6XHRQYWNrZXQgc2VuZCBzdGF0cyBmb3IgdGhlIHRhcmdldC4gVXNlZCBmb3IgZGVidWdnaW5nLlxuICAqIEBzdGF0ZTpcdFN0YXRlIG9mIHRoZSB0YXJnZXQuXG4gICpcdFx0VmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuXG5AQCAtMjE5LDYgKzIyMyw4IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHR1MzJcdFx0XHRzeXNkYXRhX2ZpZWxkcztcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovXG4gXHR1MzJcdFx0XHRtc2djb3VudGVyO1xuK1x0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbitcdHN0cnVjdCByYXRlbGltaXRfc3RhdGVcdHJhdGVsaW1pdDtcbiAjZW5kaWZcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcbiBcdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbkBAIC0yODIsNiArMjg4LDM0IEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXHUwMDI2bnQtXHUwMDNlcmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7XG4rXHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdC8qIEEgbGltaXQgbWVhbnQgZm9yIHN0ZWFkeS1zdGF0ZSBsb2dnaW5nIG11c3Qgbm90IGVhdCBhIGNyYXNoIGR1bXAuICovXG4rXHRpZiAob29wc19pbl9wcm9ncmVzcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKF9fcmF0ZWxpbWl0KFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMrKztcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdHUzMiBkcm9wcyA9IG50LVx1MDAzZXBlbmRpbmdfZHJvcHM7XG4rXG4rXHRudC1cdTAwM2VwZW5kaW5nX2Ryb3BzID0gMDtcbitcdHJldHVybiBkcm9wcztcbit9XG4rXG4gI2Vsc2VcdC8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG4gXG4gc3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbkBAIC0zMTgsNiArMzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiB7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuIFxuIC8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuQEAgLTY4Niw2ICs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbitcdG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQobnQpO1xuIFx0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcbiBcdC8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovXG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm50LVx1MDAzZXNrYl9wb29sKTtcbkBAIC05MTIsNiArOTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsbHVcXG5cIiwgeG1pdF9kcm9wX2NvdW50ICsgZW5vbWVtX2NvdW50KTtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIldVxcblwiLFxuK1x0XHRcdCAgamlmZmllc190b19tc2VjcyhSRUFEX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmludGVydmFsKSkpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIFJFQURfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QpKTtcbit9XG4rXG4gLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbkBAIC0xMzA3LDYgKzEzNzEsNTAgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4rXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4rXHR1bnNpZ25lZCBsb25nIGppZnM7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2aW50ZXJ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGppZnMgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTtcbitcdGlmIChqaWZzIFx1MDAzZSBJTlRfTUFYKVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4rXHRXUklURV9PTkNFKG50LVx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCwgamlmcyk7XG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbitcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgYnVyc3Q7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2YnVyc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChidXJzdCBcdTAwM2UgSU5UX01BWClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuK1x0V1JJVEVfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QsIGJ1cnN0KTtcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gc3RydWN0IHVzZXJkYXR1bSB7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbiBcdGNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dO1xuQEAgLTE2NzEsNiArMTc3OSw4IEBAIENPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xuIENPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcbiBDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG4gQ09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2VuYWJsZWQsXG5AQCAtMTY4NCw2ICsxNzk0LDggQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2xvY2FsX21hYyxcbiBcdFx1MDAyNmF0dHJfcmVtb3RlX21hYyxcbiBcdFx1MDAyNmF0dHJfdHJhbnNtaXRfZXJyb3JzLFxuK1x0XHUwMDI2YXR0cl9yYXRlbGltaXRfaW50ZXJ2YWxfbXMsXG4rXHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9idXJzdCxcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC0yNDYzLDYgKzI1NzUsMzQgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXG4re1xuK1x0aW50IGxlbiA9IDA7XG4rXHR1NjQgdHNfdXNlYztcbitcdHUzMiBkcm9wcztcbitcbitcdGRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTtcbitcdGlmICghZHJvcHMpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChleHRlbmRlZCkge1xuK1x0XHQvKiBhcHBlbmQgdGhlIGV4dGVuZGVkIGhlYWRlcnMgKi9cbitcdFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4rXHRcdFx0bGVuID0gc2NucHJpbnRmKG50LVx1MDAzZWJ1Ziwgc2l6ZW9mKG50LVx1MDAzZWJ1ZiksIFwiJXMsXCIsXG4rXHRcdFx0XHRcdGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpO1xuK1xuK1x0XHR0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTtcbitcdFx0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdFx0IFwiJXUsMCwlbGx1LC07XCIsIExPR0xFVkVMX1dBUk5JTkcsIHRzX3VzZWMpO1xuK1x0fVxuK1xuK1x0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdCBcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwiLFxuK1x0XHRcdCBkcm9wcyk7XG4rXG4rXHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG4gICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG5AQCAtMjQ4Miw2ICsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4gXHRcdCAgICAhbmV0aWZfcnVubmluZyhudC1cdTAwM2VucC5kZXYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIElmIG5iY29uX2VudGVyX3Vuc2FmZSgpIGZhaWxzLCBqdXN0IHJldHVybiBnaXZlbiBuZXRjb25zb2xlXG4gXHRcdCAqIGxvc3QgdGhlIG93bmVyc2hpcCwgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSB0YXJnZXRzIHdpbGwgbm90XG4gXHRcdCAqIGJlIGFibGUgdG8gcmUtYWNxdWlyZS5cbkBAIC0yNDg5LDYgKzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbiBcdFx0aWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKVxuIFx0XHRcdHJldHVybjtcbiBcbitcdFx0c2VuZF9yYXRlbGltaXRfbm90aWNlKG50LCBleHRlbmRlZCk7XG4rXG4gXHRcdGlmIChleHRlbmRlZClcbiBcdFx0XHRzZW5kX2V4dF9tc2dfdWRwKG50LCB3Y3R4dCk7XG4gXHRcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggZjA2NzRjMDAxN2ZjNC4uMDRjY2U0MGYxNjJlOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMCw2ICsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfY21kbGluZS5zaCBcXFxuIFx0bmV0Y29uc19mcmFnbWVudGVkX21zZy5zaCBcXFxuIFx0bmV0Y29uc19vdmVyZmxvdy5zaCBcXFxuK1x0bmV0Y29uc19yYXRlbGltaXQuc2ggXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxuQEAgLTAsMCArMSwxNjAgQEBcbisjIS91c3IvYmluL2VudiBiYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgcGVyLXRhcmdldCByYXRlIGxpbWl0LiBJdCBjb25maWd1cmVzIGEgc21hbGwgYnVyc3RcbisjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55XG4rIyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHNcbisjIHRyYW5zbWl0dGluZyBvbmNlIHRoZSBidWNrZXQgaXMgZW1wdHkuXG4rI1xuKyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGVcbisjIHJlY2VpdmVyIGhvdyBtYW55IG1lc3NhZ2VzIGl0IG1pc3NlZCwgd2hpY2ggaXMgdmVyaWZpZWQgbGFzdC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rU0NSSVBURElSPSQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiKVxuK1xuK3NvdXJjZSBcIiR7U0NSSVBURElSfVwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuK1xuKyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXRcbisjIHRoZSBidWNrZXQgaXMgZHJhaW5lZFxuK01TR19DT1VOVD01MFxuK0JVUlNUPTVcbisjIExvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBub3QgcmVmaWxsZWQgd2hpbGUgdGhlIHRlc3QgcnVuc1xuK0lOVEVSVkFMX01TPTYwMDAwXG4rIyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3RcbitERUZBVUxUX0JVUlNUPTEwXG4rIyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW5cbitEUk9QX05PVElDRT1cIm1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFwiXG4rXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXG4rT1VUUFVUX0ZJTEU9XCIvdG1wLyR7VEFSR0VUfVwiXG4rXG4rZnVuY3Rpb24gY291bnRfbXNncygpIHtcbitcdGxvY2FsIEZJTEU9XCIkezF9XCJcbitcbitcdGlmIFsgISAtZiBcIiR7RklMRX1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gMFxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHQjIGdyZXAgZXhpdHMgMSBvbiBubyBtYXRjaCwgd2hpY2ggaXMgYSB2YWxpZCByZXN1bHQgaGVyZVxuK1x0Z3JlcCAtYyBcIiR7TVNHfVwiIFwiJHtGSUxFfVwiIHx8IHRydWVcbit9XG4rXG4rZnVuY3Rpb24gc2VuZF9tc2dzKCkge1xuK1x0bG9jYWwgQ09VTlQ9XCIkezF9XCJcbitcdGxvY2FsIElcbitcbitcdGZvciBJIGluICQoc2VxIFwiJHtDT1VOVH1cIilcbitcdGRvXG4rXHRcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfSAke0l9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0ZG9uZVxuK31cbitcbisjIEEgZnJlc2hseSBjcmVhdGVkIHRhcmdldCBoYXMgdG8gYmUgdW5saW1pdGVkLCBvdGhlcndpc2UgZXZlcnkgZXhpc3RpbmdcbisjIG5ldGNvbnNvbGUgdXNlciB3b3VsZCBzdGFydCBkcm9wcGluZyBtZXNzYWdlcyBhZnRlciBhbiB1cGdyYWRlXG4rZnVuY3Rpb24gY2hlY2tfZGVmYXVsdHMoKSB7XG4rXHRsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUXG4rXG4rXHRJTlRFUlZBTD0kKGNhdCBcIiR7TkVUQ09OU19QQVRIfVwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tcylcbitcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfYnVyc3QpXG4rXG4rXHRpZiBbIFwiJHtJTlRFUlZBTH1cIiAtbmUgMCBdIHx8XG4rXHQgICBbIFwiJHtCVVJTVF9ERUZBVUxUfVwiIC1uZSBcIiR7REVGQVVMVF9CVVJTVH1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiB1bmV4cGVjdGVkIHJhdGUgbGltaXQgZGVmYXVsdHM6XCIgXFxcbitcdFx0ICAgICBcImludGVydmFsPSR7SU5URVJWQUx9IGJ1cnN0PSR7QlVSU1RfREVGQVVMVH1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gY2hlY2tfbGltaXRlZCgpIHtcbitcdGxvY2FsIFJFQ0VJVkVEXG4rXG4rXHRSRUNFSVZFRD0kKGNvdW50X21zZ3MgXCIke09VVFBVVF9GSUxFfVwiKVxuK1xuK1x0IyBVbnJlbGF0ZWQga2VybmVsIG1lc3NhZ2VzIHNoYXJlIHRoZSBidWNrZXQsIHNvIGZld2VyIHRoYW4gQlVSU1Qgb2ZcbitcdCMgb3VycyBjYW4gZ2V0IHRocm91Z2gsIGJ1dCBuZXZlciBtb3JlXG4rXHRpZiBbIFwiJHtSRUNFSVZFRH1cIiAtZ3QgXCIke0JVUlNUfVwiIF1cbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjIFRoZSBub3RpY2UgYmVsb3cgdHJhdmVscyBhaGVhZCBvZiB0aGUgbWVzc2FnZSB0aGF0IHJlb3BlbmVkIHRoZSBidWNrZXQsIHNvXG4rIyB3YWl0aW5nIGZvciB0aGUgZmlsZSB0byBhcHBlYXIgaXMgbm90IGVub3VnaFxuK2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcbitcdGdyZXAgLXEgXCIke01TR31cIiBcIiR7T1VUUFVUX0ZJTEV9XCIgMlx1MDAzZSAvZGV2L251bGxcbit9XG4rXG4rIyBUaGUgbWVzc2FnZXMgbG9zdCBhYm92ZSBoYXZlIHRvIGJlIHJlcG9ydGVkIHRvIHRoZSByZWNlaXZlclxuK2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xuK1x0aWYgISBncmVwIC1xIFwiJHtEUk9QX05PVElDRX1cIiBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IG5vIHJhdGUgbGltaXQgbm90aWNlIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjID09PT09PT09PT0gI1xuKyMgU3RhcnQgaGVyZSAjXG4rIyA9PT09PT09PT09ICNcbitcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK1xuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSlcbitlY2hvIFwiNiA1XCIgXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcbitzZXRfbmV0d29ya1xuKyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbitjcmVhdGVfZHluYW1pY190YXJnZXRcbitcbitjaGVja19kZWZhdWx0c1xuK1xuKyMgU2V0IHRoZSBidXJzdCBiZWZvcmUgdGhlIGludGVydmFsLCBzbyB0aGF0IG5vIG1lc3NhZ2UgZXNjYXBlcyB3aGlsZSB0aGVcbisjIHRhcmdldCBzdGlsbCBjYXJyaWVzIHRoZSBkZWZhdWx0IGJ1cnN0XG4rZWNobyBcIiR7QlVSU1R9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2J1cnN0XG4rZWNobyBcIiR7SU5URVJWQUxfTVN9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCIke09VVFBVVF9GSUxFfVwiIFx1MDAyNlxuK3dhaXRfZm9yX3BvcnQgXCIke05BTUVTUEFDRX1cIiBcIiR7UE9SVH1cIiBcImlwdjRcIlxuK3NlbmRfbXNncyBcIiR7TVNHX0NPVU5UfVwiXG4rIyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzXG4rIyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uXG4rc2xlZXAgMVxuK3BraWxsX3NvY2F0XG4rY2hlY2tfbGltaXRlZFxuK3JtIC1mIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuKyMgRHJvcHBpbmcgdGhlIGludGVydmFsIGJhY2sgdG8gemVybyBoYXMgdG8gbWFrZSB0aGUgdGFyZ2V0IHVubGltaXRlZCBhZ2FpblxuK2VjaG8gMCBcdTAwM2UgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfaW50ZXJ2YWxfbXNcbitcbitsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDI2XG4rd2FpdF9mb3JfcG9ydCBcIiR7TkFNRVNQQUNFfVwiIFwiJHtQT1JUfVwiIFwiaXB2NFwiXG4rc2VuZF9tc2dzIDFcbitpZiAhIGJ1c3l3YWl0IFwiJHtCVVNZV0FJVF9USU1FT1VUfVwiIG1zZ19yZWNlaXZlZFxuK3RoZW5cbitcdGVjaG8gXCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyAoJHtCVVNZV0FJVF9USU1FT1VUfSBtcykgZm9yIG5ldGNvbnNvbGVcIiBcXFxuK1x0ICAgICBcIm1lc3NhZ2UgaW4gJHtPVVRQVVRfRklMRX0gYWZ0ZXIgY2xlYXJpbmcgdGhlIHJhdGUgbGltaXRcIiBcdTAwM2VcdTAwMjYyXG4rXHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitmaVxuK3ZhbGlkYXRlX21zZyBcIiR7T1VUUFVUX0ZJTEV9XCJcbitjaGVja19kcm9wc19yZXBvcnRlZFxuK3BraWxsX3NvY2F0XG4rcm0gLWYgXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rdHJhcCAtIEVYSVRcbitjbGVhbnVwXG4rZXhpdCBcIiR7a3NmdF9wYXNzfVwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoxNS42NTIyNzY0MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQyNTcxNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIHRvIG5ldGNvbnNvbGUuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBwbGFjZS4gVGhleSdyZSBhZGRpbmcgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGFzIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGEgc2Vuc2libGUgYXBwcm9hY2ggZm9yIGNvbnRyb2xsaW5nIHRoZSByYXRlIGxpbWl0aW5nIHBhcmFtZXRlcnMuIEkgc2VlIHRoZXkncmUgdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAgYW5kIGBfX3JhdGVsaW1pdGAsIHdoaWNoIHN1Z2dlc3RzIHRoZXkgYXJlIHVzaW5nIHRoZSBleGlzdGluZyBrZXJuZWwgcmF0ZWxpbWl0IGluZnJhc3RydWN0dXJlIGVmZmVjdGl2ZWx5LiBQbHVzLCBhIG5vdGlmaWNhdGlvbiBmb3IgZHJvcHBlZCBtZXNzYWdlcz8gR29vZCwgdGhhdCdzIGNydWNpYWwgZm9yIG9ic2VydmFiaWxpdHkuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlIGNydWNpYWwgYml0cyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCdzIGluc2lkZSB0aGUgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGJsb2NrLiBXYWl0LCBJJ20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcuLi4geWVzLCBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAgKmlzKiBhbHNvIGRlZmluZWQgd2l0aGluIHRoYXQgc2FtZSBgI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGJsb2NrLiBPa2F5LCBhbGwgbG9va3MgZ29vZCBzbyBmYXIuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IGluIG91ciBzZXR1cCwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIHdlbGwtc2NvcGVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoyMC40OTQ4NTA1ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MDIxNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxND1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNjojaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy1cXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXFx0Z3JvdXA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDgtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzExPXN0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTk6I2Vsc2VcXHQvKiAhQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzY0PXN0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzY4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNjk6I2VuZGlmXFx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Nzk2PXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODIwOiNpZmRlZlxcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODIxLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMDY9c3RhdGljIGludCBwcmVwYXJlX3N5c2RhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDI4LX1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAyOTojZW5kaWZcXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMzAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4Nj1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzAtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjMzMz1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzNzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzM4LVxcdFxcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzNTA9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNTgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNTk6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2MC1cXHRzeXNkYXRhID0gbnQtXFx1MDAzZXN5c2RhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM5ND1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwOC1cXHRzeXNkYXRhX3B0ciA9IG50LVxcdTAwM2VzeXNkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MzI9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NDMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDQ6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU0NS1cXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3Njg9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxMS1cXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgxMjpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MTMtXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODMwPXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgzNS1cXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4MzY6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODM3LVxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cXHUwMDNldXNlcmRhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODYwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NzMtXFx0XFx0XFx0aWYgKElTX0VSUihudCkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg3NDpcXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg3NS1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTY6MjAuNTQ3NDYwNDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNjU1NzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHJhdGUgbGltaXRpbmcgZm9yIE5ldGNvbnNvbGUgaXMgaGFuZGxlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhpcyByYXRlIGxpbWl0aW5nIGlzIGNvbmZpZ3VyZWQgYW5kIGNvbnRyb2xsZWQuIFRoZSBjbHVlIGlzIHRoYXQgSSBzZWUgbWVudGlvbiBvZiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCBhbmQgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAuIFRob3NlIHNvdW5kIGxpa2UgY29uZmlnZnMgYXR0cmlidXRlcywgYW5kIHRoYXQncyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3Igb2YgZHluYW1pYyBjb25maWd1cmF0aW9uLiBUaGUga2VybmVsIG9mdGVuIHVzZXMgY29uZmlnZnMgZm9yIHN5c2ZzLWxpa2UgaW50ZXJmYWNlcyB0aGF0IGNhbiBiZSBtb2RpZmllZCBhdCBydW50aW1lLlxuXG5JIGFsc28gcmVtZW1iZXIgdGhhdCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIGR5bmFtaWMgY29uZmlndXJhdGlvbiBpcyB1c3VhbGx5IGEgc2VwYXJhdGUgZmVhdHVyZS5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCB0byBzZWUgdGhlIG1lY2hhbmlzbXMgdXNlZCB0byBjb250cm9sIHRoZSBsaW1pdGluZyBiZWhhdmlvci4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXRhaWxzIG9uIHdoZXJlIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgcmVzaWRlIGFuZCBob3cgdGhlc2UgYXR0cmlidXRlIHZhbHVlcyBpbXBhY3QgdGhlIHJhdGUgbGltaXRpbmcgbG9naWMgd2l0aGluIHRoZSBuZXRjb25zb2xlIGRyaXZlciBpdHNlbGYuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHRpbWVyIG9yIGNvdW50ZXItYmFzZWQgaW1wbGVtZW50YXRpb24sIGJ1dCBJIHdhbnQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjoyNS43NzQwMTk3MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2NzI4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM0OD1zdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNzQ6c3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM3NS1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTY6MjUuODMwNjk2MjQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3Nzg2NjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25zb2xlIFJhdGUgTGltaXRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0ZSBsaW1pdGluZyBiZWhhdmlvciBpbiB0aGUgbmV0d29yayBjb25zb2xlLiBUaGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoYXQgaXMgaW4gdGhlIGNvcmUgZHJpdmVyIGZpbGU6IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHBpZWNlcyByZWxhdGVkIHRvIHJhdGUgbGltaXRpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvbmZpZ3VyYXRpb24gb3Igc3RvcmFnZSBvZiBidXJzdCBsaW1pdHMuIE15IHRhcmdldCBpcyBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYC4gVGhhdCBuYW1lIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LCBzbyBpdCBzaG91bGQgbGVhZCBtZSByaWdodCB0byB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjMxLjYwODU2NTY2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzNzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXRlbGltaXRfYnVyc3Rfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzc0PXN0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM5Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM5NzpzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTgtXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjMxLjY1NDQwOTA2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODMyMjUyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gTmV0Y29uc29sZSBSYXRlbGltaXRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldHdvcmsgY29uc29sZSBoYW5kbGVzIHJhdGUgbGltaXRpbmcuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBmbG9vZGluZyBtaWdodCBiZSBhbiBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBmdW5jdGlvbiwgYXNzdW1pbmcgaXQgZXhpc3RzLiBUaGlzIGlzIGEgY29tbW9uIG5hbWluZyBjb252ZW50aW9uLCBhbmQgaXQncyBsaWtlbHkgdG8gYmUgdGhlIGVudHJ5IHBvaW50IG9yIGNlbnRyYWwgZnVuY3Rpb24gcmVsYXRlZCB0byByYXRlIGxpbWl0aW5nIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBtb2R1bGUuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGxvZ2ljLCB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG0gdGhleSB1c2UsIGFuZCBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsbHkgb3ZlcndoZWxtaW5nIG5ldHdvcmsgdHJhZmZpYy4gSSB3aWxsIHRoZW4gY3Jvc3MgcmVmZXJlbmNlIG90aGVyIGFyZWFzIG9mIHRoZSBjb2RlIGJhc2UgdGhhdCBhcmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjozNS45Mzc2MzY4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNDYyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV9yYXRlbGltaXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI5MT1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyOTc6c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM1NT1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNTk6c3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MTM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYyNTpcXHRcXHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MjYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjM1Ljk4MDk4NzM5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTU4MTUyMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBOZXcgUmF0ZSBMaW1pdGluZyBGZWF0dXJlKipcblxuT2theSwgc28gdGhpcyBmZWF0dXJlIGxvb2tzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJdCdzIGFkZGluZyBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCBhbmQgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIHdoaWNoIGFyZSBjb25maWdmcyBhdHRyaWJ1dGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0IGBzaG93YCBmdW5jdGlvbnM6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AuIEFuZCwgb2YgY291cnNlLCB0aGUga2V5IGxpbWl0aW5nIGZ1bmN0aW9ucywgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIHN0YXRpYz8gWWVwLCBpdCBpcy4gSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGNvbmZpZ2ZzIGBzdG9yZWAgYW5kIGBzaG93YCBmdW5jdGlvbnMgYXJlICp1c3VhbGx5KiBzdGF0aWMgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgYGNvbmZpZ2ZzX2F0dHJpYnV0ZWAgc3RydWN0dXJlLiBCdXQgdGhlIHByb21wdCBpcyBhc2tpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBBcmUgdGhlcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaD9cblxuTGV0IG1lIHJldmlldyB0aGUgZnVuY3Rpb25zIGFkZGVkIGJ5IHRoaXMgcGF0Y2ggdG8gc2VlIHdoaWNoIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gT2theSwgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCwgaXQnczpcblxuKiAgIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCAoc3RhdGljKVxuKiAgIGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCAoc3RhdGljKVxuKiAgIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgIChzdGF0aWMpXG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCAoc3RhdGljKVxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AgKHN0YXRpYylcbiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCAoc3RhdGljKVxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgIChzdGF0aWMpXG4qICAgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgKHN0YXRpYylcblxuRGFtbiEgVGhleSdyZSAqYWxsKiBzdGF0aWMuIFRoYXQgbWVhbnMgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29uZmlnZnMgYXR0cmlidXRlIGZ1bmN0aW9ucyBhcyB0aGV5IGFyZSB1c2VkIGluIGEgdW5pcXVlIHdheSB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIG1haW4gd3JpdGUgZnVuY3Rpb24sIGBuZXRjb25zb2xlX3dyaXRlYC5cblxuQnV0IGhvbGQgb24sIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogd2FudHMgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMuIFRoZSBwcm9tcHQgc2F5cyBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiBCdXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgY29uZmlnZnMgc3RvcmUvc2hvdyBmdW5jdGlvbnMgYXJlICpub3QqIGlubGluZWQuIFRoZXkgYXJlIG5vdCBpbmxpbmVkIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBhbmQgcHV0IGludG8gc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZS4gU28gaXQncyBzdGlsbCBnb29kLiBJIHNob3VsZCBjaGVjayBob3cgdGhleSBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTY6NDUuOTM5MTQzNDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk2MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0FUVFIuKnJhdGVsaW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3ODE9Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3ODI6Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3ODM6Q09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjQ1Ljk4NDA0MjIwNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDI2MjkwNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHJhdGUgbGltaXRpbmcgaXMgaGFuZGxlZCBpbiB0aGUgYG5ldGNvbnNvbGVgIGNvZGUsIHNwZWNpZmljYWxseSBob3cgYENPTkZJR0ZTX0FUVFJgIGlzIHVzZWQuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCB0aGlzIG1hY3JvIHNvbWVob3cgaW5saW5lZCBvciBkaXJlY3RseSB1c2VkIGZ1bmN0aW9ucyBsaWtlIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBpdCBsb29rcyBsaWtlIGBDT05GSUdGU19BVFRSYCBnZW5lcmF0ZXMgYSBgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZWAgbmFtZWQgYGF0dHJfcmF0ZWxpbWl0X2ludGVydmFsX21zYCwgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnBhc3NlZCogdG8gdGhpcyBnZW5lcmF0ZWQgc3RydWN0dXJlLlxuXG5UaGF0IG1ha2VzIG1vcmUgc2Vuc2UuIFRoZSBtYWNybyBuZWVkcyBgbmFtZV9zdG9yZWAgYW5kIGBuYW1lX3Nob3dgIHRvIGV4aXN0LCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIG1lYW5zIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmVuJ3QgYmVpbmcgaW5saW5lZCwgYXMgSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBhbHNvIG1lYW5zIHdlIGNhbiwgYW5kIHNob3VsZCwgaW5jbHVkZSB0aGVtIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIG1vdmluZyB1cHN0cmVhbSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHdyaXRpbmcgbWVzc2FnZXMgYXBwZWFycyB0byBiZSBgbmV0Y29uc29sZV93cml0ZWAuIFRoaXMgZnVuY3Rpb24sIEkgYmVsaWV2ZSwgY2FsbHMgaW50byB0aGUgcmF0ZSBsaW1pdGluZyBsb2dpYywgbmFtZWx5IGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYCBhbmQgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbmV0Y29uc29sZV93cml0ZWAgaXMgbm90IHN0YXRpYy4gVGhhdCBpcyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjU0LjAxMDMzNTExOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMTE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1Nzg9c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwNi0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwNzogKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MDgtICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYxMzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxNC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0Ny1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjQ4LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0OTpcXHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCB0cnVlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1MC19XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTI6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU1OlxcdG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjg0Mj1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0NC1cXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9FWFRFTkRFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODQ1OlxcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NjpcXHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDctXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yODUxPXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NTMtXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1NDpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1NTpcXHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg1Ni1cXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjo1NC4wNTM1NTA0MjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTY0NzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRjb25zb2xlIEltcGxlbWVudGF0aW9uIFBsYW4qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5ldGNvbnNvbGVgIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIHdyaXRlIGZ1bmN0aW9uLCBgbmV0Y29uc29sZV93cml0ZWAsIGlzIGFjdHVhbGx5IHN0YXRpYy4gVGhhdCdzIGludGVyZXN0aW5nLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdlcmUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLCBidXQgdGhvc2UgYXJlIGFsc28gc3RhdGljLCB0b28uIEl0IG1ha2VzIHNlbnNlIG5vdyAtIHRoZXkncmUgY2FsbGVkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIHRoYXQgYHN0cnVjdCBjb25zb2xlYC4gQWxyaWdodCwgdGhhdCBjbGVhcnMgdGhhdCB1cC5cblxuU28sIEkgdGhpbmsgSSBjYW4gaW5jbHVkZSBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYCwgYHJhdGVsaW1pdF9idXJzdF9zdG9yZWAsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaW4gdGhlIG5ldyBwbGFuLiBcblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcm9hZCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWw6IHdoYXQgYXJlIHRoZSAqYWN0dWFsKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSdsbCBuZWVkIHRvIHdvcmsgd2l0aD8gSSBrbm93IHRoZXJlJ3MgYENPTkZJR19ORVRDT05TT0xFYCwgYW5kIEkgdGhpbmsgdGhlcmUncyBhIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBhcyB3ZWxsLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgYXJlIHRoZSBjb3JyZWN0IG5hbWVzLiBCZXN0IHRvIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCdzIGhlYWQgdGhlcmUgYW5kIHZlcmlmeSB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE2OjU5LjExMzIwMDAyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4OTMyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRDT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNjo1OS40MDIxMzg0NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1MDcwMzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llczpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCDigJMgaW1wb3J0YW50IG9wdGlvbnMgaW4gbmV0d29yayBjb25maWd1cmF0aW9uLCBJIHByZXN1bWUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG1hcCBvdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG9wdGlvbnMsIGhhcmR3YXJlLCBvciBsaWJyYXJpZXMgYXJlIGNvbnRpbmdlbnQgb24gdGhlc2UgYmVpbmcgZW5hYmxlZCwgYW5kLCBjb252ZXJzZWx5LCB3aGF0IHRoZXNlIGRlcGVuZCBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kdWxlLCBvciBhcmUgdGhlcmUgd2lkZXIgaW1wbGljYXRpb25zIGZvciB0aGUgc3lzdGVtJ3MgbmV0d29yayBzdGFjaz9cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbnMgZm9yIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYW5kIGBkZWZhdWx0YCBzdGF0ZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoLiBUaGF0IHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSBpZiBlbmFibGluZyBvbmUgYXV0b21hdGljYWxseSBlbmFibGVzLCBvciBpbXBsaWVzLCB0aGUgb3RoZXIsIG9yIGlmIHRoZXJlJ3MgYW55IGNvbmZsaWN0LiBJJ20gbG9va2luZyBmb3IgZGlyZWN0IGFuZCBpbmRpcmVjdCByZWxhdGlvbnNoaXBzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBuZXR3b3JrIGRyaXZlcnMsIGNvcmUgbmV0d29ya2luZyBtb2R1bGVzLCBvciBwb3RlbnRpYWxseSB0aGluZ3MgbGlrZSBsb2dnaW5nIGZyYW1ld29ya3M/XG5cbkZ1cnRoZXJtb3JlLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSdzIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmVoYXZpb3IgaGVyZS4gRG9lcyB0aGUgZGVwZW5kZW5jeSB0cmVlIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIENQVSBhcmNoaXRlY3R1cmUsIHRoZSBib2FyZCwgb3IgdGhlIGNob3NlbiBuZXR3b3JraW5nIGhhcmR3YXJlPyBJJ2xsIGFsc28gd2FudCB0byByZXZpZXcgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoZWlyIHB1cnBvc2Ugb3IgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSB3YXJuaW5ncyBvciBub3RlcyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMsIHN1Y2ggYXMgZmlyZXdhbGxzLCByb3V0aW5nIHByb3RvY29scywgb3IgZXZlbiBwb3dlciBtYW5hZ2VtZW50LlxuXG5VbHRpbWF0ZWx5LCBJIG5lZWQgYSBjb25jaXNlIGFuZCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgdGhhdCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIGFzIGl0IHNob3VsZCBiZSwgd2l0aG91dCBjb25mbGljdHMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBlbmFibGluZyB0aGVzZSBvcHRpb25zOyBpdCdzIGFib3V0IG1ha2luZyBpbmZvcm1lZCBjaG9pY2VzIHRoYXQgYWxpZ24gd2l0aCB0aGUgc3BlY2lmaWMgbmVlZHMgb2YgdGhlIHN5c3RlbSwgYW5kIHRoYXQgZ3VhcmFudGVlIG9wdGltYWwgYmVoYXZpb3IsIHN0YWJpbGl0eSwgYW5kIHNlY3VyaXR5IGluIHRoZSB0YXJnZXQgZGVwbG95bWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzowNS4wNTI4NDQyMDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjc6XFx0Y29uZmlnIE5FVENPTlNPTEVcXG4gMzI4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAzMjk6XFx0XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG4gMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzowNS4wNTI5NDI5NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4NTY3ODM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgTkVUQ09OU09MRWAgbW9kdWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0J3MgY2xlYXIgSSdsbCBuZWVkIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgZW5hYmxlZC4gQWxzbywgYENPTkZJR0ZTX0ZTYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50LiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBQUklOVEtgIGFuZCBgU1lTRlNgIGFyZSBlbmFibGVkIHNpbmNlIHRob3NlIGFyZSB1c3VhbGx5IGEgZ2l2ZW4uIFNvIGZhciwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGxvb2tzIGxpa2UgdGhpczogYFtcIk5FVENPTlNPTEVcIiwgXCJORVRDT05TT0xFX0RZTkFNSUNcIiwgXCJDT05GSUdGU19GU1wiXWAuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgcGF0Y2ggdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uLiBJIHNlZSBhIGZldyBrZXkgb25lczogYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgLCBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAsIGBuZXRjb25zb2xlX3Rha2VfZHJvcHNgLCBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHJhdGUtbGltaXRpbmcgcGFyYW1ldGVycyBsaWtlIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2AsIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AsIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYW5kIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgLlxuXG5TcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgb3Igb25lcyB0aGF0IGhhdmUgdGhlaXIgYWRkcmVzc2VzIHRha2VuLiBMZXQgbWUgc2VlLi4uIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AgYXJlIHRoZSBvbmVzIHRoYXQganVtcCBvdXQuXG5cbkxldCdzIHNlZSwgaXMgYG5ldGNvbnNvbGVfd3JpdGVgIGFkZHJlc3MtdGFrZW4/IE5vLCBidXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGFyZS4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIFNvIEkgY2FuIGluY2x1ZGUgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEFuZCBJIHRoaW5rIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCBhcmUgYWxzbyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZm9jdXMgb24uXG5cbkZpbmFsbHksIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgZXZlbiBwcmVzZW50IGluIHRoZSBrZXJuZWwgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTc6MTEuOTM4NjIzNDQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE2MjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MTM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0Ny1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI4NDI9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NDQtXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg0NTpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4NDY6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODQ3LVxcdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjExLjk4NTc5MTgzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzY3ODQ1NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBJZGVudGlmeWluZyBGb2N1c2VkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGZvciBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGFuZCB5ZXMsIEkndmUgZ290IGEgbGlzdCBhbHJlYWR5LiBMZXQncyBzZWUuLi4gSSd2ZSBnb3Q6XG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWBcbiogICBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYFxuKiAgIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd2BcbiogICBgcmF0ZWxpbWl0X2J1cnN0X3Nob3dgXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGlubGluaW5nLiBgbmV0Y29uc29sZV93cml0ZWAgaXMgc3RhdGljLCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLCBhbG9uZyB3aXRoIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIGFuZCBgbmV0Y29uc29sZV9yYXRlbGltaXRlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG8gcHV0IGludG8gYEZvY3VzU3ltYm9sc2AuXG5cblNvLCBjb25zaWRlcmluZyBpbmxpbmluZywgSSBoYXZlIGEgcHJlbGltaW5hcnkgbGlzdCwgd2hpY2ggaXM6XG5cbiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgXG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2BcbiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgXG4qICAgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgXG5cbldhaXQgYSBtaW51dGUsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBtaWdodCBiZSBob3QgcGF0aHMgaWYgdGhlcmUgYXJlIG1hbnkgcHJpbnRrcywgYW5kIHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGNhbGxlZCBmb3IgZXZlcnkgYHByaW50a2AgaWYgbmV0Y29uc29sZSBpcyBlbmFibGVkLiBTaW5jZSBgcHJpbnRrYCBjYW4gYmUgYSBob3QgcGF0aCwgdGhpcyBpcyBhIGJpdCBvZiBhIGRpbGVtbWEuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgcmF0ZWxpbWl0IHN0b3JlIGZ1bmN0aW9ucyBkZWZpbml0ZWx5IGFyZSBub3QgaG90IHBhdGhzLiBTbywgc2luY2UgdGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gc3BlY2lmaWMgY29uZmlnZnMgc3RvcmUgZnVuY3Rpb25zLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgY29uZmlnZnMgc3RvcmUgZnVuY3Rpb25zLlxuXG5MZXQgbWUgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzLi4uIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgYWxsb2NfYW5kX2luaXRgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIG5ldyB0YXJnZXQgaXMgY3JlYXRlZC4gSG1tLi4uIGNvdWxkIEkgYWRkIGBhbGxvY19hbmRfaW5pdGAgb3IgYG1ha2VfbmV0Y29uc29sZV90YXJnZXRgPyBMZXQncyBzZWU6IGBhbGxvY19hbmRfaW5pdGAgaXMgc3RhdGljOyBpdCBzZWVtcyB0aGF0IGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCBpcyB0aGUgY29uZmlnZnMgYG1ha2VfaXRlbWAgY2FsbGJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjE5LjM1MzY0MTQyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzIwNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ha2VfbmV0Y29uc29sZV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODMzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODU0OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTQxOlxcdC5tYWtlX2dyb3VwXFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQyLVxcdC5kcm9wX2l0ZW1cXHQ9IGRyb3BfbmV0Y29uc29sZV90YXJnZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjE5LjU0NDM2NzI3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM0NDI1NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKipcblxuT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoLiBJbml0aWFsbHksIEkgdGhvdWdodCBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBpdCdzIG5vdCBkaXJlY3RseSBtb2RpZmllZC4gSG93ZXZlciwgdGhlIGBhbGxvY19hbmRfaW5pdGAgZnVuY3Rpb24gKmlzKiBjaGFuZ2VkIHRvIGNhbGwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXRgLCBzbyB0aGVyZSdzIGFuIGluZGlyZWN0IGNvbm5lY3Rpb24uIE15IGZvY3VzLCB0aG91Z2gsIG5lZWRzIHRvIGJlIG9uIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGlzIG5ldyByYXRlIGxpbWl0aW5nIGZlYXR1cmU6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYC5cblxuTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgdGhlIHBhdGNoIGl0c2VsZiwgSSBzZWUgaXQncyBpbnRyb2R1Y2luZyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgYXMgYXR0cmlidXRlcyB3aXRoaW4gYG5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzYC4gSXQncyBhbHNvIGFkZGluZyB0aGUgY29ycmVzcG9uZGluZyBzdG9yZSBhbmQgc2hvdyBmdW5jdGlvbnM6IGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLCBgcmF0ZWxpbWl0X2J1cnN0X3N0b3JlYCwgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YCwgYW5kIGByYXRlbGltaXRfYnVyc3Rfc2hvd2AuIENydWNpYWxseSwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGFuZCBgc2VuZF9yYXRlbGltaXRfbm90aWNlYCBhcmUgaW50cm9kdWNlZCBhbmQgdXNlZCB3aXRoaW4gYG5ldGNvbnNvbGVfd3JpdGVgLlxuXG5UaGVyZWZvcmUsIG15ICpGb2N1c1N5bWJvbHMqIGZvciB0aGUgZnV6emluZyBlZmZvcnRzIHdpbGwgYmU6XG5cbiogICBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3N0b3JlYFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgXG4qICAgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zaG93YFxuKiAgIGByYXRlbGltaXRfYnVyc3Rfc2hvd2BcblxuSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXJlIHRoZSByYXRlIGxpbWl0aW5nIGFjdHVhbGx5ICpoYXBwZW5zKi4gVGhhdCdzIHdpdGhpbiBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIEFyZSB0aGVzZSBob3QgcGF0aHM/IEFic29sdXRlbHkuIEV2ZXJ5IGBwcmludGtgIHRoYXQgZ29lcyB0aHJvdWdoIG5ldGNvbnNvbGUsIHdoZW4gZW5hYmxlZCwgaGl0cyB0aGVzZSBmdW5jdGlvbnMuIFdlIHNob3VsZCBleGNsdWRlIHRoZW0gZnJvbSBkaXJlY3QgZnV6emluZyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLCBzaW5jZSB0aGV5IGFyZSBjb3JlIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gVGhlIGZlYXR1cmUgZGVwZW5kcyBvbiB0aGVzZSBgRW5hYmxlQ29uZmlnc2A6XG5cbiogICBgTkVUQ09OU09MRWBcbiogICBgTkVUQ09OU09MRV9EWU5BTUlDYFxuKiAgIGBDT05GSUdGU19GU2BcblxuT3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBsaWtlbHkgYFBSSU5US2AgYW5kIGBTWVNGU2AsIGJ1dCB0aG9zZSBhcmUgdXN1YWxseSBlbmFibGVkLiBTbywgdGhlIGtleSBkZXBlbmRlbmNpZXMgcmVtYWluIHRoZSB0aHJlZSBtZW50aW9uZWQgYWJvdmUuXG5cbk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgdG8gcHJldmVudCBuZXRjb25zb2xlIHRhcmdldHMgZnJvbSBiZWluZyBvdmVyd2hlbG1lZCBieSBjb250aW51b3VzIGxvZ2dpbmcuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgKGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgLCBgcmF0ZWxpbWl0X2J1cnN0YCkgdG8gY29uZmlndXJlIGEgcmF0ZSBsaW1pdCAqcGVyKiB0YXJnZXQuIFRoZSBjb3JlIHJhdGUgbGltaXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIGBuZXRjb25zb2xlX3dyaXRlYCwgbWFraW5nIHVzZSBvZiBgcmF0ZWxpbWl0X3N0YXRlYC4gVGhlIGNoYW5nZXMgYXJlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSwgdGhlcmVmb3JlLCBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYENPTkZJR0ZTX0ZTYCBpcyB0aGUgY29ycmVjdCBuYW1lLCBhbmQgaXQgaXM7IHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSBpbiBgZHJpdmVycy9uZXRgIGNvbmZpcm1zIGl0LiBJIGFsc28gZG91YmxlLWNoZWNrZWQgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBzdG9yZSBhbmQgc2hvdyBmdW5jdGlvbnMsIGFuZCB0aGV5IGFyZSBhcyBleHBlY3RlZDogYHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZWAsIGByYXRlbGltaXRfYnVyc3Rfc3RvcmVgLCBgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dgLCBhbmQgYHJhdGVsaW1pdF9idXJzdF9zaG93YC5cblxuSSdtIHJlYWR5IHRvIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHByb3ZpZGUgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjA1LCJPdXRwdXRUb2tlbnMiOjIyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzozMi44ODg2MjQzNDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTUzNjM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3N0b3JlXCIsXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc2hvd1wiLFxuICAgIFwicmF0ZWxpbWl0X2J1cnN0X3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJhdGUgbGltaXRpbmcgZm9yIG5ldGNvbnNvbGUgdGFyZ2V0cyB0byBwcmV2ZW50IGEgaG9zdCBmcm9tIHNhdHVyYXRpbmcgdGhlIHJlY2VpdmluZyBhZ2VudCB3aXRoIGNvbnRpbnVvdXMgbG9ncy4gSXQgYWRkcyBuZXcgY29uZmlnZnMgYXR0cmlidXRlcyBgcmF0ZWxpbWl0X2ludGVydmFsX21zYCBhbmQgYHJhdGVsaW1pdF9idXJzdGAgdG8gY29uZmlndXJlIHRoZSByYXRlIGxpbWl0IHBlciB0YXJnZXQuIFRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIHRoZSBjb25zb2xlIHdyaXRlIHBhdGggdXNpbmcgYHJhdGVsaW1pdF9zdGF0ZWAuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIGFuZCB0aGUgcHJpbnRrIGNvbnNvbGUgd3JpdGUgcGF0aC4gVGhlIGNvbmZpZ2ZzIHN0b3JlL3Nob3cgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTkVUQ09OU09MRWAsIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdfQ09ORklHRlNfRlNgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zdG9yZVwiLFxuICAgIFwicmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3dcIixcbiAgICBcInJhdGVsaW1pdF9idXJzdF9zaG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMgdG8gcHJldmVudCBhIGhvc3QgZnJvbSBzYXR1cmF0aW5nIHRoZSByZWNlaXZpbmcgYWdlbnQgd2l0aCBjb250aW51b3VzIGxvZ3MuIEl0IGFkZHMgbmV3IGNvbmZpZ2ZzIGF0dHJpYnV0ZXMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIHRvIGNvbmZpZ3VyZSB0aGUgcmF0ZSBsaW1pdCBwZXIgdGFyZ2V0LiBUaGUgcmF0ZSBsaW1pdGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgY29uc29sZSB3cml0ZSBwYXRoIHVzaW5nIGByYXRlbGltaXRfc3RhdGVgLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBjb25maWdmcyBhbmQgdGhlIHByaW50ayBjb25zb2xlIHdyaXRlIHBhdGguIFRoZSBjb25maWdmcyBzdG9yZS9zaG93IGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05FVENPTlNPTEVgLCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHX0NPTkZJR0ZTX0ZTYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTc6MzIuOTY0MTY2OTA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTIwMTQzNDQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjMyLjk2NDY2Mjg2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTIwMDkzNDk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMuIEl0IGFkZHMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHVzZXMgYHN0cnVjdCByYXRlbGltaXRfc3RhdGVgIHRvIHRyYWNrIG1lc3NhZ2UgcmF0ZXMuIFdoZW4gbWVzc2FnZXMgYXJlIGRyb3BwZWQsIGl0IHNlbmRzIGEgbm90aWNlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcGVkIG1lc3NhZ2VzLlxcblxcblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCdzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXFx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cXG5cXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxcblxcblRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBub3IgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDkwNmQ4YmQxZmViZjYzOTY3NDkxNTk2NzI4NTgxOTY1ZmE4ZGExN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjE2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi43MzY5Y2Q4OWFlNzZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNzcsNiArMTc3LDQ5IEBAIFlvdSBjYW4gbW9kaWZ5IHRoZXNlIHRhcmdldHMgaW4gcnVudGltZSBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIHRhcmdldHM6OlxuICBjYXQgY21kbGluZTEvcmVtb3RlX2lwXG4gIDEwLjAuMC4zXG4gXG4rUmF0ZSBsaW1pdGluZ1xuKy0tLS0tLS0tLS0tLS1cbitcbitOZXRjb25zb2xlIGhhbmRzIGV2ZXJ5IGNvbnNvbGUgbWVzc2FnZSB0byBldmVyeSBlbmFibGVkIHRhcmdldCwgc28gYSBob3N0IHRoYXRcbitsb2dzIGNvbnRpbnVvdXNseSBjYW4gc2F0dXJhdGUgdGhlIHJlY2VpdmluZyBhZ2VudC4gRWFjaCB0YXJnZXQgY2FycmllcyBhIHRva2VuXG4rYnVja2V0IHRoYXQgZHJvcHMgbWVzc2FnZXMgb25jZSB0aGUgY29uZmlndXJlZCByYXRlIGlzIGV4Y2VlZGVkLCBjb250cm9sbGVkIGJ5XG4rdHdvIGZpbGVzIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5OlxuK1xuKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgICAgICAgcmF0ZWxpbWl0X2ludGVydmFsX21zIExlbmd0aCBvZiB0aGUgYWNjb3VudGluZyBpbnRlcnZhbCwgaW5cbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMuIFplcm8sIHRoZSBkZWZhdWx0LCBzZW5kc1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGhpbmcuXG4rICAgICAgICByYXRlbGltaXRfYnVyc3QgICAgICAgTWVzc2FnZXMgYWxsb3dlZCBwZXIgaW50ZXJ2YWwuIERlZmF1bHRzIHRvXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA7IHplcm8gZHJvcHMgZXZlcnkgbWVzc2FnZS5cbisgICAgICAgID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitVbmxpa2UgbW9zdCB0YXJnZXQgcGFyYW1ldGVycywgYm90aCBrbm9icyBjYW4gYmUgd3JpdHRlbiB3aGlsZSB0aGUgdGFyZ2V0IGlzXG4rZW5hYmxlZCwgd2hpY2ggaXMgd2hlbiBhIGZsb29kaW5nIHRhcmdldCBtb3N0IGxpa2VseSBuZWVkcyB0aGVtLlxuK1xuK1RoZSBsaW1pdCBpcyBhcHBsaWVkIHBlciBtZXNzYWdlLCBub3QgcGVyIHBhY2tldCwgc28gYSBtZXNzYWdlIGJpZyBlbm91Z2ggdG8gYmVcbitzcGxpdCBpbnRvIHNldmVyYWwgYG5jZnJhZ2AgcGFja2V0cyBpcyBlaXRoZXIgc2VudCB3aG9sZSBvciBub3QgYXQgYWxsLlxuK1xuK0NyYXNoIG91dHB1dCBieXBhc3NlcyB0aGUgYnVja2V0LiBXaGlsZSBhbiBvb3BzLCBCVUcoKSBvciBwYW5pYygpIGlzIGluXG4rcHJvZ3Jlc3MgZXZlcnkgbWVzc2FnZSBpcyBzZW50LCB3aGF0ZXZlciB0aGUgbGltaXQgc2F5cywgc28gYSBzbWFsbCBidXJzdFxuK2Nhbm5vdCBjb3N0IHlvdSBwYXJ0IG9mIGEgY3Jhc2ggZHVtcC5cbitcbitBIGRyb3AgbGVhdmVzIG5vdGhpbmcgb24gdGhlIHdpcmUsIHNvIHRoZSByZWNlaXZlciBpcyB0b2xkIHdoYXQgaXQgbWlzc2VkIGFzXG4rc29vbiBhcyBhIG1lc3NhZ2UgZ2V0cyB0aHJvdWdoIGFnYWluOjpcbitcbisgIG5ldGNvbnNvbGU6IDQ1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxuK1xuK1RoZSBub3RpY2Ugb25seSB0cmF2ZWxzIHdpdGggdGhlIG5leHQgbWVzc2FnZSB0aGUgYnVja2V0IGFsbG93cy4gQSBob3N0IHRoYXRcbitnb2VzIHF1aWV0IHJpZ2h0IGFmdGVyIGJlaW5nIGxpbWl0ZWQgcmVwb3J0cyB0aGUgZHJvcHMgbGF0ZXIsIHdoZW4gaXQgbG9nc1xuK2FnYWluLCBhbmQgYSB0YXJnZXQgd2l0aCBhIGByYXRlbGltaXRfYnVyc3RgIG9mIHplcm8gbmV2ZXIgcmVwb3J0cyB0aGVtLlxuK1xuK25ldGNvbnNvbGUgZ2VuZXJhdGVzIHRoZSBub3RpY2UgaXRzZWxmIGluc3RlYWQgb2YgbG9nZ2luZyBpdCwgc28gb24gYW5cbitleHRlbmRlZCB0YXJnZXQgdGhlIHJlY29yZCBjYXJyaWVzIGEgc2VxdWVuY2UgbnVtYmVyIG9mIHplcm8uXG4rXG4rQ2FwcGluZyBhIHRhcmdldCBhdCA1MDAgbWVzc2FnZXMgYSBtaW51dGU6OlxuK1xuKyAgZWNobyA2MDAwMCBcdTAwM2UgcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rICBlY2hvIDUwMCBcdTAwM2UgcmF0ZWxpbWl0X2J1cnN0XG4rXG4gQXBwZW5kIFVzZXIgRGF0YVxuIC0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IGIzNThlNWMzNjczNTEuLjBhZjJlNWI0MzM1YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTQ5LDYgKzQ5LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhdGVsaW1pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCJNYXR0IE1hY2thbGwgXHUwMDNjbXBtQHNlbGVuaWMuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbnNvbGUgZHJpdmVyIGZvciBuZXR3b3JrIGludGVyZmFjZXNcIik7XG5AQCAtMTc1LDYgKzE3Nyw4IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuKyAqIEByYXRlbGltaXQ6XHRPcGFxdWUgc3RydWN0dXJlIHRvIHJhdGVsaW1pdCBtZXNzYWdlc1xuKyAqIEBwZW5kaW5nX2Ryb3BzOiBNZXNzYWdlcyBkcm9wcGVkIHNpbmNlIHRoZSBsYXN0IG5vdGljZSB3YXMgc2VudC5cbiAgKiBAc3RhdHM6XHRQYWNrZXQgc2VuZCBzdGF0cyBmb3IgdGhlIHRhcmdldC4gVXNlZCBmb3IgZGVidWdnaW5nLlxuICAqIEBzdGF0ZTpcdFN0YXRlIG9mIHRoZSB0YXJnZXQuXG4gICpcdFx0VmlzaWJsZSBmcm9tIHVzZXJzcGFjZSAocmVhZC13cml0ZSkuXG5AQCAtMjE5LDYgKzIyMyw4IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHR1MzJcdFx0XHRzeXNkYXRhX2ZpZWxkcztcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrICovXG4gXHR1MzJcdFx0XHRtc2djb3VudGVyO1xuK1x0dTMyXHRcdFx0cGVuZGluZ19kcm9wcztcbitcdHN0cnVjdCByYXRlbGltaXRfc3RhdGVcdHJhdGVsaW1pdDtcbiAjZW5kaWZcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyBzdGF0cztcbiBcdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbkBAIC0yODIsNiArMjg4LDM0IEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXHUwMDI2bnQtXHUwMDNlcmF0ZWxpbWl0LCAwLCBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7XG4rXHRyYXRlbGltaXRfc2V0X2ZsYWdzKFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCwgUkFURUxJTUlUX01TR19PTl9SRUxFQVNFKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmV0Y29uc29sZV9yYXRlbGltaXRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdC8qIEEgbGltaXQgbWVhbnQgZm9yIHN0ZWFkeS1zdGF0ZSBsb2dnaW5nIG11c3Qgbm90IGVhdCBhIGNyYXNoIGR1bXAuICovXG4rXHRpZiAob29wc19pbl9wcm9ncmVzcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKF9fcmF0ZWxpbWl0KFx1MDAyNm50LVx1MDAzZXJhdGVsaW1pdCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG50LVx1MDAzZXBlbmRpbmdfZHJvcHMrKztcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdTMyIG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdHUzMiBkcm9wcyA9IG50LVx1MDAzZXBlbmRpbmdfZHJvcHM7XG4rXG4rXHRudC1cdTAwM2VwZW5kaW5nX2Ryb3BzID0gMDtcbitcdHJldHVybiBkcm9wcztcbit9XG4rXG4gI2Vsc2VcdC8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG4gXG4gc3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbkBAIC0zMTgsNiArMzUyLDIwIEBAIHN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbiB7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1MzIgbmV0Y29uc29sZV90YWtlX2Ryb3BzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbmRpZlx0LyogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuIFxuIC8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuQEAgLTY4Niw2ICs3MzQsNyBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbitcdG5ldGNvbnNvbGVfcmF0ZWxpbWl0X2luaXQobnQpO1xuIFx0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcbiBcdC8qIFNldCB1cCB0aGUgc2tiIHBvb2wgcHJpbWl0aXZlcyBvbmNlOyBlbmFibGluZyBvbmx5IHJlZmlsbHMgaXQuICovXG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm50LVx1MDAzZXNrYl9wb29sKTtcbkBAIC05MTIsNiArOTYxLDIxIEBAIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsbHVcXG5cIiwgeG1pdF9kcm9wX2NvdW50ICsgZW5vbWVtX2NvdW50KTtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3QgcmF0ZWxpbWl0X2ludGVydmFsX21zX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIldVxcblwiLFxuK1x0XHRcdCAgamlmZmllc190b19tc2VjcyhSRUFEX09OQ0UobnQtXHUwMDNlcmF0ZWxpbWl0LmludGVydmFsKSkpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCByYXRlbGltaXRfYnVyc3Rfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIFJFQURfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QpKTtcbit9XG4rXG4gLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG4gc3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbkBAIC0xMzA3LDYgKzEzNzEsNTAgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9pbnRlcnZhbF9tc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4rXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7XG4rXHR1bnNpZ25lZCBsb25nIGppZnM7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2aW50ZXJ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGppZnMgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTtcbitcdGlmIChqaWZzIFx1MDAzZSBJTlRfTUFYKVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4rXHRXUklURV9PTkNFKG50LVx1MDAzZXJhdGVsaW1pdC5pbnRlcnZhbCwgamlmcyk7XG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHJhdGVsaW1pdF9idXJzdF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbitcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4rXHR1bnNpZ25lZCBpbnQgYnVyc3Q7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGtzdHJ0b3VpbnQoYnVmLCAxMCwgXHUwMDI2YnVyc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChidXJzdCBcdTAwM2UgSU5UX01BWClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuK1x0V1JJVEVfT05DRShudC1cdTAwM2VyYXRlbGltaXQuYnVyc3QsIGJ1cnN0KTtcbitcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gc3RydWN0IHVzZXJkYXR1bSB7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbiBcdGNoYXIgdmFsdWVbTUFYX0VYVFJBREFUQV9WQUxVRV9MRU5dO1xuQEAgLTE2NzEsNiArMTc3OSw4IEBAIENPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xuIENPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcbiBDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG4gQ09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9pbnRlcnZhbF9tcyk7XG4rQ09ORklHRlNfQVRUUigsIHJhdGVsaW1pdF9idXJzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2VuYWJsZWQsXG5AQCAtMTY4NCw2ICsxNzk0LDggQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4gXHRcdTAwMjZhdHRyX2xvY2FsX21hYyxcbiBcdFx1MDAyNmF0dHJfcmVtb3RlX21hYyxcbiBcdFx1MDAyNmF0dHJfdHJhbnNtaXRfZXJyb3JzLFxuK1x0XHUwMDI2YXR0cl9yYXRlbGltaXRfaW50ZXJ2YWxfbXMsXG4rXHRcdTAwMjZhdHRyX3JhdGVsaW1pdF9idXJzdCxcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC0yNDYzLDYgKzI1NzUsMzQgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXG4re1xuK1x0aW50IGxlbiA9IDA7XG4rXHR1NjQgdHNfdXNlYztcbitcdHUzMiBkcm9wcztcbitcbitcdGRyb3BzID0gbmV0Y29uc29sZV90YWtlX2Ryb3BzKG50KTtcbitcdGlmICghZHJvcHMpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChleHRlbmRlZCkge1xuK1x0XHQvKiBhcHBlbmQgdGhlIGV4dGVuZGVkIGhlYWRlcnMgKi9cbitcdFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4rXHRcdFx0bGVuID0gc2NucHJpbnRmKG50LVx1MDAzZWJ1Ziwgc2l6ZW9mKG50LVx1MDAzZWJ1ZiksIFwiJXMsXCIsXG4rXHRcdFx0XHRcdGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpO1xuK1xuK1x0XHR0c191c2VjID0gZGl2X3U2NChsb2NhbF9jbG9jaygpLCBOU0VDX1BFUl9VU0VDKTtcbitcdFx0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdFx0IFwiJXUsMCwlbGx1LC07XCIsIExPR0xFVkVMX1dBUk5JTkcsIHRzX3VzZWMpO1xuK1x0fVxuK1xuK1x0bGVuICs9IHNjbnByaW50ZihudC1cdTAwM2VidWYgKyBsZW4sIHNpemVvZihudC1cdTAwM2VidWYpIC0gbGVuLFxuK1x0XHRcdCBcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwiLFxuK1x0XHRcdCBkcm9wcyk7XG4rXG4rXHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG4gICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG5AQCAtMjQ4Miw2ICsyNjIyLDkgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4gXHRcdCAgICAhbmV0aWZfcnVubmluZyhudC1cdTAwM2VucC5kZXYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAobmV0Y29uc29sZV9yYXRlbGltaXRlZChudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIElmIG5iY29uX2VudGVyX3Vuc2FmZSgpIGZhaWxzLCBqdXN0IHJldHVybiBnaXZlbiBuZXRjb25zb2xlXG4gXHRcdCAqIGxvc3QgdGhlIG93bmVyc2hpcCwgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSB0YXJnZXRzIHdpbGwgbm90XG4gXHRcdCAqIGJlIGFibGUgdG8gcmUtYWNxdWlyZS5cbkBAIC0yNDg5LDYgKzI2MzIsOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbiBcdFx0aWYgKCFuYmNvbl9lbnRlcl91bnNhZmUod2N0eHQpKVxuIFx0XHRcdHJldHVybjtcbiBcbitcdFx0c2VuZF9yYXRlbGltaXRfbm90aWNlKG50LCBleHRlbmRlZCk7XG4rXG4gXHRcdGlmIChleHRlbmRlZClcbiBcdFx0XHRzZW5kX2V4dF9tc2dfdWRwKG50LCB3Y3R4dCk7XG4gXHRcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggZjA2NzRjMDAxN2ZjNC4uMDRjY2U0MGYxNjJlOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMCw2ICsxMCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfY21kbGluZS5zaCBcXFxuIFx0bmV0Y29uc19mcmFnbWVudGVkX21zZy5zaCBcXFxuIFx0bmV0Y29uc19vdmVyZmxvdy5zaCBcXFxuK1x0bmV0Y29uc19yYXRlbGltaXQuc2ggXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc19yYXRlbGltaXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfcmF0ZWxpbWl0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzhkZDE1OTlmZTU3ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3JhdGVsaW1pdC5zaFxuQEAgLTAsMCArMSwxNjAgQEBcbisjIS91c3IvYmluL2VudiBiYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgcGVyLXRhcmdldCByYXRlIGxpbWl0LiBJdCBjb25maWd1cmVzIGEgc21hbGwgYnVyc3RcbisjIG92ZXIgYW4gaW50ZXJ2YWwgbG9uZyBlbm91Z2ggdGhhdCB0aGUgYnVja2V0IGlzIG5ldmVyIHJlZmlsbGVkLCBzZW5kcyBtYW55XG4rIyBtb3JlIG1lc3NhZ2VzIHRoYW4gdGhlIGJ1cnN0IGFsbG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSB0YXJnZXQgc3RvcHNcbisjIHRyYW5zbWl0dGluZyBvbmNlIHRoZSBidWNrZXQgaXMgZW1wdHkuXG4rI1xuKyMgQ2xlYXJpbmcgdGhlIGludGVydmFsIGhhcyB0byByZXN0b3JlIHVubGltaXRlZCBkZWxpdmVyeSBhbmQgdGVsbCB0aGVcbisjIHJlY2VpdmVyIGhvdyBtYW55IG1lc3NhZ2VzIGl0IG1pc3NlZCwgd2hpY2ggaXMgdmVyaWZpZWQgbGFzdC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rU0NSSVBURElSPSQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiKVxuK1xuK3NvdXJjZSBcIiR7U0NSSVBURElSfVwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuK1xuKyMgTWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgbGltaXQgaXMgaW4gcGxhY2UsIGNvbWZvcnRhYmx5IGFib3ZlIEJVUlNUIHNvIHRoYXRcbisjIHRoZSBidWNrZXQgaXMgZHJhaW5lZFxuK01TR19DT1VOVD01MFxuK0JVUlNUPTVcbisjIExvbmcgZW5vdWdoIHRoYXQgdGhlIGJ1Y2tldCBpcyBub3QgcmVmaWxsZWQgd2hpbGUgdGhlIHRlc3QgcnVuc1xuK0lOVEVSVkFMX01TPTYwMDAwXG4rIyBEZWZhdWx0IHRoZSB0YXJnZXQgc3RhcnRzIHdpdGgsIGFzIGRvY3VtZW50ZWQgaW4gbmV0Y29uc29sZS5yc3RcbitERUZBVUxUX0JVUlNUPTEwXG4rIyBXaGF0IHRoZSB0YXJnZXQgc2VuZHMgb25jZSBpdCBjYW4gdHJhbnNtaXQgYWdhaW5cbitEUk9QX05PVElDRT1cIm1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFwiXG4rXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXG4rT1VUUFVUX0ZJTEU9XCIvdG1wLyR7VEFSR0VUfVwiXG4rXG4rZnVuY3Rpb24gY291bnRfbXNncygpIHtcbitcdGxvY2FsIEZJTEU9XCIkezF9XCJcbitcbitcdGlmIFsgISAtZiBcIiR7RklMRX1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gMFxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHQjIGdyZXAgZXhpdHMgMSBvbiBubyBtYXRjaCwgd2hpY2ggaXMgYSB2YWxpZCByZXN1bHQgaGVyZVxuK1x0Z3JlcCAtYyBcIiR7TVNHfVwiIFwiJHtGSUxFfVwiIHx8IHRydWVcbit9XG4rXG4rZnVuY3Rpb24gc2VuZF9tc2dzKCkge1xuK1x0bG9jYWwgQ09VTlQ9XCIkezF9XCJcbitcdGxvY2FsIElcbitcbitcdGZvciBJIGluICQoc2VxIFwiJHtDT1VOVH1cIilcbitcdGRvXG4rXHRcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfSAke0l9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0ZG9uZVxuK31cbitcbisjIEEgZnJlc2hseSBjcmVhdGVkIHRhcmdldCBoYXMgdG8gYmUgdW5saW1pdGVkLCBvdGhlcndpc2UgZXZlcnkgZXhpc3RpbmdcbisjIG5ldGNvbnNvbGUgdXNlciB3b3VsZCBzdGFydCBkcm9wcGluZyBtZXNzYWdlcyBhZnRlciBhbiB1cGdyYWRlXG4rZnVuY3Rpb24gY2hlY2tfZGVmYXVsdHMoKSB7XG4rXHRsb2NhbCBJTlRFUlZBTCBCVVJTVF9ERUZBVUxUXG4rXG4rXHRJTlRFUlZBTD0kKGNhdCBcIiR7TkVUQ09OU19QQVRIfVwiL3JhdGVsaW1pdF9pbnRlcnZhbF9tcylcbitcdEJVUlNUX0RFRkFVTFQ9JChjYXQgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfYnVyc3QpXG4rXG4rXHRpZiBbIFwiJHtJTlRFUlZBTH1cIiAtbmUgMCBdIHx8XG4rXHQgICBbIFwiJHtCVVJTVF9ERUZBVUxUfVwiIC1uZSBcIiR7REVGQVVMVF9CVVJTVH1cIiBdXG4rXHR0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiB1bmV4cGVjdGVkIHJhdGUgbGltaXQgZGVmYXVsdHM6XCIgXFxcbitcdFx0ICAgICBcImludGVydmFsPSR7SU5URVJWQUx9IGJ1cnN0PSR7QlVSU1RfREVGQVVMVH1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gY2hlY2tfbGltaXRlZCgpIHtcbitcdGxvY2FsIFJFQ0VJVkVEXG4rXG4rXHRSRUNFSVZFRD0kKGNvdW50X21zZ3MgXCIke09VVFBVVF9GSUxFfVwiKVxuK1xuK1x0IyBVbnJlbGF0ZWQga2VybmVsIG1lc3NhZ2VzIHNoYXJlIHRoZSBidWNrZXQsIHNvIGZld2VyIHRoYW4gQlVSU1Qgb2ZcbitcdCMgb3VycyBjYW4gZ2V0IHRocm91Z2gsIGJ1dCBuZXZlciBtb3JlXG4rXHRpZiBbIFwiJHtSRUNFSVZFRH1cIiAtZ3QgXCIke0JVUlNUfVwiIF1cbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IHJlY2VpdmVkICR7UkVDRUlWRUR9IG1lc3NhZ2VzIHdpdGggcmF0ZWxpbWl0X2J1cnN0PSR7QlVSU1R9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjIFRoZSBub3RpY2UgYmVsb3cgdHJhdmVscyBhaGVhZCBvZiB0aGUgbWVzc2FnZSB0aGF0IHJlb3BlbmVkIHRoZSBidWNrZXQsIHNvXG4rIyB3YWl0aW5nIGZvciB0aGUgZmlsZSB0byBhcHBlYXIgaXMgbm90IGVub3VnaFxuK2Z1bmN0aW9uIG1zZ19yZWNlaXZlZCgpIHtcbitcdGdyZXAgLXEgXCIke01TR31cIiBcIiR7T1VUUFVUX0ZJTEV9XCIgMlx1MDAzZSAvZGV2L251bGxcbit9XG4rXG4rIyBUaGUgbWVzc2FnZXMgbG9zdCBhYm92ZSBoYXZlIHRvIGJlIHJlcG9ydGVkIHRvIHRoZSByZWNlaXZlclxuK2Z1bmN0aW9uIGNoZWNrX2Ryb3BzX3JlcG9ydGVkKCkge1xuK1x0aWYgISBncmVwIC1xIFwiJHtEUk9QX05PVElDRX1cIiBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IG5vIHJhdGUgbGltaXQgbm90aWNlIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjID09PT09PT09PT0gI1xuKyMgU3RhcnQgaGVyZSAjXG4rIyA9PT09PT09PT09ICNcbitcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK1xuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbisjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSlcbitlY2hvIFwiNiA1XCIgXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcbitzZXRfbmV0d29ya1xuKyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbitjcmVhdGVfZHluYW1pY190YXJnZXRcbitcbitjaGVja19kZWZhdWx0c1xuK1xuKyMgU2V0IHRoZSBidXJzdCBiZWZvcmUgdGhlIGludGVydmFsLCBzbyB0aGF0IG5vIG1lc3NhZ2UgZXNjYXBlcyB3aGlsZSB0aGVcbisjIHRhcmdldCBzdGlsbCBjYXJyaWVzIHRoZSBkZWZhdWx0IGJ1cnN0XG4rZWNobyBcIiR7QlVSU1R9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2J1cnN0XG4rZWNobyBcIiR7SU5URVJWQUxfTVN9XCIgXHUwMDNlIFwiJHtORVRDT05TX1BBVEh9XCIvcmF0ZWxpbWl0X2ludGVydmFsX21zXG4rXG4rbGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCIke09VVFBVVF9GSUxFfVwiIFx1MDAyNlxuK3dhaXRfZm9yX3BvcnQgXCIke05BTUVTUEFDRX1cIiBcIiR7UE9SVH1cIiBcImlwdjRcIlxuK3NlbmRfbXNncyBcIiR7TVNHX0NPVU5UfVwiXG4rIyBUaGlzIGhhbGYgb2YgdGhlIHRlc3QgaXMgYWJvdXQgbWVzc2FnZXMgdGhhdCBuZXZlciBhcnJpdmUsIHNvIHRoZXJlIGlzXG4rIyBub3RoaW5nIHRvIGJ1c3l3YWl0IG9uXG4rc2xlZXAgMVxuK3BraWxsX3NvY2F0XG4rY2hlY2tfbGltaXRlZFxuK3JtIC1mIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuKyMgRHJvcHBpbmcgdGhlIGludGVydmFsIGJhY2sgdG8gemVybyBoYXMgdG8gbWFrZSB0aGUgdGFyZ2V0IHVubGltaXRlZCBhZ2FpblxuK2VjaG8gMCBcdTAwM2UgXCIke05FVENPTlNfUEFUSH1cIi9yYXRlbGltaXRfaW50ZXJ2YWxfbXNcbitcbitsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDI2XG4rd2FpdF9mb3JfcG9ydCBcIiR7TkFNRVNQQUNFfVwiIFwiJHtQT1JUfVwiIFwiaXB2NFwiXG4rc2VuZF9tc2dzIDFcbitpZiAhIGJ1c3l3YWl0IFwiJHtCVVNZV0FJVF9USU1FT1VUfVwiIG1zZ19yZWNlaXZlZFxuK3RoZW5cbitcdGVjaG8gXCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyAoJHtCVVNZV0FJVF9USU1FT1VUfSBtcykgZm9yIG5ldGNvbnNvbGVcIiBcXFxuK1x0ICAgICBcIm1lc3NhZ2UgaW4gJHtPVVRQVVRfRklMRX0gYWZ0ZXIgY2xlYXJpbmcgdGhlIHJhdGUgbGltaXRcIiBcdTAwM2VcdTAwMjYyXG4rXHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitmaVxuK3ZhbGlkYXRlX21zZyBcIiR7T1VUUFVUX0ZJTEV9XCJcbitjaGVja19kcm9wc19yZXBvcnRlZFxuK3BraWxsX3NvY2F0XG4rcm0gLWYgXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rdHJhcCAtIEVYSVRcbitjbGVhbnVwXG4rZXhpdCBcIiR7a3NmdF9wYXNzfVwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzozMi45NjQ2NjM1NTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxNTg1NTg0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFJhdGUgTGltaXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyByYXRlIGxpbWl0aW5nIHRvIG5ldGNvbnNvbGUuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IG1vZGlmaWVzIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBpbnRyb2R1Y2VzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNgIGFuZCBgcmF0ZWxpbWl0X2J1cnN0YCB0byB0aGUgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiwgYW5kIHVzZXMgYSBgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZWAgd2l0aGluIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiAgQSBgcGVuZGluZ19kcm9wc2AgY291bnRlciBpcyBhZGRlZDsgd2hlbiB0aGUgcmF0ZSBsaW1pdCBpcyBleGNlZWRlZCwgbWVzc2FnZXMgZ2V0IGRyb3BwZWQgYW5kIHRoaXMgY291bnRlciBpbmNyZW1lbnRzLiBXaGVuIGEgbWVzc2FnZSAqaXMqIGFsbG93ZWQsIGl0IGNoZWNrcyBpZiBgcGVuZGluZ19kcm9wc2AgaXMgXHUwMDNlIDAgYW5kLCBpZiBzbywgc2VuZHMgYSBcIm5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcblwiIG5vdGljZS4gVGhpcyBub3RpY2UgaXMgc2VudCB2aWEgYHNlbmRfcmF0ZWxpbWl0X25vdGljZSgpYC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYHNlbmRfcmF0ZWxpbWl0X25vdGljZSgpYC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgZnVuY3Rpb24gYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHJhdGUgbGltaXRpbmcgaXMgYWN0dWFsbHkgKmFubm91bmNlZCouICBJJ20gcmVhZGluZyB0aGUgY29kZSwgYW5kIG15IG1haW4gY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYnVmZmVyIG92ZXJmbG93cy5cblxuYGBgY1xuK3N0YXRpYyB2b2lkIHNlbmRfcmF0ZWxpbWl0X25vdGljZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBib29sIGV4dGVuZGVkKVxuK3tcbitcdGludCBsZW4gPSAwO1xuK1x0dTY0IHRzX3VzZWM7XG4rXHR1MzIgZHJvcHM7XG4rXG4rXHRkcm9wcyA9IG5ldGNvbnNvbGVfdGFrZV9kcm9wcyhudCk7XG4rXHRpZiAoIWRyb3BzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoZXh0ZW5kZWQpIHtcbitcdFx0LyogYXBwZW5kIHRoZSBleHRlbmRlZCBoZWFkZXJzICovXG4rXHRcdGlmIChudC1cdTAwM2VyZWxlYXNlKVxuK1x0XHRcdGxlbiA9IHNjbnByaW50ZihudC1cdTAwM2VidWYsIHNpemVvZihudC1cdTAwM2VidWYpLCBcIiVzLFwiLFxuK1x0XHRcdFx0XHRpbml0X3V0c25hbWUoKS1cdTAwM2VyZWxlYXNlKTtcbitcbitcdFx0dHNfdXNlYyA9IGRpdl91NjQobG9jYWxfY2xvY2soKSwgTlNFQ19QRVJfVVNFQyk7XG4rXHRcdGxlbiArPSBzY25wcmludGYobnQtXHUwMDNlYnVmICsgbGVuLCBzaXplb2YobnQtXHUwMDNlYnVmKSAtIGxlbixcbitcdFx0XHRcdCBcIiV1LDAsJWxsdSwtO1wiLCBMT0dMRVZFTF9XQVJOSU5HLCB0c191c2VjKTtcbitcdH1cbitcbitcdGxlbiArPSBzY25wcmludGYobnQtXHUwMDNlYnVmICsgbGVuLCBzaXplb2YobnQtXHUwMDNlYnVmKSAtIGxlbixcbitcdFx0XHQgXCJuZXRjb25zb2xlOiAldSBtZXNzYWdlcyBkcm9wcGVkIGJ5IHJhdGUgbGltaXRcXG5cIixcbitcdFx0XHQgZHJvcHMpO1xuK1xuK1x0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbGVuKTtcbit9XG5gYGBcblxuT2theSwgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgdGhlIG5vdGljZSBtZXNzYWdlIGlzIGZvcm1hdHRlZCBpbnRvIGBudC1cdTAwM2VidWZgLCBhbmQgdGhlbiBgc2VuZF91ZHAoKWAgaXMgY2FsbGVkLiAgVGhlIGtleSBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgZXhhY3RseSAqaG93KiBgbnQtXHUwMDNlYnVmYCBpcyB1c2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIGBudC1cdTAwM2VidWZgIHByb3Blcmx5IGluaXRpYWxpemVkPyBPciBjb3VsZCB3ZSBiZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1xuXG5gc2NucHJpbnRmYCB3cml0ZXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLiBgc2NucHJpbnRmYCB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiAqZXhjbHVkaW5nKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLiBUaGUgY29kZSB0aGVuIGNhbGxzIGBzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBsZW4pYCwgc28gaXQgc2VlbXMgdGhhdCBpdCdzIGNvcnJlY3RseSBzZW5kaW5nIGV4YWN0bHkgYGxlbmAgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyLlxuXG5Ob3csIGNvbnNpZGVyIHRoZSBgaWYgKG50LVx1MDAzZXJlbGVhc2UpYCBibG9jay4gSWYgYG50LVx1MDAzZXJlbGVhc2VgIGlzIHRydWUsIHRoZW4gd2UgYXBwZW5kIGFkZGl0aW9uYWwgaGVhZGVycy4gSWYgaXQncyBmYWxzZSwgYGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gIEknbSBwcmV0dHkgc3VyZSB0aGF0IHdpdGggZWFjaCBzdWJzZXF1ZW50IGNhbGwgdG8gYHNjbnByaW50ZmAsIGl0J3MgYWRkaW5nIHRvIHRoZSBleGlzdGluZyBjb250ZW50IGFuZCBlbnN1cmluZyBpdCBpcyBudWxsLXRlcm1pbmF0ZWQuIEFuZCwgaW4gYWxsIGNhc2VzLCB3ZSdyZSB1c2luZyB0aGUgcmV0dXJuZWQgbGVuZ3RoIHZhbHVlLiBUaGUgZmluYWwgY2FsbCB0byBgc2NucHJpbnRmYCB3aWxsIHdyaXRlIHRoZSBcIm5ldGNvbnNvbGU6IC4uLlwiIG1lc3NhZ2UuIFRoZSBgc2NucHJpbnRmYCBmdW5jdGlvbiAqc2hvdWxkKiBoYW5kbGUgdGhlIG51bGwgdGVybWluYXRpb24uIFRodXMsIGBzZW5kX3VkcCgpYCBpcyBvbmx5IHJlYWRpbmcgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdlJ3ZlIGV4cGxpY2l0bHkgd3JpdHRlbiB0byB0aGUgYnVmZmVyIHZpYSBgc2NucHJpbnRmYCAuIFNvLCBubywgdGhlcmUgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBjb21iaW5hdGlvbiBvZiBgc2NucHJpbnRmYCBhbmQgdGhlIHN1YnNlcXVlbnQgdXNlIG9mIGBsZW5gIGluIGBzZW5kX3VkcCgpYCBwcmV2ZW50cyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdHJhbnNtaXR0ZWQuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgc2VuZF91ZHBgIGFuZCBgbnQtXHUwMDNlYnVmYCBhcmUgY29ycmVjdGx5IGRlZmluZWQgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgaGF2ZSBjb25maXJtZWQgdGhhdCBgbnQtXHUwMDNlYnVmYCBpcyBpbmRlZWQgYSBjaGFyYWN0ZXIgYXJyYXkgd2l0aCBhIGRlZmluZWQgc2l6ZS4gQ2hlY2tpbmcgYHNlbmRfdWRwYCBjb25maXJtcyB0aGF0IGl0IHRha2VzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBhbmQgYSBsZW5ndGgsIGFuZCBpdCBzaW1wbHkgc2VuZHMgYSBVRFAgcGFja2V0IGNvbnRhaW5pbmcgdGhvc2UgYnl0ZXMuIFNpbmNlIGBzY25wcmludGZgIGlzIGZvcm1hdHRpbmcgYSBzdHJpbmcgaW50byB0aGUgYnVmZmVyIGNvcnJlY3RseSwgdGhhdCBtZWFucyB3ZSdyZSBpbiBnb29kIHNoYXBlLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwb3RlbnRpYWwgZ290Y2hhcy4gSSBzYXcgYG1zZ2NvdW50ZXJgLCBgcGVuZGluZ19kcm9wc2AsIGFuZCBgcmF0ZWxpbWl0YC4gVGhlc2UgYXJlIHByaW1pdGl2ZSB0eXBlcyBhbmQgYSBzdHJ1Y3QsIHdoaWNoIGlzXG5cbiIsIklucHV0VG9rZW5zIjo2ODI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjQ4LjEyMzIyNDIxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwOTA2OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfYW5kX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTg9c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MDYtLyogU2VlZCB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0by4gVGhlIHF1ZXVlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQwNzogKiBoZWFkIGFuZCByZWZpbGwgd29yayBhcmUgc2V0IHVwIG9uY2UgaW4gYWxsb2NfYW5kX2luaXQoKTsgdGhpcyBvbmx5XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQwOC0gKiAocmUpZmlsbHMgdGhlIHBvb2wuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkuXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjU3PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MTg6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODU0PXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzM6XFx0bnQgPSBhbGxvY19hbmRfaW5pdCgpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODc0LVxcdGlmICghbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjc2OD1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzczLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzc0OlxcdG50ID0gYWxsb2NfYW5kX2luaXQoKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc3NS1cXHRpZiAoIW50KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE3OjQ4LjE4NzMxNzY3NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE1NjA5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGFsbG9jX2FuZF9pbml0YCBmb3IgYGt6YWxsb2NgIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYGFsbG9jX2FuZF9pbml0YCBmdW5jdGlvbi4gVGhlIHByaW1hcnkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGBremFsbG9jYCBpbnRlcm5hbGx5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBgYWxsb2NfYW5kX2luaXRgIGlzIHplcm9lZCBvdXQuIElmIGl0IGlzLCB0aGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSBhcmVhIG9mIGV4cGVydGlzZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIGBhbGxvY19hbmRfaW5pdGAsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYGt6YWxsb2NgIG9yIGFueSBhbGxvY2F0aW9uIHBhdGh3YXlzIHRoYXQgbWlnaHQgdWx0aW1hdGVseSBsZWFkIHRvIGEgemVyb2luZy1vdXQgb3BlcmF0aW9uLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIGFzIHRvIHdoaWNoIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgdXRpbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxNzo1MS45MDI5MzExNjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTg6XFx0c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcXG4gNzE5OlxcdHtcXG4gNzIwOlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdG50ID0ga3phbGxvY19vYmooKm50KTtcXG4gNzIzOlxcdFxcdGlmICghbnQpXFxuIDcyNDpcXHRcXHRcXHRyZXR1cm4gbnQ7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0VYVEVOREVEX0xPRykpXFxuIDcyNzpcXHRcXHRcXHRudC1cXHUwMDNlZXh0ZW5kZWQgPSB0cnVlO1xcbiA3Mjg6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFKSlcXG4gNzI5OlxcdFxcdFxcdG50LVxcdTAwM2VyZWxlYXNlID0gdHJ1ZTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0bnQtXFx1MDAzZW5wLm5hbWUgPSBcXFwibmV0Y29uc29sZVxcXCI7XFxuIDczMjpcXHRcXHRzdHJzY3B5KG50LVxcdTAwM2VucC5kZXZfbmFtZSwgXFxcImV0aDBcXFwiLCBJRk5BTVNJWik7XFxuIDczMzpcXHRcXHRudC1cXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XFxuIDczNDpcXHRcXHRudC1cXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xcbiA3MzU6XFx0XFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gNzM2OlxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiA3Mzc6XFx0XFx0bmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdChudCk7XFxuIDczODpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XFxuIDczOTpcXHRcXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xcbiA3NDA6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sKTtcXG4gNzQxOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0cmV0dXJuIG50O1xcbiA3NDQ6XFx0fVxcbiA3NDU6XFx0XFxuIDc0NjpcXHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXFxuIDc0NzpcXHQgKiB0aGUgbWFpbiB0YXJnZXRfbGlzdC5cXG4gNzQ4OlxcdCAqL1xcbiA3NDk6XFx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gNzUwOlxcdHtcXG4gNzUxOlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuIDc1MjpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA3NTM6XFx0XFxuIDc1NDpcXHRcXHQvKiBUaGUgY2xlYW51cCBuZWVkcyBSVE5MIGxvY2tlZCAqL1xcbiA3NTU6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4gNzU4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCBcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdCwgbGlzdCkge1xcbiA3NTk6XFx0XFx0XFx0LyogYWxsIGVudHJpZXMgaW4gdGhlIGNsZWFudXBfbGlzdCBuZWVkcyB0byBiZSBkaXNhYmxlZCAqL1xcbiA3NjA6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKTtcXG4gNzYxOlxcdFxcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiA3NjI6XFx0XFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIDc2MzpcXHRcXHRcXHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXFxuIDc2NDpcXHRcXHRcXHQgKiBsb2Nrc1xcbiA3NjU6XFx0XFx0XFx0ICovXFxuIDc2NjpcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbiA3Njc6XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZudC1cXHUwMDNlbGlzdCwgXFx1MDAyNnRhcmdldF9saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTc6NTEuOTAzMDk3MDQ3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY4MjY4MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXRjb25zb2xlIHJhdGUgbGltaXRpbmcgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0J3Mgc291bmQuIEZpcnN0LCBga3phbGxvY19vYmooKm50KWAgaXMgYmVpbmcgdXNlZCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBga3phbGxvY2Agd2l0aCB0aGUgc2l6ZSBvZiB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QsIGFuZCB0aGF0J3MgZ29vZDsgaXQgbWVhbnMgZXZlcnl0aGluZydzIHplcm8taW5pdGlhbGl6ZWQuIEknZCBleHBlY3QgYHBlbmRpbmdfZHJvcHNgIHRvIGJlIHplcm8gaW5pdGlhbGx5LCBhbmQgdGhlIGByYXRlbGltaXRgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB1c2luZyBgbmV0Y29uc29sZV9yYXRlbGltaXRfaW5pdGAsIHdoaWNoIGNhbGxzIGByYXRlbGltaXRfc3RhdGVfaW5pdGAuICBObyBpbW1lZGlhdGUgcmVkIGZsYWdzLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gSSdsbCBleGFtaW5lIHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSByYXRlIGxpbWl0aW5nIG1lY2hhbmlzbS4gVGhlIGZpcnN0IGlzIGByYXRlbGltaXRfaW50ZXJ2YWxfbXNfc3RvcmVgLiBTZWVtcyByZWFzb25hYmxlOyBpdCBjb252ZXJ0cyB0aGUgaW50ZXJ2YWwgZnJvbSBtaWxsaXNlY29uZHMgdG8gamlmZmllcywgY2hlY2tzIGZvciBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gY29udmVydGluZyB0byBqaWZmaWVzLCBhbmQgdGhlbiB1c2VzIGBXUklURV9PTkNFYCB0byB1cGRhdGUgdGhlIGBpbnRlcnZhbGAgZmllbGQgaW4gdGhlIGByYXRlbGltaXRgIHN0cnVjdCB3aXRoaW4gYSBtdXRleC4gVGhhdCdzIGEgc2FmZSBhbmQgZWZmZWN0aXZlIHdheSB0byBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MuICBUaGUgaW50ZWdlciBjb252ZXJzaW9uIGlzIGNvcnJlY3QsIGFzIGlzIHRoZSBoYW5kbGluZyBvZiB0aGUgbXV0ZXguXG5cbk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGBuZXRjb25zb2xlX3JhdGVsaW1pdGVkYC4gVGhpcyBjaGVja3MgaWYgYW4gb29wcyBpcyBpbiBwcm9ncmVzcywgcmV0dXJuaW5nIGZhbHNlIGlmIGl0IGlzIChpbXBvcnRhbnQsIHdlIGRvbid0IHdhbnQgdG8gcmF0ZSBsaW1pdCBjcmFzaCBkdW1wcykuIEl0IHRoZW4gY2FsbHMgYF9fcmF0ZWxpbWl0YCBhbmQgaW5jcmVtZW50cyBgbnQtXHUwMDNlcGVuZGluZ19kcm9wc2AgaWYgdGhlIHJhdGUgbGltaXQgaXMgZXhjZWVkZWQuIE5vIGlzc3VlcyBoZXJlLlxuXG5GaW5hbGx5LCBJJ20gY2hlY2tpbmcgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAuICBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMuIFRoZSBjb2RlIGNoZWNrcyBgbnQtXHUwMDNlcGVuZGluZ19kcm9wc2AsIGFuZCBmb3JtYXRzIGEgc3RyaW5nIGludG8gYG50LVx1MDAzZWJ1ZmAuICBJdCB1c2VzIGBzY25wcmludGZgLCB3aGljaCBpcyBnb29kIHNpbmNlIGl0J3Mgc2FmZSB0byB1c2Ugd2l0aCBib3VuZGVkIGJ1ZmZlcnMsIGJ1dCAqaXMgdGhlIGJ1ZmZlciBsYXJnZSBlbm91Z2g/KiBUaGUgY29kZSAqZG9lcyogdXNlIGBzaXplb2YobnQtXHUwMDNlYnVmKWAgaW4gYHNjbnByaW50ZmAsIHNvIHRoYXQncyBnb29kLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNpemUgb2YgYG50LVx1MDAzZWJ1ZmAgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBoYW5kbGUgYWxsIHRoZSBwb3NzaWJsZSBmb3JtYXR0ZWQgc3RyaW5nIGxlbmd0aHMuIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTg6MDIuNDcxMzY4Nzc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE2Njg0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1PXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNDpzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE4OjAyLjczMzA0MTY1MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODc3NjQyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgZGVidWdnaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFRoaXMgc3RydWN0IGlzIHRoZSBoZWFydCBvZiB3aGVyZSB0aGUgbmV0Y29uc29sZSBkcml2ZXIgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciB0YXJnZXQgc3lzdGVtIGl0J3Mgc3VwcG9zZWQgdG8gc2VuZCBjb25zb2xlIG1lc3NhZ2VzIHRvLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBkZXNjcmlwdG9yIGZvciBlYWNoIHJlbW90ZSBjb25zb2xlIHdlJ3JlIHRyeWluZyB0byByZWFjaC5cblxuRmlyc3Qgb2ZmLCBJJ2QgYmUgbG9va2luZyBhdCB0aGUgc29ja2V0IGFkZHJlc3MgaW5mb3JtYXRpb24uIEl0IGhhcyB0byBjb250YWluIHRoZSBJUCBhZGRyZXNzICh2NCBvciB2NiwgbW9zdCBsaWtlbHkpIGFuZCB0aGUgVURQIHBvcnQgbnVtYmVyIG9mIHRoZSByZW1vdGUgbWFjaGluZSdzIG5ldGNvbnNvbGUgbGlzdGVuZXIuIFRoYXQncyB0aGUgYmFzZWxpbmUuIFRoZSBmaWVsZHMgdGhhdCBob2xkIHRoaXMgaW5mbyBhcmUgdGhlIG1vc3QgY3JpdGljYWwuIEknZCBiZSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIHN0cnVjdHVyZSB3aXRoIHRoZSBzb2NrZXQgYW5kIFVEUCBjb2RlLCBtYWtpbmcgc3VyZSB0aGUgYWRkcmVzcyBmYW1pbGllcyBhbmQgcG9ydCBoYW5kbGluZyBhcmUgY29uc2lzdGVudCBhbmQgcm9idXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGJlaW5nIG1hbmFnZWQgdGhyZWFkLXNhZmVseSwgdG9vLiBXZSBkb27igJl0IHdhbnQgdG8gYmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgZGF0YSByYWNlcyBwcmV2ZW50IHRoZSBtZXNzYWdlcyBmcm9tIGdldHRpbmcgdGhyb3VnaC5cblxuVGhlbiwgdGhlcmUncyBwcm9iYWJseSBzb21lIHN0YXRlIHRyYWNraW5nLiBJcyBpdCBhY3RpdmVseSBjb25uZWN0ZWQgb3IgdHJ5aW5nIHRvIHJlY29ubmVjdD8gVGhlcmUncyBwcm9iYWJseSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzb2NrZXQgaXMgcmVhZHkgdG8gYWNjZXB0IGRhdGEuIFNvbWUga2luZCBvZiBlcnJvciBjb3VudGVyIG9yIHRpbWVzdGFtcCBtaWdodCBleGlzdCB0byBzZWUgaG93IGxvbmcgaXQncyBiZWVuIHNpbmNlIGEgc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gYW5kIHNlZSBpZiBhIHRhcmdldCBpcyBwZXJtYW5lbnRseSB1bnJlYWNoYWJsZS4gSSdkIGV4cGVjdCBhbiBleHBvbmVudGlhbCBiYWNrb2ZmIHN0cmF0ZWd5IGlmIHRoZSB0YXJnZXQgaXMgZG93bi5cblxuSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBraW5kIG9mIGxvY2tpbmcgbWVjaGFuaXNtIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0cnVjdC4gSWYgdGhlIGtlcm5lbCBoYXMgbXVsdGlwbGUgdGhyZWFkcyBvciBpbnRlcnJ1cHQgaGFuZGxlcnMgcG90ZW50aWFsbHkgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSB0YXJnZXQgYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBuZWVkcyB0byBiZSBsb2NrZWQgZG93biB0byBwcmV2ZW50IGNvcnJ1cHRpb24uIEEgc3BpbmxvY2sgb3IgYSBtdXRleCB3b3VsZCBiZSB0eXBpY2FsIGhlcmUuIEknZCBoYXZlIHRvIG1ha2Ugc3VyZSBpdCdzIGJlaW5nIHVzZWQgY29ycmVjdGx5IGFuZCBpc24ndCBhIGJvdHRsZW5lY2suIFdoYXQga2luZCBvZiBpbnRlcnJ1cHQgY29udGV4dHMgYXJlIHRoZXNlIGxvY2tpbmcgcHJpbWl0aXZlcyBhYmxlIHRvIGZ1bmN0aW9uIGluP1xuXG5GaW5hbGx5LCB0aGVyZSB3aWxsIHByb2JhYmx5IGJlIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNYXliZSBhbiBNVFUgc2V0dGluZyB0byB0dW5lIGZvciBkaWZmZXJlbnQgbmV0d29yayBlbnZpcm9ubWVudHMuIFBlcmhhcHMgYSBmbGFnIHRvIGNvbnRyb2wgd2hldGhlciB0aW1lc3RhbXBzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbWVzc2FnZXMuIFBvc3NpYmx5IGV2ZW4gUW9TIHNldHRpbmdzLiBJJ20gYWxyZWFkeSBtZW50YWxseSBsaW5raW5nIHRoZXNlIHRvIHRoZSBicm9hZGVyIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc2V0dGluZ3MgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSwgYW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGNoYW5nZSB0aGVtIHdpdGhvdXQgY2F1c2luZyB0aGUgd2hvbGUgdGhpbmcgdG8gbG9jayB1cC5cblxuU28sIGluIGVzc2VuY2UsIEknbSBleHBlY3RpbmcgdGhpcyBzdHJ1Y3QgdG8gZW5jYXBzdWxhdGUgYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBhbmQgc3RhdGUgZm9yIGNvbW11bmljYXRpbmcgZGVidWcgaW5mb3JtYXRpb24gdG8gYSByZW1vdGUgc3lzdGVtLiBJdOKAmXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgaW4gZW5hYmxpbmcgcmVtb3RlIGtlcm5lbCBkZWJ1Z2dpbmcsIGFuZCBpdHMgZGVzaWduIGhhcyB0byBiZSByb2NrLXNvbGlkIHRvIGtlZXAgdGhpbmdzIHJ1bm5pbmcgd2hlbiBhIHN5c3RlbSBpcyBvdGhlcndpc2UgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxODoxMC42MTA2ODYwNzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTQ6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gMjE1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAyMTY6XFx0I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiAyMTc6XFx0XFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdGdyb3VwO1xcbiAyMTg6XFx0XFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdHVzZXJkYXRhX2dyb3VwO1xcbiAyMTk6XFx0XFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xcbiAyMjA6XFx0XFx0Y2hhclxcdFxcdFxcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi9cXG4gMjIzOlxcdFxcdHUzMlxcdFxcdFxcdHN5c2RhdGFfZmllbGRzO1xcbiAyMjQ6XFx0XFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2sgKi9cXG4gMjI1OlxcdFxcdHUzMlxcdFxcdFxcdG1zZ2NvdW50ZXI7XFxuIDIyNjpcXHRcXHR1MzJcXHRcXHRcXHRwZW5kaW5nX2Ryb3BzO1xcbiAyMjc6XFx0XFx0c3RydWN0IHJhdGVsaW1pdF9zdGF0ZVxcdHJhdGVsaW1pdDtcXG4gMjI4OlxcdCNlbmRpZlxcbiAyMjk6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0X3N0YXRzIHN0YXRzO1xcbiAyMzA6XFx0XFx0ZW51bSB0YXJnZXRfc3RhdGVcXHRzdGF0ZTtcXG4gMjMxOlxcdFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZDtcXG4gMjMyOlxcdFxcdGJvb2xcXHRcXHRcXHRyZWxlYXNlO1xcbiAyMzM6XFx0XFx0c3RydWN0IG5ldHBvbGxcXHRcXHRucDtcXG4gMjM0OlxcdFxcdHVuaW9uIGluZXRfYWRkclxcdFxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIDIzNTpcXHRcXHRib29sXFx0XFx0XFx0aXB2NjtcXG4gMjM2OlxcdFxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbiAyMzc6XFx0XFx0dThcXHRcXHRcXHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcXG4gMjM4OlxcdFxcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyArMSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcXG4gMjM5OlxcdFxcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXFxuIDI0MDpcXHRcXHQgKi9cXG4gMjQxOlxcdFxcdGNoYXJcXHRcXHRcXHRidWZbTUFYX1BSSU5UX0NIVU5LICsgMV07XFxuIDI0MjpcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZXN1bWVfd3E7XFxuIDI0MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXFx0c2tiX3Bvb2w7XFxuIDI0NDpcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZWZpbGxfd3E7XFxuIDI0NTpcXHR9O1xcbiAyNDY6XFx0XFxuIDI0NzpcXHQjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIDI0ODpcXHRcXG4gMjQ5OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG5ldGNvbnNvbGVfc3Vic3lzO1xcbiAyNTA6XFx0c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxcbiAyNTM6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMToxODoxMC42MTA4MjM5ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyNjQ3NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHNlbmRfcmF0ZWxpbWl0X25vdGljZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSB1c2luZyBgYnVmYCwgd2hpY2ggaXMgYSBjaGFyYWN0ZXIgYXJyYXksIGBjaGFyIGJ1ZltNQVhfUFJJTlRfQ0hVTksgKyAxXWAuIEFuZCBgTUFYX1BSSU5UX0NIVU5LYCBsb29rcyB0byBiZSBhcm91bmQgMTAwMCwgc28gdGhhdCdzIGEgcmVhc29uYWJsZSBzaXplIGZvciBhIGJ1ZmZlci4gVGhlIHN0cmluZyB3ZSdyZSBmb3JtYXR0aW5nIGluIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgIGlzIGAlcywgJXUsMCwlbGx1LC07IG5ldGNvbnNvbGU6ICV1IG1lc3NhZ2VzIGRyb3BwZWQgYnkgcmF0ZSBsaW1pdFxcbmAuIEJhc2VkIG9uIHRoZSB0eXBpY2FsIHZhbHVlcyBvZiByZWxlYXNlIHN0cmluZ3MsIGFuZCB0aGUgbnVtZXJpY2FsIHZhbHVlcywgdGhpcyBzaG91bGQgZWFzaWx5IGZpdCB3aXRoaW4gYE1BWF9QUklOVF9DSFVOSyArIDFgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHdlIHNlbmRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBgc2NucHJpbnRmYCBoYW5kbGVzIHRoYXQsIHdyaXRpbmcgY2hhcmFjdGVycyBhbmQgcmV0dXJuaW5nIHRoZSBsZW5ndGguIEFuZCBgc2VuZF91ZHBgIG9ubHkgc2VuZHMgKmV4YWN0bHkqIGBsZW5gIGJ5dGVzLiBTaW5jZSBgc2NucHJpbnRmYCBwb3B1bGF0ZXMgYWxsIGBsZW5gIGJ5dGVzLCBubyB3b3JyaWVzIHRoZXJlLCBub3RoaW5nIGlzIHVuaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBzZW5kaW5nLlxuXG5XaGF0IGFib3V0IHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyAqcmVhZCo/IGBudC1cdTAwM2VyZWxlYXNlYCBpcyBhIGJvb2xlYW4sIHNvIHRoYXQncyBmaW5lLiBgaW5pdF91dHNuYW1lKCktXHUwMDNlcmVsZWFzZWAgaXMgYSBzdHJpbmcsIGFuZCBgbG9jYWxfY2xvY2soKWAgcmV0dXJucyBhIGB1NjRgLiBUaGVuIGBkcm9wc2AgaXMgYSBgdTMyYC4gT2theSwgc28gdGhvc2UgYXJlIGFsbCBpbml0aWFsaXplZCB2YWx1ZXMuIFdlJ3JlIGdvb2QuXG5cbklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWxhdGVkIHRvIGBudC1cdTAwM2VyYXRlbGltaXRgPyBObywgYmVjYXVzZSBpdCBpcyBpbml0aWFsaXplZCBieSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLiBBbmQgYG50LVx1MDAzZXBlbmRpbmdfZHJvcHNgIGlzIGFsc28gemVyb2VkIG91dCBieSBga3phbGxvY2AuIFNvLCB0aGF0J3MgY292ZXJlZC5cblxuVGhlIG9ubHkgcmVtYWluaW5nIHF1ZXN0aW9uIGlzIGhvdyBgc2VuZF91ZHBgIHdvcmtzIGludGVybmFsbHkuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNlbmRfdWRwYCB0byBlbnN1cmUgaXQgZG9lc24ndCB0cnkgdG8gcmVhZCBiZXlvbmQgdGhlIGBsZW5gIGJ5dGVzIHBhc3NlZCB0byBpdC4gQnV0IGZyb20gd2hhdCBJIGhhdmUgc2VlbiBzbyBmYXIgSSBkbyBub3QgZXhwZWN0IGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6MTg6MTcuNzM3MzAxMTE3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIwODExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNjI9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI4NjpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjMtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjQ6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzI1LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjgtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMyOTogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzAtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMzMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMzMzpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzM1OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMzYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM1MD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4MzpcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgbXNnX2xlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTQ9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDgxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDgyOlxcdFxcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBidWZfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzMj1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU0MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU0MTpcXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU0Mi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU2ND1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzEtXFx0XFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTcyOlxcdFxcdHNlbmRfdWRwKG50LCB0bXAsIGZyYWcpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTczLVxcdFxcdHRtcCArPSBmcmFnO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1Nzg9c3RhdGljIHZvaWQgc2VuZF9yYXRlbGltaXRfbm90aWNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwMzpcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE4OjE3Ljc4NjUxMzQxMloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDM3OTA2MTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV0Y29uc29sZSBSYXRlIExpbWl0aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBzZW5kX3VkcGAgZnVuY3Rpb24gaXRzZWxmIGxvb2tzIHNvbGlkLiBJdCdzIHByb3Blcmx5IHRha2luZyBhIGBjb25zdCBjaGFyICptc2dgIGFuZCBgaW50IGxlbmAsIGFsbG9jYXRpbmcgYW4gU0tCLCBhbmQgY29weWluZyBgbGVuYCBieXRlcy4gIFRoZXJlJ3Mgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoZXJlLCBhdCBsZWFzdCBub3QgaW4gdGhlIG9yaWdpbmFsIGNhbGwgY2hhaW4uXG5cbk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYuLi4gSSdtIHNlZWluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBuZXRjb25zb2xlX3JhdGVsaW1pdF9pbml0YCwgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgLCBhbmQgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AuIFRoZSBpbml0IGZ1bmN0aW9uIGp1c3Qgc2V0cyB1cCB0aGUgYHJhdGVsaW1pdF9zdGF0ZWAgc3RydWN0dXJlLCB3aGljaCBhcHBlYXJzIHN0YW5kYXJkLiBUaGUgYG5ldGNvbnNvbGVfcmF0ZWxpbWl0ZWRgIGZ1bmN0aW9uIHV0aWxpemVzIGBfX3JhdGVsaW1pdGAsIGEgd2VsbC1rbm93biBrZXJuZWwgZnVuY3Rpb24sIGFuZCBpbXBvcnRhbnRseSwgaXQgaW5jbHVkZXMgYSBjaGVjayBmb3IgYG9vcHNfaW5fcHJvZ3Jlc3NgIHRvIGF2b2lkIHJhdGUtbGltaXRpbmcgZHVyaW5nIGEgY3Jhc2ggZHVtcC4gIFRoYXQncyBhIGdvb2Qgc2FmZWd1YXJkLiAgYG5ldGNvbnNvbGVfdGFrZV9kcm9wc2AgYXBwZWFycyBzYWZlLCBzaW1wbHkgcmVzZXR0aW5nIHRoZSBjb3VudGVyLlxuXG5UaGUgc3lzZnMgaW50ZXJmYWNlcyBmb3IgdGhlIHJhdGUgbGltaXRpbmcgcGFyYW1ldGVycyAoaW50ZXJ2YWwgYW5kIGJ1cnN0KSBhcmUgYWxzbyBmaW5lLCB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYXRvbWljaXR5LiBUaGUgc3RvcmUgZnVuY3Rpb25zIGFyZSBhbHNvIHNhZmUsIHVzaW5nIG11dGV4ZXMgYXJvdW5kIHRoZSB3cml0ZXMgdG8gYHJhdGVsaW1pdC5pbnRlcnZhbGAgYW5kIGByYXRlbGltaXQuYnVyc3RgLCBhbmQgdGhleSBhcmUgcHJvcGVybHkgdmFsaWRhdGluZyB0aGUgaW5wdXQgdmFsdWVzIHVzaW5nIGBrc3RydG91aW50YCBhbmQgYXZvaWRpbmcgaW50ZWdlciBvdmVyZmxvd3MuICBUaGF0J3MgYWxsIHN0YW5kYXJkLCBzYWZlIGtlcm5lbCBwcmFjdGljZS5cblxuVGhlbiB3ZSBoYXZlIGBzZW5kX3JhdGVsaW1pdF9ub3RpY2VgLiAgVGhpcyBpcyB0aGUgaW50ZXJlc3RpbmcgYml0IHdoZXJlIHRoZSBkcm9wcGVkIG1lc3NhZ2UgY291bnQgaXMgZm9ybWF0dGVkLiBUaGUgZm9ybWF0dGluZyBmdW5jdGlvbiwgYHNjbnByaW50ZmAsIGlzIGNvcnJlY3QgaW4gdGhpcyBjb250ZXh0LCBhbHdheXMgZW5zdXJpbmcgdGhlIHN0cmluZyBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkLCBhbmQgaW5pdGlhbGl6ZWQgdXAgdG8gbGVuLCByZXR1cm5pbmcgbGVuIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gZm9ybWF0dGVkIHRvIHRoZSBidWZmZXIuIFRoZSBleHRlbmRlZCBoZWFkZXJzIGFyZSBjb25kaXRpb25hbCwgYnV0IHRoZSBmb3JtYXR0aW5nIGlzIGNvcnJlY3QuIFRoZSBjYWxsIHRvIGBzZW5kX3VkcGAgdXNlcyB0aGUgY29ycmVjdCBgbGVuYCB2YWx1ZS4gVGhlIGZ1bmN0aW9uIHNlZW1zIHNhZmUuXG5cbkZpbmFsbHksIHRoZSBhZGRlZCBsb2dpYyBpbiBgbmV0Y29uc29sZV93cml0ZWAgcHJvcGVybHkgY2hlY2tzIGlmIGEgdGFyZ2V0IGlzIHJhdGVsaW1pdGVkICpiZWZvcmUqIGNhbGxpbmcgYG5iY29uX2VudGVyX3Vuc2FmZWAgKGltcG9ydGFudCEpLCBhbmQgdGhhdCBpcyBhbHNvIHdoZXJlIHdlIHNlZSB0aGUgcmF0ZSBsaW1pdGluZyBub3RpZmljYXRpb24gYmVpbmcgc2VudCwgd2l0aCB0aGUgcmlnaHQgZm9ybWF0dGluZy5cblxuTXkgZmluYWwgY29uY2x1c2lvbiBpcyB0aGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGFuIGluZm8gbGVhayB0byB1c2VyLXNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGUgc3RydWN0IGZpZWxkcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBgc2NucHJpbnRmYCBjYWxscyBhbmQgdGhlIHN1YnNlcXVlbnQgdXNlIG9mIGBsZW5gIGluIGBzZW5kX3VkcGAgcHJldmVudCBhbnkgYWNjaWRlbnRhbCB0cmFuc21pc3Npb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSBiZWxpZXZlIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudC4gSSB3aWxsIG5vdyBzZXQgdGhlIHJlc3VsdCBhcyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgbXkgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4NSwiT3V0cHV0VG9rZW5zIjoyOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjE4OjM4LjE2NTU3NzU4OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMuIEl0IGFkZHMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHVzZXMgYHN0cnVjdCByYXRlbGltaXRfc3RhdGVgIHRvIHRyYWNrIG1lc3NhZ2UgcmF0ZXMuIFdoZW4gbWVzc2FnZXMgYXJlIGRyb3BwZWQsIGl0IHNlbmRzIGEgbm90aWNlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcGVkIG1lc3NhZ2VzLlxcblxcblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCdzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXFx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cXG5cXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxcblxcblRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBub3IgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByYXRlIGxpbWl0aW5nIGZvciBuZXRjb25zb2xlIHRhcmdldHMuIEl0IGFkZHMgYHJhdGVsaW1pdF9pbnRlcnZhbF9tc2AgYW5kIGByYXRlbGltaXRfYnVyc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHVzZXMgYHN0cnVjdCByYXRlbGltaXRfc3RhdGVgIHRvIHRyYWNrIG1lc3NhZ2UgcmF0ZXMuIFdoZW4gbWVzc2FnZXMgYXJlIGRyb3BwZWQsIGl0IHNlbmRzIGEgbm90aWNlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcGVkIG1lc3NhZ2VzLlxcblxcblRoZSBub3RpY2UgaXMgZm9ybWF0dGVkIHVzaW5nIGBzY25wcmludGZgIGludG8gdGhlIHRhcmdldCdzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIChgbnQtXFx1MDAzZWJ1ZmApLCBhbmQgdGhlIGV4YWN0IGxlbmd0aCByZXR1cm5lZCBieSBgc2NucHJpbnRmYCBpcyBwYXNzZWQgdG8gYHNlbmRfdWRwYC4gYHNjbnByaW50ZmAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGJ5dGVzIGl0IHdyaXRlcywgYW5kIGBzZW5kX3VkcGAgb25seSByZWFkcyB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgYnVmZmVyIGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cXG5cXG5UaGUgbmV3IGZpZWxkcyBpbiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGByYXRlbGltaXRgIHZpYSBgcmF0ZWxpbWl0X3N0YXRlX2luaXRgLCBhbmQgYHBlbmRpbmdfZHJvcHNgIGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2UgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLlxcblxcblRoZXJlIGFyZSBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBub3IgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8kt2c[1] Phase: Succeeded StartedAt: 2026-08-18 11:18:49 +0000 UTC FinishedAt: 2026-08-18 11:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 11:18:49 +0000 UTC FinishedAt: 2026-08-18 11:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2] Phase: Succeeded StartedAt: 2026-08-18 11:18:49 +0000 UTC FinishedAt: 2026-08-18 15:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 11:18:49 +0000 UTC FinishedAt: 2026-08-18 15:00:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 11:18:49 +0000 UTC FinishedAt: 2026-08-18 11:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 11:18:49 +0000 UTC FinishedAt: 2026-08-18 11:18:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow8kt2c/series-workflow8kt2c-convert-artifact-54457700/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 11:18:59 +0000 UTC FinishedAt: 2026-08-18 11:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 11:18:59 +0000 UTC FinishedAt: 2026-08-18 11:35:15 +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:*73d0da32-1971-4e8a-b9f5-69eb3fb59492,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-workflow8kt2c/series-workflow8kt2c-convert-artifact-54457700/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": "6af5c053-6d47-4651-a50f-5ab54fdbde11", "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-workflow8kt2c/series-workflow8kt2c-build-action-778737058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 11:18:59 +0000 UTC FinishedAt: 2026-08-18 11:35:05 +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:*73d0da32-1971-4e8a-b9f5-69eb3fb59492,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-workflow8kt2c/series-workflow8kt2c-convert-artifact-54457700/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": "6af5c053-6d47-4651-a50f-5ab54fdbde11", "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-workflow8kt2c/series-workflow8kt2c-build-action-778737058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 11:35:15 +0000 UTC FinishedAt: 2026-08-18 11:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 11:35:15 +0000 UTC FinishedAt: 2026-08-18 11:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 11:35:15 +0000 UTC FinishedAt: 2026-08-18 11:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 11:35:15 +0000 UTC FinishedAt: 2026-08-18 11:35:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow8kt2c/series-workflow8kt2c-convert-artifact-2776395875/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 11:35:25 +0000 UTC FinishedAt: 2026-08-18 11:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 11:35:25 +0000 UTC FinishedAt: 2026-08-18 11:37:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6af5c053-6d47-4651-a50f-5ab54fdbde11,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-workflow8kt2c/series-workflow8kt2c-build-action-778737058/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-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 11:37:48 +0000 UTC FinishedAt: 2026-08-18 11:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 11:37:48 +0000 UTC FinishedAt: 2026-08-18 11:37:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 11:37:48 +0000 UTC FinishedAt: 2026-08-18 11:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 11:37:48 +0000 UTC FinishedAt: 2026-08-18 11:56:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*73d0da32-1971-4e8a-b9f5-69eb3fb59492,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-workflow8kt2c/series-workflow8kt2c-convert-artifact-2776395875/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": "c65a4991-9f64-4332-a6dd-1701aa21f31d", "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-workflow8kt2c/series-workflow8kt2c-build-action-865189143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 11:37:48 +0000 UTC FinishedAt: 2026-08-18 11:55:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*73d0da32-1971-4e8a-b9f5-69eb3fb59492,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-workflow8kt2c/series-workflow8kt2c-convert-artifact-2776395875/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": "c65a4991-9f64-4332-a6dd-1701aa21f31d", "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-workflow8kt2c/series-workflow8kt2c-build-action-865189143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 11:56:09 +0000 UTC FinishedAt: 2026-08-18 11:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 11:56:09 +0000 UTC FinishedAt: 2026-08-18 11:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 11:56:09 +0000 UTC FinishedAt: 2026-08-18 11:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 11:56:09 +0000 UTC FinishedAt: 2026-08-18 11:58:09 +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:*c65a4991-9f64-4332-a6dd-1701aa21f31d,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-workflow8kt2c/series-workflow8kt2c-build-action-865189143/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-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 11:58:19 +0000 UTC FinishedAt: 2026-08-18 15:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 11:58:19 +0000 UTC FinishedAt: 2026-08-18 15:00:09 +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":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"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:*6af5c053-6d47-4651-a50f-5ab54fdbde11,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c65a4991-9f64-4332-a6dd-1701aa21f31d,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-workflow8kt2c/series-workflow8kt2c-build-action-778737058/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-workflow8kt2c/series-workflow8kt2c-build-action-865189143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 11:58:19 +0000 UTC FinishedAt: 2026-08-18 11:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 11:58:19 +0000 UTC FinishedAt: 2026-08-18 11:58:24 +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":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"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-workflow8kt2c/series-workflow8kt2c-convert-artifact-1303748988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 11:58:19 +0000 UTC FinishedAt: 2026-08-18 11:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 11:58:19 +0000 UTC FinishedAt: 2026-08-18 11:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 11:58:19 +0000 UTC FinishedAt: 2026-08-18 11:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 11:58:29 +0000 UTC FinishedAt: 2026-08-18 15:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kt2c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ratelimit_interval_ms_store","ratelimit_burst_store","ratelimit_interval_ms_show","ratelimit_burst_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"db39ca53-4660-4aa8-91f3-ebe7684c0785","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 11:58:29 +0000 UTC FinishedAt: 2026-08-18 14:59:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6af5c053-6d47-4651-a50f-5ab54fdbde11,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c65a4991-9f64-4332-a6dd-1701aa21f31d,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-workflow8kt2c/series-workflow8kt2c-build-action-778737058/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-workflow8kt2c/series-workflow8kt2c-build-action-865189143/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-workflow8kt2c/series-workflow8kt2c-convert-artifact-1303748988/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,}