Name: series-workflowqk9np Phase: Succeeded StartedAt: 2026-08-29 09:05:06 +0000 UTC FinishedAt: 2026-08-29 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[0] Phase: Succeeded StartedAt: 2026-08-29 09:05:06 +0000 UTC FinishedAt: 2026-08-29 09:09:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 09:05:06 +0000 UTC FinishedAt: 2026-08-29 09:09:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "SYSCTL" ], "series_id": "0701ee87-fe45-4126-814c-c6cffb2bd191" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "unix_sysctl_register" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzeXNjdGwgcGFyYW1ldGVyICYjMzk7bmV0LnVuaXgubWF4X2RncmFtX3FsZW4mIzM5OyBhbmQgdGhlIGZpZWxkICYjMzk7c3lzY3RsX21heF9kZ3JhbV9xbGVuJiMzOTsgaW4gc3RydWN0IG5ldG5zX3VuaXggZnJvbSAmIzM5O2ludCYjMzk7IHRvICYjMzk7dW5zaWduZWQgaW50JiMzOTssIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxuXG5UaGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCB0byAxMCBpbiB1bml4X25ldF9pbml0KCksIGFuZCByZWFkaW5nL3dyaXRpbmcgdGhyb3VnaCBwcm9jX2RvdWludHZlY19taW5tYXggb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhpcyBpbml0aWFsaXplZCB1bnNpZ25lZCBpbnRlZ2VyLiBUaGVyZSBhcmUgbm8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcnMsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGNoYW5nZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVU5JWCBzb2NrZXQgc3lzY3RsIHRhYmxlIHRvIHVzZSB1bnNpZ25lZCBpbnRlZ2VyIHNlbWFudGljcyBhbmQgcHJvY19kb3VpbnR2ZWNfbWlubWF4IGZvciBuZXQudW5peC5tYXhfZGdyYW1fcWxlbiBpbnN0ZWFkIG9mIHByb2NfZG9pbnR2ZWMuIFRoaXMgY2hhbmdlcyBzeXNjdGwgaW5wdXQgdmFsaWRhdGlvbiBhbmQgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBmNjM2YTAwZDU1YWRkMGZmYzJiMTBmNjZiYTVjYjIwNjdiYWQ1MWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwOTowNjo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZmUxY2E4NmYyODJmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtMzgxOCw4ICYjNDM7MzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOXG4gYGAvcHJvYy9zeXMvbmV0L3VuaXgvKmBgXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4tbWF4X2RncmFtX3FsZW4gLSBJTlRFR0VSXG4mIzQzO21heF9kZ3JhbV9xbGVuIC0gVU5TSUdORUQgSU5URUdFUlxuIFx0VGhlIG1heGltdW0gbGVuZ3RoIG9mIGRncmFtIHNvY2tldCByZWNlaXZlIHF1ZXVlXG4gXG4tXHREZWZhdWx0OiAxMFxuJiM0MztcdE5lZ2F0aXZlIHZhbHVlcyBhcmUgcmVqZWN0ZWQuXG4gXG4mIzQzO1x0RGVmYXVsdDogMTBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmggYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbmluZGV4IDk4NTlkMTM0ZDVhODkuLmUyMzNjNDI4MzI0M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuQEAgLTE1LDcgJiM0MzsxNSw3IEBAIHN0cnVjdCB1bml4X3RhYmxlIHtcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbiBzdHJ1Y3QgbmV0bnNfdW5peCB7XG4gXHRzdHJ1Y3QgdW5peF90YWJsZVx0dGFibGU7XG4tXHRpbnRcdFx0XHRzeXNjdGxfbWF4X2RncmFtX3FsZW47XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyXHQqY3RsO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTE3LDkgJiM0MzsxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21heF9kZ3JhbV9xbGVuXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG4tXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLVx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LFxuIFx0fSxcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVOSVggc29ja2V0IHN5c2N0bCB0YWJsZSB0byB1c2UgdW5zaWduZWQgaW50ZWdlciBzZW1hbnRpY3MgYW5kIHByb2NfZG91aW50dmVjX21pbm1heCBmb3IgbmV0LnVuaXgubWF4X2RncmFtX3FsZW4gaW5zdGVhZCBvZiBwcm9jX2RvaW50dmVjLiBUaGlzIGNoYW5nZXMgc3lzY3RsIGlucHV0IHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZjYzNmEwMGQ1NWFkZDBmZmMyYjEwZjY2YmE1Y2IyMDY3YmFkNTFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDk6MDY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CmluZGV4IDIwOGY0Njk2N2VlNTkuLjJmZTFjYTg2ZjI4MmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CkBAIC0zODE4LDggJiM0MzszODE4LDkgQEAgbDNtZGV2X2FjY2VwdCAtIEJPT0xFQU4KIGBgL3Byb2Mvc3lzL25ldC91bml4LypgYAogPT09PT09PT09PT09PT09PT09PT09PT09CiAKLW1heF9kZ3JhbV9xbGVuIC0gSU5URUdFUgomIzQzO21heF9kZ3JhbV9xbGVuIC0gVU5TSUdORUQgSU5URUdFUgogCVRoZSBtYXhpbXVtIGxlbmd0aCBvZiBkZ3JhbSBzb2NrZXQgcmVjZWl2ZSBxdWV1ZQogCi0JRGVmYXVsdDogMTAKJiM0MzsJTmVnYXRpdmUgdmFsdWVzIGFyZSByZWplY3RlZC4KIAomIzQzOwlEZWZhdWx0OiAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oCmluZGV4IDk4NTlkMTM0ZDVhODkuLmUyMzNjNDI4MzI0M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmgKQEAgLTE1LDcgJiM0MzsxNSw3IEBAIHN0cnVjdCB1bml4X3RhYmxlIHsKIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyOwogc3RydWN0IG5ldG5zX3VuaXggewogCXN0cnVjdCB1bml4X3RhYmxlCXRhYmxlOwotCWludAkJCXN5c2N0bF9tYXhfZGdyYW1fcWxlbjsKJiM0MzsJdW5zaWduZWQgaW50CQlzeXNjdGxfbWF4X2RncmFtX3FsZW47CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmN0bDsKIH07CiAKZGlmZiAtLWdpdCBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKQEAgLTE3LDkgJiM0MzsxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7bWF4X2RncmFtX3FsZW4mIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKJiM0MzsJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvdWludHZlY19taW5tYXgsCiAJfSwKIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb21taXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdXBkYXRpbmcgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBtYXhfZGdyYW1fcWxlbmAgaW4gdGhlIGBpcC1zeXNjdGwucnN0YCBmaWxlLiBUaGF0JiMzOTtzIGdvb2QsIGFsd2F5cyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgZG9jcyBpbiBzeW5jLiBUaGVuLCB0aGVyZSYjMzk7cyBhIGNoYW5nZSBpbiBgaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oYCB3aGVyZSB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgZnJvbSBhIHNpZ25lZCBgaW50YCB0byBhbiB1bnNpZ25lZCBgdW5zaWduZWQgaW50YC4gSW50ZXJlc3RpbmfigKYgVGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zLiBBbmQgZmluYWxseSwgaW4gYG5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jYCwgd2UmIzM5O3JlIGdldHRpbmcgYSBzaXplIGNoYW5nZSBmb3IgYG1heGxlbmAgYW5kIHVwZGF0aW5nIHRoZSBgcHJvY19oYW5kbGVyYCB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gUmlnaHQsIHRoaXMgcHJvYmFibHkgbWVhbnMgd2UmIzM5O3JlIGFsbG93aW5nIGZvciBsYXJnZXIgcXVldWUgbGVuZ3RocyBub3csIHVzaW5nIGEgbW9yZSByb2J1c3Qgc3lzY3RsIGhhbmRsZXIuCgpTbywgdGhlIGtleSBoZXJlIGlzIHRoYXQgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZSBjaGFuZ2UgdG8gaXRzIHR5cGUgYW5kIHRoZSBpbmNyZWFzZWQgbWF4IHZhbHVlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGp1c3QgcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCB0byBsb2NhdGUgYWxsIHRoZSByZWxldmFudCBvY2N1cnJlbmNlcyBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaXRzIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2N0bF9tYXhfZGdyYW1fcWxlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRucy91bml4Lmg9MTY9c3RydWN0IG5ldG5zX3VuaXgge1xuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oLTE3LVx0c3RydWN0IHVuaXhfdGFibGVcdHRhYmxlO1xuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oOjE4Olx0dW5zaWduZWQgaW50XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbmluY2x1ZGUvbmV0L25ldG5zL3VuaXguaC0xOS1cdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyXHQqY3RsO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0xMDk0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdW5peF9jcmVhdGUxKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4sIGludCB0eXBlKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMTIxLVx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2VcdD0gdW5peF93cml0ZV9zcGFjZTtcbm5ldC91bml4L2FmX3VuaXguYzoxMTIyOlx0c2stXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nXHQ9IFJFQURfT05DRShuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbik7XG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cdHNrLVx1MDAzZXNrX2Rlc3RydWN0XHRcdD0gdW5peF9zb2NrX2Rlc3RydWN0b3I7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4MTM9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODE2LVxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTc6XHRuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiA9IDEwO1xubmV0L3VuaXgvYWZfdW5peC5jLTM4MTgtXHRpZiAodW5peF9zeXNjdGxfcmVnaXN0ZXIobmV0KSlcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMTgtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDttYXhfZGdyYW1fcWxlblwmIzM0Oyxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjE5Olx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0yMC1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxuLS1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMzMtXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozNDpcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3lzY3RsIERlZmluaXRpb24gQ2hhbmdlIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgY2hhbmdlcyB0aGUgc3lzY3RsIGRlZmluaXRpb24gZm9yIGBuZXQudW5peC5tYXhfZGdyYW1fcWxlbmAuIEl0JiMzOTtzIG1vdmluZyBmcm9tIHVzaW5nIGBwcm9jX2RvaW50dmVjYCB3aXRoIGFuIGBpbnRgIHRvIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHdpdGggYW4gYHVuc2lnbmVkIGludGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgc3BlbmQgdGltZSBmdXp6aW5nIG9yIGlmIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBtaW5vciwgcG90ZW50aWFsbHkgaW5zaWduaWZpY2FudCwgbW9kaWZpY2F0aW9uLgoKV2FpdCBhIG1vbWVudCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgZmlyc3QuIExldCYjMzk7cyBtYWtlIHN1cmU6ICpvbmx5KiBjaGFuZ2VzIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBjb3NtZXRpYyBsb2dnaW5nIGNoYW5nZXMsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY29uc3RhbnQgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIChyZXF1aXJpbmcgc3BlY2lhbCBoYXJkd2FyZSkgc2hvdWxkIGJlIGZsYWdnZWQgYXMgbm90IHdvcnRoIGZ1enppbmcuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgZHVyaW5nIHVucGx1Zy91bmJpbmQgYXJlIGFsc28gbm90IHdvcnRoIGZ1enppbmcuIEFscmlnaHQsIHRoYXQmIzM5O3MgdGhlIHNjb3BlLgoKT2theSwgYmFjayB0byB0aGUgY2hhbmdlLiBUaGlzICppcyogYSBjaGFuZ2UgdG8gdGhlIHN5c2N0bCB0YWJsZSwgbm90IGp1c3QgYSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnQgdXBkYXRlLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNoYW5nZSBpbiB0aGUgKnR5cGUqIG9mIHRoZSBzeXNjdGwgaGFuZGxlcjogdXNpbmcgYHByb2NfZG91aW50dmVjX21pbm1heGAgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN5c2N0bC4gU3BlY2lmaWNhbGx5LCBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCB3aWxsIG5vdyB2YWxpZGF0ZSB2YWx1ZXMsIHJlamVjdGluZyBhbmQgY2xhbXBpbmcgbmVnYXRpdmUgdmFsdWVzLiBQcmV2aW91c2x5LCBzeXNjdGwgd3JpdGVycyBjb3VsZCBoYXZlIHNldCBuZWdhdGl2ZSB2YWx1ZXMhCgpTbywgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgdGhpcyBjb25zdGl0dXRlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBJdCAqY291bGQqIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYmVjYXVzZSB0aGUgc3lzY3RsIHRhYmxlIHdpbGwgYmUgbW9kaWZpZWQuCgpJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHRoaXMuIFdlJiMzOTtyZSBub3QgbmVjZXNzYXJpbHkgZnV6emluZyAqc3lzY3RsKiBpdHNlbGYsIHJpZ2h0PyBXZSYjMzk7cmUgcG90ZW50aWFsbHkgZnV6emluZyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBwcm9jZXNzLiBXaGF0IGZ1bmN0aW9ucyB3b3VsZCBiZSBhZmZlY3RlZCBhbmQgdGhlcmVmb3JlIGZ1enplZD8gV291bGQgaXQgYmUgc29tZXRoaW5nIGxpa2UgdGhlIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgb3IgYHVuaXhfY3JlYXRlMWAgZnVuY3Rpb25zPwoKTGV0IG1lIGp1c3QgcmUtcmVhZCB0aGUgd29ydGggZnV6emluZyBjcml0ZXJpYSBvbmNlIG1vcmU6IGFueSBjb3JlIGxvZ2ljLCBkcml2ZXJzIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFyZSB3b3J0aCBmdXp6aW5nLgoKQWxyaWdodCwgd2hhdCBleGFjdGx5IGRpZCB0aGlzIHBhdGNoIG1vZGlmeT8gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc3lzdGVtPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBORVQ0Olx0U3lzY3RsIGludGVyZmFjZSB0byBuZXQgYWZfdW5peCBzdWJzeXN0ZW0uXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBBdXRob3JzOlx0TWlrZSBTaGF2ZXIuXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9hZl91bml4LmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG4gIDEzOlx0XG4gIDE0Olx0I2luY2x1ZGUgXCYjMzQ7YWZfdW5peC5oXCYjMzQ7XG4gIDE1Olx0XG4gIDE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuICAxNzpcdFx0e1xuICAxODpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bWF4X2RncmFtX3FsZW5cJiMzNDssXG4gIDE5Olx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbixcbiAgMjA6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxuICAyMTpcdFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gIDIyOlx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LFxuICAyMzpcdFx0fSxcbiAgMjQ6XHR9O1xuICAyNTpcdFxuICAyNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4gIDI3Olx0e1xuICAyODpcdFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gIDI5Olx0XG4gIDMwOlx0XHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiAgMzE6XHRcdGlmICghdGFibGUpXG4gIDMyOlx0XHRcdHJldHVybiBOVUxMO1xuICAzMzpcdFxuICAzNDpcdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuICAzNTpcdFxuICAzNjpcdFx0cmV0dXJuIHRhYmxlO1xuICAzNzpcdH1cbiAgMzg6XHRcbiAgMzk6XHRpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4gIDQwOlx0e1xuICA0MTpcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gIDQ0Olx0XHRcdHRhYmxlID0gdW5peF90YWJsZTtcbiAgNDU6XHRcdH0gZWxzZSB7XG4gIDQ2Olx0XHRcdHRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTtcbiAgNDc6XHRcdFx0aWYgKCF0YWJsZSlcbiAgNDg6XHRcdFx0XHRnb3RvIGVycl9hbGxvYztcbiAgNDk6XHRcdH1cbiAgNTA6XHRcbiAgNTE6XHRcdG5ldC1cdTAwM2V1bnguY3RsID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC91bml4XCYjMzQ7LCB0YWJsZSxcbiAgNTI6XHRcdFx0XHRcdFx0ICAgICAgQVJSQVlfU0laRSh1bml4X3RhYmxlKSk7XG4gIDUzOlx0XHRpZiAobmV0LVx1MDAzZXVueC5jdGwgPT0gTlVMTClcbiAgNTQ6XHRcdFx0Z290byBlcnJfcmVnO1xuICA1NTpcdFxuICA1NjpcdFx0cmV0dXJuIDA7XG4gIDU3Olx0XG4gIDU4Olx0ZXJyX3JlZzpcbiAgNTk6XHRcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuICA2MDpcdFx0XHRrZnJlZSh0YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6ICYjMzQ7V2hhdCBoYXBwZW5zIHdoZW4gd2Ugd3JpdGUgdG8gYG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuYD8mIzM0OyBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGNoYW5naW5nIGhvdyB0aGlzIHN5c2N0bCBpcyBoYW5kbGVkLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBwcm9jX2RvaW50dmVjYCB3aXRoIGFuIGBpbnRgLCBidXQgbm93IGl0JiMzOTtzIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHdpdGggYW4gYHVuc2lnbmVkIGludGAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaWYgdGhpcyBjaGFuZ2UganVzdGlmaWVzIGZ1cnRoZXIgZnV6emluZyBlZmZvcnRzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBDYW4gc3l6a2FsbGVyIGFjdHVhbGx5IHdyaXRlIHRvIGAvcHJvYy9zeXMvbmV0L3VuaXgvbWF4X2RncmFtX3FsZW5gIGFuZCBjcmVhdGUgVU5JWCBzb2NrZXRzPyBZZXMsIEkga25vdyBzeXNjdGwgd3JpdGVzIGFyZSBhIGNvbW1vbiB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBVTklYIHNvY2tldCBjcmVhdGlvbiBsaWtlbHkgKnJlYWRzKiB0aGF0IHN5c2N0bCB2YWx1ZS4gQnV0IGlzIHRoaXMgYSBtaW5vciBpbnB1dCB2YWxpZGF0aW9uIHR3ZWFrPwoKSG9sZCBvbi4gTGV0IG1lIGNvbnN1bHQgdGhlIGV4cGxpY2l0IGluc3RydWN0aW9ucyBoZXJlLCBiZWNhdXNlIEkgcmVjYWxsIGEgbmVnYXRpdmUgbGlzdC4gVGhlIHByb21wdCBnaXZlcyBtZSBhIHByZWNpc2Ugc2V0IG9mIGNyaXRlcmlhLgoKVGhlIHByb21wdCBlc3NlbnRpYWxseSB0ZWxscyBtZSAmIzM0O2RvbiYjMzk7dCBib3RoZXIgZnV6emluZyYjMzQ7IGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGRvY3VtZW50YXRpb24sIEtjb25maWcgY2hhbmdlcywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIEFsc28sIGl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIFBDSWUvU21hcnROSUMvR1BVIGRyaXZlcnMgYW5kIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MuIEkmIzM5O20gcmVhbGx5IGdsYWQgZm9yIHRoaXMgbmVnYXRpdmUgbGlzdCwgYmVjYXVzZSBpdCBxdWlja2x5IGhlbHBzIGV2YWx1YXRlIGEgY2hhbmdlLgoKVGhlIHBvc2l0aXZlIGNyaXRlcmlhOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKCkFscmlnaHQsIGxldCYjMzk7cyBhcHBseSB0aGUgcHJvbXB0IHRvIHRoZSBjdXJyZW50IHBhdGNoLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBBRl9VTklYIHN5c2N0bCBoYW5kbGVyIGluIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AgYW5kIGBpbmNsdWRlL25ldC9uZXRucy91bml4LmhgLiBJdCBpbnZvbHZlcyBhIGRhdGEgdHlwZSBjaGFuZ2UgZnJvbSBgaW50YCB0byBgdW5zaWduZWQgaW50YCwgYW5kIHRoZSBwcm9jIGhhbmRsZXIgY2hhbmdlcyBmcm9tIGBwcm9jX2RvaW50dmVjYCB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gVGhpcyBpcyBpbnNpZGUgdGhlIGNvcmUgVU5JWCBzb2NrZXQgc3Vic3lzdGVtLiBJdCYjMzk7cyBmdWxseSBhY2Nlc3NpYmxlLCByZWFjaGFibGUsIGFuZCB0ZXN0YWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBLY29uZmlnIHRvIG1ha2Ugc3VyZSBBRl9VTklYIGlzIGVuYWJsZWQgYnV0LCBiYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhpcyBjaGFuZ2UgbG9va3MgbGlrZSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNy1cdG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XG5uZXQvdW5peC9hZl91bml4LmM6MzgxODpcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTktXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC91bml4L2FmX3VuaXguaD0zNz1sb25nIHVuaXhfb3V0cV9sZW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmgtNDAtI2lmZGVmIENPTkZJR19TWVNDVExcbm5ldC91bml4L2FmX3VuaXguaDo0MTppbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaC00Mi12b2lkIHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaC00My0jZWxzZVxubmV0L3VuaXgvYWZfdW5peC5oOjQ0OnN0YXRpYyBpbmxpbmUgaW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L2FmX3VuaXguaC00NS17XG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM5OmludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBVbml4IERvbWFpbiBTb2NrZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVuaXggZG9tYWluIHNvY2tldHMgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC91bml4L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzLiBUaGVuLCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgYXNwZWN0cywgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBuZXQvdW5peC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHNob3VsZCBmaW5kIGFsbCB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgdGhlIFVuaXggZG9tYWluIHNvY2tldCBmdW5jdGlvbmFsaXR5LiBIb3BlZnVsbHksIHRoZXNlIHR3byBmaWxlcywgd29ya2luZyBpbiB0YW5kZW0sIHdpbGwgcHJvdmlkZSB0aGUgY29tcGxldGUgcGljdHVyZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaXMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2N0bF9uZXRfdW5peCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L01ha2VmaWxlPTg9dW5peC15XHRcdFx0Oj0gYWZfdW5peC5vIGdhcmJhZ2Uub1xubmV0L3VuaXgvTWFrZWZpbGU6OTp1bml4LSQoQ09ORklHX1NZU0NUTClcdCYjNDM7PSBzeXNjdGxfbmV0X3VuaXgub1xubmV0L3VuaXgvTWFrZWZpbGUtMTAtdW5peC0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVuaXhfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyOQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgVU5JWCBEb21haW4gU29ja2V0cyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVOSVggZG9tYWluIHNvY2tldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBhcmUgYG5ldC91bml4L0tjb25maWdgIGFuZCBgbmV0L0tjb25maWdgLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIHVuZGVyIG9uZSBvZiB0aG9zZSwgYWx0aG91Z2ggdGhlIG9yZ2FuaXphdGlvbmFsIHN0cnVjdHVyZSBjYW4gYmUgYSBiaXTigKYgaWRpb3N5bmNyYXRpYyBhdCB0aW1lcy4gTXkgZ3V0IHNheXMgaXQmIzM5O2xsIGJlIGluIGBuZXQvdW5peC9LY29uZmlnYCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgVU5JWCBzb2NrZXRzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYm90aCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IHJlbGV2YW50IGNyb3NzLXJlZmVyZW5jaW5nIG9yIGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBjb25maWcgaGFzIHRvIHNheS4gTm8gcG9pbnQgaW4gbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhdCB0aGlzIHBvaW50LCBiZXN0IHRvIHZlcmlmeSBteSBtZW50YWwgbW9kZWwgYWdhaW5zdCB0aGUgYWN0dWFsIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVOSVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTE0OD1jb25maWcgU09MQVJJU19YODZfUEFSVElUSU9OXG4tLVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE1Ny1cbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzoxNTg6Y29uZmlnIFVOSVhXQVJFX0RJU0tMQUJFTFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE1OS1cdGJvb2wgXCYjMzQ7VW5peHdhcmUgc2xpY2VzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnPTc4PWNvbmZpZyBWVF9IV19DT05TT0xFX0JJTkRJTkdcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnLTkzLVxuZHJpdmVycy90dHkvS2NvbmZpZzo5NDpjb25maWcgVU5JWDk4X1BUWVNcbmRyaXZlcnMvdHR5L0tjb25maWctOTUtXHRib29sIFwmIzM0O1VuaXg5OCBQVFkgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvdW5peC9LY29uZmlnLTUtXG5uZXQvdW5peC9LY29uZmlnOjY6Y29uZmlnIFVOSVhcbm5ldC91bml4L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VW5peCBkb21haW4gc29ja2V0c1wmIzM0O1xuLS1cbm5ldC91bml4L0tjb25maWc9MTk9Y29uZmlnXHRBRl9VTklYX09PQlxuLS1cbm5ldC91bml4L0tjb25maWctMjUtXG5uZXQvdW5peC9LY29uZmlnOjI2OmNvbmZpZyBVTklYX0RJQUdcbm5ldC91bml4L0tjb25maWctMjctXHR0cmlzdGF0ZSBcJiMzNDtVTklYOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLY29uZmlnIGZvciBhIENvbXByZWhlbnNpdmUgVmlldyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBjb21wcmVoZW5zaXZlIGluZm9ybWF0aW9uIGlzIHRoZSBgbmV0L3VuaXgvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgaGVhZCBzdHJhaWdodCB0aGVyZSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBwb3NzaWJsZSwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBzdHJ1Y3R1cmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLiBJIHdhbnQgdG8gc2VlIGV2ZXJ5dGhpbmcgYXQgb25jZSwgbm90IGp1c3Qgc25pcHBldHMuIFRoYXQgS2NvbmZpZyBmaWxlIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBhdmFpbGFibGUgYnVpbGQtdGltZSBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVW5peCBEb21haW4gU29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgVU5JWFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtVbml4IGRvbWFpbiBzb2NrZXRzXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XG4gIDEwOlx0XHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxuICAxMTpcdFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXG4gIDEyOlx0XHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcbiAgMTM6XHRcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxuICAxNDpcdFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxuICAxNTpcdFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnXHRBRl9VTklYX09PQlxuICAyMDpcdFx0Ym9vbCBcJiMzNDtVTklYOiBvdXQtb2YtYm91bmQgbWVzc2FnZXNcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVU5JWFxuICAyMjpcdFx0ZGVmYXVsdCB5XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgVU5JWF9ESUFHXG4gIDI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVTklYOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMjg6XHRcdGRlcGVuZHMgb24gVU5JWFxuICAyOTpcdFx0ZGVmYXVsdCBuXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFN1cHBvcnQgZm9yIFVOSVggc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MzkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVU5JWCBhbmQgU1lTQ1RMIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFVOSVggYW5kIFNZU0NUTCBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGVzZSBzZXR0aW5ncy4gTG9va3MgbGlrZSBgVU5JWGAgYW5kIGBTWVNDVExgIGFyZSB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVnaXN0ZXJzIHRoZXNlIHNldHRpbmdzLiBMZXQgbWUgY2hlY2sgZm9yIHJlbGV2YW50ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIGVzc2VudGlhbGx5LCB0aGUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgZGVmaW5pbmcgdGhpcyBjb25maWd1cmF0aW9uLgoKSG1tLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIHNlZW1zIHByb21pc2luZy4gV2FpdCwgaXQmIzM5O3Mgbm90IHN0YXRpYz8gSW50ZXJlc3RpbmcuIGBpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzeXNjdGwgZW50cmllcyBhcmUgYWN0dWFsbHkgYWNjZXNzZWQuIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHRocm91Z2ggcHJvY2ZzIHN5c2N0bCBoYW5kbGVycy4gSSYjMzk7bSByZW1lbWJlcmluZyB0aGlzIGZyb20gZXhwZXJpZW5jZSwgc2luY2UgSSBvZnRlbiB3b3JrIHdpdGggcHJvY2ZzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBzb21ldGhpbmcgbGlrZSBgL3Byb2Mvc3lzL25ldC91bml4L21heF9kZ3JhbV9xbGVuYCBpcyBoYW5kbGVkLiBSaWdodCwgd3JpdGVzIGFuZCByZWFkcyB0byB0aGF0IGZpbGUgdHJpZ2dlciBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gSXQgYXBwZWFycyB0aGF0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoaXMgc3lzY3RsIGVudHJ5LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gY29uZmlybWF0aW9uIHRoYXQgaXQgcmVnaXN0ZXJzIHRoZSBzeXNjdGwgZW50cnkuIEkgY2FuIHNlZSB0aGF0IGB1bml4X2NyZWF0ZTFgIHJlYWRzIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gLiBJIG5lZWQgdG8gYmUgY2VydGFpbi4KCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCAmIzM0O0ZvY3VzU3ltYm9sJiMzNDsg4oCTIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBgbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNgLiBHb29kLCB0aGF0IG1ha2VzIGl0IGVhc3kgdG8gdHJhY2UuIEkmIzM5O20gY29uZmlybWluZyB0aGF0JiMzOTtzIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IG90aGVyIHBhcnRzLiBJcyBgdW5peF9jcmVhdGUxYCBzdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bml4X2NyZWF0ZTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9MTA4Mz1zdHJ1Y3QgcHJvdG8gdW5peF9zdHJlYW1fcHJvdG8gPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwOTMtXG5uZXQvdW5peC9hZl91bml4LmM6MTA5NDpzdGF0aWMgc3RydWN0IHNvY2sgKnVuaXhfY3JlYXRlMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuLCBpbnQgdHlwZSlcbm5ldC91bml4L2FmX3VuaXguYy0xMDk1LXtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MTE0OT1zdGF0aWMgaW50IHVuaXhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMTc5LVxubmV0L3VuaXgvYWZfdW5peC5jOjExODA6XHRzayA9IHVuaXhfY3JlYXRlMShuZXQsIHNvY2ssIGtlcm4sIHNvY2stXHUwMDNldHlwZSk7XG5uZXQvdW5peC9hZl91bml4LmMtMTE4MS1cdGlmIChJU19FUlIoc2spKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYz0xNjM0PXN0YXRpYyBpbnQgdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTE2NjctXHQvKiBjcmVhdGUgbmV3IHNvY2sgZm9yIGNvbXBsZXRlIGNvbm5lY3Rpb24gKi9cbm5ldC91bml4L2FmX3VuaXguYzoxNjY4Olx0bmV3c2sgPSB1bml4X2NyZWF0ZTEobmV0LCBOVUxMLCAwLCBzb2NrLVx1MDAzZXR5cGUpO1xubmV0L3VuaXgvYWZfdW5peC5jLTE2NjktXHRpZiAoSVNfRVJSKG5ld3NrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSBjb250ZXh0IG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFsczoKCioqRGl2aW5nIGludG8gc3lzY3RsIFJlZ2lzdHJhdGlvbiBhbmQgRGVyZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgYW5kIGB1bml4X3N5c2N0bF91bnJlZ2lzdGVyYC4gVGhlc2UgYXJlICpjcnVjaWFsKiBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoYXQgYC9wcm9jL3N5c2AgaW50ZXJmYWNlLCB0aGUgZ2F0ZXdheSB0byBrZXJuZWwgdHVuYWJsZXMgYW5kIHN5c3RlbSBzdGF0ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MsIGVzcGVjaWFsbHkgaW4gdGhlIFVuaXggY29udGV4dC4gVGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBnb3QgaXRzIG51YW5jZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGEgcHJvcGVyIGFuZCBjbGVhbiBoYW5kbGluZyBvZiB0aGUgY29udHJvbCBub2RlIGxpZmVjeWNsZS4KCmB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgdGhlIGtleS4gSSBiZXQgaXQgaGFuZGxlcyBhbGwgdGhlIGhlYXZ5IGxpZnRpbmcg4oCTIGFsbG9jYXRpb24gb2YgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMsIHNldHRpbmcgdXAgdGhlIGxpbmthZ2UgdG8gdGhlIHN5c2N0bCB0cmVlLCBhbmQgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgKHdobyBjYW4gcmVhZC93cml0ZSB3aGF0KSBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgc2VjdXJpdHkgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaG93IGl0IGhhbmRsZXMgY29uZmxpY3RzIGlmIHNvbWVvbmUgdHJpZXMgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgbmFtZSB0d2ljZTsgYSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aCBpcyBjcml0aWNhbCBoZXJlLiBBbmQgd2hhdCBhYm91dCBpbmhlcml0YW5jZT8gSWYgSSYjMzk7bSByZWdpc3RlcmluZyBhIG5vZGUgdW5kZXIgYW4gZXhpc3RpbmcgYnJhbmNoLCBob3cgZG9lcyBpdCBtYW5hZ2UgaW5oZXJpdGluZyBwcm9wZXJ0aWVzIGZyb20gdGhlIHBhcmVudD8gVGhpcyBpcyBhbGwgYWJvdXQgY29uc3RydWN0aW5nIHRoZSBoaWVyYXJjaHkgY29ycmVjdGx5LgoKQ29udmVyc2VseSwgYHVuaXhfc3lzY3RsX3VucmVnaXN0ZXJgIG11c3QgbWV0aWN1bG91c2x5IGRpc21hbnRsZSB0aGUgZW50cmllcy4gTWVtb3J5IGxlYWtzIGluIHRoaXMgYXJlYSBhcmUgKnVuYWNjZXB0YWJsZSouIFdlIG5lZWQgdG8gcmVsZWFzZSBhbGwgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzLCBzZXZlciB0aGUgbGlua3MgaW4gdGhlIHN5c2N0bCB0cmVlLCBhbmQgaGFuZGxlIGFueSByYWNlIGNvbmRpdGlvbnMgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgY29udHJvbCBub2RlLiBQcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjYXJlZnVsIHVzZSBvZiBtdXRleGVzLCB3aWxsIGJlIHZpdGFsIHRvIG1ha2luZyB0aGlzIHByb2Nlc3Mgcm9idXN0LiBJIG5lZWQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGZyZWVpbmcgYSBub2RlIHdpdGggYWN0aXZlIGNoaWxkcmVuLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyBpbiBib3RoIGZ1bmN0aW9ucy4gV2hhdCBoYXBwZW5zIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBXaGF0IGFib3V0IGludmFsaWQgYXJndW1lbnRzIG9yIGF0dGVtcHRzIHRvIGRlcmVnaXN0ZXIgc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IHJlZ2lzdGVyZWQ/IEkmIzM5O20gaG9waW5nIHRvIHNlZSB3ZWxsLWRlZmluZWQgZXJyb3IgY29kZXMgYW5kIHBlcmhhcHMgc29tZSBpbmZvcm1hdGl2ZSBsb2dnaW5nLiBUaGUgc3lzdGVtIGhhcyB0byBiZSBmYXVsdC10b2xlcmFudCB3aGVuIG90aGVyIHByb2dyYW1zIHVzZSBpdC4KCkluIGVzc2VuY2UsIHVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIHVuZGVyc3RhbmRpbmcgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgVW5peCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTWFraW5nIGNoYW5nZXMgdG8gYHN5c2N0bGAgaXMgYW4gZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFiaWxpdHksIHNvIHRoZXkgKm11c3QqIGJlIGRvbmUgY29ycmVjdGx5LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc3lzY3RsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNy1cdG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XG5uZXQvdW5peC9hZl91bml4LmM6MzgxODpcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTktXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODUwLSNlbmRpZlxubmV0L3VuaXgvYWZfdW5peC5jOjM4NTE6XHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XG5uZXQvdW5peC9hZl91bml4LmMtMzg1Mi1vdXQ6XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4NTY9c3RhdGljIHZvaWQgX19uZXRfZXhpdCB1bml4X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzg1OS1cdGt2ZnJlZShuZXQtXHUwMDNldW54LnRhYmxlLmxvY2tzKTtcbm5ldC91bml4L2FmX3VuaXguYzozODYwOlx0dW5peF9zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xubmV0L3VuaXgvYWZfdW5peC5jLTM4NjEtXHRyZW1vdmVfcHJvY19lbnRyeShcJiMzNDt1bml4XCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXQpO1xuLS1cbm5ldC91bml4L2FmX3VuaXguaD0zNz1sb25nIHVuaXhfb3V0cV9sZW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmgtNDAtI2lmZGVmIENPTkZJR19TWVNDVExcbm5ldC91bml4L2FmX3VuaXguaDo0MTppbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaDo0Mjp2b2lkIHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaC00My0jZWxzZVxubmV0L3VuaXgvYWZfdW5peC5oOjQ0OnN0YXRpYyBpbmxpbmUgaW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L2FmX3VuaXguaC00NS17XG4tLVxubmV0L3VuaXgvYWZfdW5peC5oLTQ4LVxubmV0L3VuaXgvYWZfdW5peC5oOjQ5OnN0YXRpYyBpbmxpbmUgdm9pZCB1bml4X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L2FmX3VuaXguaC01MC17XG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM5OmludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTQwLXtcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy02NC1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjY1OnZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy02Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg0CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBLZXJuZWwgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCBmdW5jdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHNvbWV0aGluZyB3ZSYjMzk7cmUgYWN0dWFsbHkgdXNpbmc/IFJpZ2h0LCBpdCYjMzk7cyBhIHN0YW5kYXJkIHN5c2N0bCBoYW5kbGVyLCBwYXJ0IG9mIGBrZXJuZWwvc3lzY3RsLmNgLiBBbmQgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBpcyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBwdXR0aW5nIHRoaXMgc3lzY3RsIHRhYmxlIGludG8gcGxhY2UuIEdvb2QsIHRoYXQgY29uZmlybXMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCByZWxldmFuY2UuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIHRpY2tlZCBhbGwgdGhlIGJveGVzLiBPa2F5LCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpbmNsdWRlcyBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCB3aGljaCBsb29rcyBwcm9taXNpbmcuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgcmVxdWlyZXMgYFVOSVhgIGFuZCBgU1lTQ1RMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIEFGX1VOSVggc29ja2V0IGNvbnRleHQuCgpUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHNvbGlkOiBhIGNyaXRpY2FsIGNoYW5nZSBpbiBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCDigJMgc2hpZnRpbmcgZnJvbSBhIHNpZ25lZCBgaW50YCB0byBhbiB1bnNpZ25lZCBgaW50YCwgYW5kIG1vdmluZyB0aGUgaGFuZGxlciB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gSXQmIzM5O3MgYSBjbGVhciBtb2RpZmljYXRpb24gdG8gdGhlIEFGX1VOSVggc29ja2V0IHN5c2N0bCBpbnRlcmZhY2UsIGVmZmVjdGl2ZWx5IHJlamVjdGluZyBuZWdhdGl2ZSB2YWx1ZXMuIEFuZCB0aGUgYmlnIHBsdXMgaXMgdGhhdCBpdCBpcyByZWFjaGFibGUgdmlhIFFFTVUvR0NFLCBzbyBpdHMgZXhwb3N1cmUgaXMgaGlnaC4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aG9yb3VnaCBleGFtaW5hdGlvbi4KCkFscmlnaHQsIGxldCYjMzk7cyBsb2cgdGhpcyB3aXRoIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVTklYIHNvY2tldCBzeXNjdGwgdGFibGUgdG8gdXNlIHVuc2lnbmVkIGludGVnZXIgc2VtYW50aWNzIGFuZCBwcm9jX2RvdWludHZlY19taW5tYXggZm9yIG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuIGluc3RlYWQgb2YgcHJvY19kb2ludHZlYy4gVGhpcyBjaGFuZ2VzIHN5c2N0bCBpbnB1dCB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVTklYIHNvY2tldCBzeXNjdGwgdGFibGUgdG8gdXNlIHVuc2lnbmVkIGludGVnZXIgc2VtYW50aWNzIGFuZCBwcm9jX2RvdWludHZlY19taW5tYXggZm9yIG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuIGluc3RlYWQgb2YgcHJvY19kb2ludHZlYy4gVGhpcyBjaGFuZ2VzIHN5c2N0bCBpbnB1dCB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgc3lzY3RsIHBhcmFtZXRlciAmIzM5O25ldC51bml4Lm1heF9kZ3JhbV9xbGVuJiMzOTsgYW5kIHRoZSBmaWVsZCAmIzM5O3N5c2N0bF9tYXhfZGdyYW1fcWxlbiYjMzk7IGluIHN0cnVjdCBuZXRuc191bml4IGZyb20gJiMzOTtpbnQmIzM5OyB0byAmIzM5O3Vuc2lnbmVkIGludCYjMzk7LCBzd2l0Y2hpbmcgdGhlIHByb2MgaGFuZGxlciBmcm9tIHByb2NfZG9pbnR2ZWMgdG8gcHJvY19kb3VpbnR2ZWNfbWlubWF4LiBcblxuVGhlIHZhcmlhYmxlIGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gMTAgaW4gdW5peF9uZXRfaW5pdCgpLCBhbmQgcmVhZGluZy93cml0aW5nIHRocm91Z2ggcHJvY19kb3VpbnR2ZWNfbWlubWF4IG9wZXJhdGVzIGRpcmVjdGx5IG9uIHRoaXMgaW5pdGlhbGl6ZWQgdW5zaWduZWQgaW50ZWdlci4gVGhlcmUgYXJlIG5vIG5ld2x5IGFsbG9jYXRlZCBidWZmZXJzLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjaGFuZ2VzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGY2MzZhMDBkNTVhZGQwZmZjMmIxMGY2NmJhNWNiMjA2N2JhZDUxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDA5OjA2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li4yZmUxY2E4NmYyODJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtMzgxOCw4ICYjNDM7MzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOCiBgYC9wcm9jL3N5cy9uZXQvdW5peC8qYGAKID09PT09PT09PT09PT09PT09PT09PT09PQogCi1tYXhfZGdyYW1fcWxlbiAtIElOVEVHRVIKJiM0MzttYXhfZGdyYW1fcWxlbiAtIFVOU0lHTkVEIElOVEVHRVIKIAlUaGUgbWF4aW11bSBsZW5ndGggb2YgZGdyYW0gc29ja2V0IHJlY2VpdmUgcXVldWUKIAotCURlZmF1bHQ6IDEwCiYjNDM7CU5lZ2F0aXZlIHZhbHVlcyBhcmUgcmVqZWN0ZWQuCiAKJiM0MzsJRGVmYXVsdDogMTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaCBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaAppbmRleCA5ODU5ZDEzNGQ1YTg5Li5lMjMzYzQyODMyNDNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oCkBAIC0xNSw3ICYjNDM7MTUsNyBAQCBzdHJ1Y3QgdW5peF90YWJsZSB7CiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjsKIHN0cnVjdCBuZXRuc191bml4IHsKIAlzdHJ1Y3QgdW5peF90YWJsZQl0YWJsZTsKLQlpbnQJCQlzeXNjdGxfbWF4X2RncmFtX3FsZW47CiYjNDM7CXVuc2lnbmVkIGludAkJc3lzY3RsX21heF9kZ3JhbV9xbGVuOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSpjdGw7CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCmluZGV4IDQ3NjYwZDU3MjZiYmQuLjhmNmYwNjU3NDk1YWEgMTAwNjQ0Ci0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCkBAIC0xNyw5ICYjNDM7MTcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O21heF9kZ3JhbV9xbGVuJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCiYjNDM7CQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LAogCX0sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBzaG91bGQgd2UgZXZlbiBjb25zaWRlciBLTVNBTiBmdXp6aW5nIGZvciB0aGlzIGNoYW5nZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBmaXJzdCwgb2YgY291cnNlLgoKUmlnaHQsIHNvIHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgaW4gYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0YCwgYGluY2x1ZGUvbmV0L25ldG5zL3VuaXguaGAsIGFuZCBgbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNgLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtyZSBzaGlmdGluZyBgbWF4X2RncmFtX3FsZW5gIGZyb20gYW4gYElOVEVHRVJgIHRvIGFuIGBVTlNJR05FRCBJTlRFR0VSYCwgd2l0aCBzb21lIGRvY3VtZW50YXRpb24gYWRkZWQgdGhhdCBjbGFyaWZpZXMgd2UmIzM5O3JlIHJlamVjdGluZyBuZWdhdGl2ZSB2YWx1ZXMuIFRoZSByZWxhdGVkIHN0cnVjdCBkZWZpbml0aW9ucyBpbiBgdW5peC5oYCBhcmUgYWxzbyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgZnJvbSBgaW50YCB0byBgdW5zaWduZWQgaW50YC4gVGhlIGNvcnJlc3BvbmRpbmcgYHN5c2N0bGAgaGFuZGxpbmcgZnVuY3Rpb24gYW5kIHRoZSBgbWF4bGVuYCBhcmUgYWxsIGFkYXB0ZWQuCgpOb3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGVyZSBpcyBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCBhY3R1YWxseSAqdXNlZCo/IERvZXMgdGhpcyBjaGFuZ2UgcG90ZW50aWFsbHkgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBzdWNoIGFzIG92ZXJmbG93cyBvciB1bmluaXRpYWxpemVkIHJlYWRzPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaW5zdGFuY2VzIG9mIHRoaXMgdmFyaWFibGUgd2l0aGluIHRoZSBjb2RlLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBuZXQvdW5peC9gIGRpcmVjdG9yeSwgYW5kIGlmIHRoYXQgZG9lc24mIzM5O3QgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24sIEkmIzM5O2xsIGV4cGFuZCB0aGUgc2VhcmNoLiBCYXNlZCBvbiB0aGlzLCBJIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgZnV6emluZyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3lzY3RsX21heF9kZ3JhbV9xbGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaD0xNj1zdHJ1Y3QgbmV0bnNfdW5peCB7XG5pbmNsdWRlL25ldC9uZXRucy91bml4LmgtMTctXHRzdHJ1Y3QgdW5peF90YWJsZVx0dGFibGU7XG5pbmNsdWRlL25ldC9uZXRucy91bml4Lmg6MTg6XHR1bnNpZ25lZCBpbnRcdFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oLTE5LVx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXJcdCpjdGw7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwOTQ9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTExMjEtXHRzay1cdTAwM2Vza193cml0ZV9zcGFjZVx0PSB1bml4X3dyaXRlX3NwYWNlO1xubmV0L3VuaXgvYWZfdW5peC5jOjExMjI6XHRzay1cdTAwM2Vza19tYXhfYWNrX2JhY2tsb2dcdD0gUkVBRF9PTkNFKG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuKTtcbm5ldC91bml4L2FmX3VuaXguYy0xMTIzLVx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdFx0PSB1bml4X3NvY2tfZGVzdHJ1Y3Rvcjtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzgxMz1zdGF0aWMgaW50IF9fbmV0X2luaXQgdW5peF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTYtXG5uZXQvdW5peC9hZl91bml4LmM6MzgxNzpcdG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XG5uZXQvdW5peC9hZl91bml4LmMtMzgxOC1cdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxuLS1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0xOC1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21heF9kZ3JhbV9xbGVuXCYjMzQ7LFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6MTk6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbixcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTIwLVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zMy1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM0Olx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gS2VybmVsIFBhcmFtZXRlciBUdW5pbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgYmFja2xvZyBsaW1pdCwgc3BlY2lmaWNhbGx5IHdpdGggYHNrLSZndDtza19tYXhfYWNrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHByb2NfZG91aW50dmVjX21pbm1heGAgaW50ZXJhY3RzIHdpdGggdGhpcyBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBjb25uZWN0aW9uIGZvciB0aGUgdXNlci1zcGFjZSB0dW5pbmcgb2YgbmV0d29yayBwYXJhbWV0ZXJzLgoKTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIHJlcHJlc2VudHMgYW4gYWRqdXN0YWJsZSBwYXJhbWV0ZXIgcmVsYXRlZCB0byBUQ1AgYWNrIGJhY2tsb2cgb3IgYSByZWxhdGVkIHF1ZXVlLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IGBwcm9jX2RvdWludHZlY19taW5tYXhgIGlzIHRoZSBrZXJuZWwgZnVuY3Rpb24gdGhhdCBtYW5hZ2VzIHRoZSByYW5nZSBhbmQgdmFsdWUgb2YgdGhpcyB0dW5hYmxlLiBJIG5lZWQgdG8gYmUgc3VyZSBvbiB3aGF0IGNvbnRleHQgaXQgaXMgYXBwbGllZC4KCk5leHQsIEkmIzM5O2xsIGRyaWxsIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBwcm9jX2RvdWludHZlY19taW5tYXhgLCBwcm9iYWJseSB3aXRoIGB1bml4X3RhYmxlYCBjb250ZXh0IHRvbywgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIHdpbGwgcHJvYmFibHkgZXhwb3NlIHdoYXQgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgd2UgYWNjZXB0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIE5FVDQ6XHRTeXNjdGwgaW50ZXJmYWNlIHRvIG5ldCBhZl91bml4IHN1YnN5c3RlbS5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcnM6XHRNaWtlIFNoYXZlci5cbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2FmX3VuaXguaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbiAgMTM6XHRcbiAgMTQ6XHQjaW5jbHVkZSBcJiMzNDthZl91bml4LmhcJiMzNDtcbiAgMTU6XHRcbiAgMTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4gIDE3Olx0XHR7XG4gIDE4Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDttYXhfZGdyYW1fcWxlblwmIzM0OyxcbiAgMTk6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuICAyMDpcdFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4gIDIxOlx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiAgMjI6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWludHZlY19taW5tYXgsXG4gIDIzOlx0XHR9LFxuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiAgMjc6XHR7XG4gIDI4Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiAgMjk6XHRcbiAgMzA6XHRcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuICAzMTpcdFx0aWYgKCF0YWJsZSlcbiAgMzI6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDMzOlx0XG4gIDM0Olx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47XG4gIDM1Olx0XG4gIDM2Olx0XHRyZXR1cm4gdGFibGU7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdGludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbiAgNDA6XHR7XG4gIDQxOlx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiAgNDI6XHRcbiAgNDM6XHRcdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiAgNDQ6XHRcdFx0dGFibGUgPSB1bml4X3RhYmxlO1xuICA0NTpcdFx0fSBlbHNlIHtcbiAgNDY6XHRcdFx0dGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpO1xuICA0NzpcdFx0XHRpZiAoIXRhYmxlKVxuICA0ODpcdFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuICA0OTpcdFx0fVxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjQ3CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCB3ZSBhbHdheXMgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHJlYWRpbmcgYW5kIHdyaXRpbmcgYW4gYHVuc2lnbmVkIGludGAgZnJvbSBgdGFibGUtJmd0O2RhdGFgLiBUaGVuIHRoZXJlJiMzOTtzIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gLCB3aGljaCBpcyBhbiBgdW5zaWduZWQgaW50YCB3aXRoaW4gYHN0cnVjdCBuZXRuc191bml4YC4gSSBrbm93IGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGAxMGAgaW4gYHVuaXhfbmV0X2luaXRgLCBzbyB0aGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIGxpbmUgaGVyZSBpcyBgc2stJmd0O3NrX21heF9hY2tfYmFja2xvZyA9IFJFQURfT05DRShuZXQtJmd0O3VueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4pO2Agd2hlbiBVbml4IHNvY2tldHMgYXJlIGNyZWF0ZWQuIEkgYWxzbyBjaGVja2VkIHRoYXQgYGV4dHJhMWAgYW5kIGBleHRyYTJgIGFyZSBgTlVMTGAgaW4gYHVuaXhfdGFibGVgLCBtZWFuaW5nIGBwcm9jX2RvdWludHZlY19taW5tYXhgIGlzIGNvcnJlY3RseSBlbmZvcmNpbmcgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVuc2lnbmVkIHZhbHVlcywgYW5kIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGJvdW5kcy4KClNvLCBhbSBJIHNlZWluZyBhbnkgcmVkIGZsYWdzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIHZhcmlhYmxlcy4gQXMgbWVudGlvbmVkLCBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBzbyB0aGF0JiMzOTtzIGNvdmVyZWQuIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSByZWFkaW5nIGFuZCB3cml0aW5nIG9mIHVuc2lnbmVkIGludGVnZXJzIGNvcnJlY3RseS4gVGhlcmUmIzM5O3Mgbm8gcG9zc2liaWxpdHkgb2YgYSBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrIHZpYSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgYnl0ZXMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgYmVpbmcgcmVhZCBvciBwYXNzZWQgYXJvdW5kLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2XigJRqdXN0IHR5cGUgYWx0ZXJhdGlvbnMsIG5vdCBtZW1vcnkgbWFuaXB1bGF0aW9u4oCUS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2ssIHRob3VnaCwganVzdCB0byBiZSB0aG9yb3VnaC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgS0FTQU4gKGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycykgdnMgS01TQU4gaGVyZS4gS0FTQU4gaXMgYWxyZWFkeSBjb3ZlcmluZyB0aGluZ3MgbGlrZSBzeXNjdGwgaGFuZGxpbmcsIHRhYmxlIGR1cGxpY2F0aW9uLCBhbmQgYmFzaWMgc29ja2V0IHF1ZXVlIGxlbmd0aHMuIFRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyB0aGUgdHlwZSBvZiBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCwgYW5kIGFkanVzdHMgdGhlIHN5c2N0bCBoYW5kbGVyLiBJdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcuIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLCBpc27igJl0IHRvdWNoaW5nIGFueSBidWZmZXIgYm91bmRhcmllcyBmb3IgY29weSBvcGVyYXRpb25zLCBhbmQgaXNuJiMzOTt0IGdlbmVyYXRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGNvcGllcy4gSXTigJlzIGEgY2xlYW4gYW5kIGxvY2FsaXplZCBjaGFuZ2UuCgpPa2F5LCB0aGF0JiMzOTtzIGVub3VnaCBmb3IgbWUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHN5c2N0bCBwYXJhbWV0ZXIgJiMzOTtuZXQudW5peC5tYXhfZGdyYW1fcWxlbiYjMzk7IGFuZCB0aGUgZmllbGQgJiMzOTtzeXNjdGxfbWF4X2RncmFtX3FsZW4mIzM5OyBpbiBzdHJ1Y3QgbmV0bnNfdW5peCBmcm9tICYjMzk7aW50JiMzOTsgdG8gJiMzOTt1bnNpZ25lZCBpbnQmIzM5Oywgc3dpdGNoaW5nIHRoZSBwcm9jIGhhbmRsZXIgZnJvbSBwcm9jX2RvaW50dmVjIHRvIHByb2NfZG91aW50dmVjX21pbm1heC4gXG5cblRoZSB2YXJpYWJsZSBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHRvIDEwIGluIHVuaXhfbmV0X2luaXQoKSwgYW5kIHJlYWRpbmcvd3JpdGluZyB0aHJvdWdoIHByb2NfZG91aW50dmVjX21pbm1heCBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGlzIGluaXRpYWxpemVkIHVuc2lnbmVkIGludGVnZXIuIFRoZXJlIGFyZSBubyBuZXdseSBhbGxvY2F0ZWQgYnVmZmVycywgbm8gc3RydWN0dXJlIHBhZGRpbmcgY2hhbmdlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzeXNjdGwgcGFyYW1ldGVyICYjMzk7bmV0LnVuaXgubWF4X2RncmFtX3FsZW4mIzM5OyBhbmQgdGhlIGZpZWxkICYjMzk7c3lzY3RsX21heF9kZ3JhbV9xbGVuJiMzOTsgaW4gc3RydWN0IG5ldG5zX3VuaXggZnJvbSAmIzM5O2ludCYjMzk7IHRvICYjMzk7dW5zaWduZWQgaW50JiMzOTssIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxuXG5UaGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCB0byAxMCBpbiB1bml4X25ldF9pbml0KCksIGFuZCByZWFkaW5nL3dyaXRpbmcgdGhyb3VnaCBwcm9jX2RvdWludHZlY19taW5tYXggb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhpcyBpbml0aWFsaXplZCB1bnNpZ25lZCBpbnRlZ2VyLiBUaGVyZSBhcmUgbm8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcnMsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGNoYW5nZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNjo1Ny43MzA1ODMyNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2Nzk0OTk1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHN5c2N0bCBwYXJhbWV0ZXIgJ25ldC51bml4Lm1heF9kZ3JhbV9xbGVuJyBhbmQgdGhlIGZpZWxkICdzeXNjdGxfbWF4X2RncmFtX3FsZW4nIGluIHN0cnVjdCBuZXRuc191bml4IGZyb20gJ2ludCcgdG8gJ3Vuc2lnbmVkIGludCcsIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxcblxcblRoZSB2YXJpYWJsZSBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHRvIDEwIGluIHVuaXhfbmV0X2luaXQoKSwgYW5kIHJlYWRpbmcvd3JpdGluZyB0aHJvdWdoIHByb2NfZG91aW50dmVjX21pbm1heCBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGlzIGluaXRpYWxpemVkIHVuc2lnbmVkIGludGVnZXIuIFRoZXJlIGFyZSBubyBuZXdseSBhbGxvY2F0ZWQgYnVmZmVycywgbm8gc3RydWN0dXJlIHBhZGRpbmcgY2hhbmdlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVOSVggc29ja2V0IHN5c2N0bCB0YWJsZSB0byB1c2UgdW5zaWduZWQgaW50ZWdlciBzZW1hbnRpY3MgYW5kIHByb2NfZG91aW50dmVjX21pbm1heCBmb3IgbmV0LnVuaXgubWF4X2RncmFtX3FsZW4gaW5zdGVhZCBvZiBwcm9jX2RvaW50dmVjLiBUaGlzIGNoYW5nZXMgc3lzY3RsIGlucHV0IHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA2OjU3LjczMDU4ODU3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA4ODQwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGY2MzZhMDBkNTVhZGQwZmZjMmIxMGY2NmJhNWNiMjA2N2JhZDUxZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwOTowNjo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmZlMWNhODZmMjgyZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuQEAgLTM4MTgsOCArMzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOXFxuIGBgL3Byb2Mvc3lzL25ldC91bml4LypgYFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuLW1heF9kZ3JhbV9xbGVuIC0gSU5URUdFUlxcbittYXhfZGdyYW1fcWxlbiAtIFVOU0lHTkVEIElOVEVHRVJcXG4gXFx0VGhlIG1heGltdW0gbGVuZ3RoIG9mIGRncmFtIHNvY2tldCByZWNlaXZlIHF1ZXVlXFxuIFxcbi1cXHREZWZhdWx0OiAxMFxcbitcXHROZWdhdGl2ZSB2YWx1ZXMgYXJlIHJlamVjdGVkLlxcbiBcXG4rXFx0RGVmYXVsdDogMTBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oXFxuaW5kZXggOTg1OWQxMzRkNWE4OS4uZTIzM2M0MjgzMjQzZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcXG5AQCAtMTUsNyArMTUsNyBAQCBzdHJ1Y3QgdW5peF90YWJsZSB7XFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xcbiBzdHJ1Y3QgbmV0bnNfdW5peCB7XFxuIFxcdHN0cnVjdCB1bml4X3RhYmxlXFx0dGFibGU7XFxuLVxcdGludFxcdFxcdFxcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlclxcdCpjdGw7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXFxuaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDRcXG4tLS0gYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xcbisrKyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXFxuQEAgLTE3LDkgKzE3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm1heF9kZ3JhbV9xbGVuXFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxcbi1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4rXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXFxuIFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbi1cXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91aW50dmVjX21pbm1heCxcXG4gXFx0fSxcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA2OjU4LjE0MDA3NDkxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjYxOTczNzEyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVU5JWCBzb2NrZXQgc3lzY3RsIHRhYmxlIHRvIHVzZSB1bnNpZ25lZCBpbnRlZ2VyIHNlbWFudGljcyBhbmQgcHJvY19kb3VpbnR2ZWNfbWlubWF4IGZvciBuZXQudW5peC5tYXhfZGdyYW1fcWxlbiBpbnN0ZWFkIG9mIHByb2NfZG9pbnR2ZWMuIFRoaXMgY2hhbmdlcyBzeXNjdGwgaW5wdXQgdmFsaWRhdGlvbiBhbmQgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGY2MzZhMDBkNTVhZGQwZmZjMmIxMGY2NmJhNWNiMjA2N2JhZDUxZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDA5OjA2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmZlMWNhODZmMjgyZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTM4MTgsOCArMzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOXG4gYGAvcHJvYy9zeXMvbmV0L3VuaXgvKmBgXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4tbWF4X2RncmFtX3FsZW4gLSBJTlRFR0VSXG4rbWF4X2RncmFtX3FsZW4gLSBVTlNJR05FRCBJTlRFR0VSXG4gXHRUaGUgbWF4aW11bSBsZW5ndGggb2YgZGdyYW0gc29ja2V0IHJlY2VpdmUgcXVldWVcbiBcbi1cdERlZmF1bHQ6IDEwXG4rXHROZWdhdGl2ZSB2YWx1ZXMgYXJlIHJlamVjdGVkLlxuIFxuK1x0RGVmYXVsdDogMTBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmggYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbmluZGV4IDk4NTlkMTM0ZDVhODkuLmUyMzNjNDI4MzI0M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuQEAgLTE1LDcgKzE1LDcgQEAgc3RydWN0IHVuaXhfdGFibGUge1xuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xuIHN0cnVjdCBuZXRuc191bml4IHtcbiBcdHN0cnVjdCB1bml4X3RhYmxlXHR0YWJsZTtcbi1cdGludFx0XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbitcdHVuc2lnbmVkIGludFx0XHRzeXNjdGxfbWF4X2RncmFtX3FsZW47XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlclx0KmN0bDtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcbmluZGV4IDQ3NjYwZDU3MjZiYmQuLjhmNmYwNjU3NDk1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuKysrIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcbkBAIC0xNyw5ICsxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibWF4X2RncmFtX3FsZW5cIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuLVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLVx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWludHZlY19taW5tYXgsXG4gXHR9LFxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNjo1OC4xNDAwNzY0MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTQwNzc5MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb21taXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSB1cGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYG1heF9kZ3JhbV9xbGVuYCBpbiB0aGUgYGlwLXN5c2N0bC5yc3RgIGZpbGUuIFRoYXQncyBnb29kLCBhbHdheXMgaW1wb3J0YW50IHRvIGtlZXAgdGhlIGRvY3MgaW4gc3luYy4gVGhlbiwgdGhlcmUncyBhIGNoYW5nZSBpbiBgaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oYCB3aGVyZSB0aGV5J3JlIHN3aXRjaGluZyBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCBmcm9tIGEgc2lnbmVkIGBpbnRgIHRvIGFuIHVuc2lnbmVkIGB1bnNpZ25lZCBpbnRgLiBJbnRlcmVzdGluZ+KApiBUaGlzIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMuIEFuZCBmaW5hbGx5LCBpbiBgbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNgLCB3ZSdyZSBnZXR0aW5nIGEgc2l6ZSBjaGFuZ2UgZm9yIGBtYXhsZW5gIGFuZCB1cGRhdGluZyB0aGUgYHByb2NfaGFuZGxlcmAgdG8gYHByb2NfZG91aW50dmVjX21pbm1heGAuIFJpZ2h0LCB0aGlzIHByb2JhYmx5IG1lYW5zIHdlJ3JlIGFsbG93aW5nIGZvciBsYXJnZXIgcXVldWUgbGVuZ3RocyBub3csIHVzaW5nIGEgbW9yZSByb2J1c3Qgc3lzY3RsIGhhbmRsZXIuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSB0byBpdHMgdHlwZSBhbmQgdGhlIGluY3JlYXNlZCBtYXggdmFsdWUuIExldCdzIHNlZS4uLiBJJ2xsIGp1c3QgcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCB0byBsb2NhdGUgYWxsIHRoZSByZWxldmFudCBvY2N1cnJlbmNlcyBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaXRzIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MDUuMjgwODU4NTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTEwNTM2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY3RsX21heF9kZ3JhbV9xbGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldG5zL3VuaXguaD0xNj1zdHJ1Y3QgbmV0bnNfdW5peCB7XFxuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oLTE3LVxcdHN0cnVjdCB1bml4X3RhYmxlXFx0dGFibGU7XFxuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oOjE4OlxcdHVuc2lnbmVkIGludFxcdFxcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG5pbmNsdWRlL25ldC9uZXRucy91bml4LmgtMTktXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXJcXHQqY3RsO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTEwOTQ9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMS1cXHRzay1cXHUwMDNlc2tfd3JpdGVfc3BhY2VcXHQ9IHVuaXhfd3JpdGVfc3BhY2U7XFxubmV0L3VuaXgvYWZfdW5peC5jOjExMjI6XFx0c2stXFx1MDAzZXNrX21heF9hY2tfYmFja2xvZ1xcdD0gUkVBRF9PTkNFKG5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbik7XFxubmV0L3VuaXgvYWZfdW5peC5jLTExMjMtXFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0XFx0XFx0PSB1bml4X3NvY2tfZGVzdHJ1Y3RvcjtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODE2LVxcbm5ldC91bml4L2FmX3VuaXguYzozODE3OlxcdG5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiA9IDEwO1xcbm5ldC91bml4L2FmX3VuaXguYy0zODE4LVxcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMTgtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibWF4X2RncmFtX3FsZW5cXFwiLFxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjE5OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbixcXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0yMC1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zMy1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozNDpcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MDcuMDkxOTE2OTMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5NTgzNDIwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3lzY3RsIERlZmluaXRpb24gQ2hhbmdlIGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgY2hhbmdlcyB0aGUgc3lzY3RsIGRlZmluaXRpb24gZm9yIGBuZXQudW5peC5tYXhfZGdyYW1fcWxlbmAuIEl0J3MgbW92aW5nIGZyb20gdXNpbmcgYHByb2NfZG9pbnR2ZWNgIHdpdGggYW4gYGludGAgdG8gYHByb2NfZG91aW50dmVjX21pbm1heGAgd2l0aCBhbiBgdW5zaWduZWQgaW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBzcGVuZCB0aW1lIGZ1enppbmcgb3IgaWYgaXQncyBhIHJlbGF0aXZlbHkgbWlub3IsIHBvdGVudGlhbGx5IGluc2lnbmlmaWNhbnQsIG1vZGlmaWNhdGlvbi5cblxuV2FpdCBhIG1vbWVudCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgZmlyc3QuIExldCdzIG1ha2Ugc3VyZTogKm9ubHkqIGNoYW5nZXMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcgY2hhbmdlcywgbm9uLWZ1bmN0aW9uYWwgbnVtZXJpYyBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgKHJlcXVpcmluZyBzcGVjaWFsIGhhcmR3YXJlKSBzaG91bGQgYmUgZmxhZ2dlZCBhcyBub3Qgd29ydGggZnV6emluZy4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBkdXJpbmcgdW5wbHVnL3VuYmluZCBhcmUgYWxzbyBub3Qgd29ydGggZnV6emluZy4gQWxyaWdodCwgdGhhdCdzIHRoZSBzY29wZS5cblxuT2theSwgYmFjayB0byB0aGUgY2hhbmdlLiBUaGlzICppcyogYSBjaGFuZ2UgdG8gdGhlIHN5c2N0bCB0YWJsZSwgbm90IGp1c3QgYSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnQgdXBkYXRlLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNoYW5nZSBpbiB0aGUgKnR5cGUqIG9mIHRoZSBzeXNjdGwgaGFuZGxlcjogdXNpbmcgYHByb2NfZG91aW50dmVjX21pbm1heGAgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN5c2N0bC4gU3BlY2lmaWNhbGx5LCBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCB3aWxsIG5vdyB2YWxpZGF0ZSB2YWx1ZXMsIHJlamVjdGluZyBhbmQgY2xhbXBpbmcgbmVnYXRpdmUgdmFsdWVzLiBQcmV2aW91c2x5LCBzeXNjdGwgd3JpdGVycyBjb3VsZCBoYXZlIHNldCBuZWdhdGl2ZSB2YWx1ZXMhXG5cblNvLCB0aGUgbmV4dCBxdWVzdGlvbjogZG9lcyB0aGlzIGNvbnN0aXR1dGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IEl0ICpjb3VsZCogYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBiZWNhdXNlIHRoZSBzeXNjdGwgdGFibGUgd2lsbCBiZSBtb2RpZmllZC5cblxuSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB0aGlzLiBXZSdyZSBub3QgbmVjZXNzYXJpbHkgZnV6emluZyAqc3lzY3RsKiBpdHNlbGYsIHJpZ2h0PyBXZSdyZSBwb3RlbnRpYWxseSBmdXp6aW5nIHRoZSBpbnB1dCB2YWxpZGF0aW9uIHByb2Nlc3MuIFdoYXQgZnVuY3Rpb25zIHdvdWxkIGJlIGFmZmVjdGVkIGFuZCB0aGVyZWZvcmUgZnV6emVkPyBXb3VsZCBpdCBiZSBzb21ldGhpbmcgbGlrZSB0aGUgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBvciBgdW5peF9jcmVhdGUxYCBmdW5jdGlvbnM/XG5cbkxldCBtZSBqdXN0IHJlLXJlYWQgdGhlIHdvcnRoIGZ1enppbmcgY3JpdGVyaWEgb25jZSBtb3JlOiBhbnkgY29yZSBsb2dpYywgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBhcmUgd29ydGggZnV6emluZy5cblxuQWxyaWdodCwgd2hhdCBleGFjdGx5IGRpZCB0aGlzIHBhdGNoIG1vZGlmeT8gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc3lzdGVtPyBMZXQncyBjaGVjayB0aGUgYG5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzoyNS4wNTAyNjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIE5FVDQ6XFx0U3lzY3RsIGludGVyZmFjZSB0byBuZXQgYWZfdW5peCBzdWJzeXN0ZW0uXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQXV0aG9yczpcXHRNaWtlIFNoYXZlci5cXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hZl91bml4LmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0I2luY2x1ZGUgXFxcImFmX3VuaXguaFxcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbiAgMTc6XFx0XFx0e1xcbiAgMTg6XFx0XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibWF4X2RncmFtX3FsZW5cXFwiLFxcbiAgMTk6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxcbiAgMjA6XFx0XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXFxuICAyMTpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4gIDIyOlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91aW50dmVjX21pbm1heCxcXG4gIDIzOlxcdFxcdH0sXFxuICAyNDpcXHR9O1xcbiAgMjU6XFx0XFxuICAyNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbiAgMjc6XFx0e1xcbiAgMjg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xcbiAgMzE6XFx0XFx0aWYgKCF0YWJsZSlcXG4gIDMyOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cmV0dXJuIHRhYmxlO1xcbiAgMzc6XFx0fVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuICA0MDpcXHR7XFxuICA0MTpcXHRcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0aWYgKG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4gIDQ0OlxcdFxcdFxcdHRhYmxlID0gdW5peF90YWJsZTtcXG4gIDQ1OlxcdFxcdH0gZWxzZSB7XFxuICA0NjpcXHRcXHRcXHR0YWJsZSA9IHVuaXhfdGFibGVfZHVwKG5ldCk7XFxuICA0NzpcXHRcXHRcXHRpZiAoIXRhYmxlKVxcbiAgNDg6XFx0XFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuICA0OTpcXHRcXHR9XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdG5ldC1cXHUwMDNldW54LmN0bCA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcXFwibmV0L3VuaXhcXFwiLCB0YWJsZSxcXG4gIDUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEFSUkFZX1NJWkUodW5peF90YWJsZSkpO1xcbiAgNTM6XFx0XFx0aWYgKG5ldC1cXHUwMDNldW54LmN0bCA9PSBOVUxMKVxcbiAgNTQ6XFx0XFx0XFx0Z290byBlcnJfcmVnO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRyZXR1cm4gMDtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0ZXJyX3JlZzpcXG4gIDU5OlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4gIDYwOlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MjUuMDUwMzI1OTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDIzNDc0NTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBcIldoYXQgaGFwcGVucyB3aGVuIHdlIHdyaXRlIHRvIGBuZXQudW5peC5tYXhfZGdyYW1fcWxlbmA/XCIgSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBjaGFuZ2luZyBob3cgdGhpcyBzeXNjdGwgaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgaXQgdXNlZCBgcHJvY19kb2ludHZlY2Agd2l0aCBhbiBgaW50YCwgYnV0IG5vdyBpdCdzIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHdpdGggYW4gYHVuc2lnbmVkIGludGAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaWYgdGhpcyBjaGFuZ2UganVzdGlmaWVzIGZ1cnRoZXIgZnV6emluZyBlZmZvcnRzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgaG93IHN5emthbGxlciBvcGVyYXRlcy4gQ2FuIHN5emthbGxlciBhY3R1YWxseSB3cml0ZSB0byBgL3Byb2Mvc3lzL25ldC91bml4L21heF9kZ3JhbV9xbGVuYCBhbmQgY3JlYXRlIFVOSVggc29ja2V0cz8gWWVzLCBJIGtub3cgc3lzY3RsIHdyaXRlcyBhcmUgYSBjb21tb24gdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQgVU5JWCBzb2NrZXQgY3JlYXRpb24gbGlrZWx5ICpyZWFkcyogdGhhdCBzeXNjdGwgdmFsdWUuIEJ1dCBpcyB0aGlzIGEgbWlub3IgaW5wdXQgdmFsaWRhdGlvbiB0d2Vhaz9cblxuSG9sZCBvbi4gTGV0IG1lIGNvbnN1bHQgdGhlIGV4cGxpY2l0IGluc3RydWN0aW9ucyBoZXJlLCBiZWNhdXNlIEkgcmVjYWxsIGEgbmVnYXRpdmUgbGlzdC4gVGhlIHByb21wdCBnaXZlcyBtZSBhIHByZWNpc2Ugc2V0IG9mIGNyaXRlcmlhLlxuXG5UaGUgcHJvbXB0IGVzc2VudGlhbGx5IHRlbGxzIG1lIFwiZG9uJ3QgYm90aGVyIGZ1enppbmdcIiBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGNoYW5nZXMsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBBbHNvLCBpdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llL1NtYXJ0TklDL0dQVSBkcml2ZXJzIGFuZCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBJJ20gcmVhbGx5IGdsYWQgZm9yIHRoaXMgbmVnYXRpdmUgbGlzdCwgYmVjYXVzZSBpdCBxdWlja2x5IGhlbHBzIGV2YWx1YXRlIGEgY2hhbmdlLlxuXG5UaGUgcG9zaXRpdmUgY3JpdGVyaWE6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5BbHJpZ2h0LCBsZXQncyBhcHBseSB0aGUgcHJvbXB0IHRvIHRoZSBjdXJyZW50IHBhdGNoLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBBRl9VTklYIHN5c2N0bCBoYW5kbGVyIGluIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AgYW5kIGBpbmNsdWRlL25ldC9uZXRucy91bml4LmhgLiBJdCBpbnZvbHZlcyBhIGRhdGEgdHlwZSBjaGFuZ2UgZnJvbSBgaW50YCB0byBgdW5zaWduZWQgaW50YCwgYW5kIHRoZSBwcm9jIGhhbmRsZXIgY2hhbmdlcyBmcm9tIGBwcm9jX2RvaW50dmVjYCB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gVGhpcyBpcyBpbnNpZGUgdGhlIGNvcmUgVU5JWCBzb2NrZXQgc3Vic3lzdGVtLiBJdCdzIGZ1bGx5IGFjY2Vzc2libGUsIHJlYWNoYWJsZSwgYW5kIHRlc3RhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIEtjb25maWcgdG8gbWFrZSBzdXJlIEFGX1VOSVggaXMgZW5hYmxlZCBidXQsIGJhc2VkIG9uIGFsbCBvZiB0aGlzLCB0aGlzIGNoYW5nZSBsb29rcyBsaWtlIGl0J3Mgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU4MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjM1LjI4NTA3NDk5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MDMyOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODE3LVxcdG5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiA9IDEwO1xcbm5ldC91bml4L2FmX3VuaXguYzozODE4OlxcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxcbm5ldC91bml4L2FmX3VuaXguYy0zODE5LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5oPTM3PWxvbmcgdW5peF9vdXRxX2xlbihzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5oLTQwLSNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubmV0L3VuaXgvYWZfdW5peC5oOjQxOmludCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xcbm5ldC91bml4L2FmX3VuaXguaC00Mi12b2lkIHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvdW5peC9hZl91bml4LmgtNDMtI2Vsc2VcXG5uZXQvdW5peC9hZl91bml4Lmg6NDQ6c3RhdGljIGlubGluZSBpbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC91bml4L2FmX3VuaXguaC00NS17XFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0yNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMzgtXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6Mzk6aW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MzcuMTA0MTEyODg2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwNTc1MDk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVbml4IERvbWFpbiBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVW5peCBkb21haW4gc29ja2V0cyB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZXQvdW5peC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcy4gVGhlbiwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhYmxlIGFzcGVjdHMsIEknbGwgbmVlZCB0byBleGFtaW5lIGBuZXQvdW5peC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGZpbmQgYWxsIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBiZWhhdmlvciBvZiB0aGUgVW5peCBkb21haW4gc29ja2V0IGZ1bmN0aW9uYWxpdHkuIEhvcGVmdWxseSwgdGhlc2UgdHdvIGZpbGVzLCB3b3JraW5nIGluIHRhbmRlbSwgd2lsbCBwcm92aWRlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBpcyBidWlsdCBhbmQgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjM5LjUwOTg2NjcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY0MTU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjdGxfbmV0X3VuaXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvTWFrZWZpbGU9OD11bml4LXlcXHRcXHRcXHQ6PSBhZl91bml4Lm8gZ2FyYmFnZS5vXFxubmV0L3VuaXgvTWFrZWZpbGU6OTp1bml4LSQoQ09ORklHX1NZU0NUTClcXHQrPSBzeXNjdGxfbmV0X3VuaXgub1xcbm5ldC91bml4L01ha2VmaWxlLTEwLXVuaXgtJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVuaXhfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MzkuNTUzNTEyMzI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Mjk1OTE2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVTklYIERvbWFpbiBTb2NrZXRzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVOSVggZG9tYWluIHNvY2tldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBhcmUgYG5ldC91bml4L0tjb25maWdgIGFuZCBgbmV0L0tjb25maWdgLiBJJ20gcHJldHR5IHN1cmUgaXQncyB1bmRlciBvbmUgb2YgdGhvc2UsIGFsdGhvdWdoIHRoZSBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmUgY2FuIGJlIGEgYml04oCmIGlkaW9zeW5jcmF0aWMgYXQgdGltZXMuIE15IGd1dCBzYXlzIGl0J2xsIGJlIGluIGBuZXQvdW5peC9LY29uZmlnYCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgVU5JWCBzb2NrZXRzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYm90aCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhbnkgcmVsZXZhbnQgY3Jvc3MtcmVmZXJlbmNpbmcgb3IgZGVwZW5kZW5jaWVzIEknbSBtaXNzaW5nLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgY29uZmlnIGhhcyB0byBzYXkuIE5vIHBvaW50IGluIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYXQgdGhpcyBwb2ludCwgYmVzdCB0byB2ZXJpZnkgbXkgbWVudGFsIG1vZGVsIGFnYWluc3QgdGhlIGFjdHVhbCBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjksIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo0NC40ODMxMDU5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDI0NTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVU5JWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWc9MTQ4PWNvbmZpZyBTT0xBUklTX1g4Nl9QQVJUSVRJT05cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0xNTctXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjE1ODpjb25maWcgVU5JWFdBUkVfRElTS0xBQkVMXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE1OS1cXHRib29sIFxcXCJVbml4d2FyZSBzbGljZXMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdHR5L0tjb25maWc9Nzg9Y29uZmlnIFZUX0hXX0NPTlNPTEVfQklORElOR1xcbi0tXFxuZHJpdmVycy90dHkvS2NvbmZpZy05My1cXG5kcml2ZXJzL3R0eS9LY29uZmlnOjk0OmNvbmZpZyBVTklYOThfUFRZU1xcbmRyaXZlcnMvdHR5L0tjb25maWctOTUtXFx0Ym9vbCBcXFwiVW5peDk4IFBUWSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC91bml4L0tjb25maWctNS1cXG5uZXQvdW5peC9LY29uZmlnOjY6Y29uZmlnIFVOSVhcXG5uZXQvdW5peC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVW5peCBkb21haW4gc29ja2V0c1xcXCJcXG4tLVxcbm5ldC91bml4L0tjb25maWc9MTk9Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4tLVxcbm5ldC91bml4L0tjb25maWctMjUtXFxubmV0L3VuaXgvS2NvbmZpZzoyNjpjb25maWcgVU5JWF9ESUFHXFxubmV0L3VuaXgvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiVU5JWDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo0Ni4wNDMzNTcwMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NzE0NzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWcgZm9yIGEgQ29tcHJlaGVuc2l2ZSBWaWV3KipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUsIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgY29tcHJlaGVuc2l2ZSBpbmZvcm1hdGlvbiBpcyB0aGUgYG5ldC91bml4L0tjb25maWdgIGZpbGUuIEknbGwgaGVhZCBzdHJhaWdodCB0aGVyZSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCdzIHBvc3NpYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQgZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUuIEkgd2FudCB0byBzZWUgZXZlcnl0aGluZyBhdCBvbmNlLCBub3QganVzdCBzbmlwcGV0cy4gVGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGF2YWlsYWJsZSBidWlsZC10aW1lIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjQ4LjEyMDUwNzAzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVuaXggRG9tYWluIFNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFVOSVhcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlVuaXggZG9tYWluIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XFxuICAxMDpcXHRcXHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxcbiAgMTE6XFx0XFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXFxuICAxMjpcXHRcXHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcXG4gIDEzOlxcdFxcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxcbiAgMTQ6XFx0XFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxcbiAgMTU6XFx0XFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgU2F5IFkgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlVOSVg6IG91dC1vZi1ib3VuZCBtZXNzYWdlc1xcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVU5JWFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIFVOSVhfRElBR1xcbiAgMjc6XFx0XFx0dHJpc3RhdGUgXFxcIlVOSVg6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gVU5JWFxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBuXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFN1cHBvcnQgZm9yIFVOSVggc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjQ4LjEyMDU3MDQ4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzE4MTg1NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFVOSVggYW5kIFNZU0NUTCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVU5JWCBhbmQgU1lTQ1RMIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZXNlIHNldHRpbmdzLiBMb29rcyBsaWtlIGBVTklYYCBhbmQgYFNZU0NUTGAgYXJlIHRoZSBrZXkgYXJlYXMgdG8gaW52ZXN0aWdhdGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSByZWdpc3RlcnMgdGhlc2Ugc2V0dGluZ3MuIExldCBtZSBjaGVjayBmb3IgcmVsZXZhbnQgXCJGb2N1c1N5bWJvbHNcIiDigJMgZXNzZW50aWFsbHksIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBkZWZpbmluZyB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cbkhtbSwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBzZWVtcyBwcm9taXNpbmcuIFdhaXQsIGl0J3Mgbm90IHN0YXRpYz8gSW50ZXJlc3RpbmcuIGBpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzeXNjdGwgZW50cmllcyBhcmUgYWN0dWFsbHkgYWNjZXNzZWQuIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHRocm91Z2ggcHJvY2ZzIHN5c2N0bCBoYW5kbGVycy4gSSdtIHJlbWVtYmVyaW5nIHRoaXMgZnJvbSBleHBlcmllbmNlLCBzaW5jZSBJIG9mdGVuIHdvcmsgd2l0aCBwcm9jZnMuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBzb21ldGhpbmcgbGlrZSBgL3Byb2Mvc3lzL25ldC91bml4L21heF9kZ3JhbV9xbGVuYCBpcyBoYW5kbGVkLiBSaWdodCwgd3JpdGVzIGFuZCByZWFkcyB0byB0aGF0IGZpbGUgdHJpZ2dlciBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gSXQgYXBwZWFycyB0aGF0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoaXMgc3lzY3RsIGVudHJ5LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBjb25maXJtYXRpb24gdGhhdCBpdCByZWdpc3RlcnMgdGhlIHN5c2N0bCBlbnRyeS4gSSBjYW4gc2VlIHRoYXQgYHVuaXhfY3JlYXRlMWAgcmVhZHMgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAuIEkgbmVlZCB0byBiZSBjZXJ0YWluLlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBcIkZvY3VzU3ltYm9sXCIg4oCTIGl0J3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGluIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AuIEdvb2QsIHRoYXQgbWFrZXMgaXQgZWFzeSB0byB0cmFjZS4gSSdtIGNvbmZpcm1pbmcgdGhhdCdzIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IG90aGVyIHBhcnRzLiBJcyBgdW5peF9jcmVhdGUxYCBzdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6NTMuNDM4NzU4NTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI5MDU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X2NyZWF0ZTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTEwODM9c3RydWN0IHByb3RvIHVuaXhfc3RyZWFtX3Byb3RvID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwOTMtXFxubmV0L3VuaXgvYWZfdW5peC5jOjEwOTQ6c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwOTUte1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTExNDk9c3RhdGljIGludCB1bml4X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMTc5LVxcbm5ldC91bml4L2FmX3VuaXguYzoxMTgwOlxcdHNrID0gdW5peF9jcmVhdGUxKG5ldCwgc29jaywga2Vybiwgc29jay1cXHUwMDNldHlwZSk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTExODEtXFx0aWYgKElTX0VSUihzaykpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MTYzND1zdGF0aWMgaW50IHVuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTE2NjctXFx0LyogY3JlYXRlIG5ldyBzb2NrIGZvciBjb21wbGV0ZSBjb25uZWN0aW9uICovXFxubmV0L3VuaXgvYWZfdW5peC5jOjE2Njg6XFx0bmV3c2sgPSB1bml4X2NyZWF0ZTEobmV0LCBOVUxMLCAwLCBzb2NrLVxcdTAwM2V0eXBlKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMTY2OS1cXHRpZiAoSVNfRVJSKG5ld3NrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo1My40ODYwNTIzMTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3MzA1NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgY29udGV4dCBvZiBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqRGl2aW5nIGludG8gc3lzY3RsIFJlZ2lzdHJhdGlvbiBhbmQgRGVyZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGFuZCBgdW5peF9zeXNjdGxfdW5yZWdpc3RlcmAuIFRoZXNlIGFyZSAqY3J1Y2lhbCogZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGF0IGAvcHJvYy9zeXNgIGludGVyZmFjZSwgdGhlIGdhdGV3YXkgdG8ga2VybmVsIHR1bmFibGVzIGFuZCBzeXN0ZW0gc3RhdGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLCBlc3BlY2lhbGx5IGluIHRoZSBVbml4IGNvbnRleHQuIFRoZSBhcmNoaXRlY3R1cmUncyBnb3QgaXRzIG51YW5jZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGEgcHJvcGVyIGFuZCBjbGVhbiBoYW5kbGluZyBvZiB0aGUgY29udHJvbCBub2RlIGxpZmVjeWNsZS5cblxuYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBpcyB0aGUga2V5LiBJIGJldCBpdCBoYW5kbGVzIGFsbCB0aGUgaGVhdnkgbGlmdGluZyDigJMgYWxsb2NhdGlvbiBvZiB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgc2V0dGluZyB1cCB0aGUgbGlua2FnZSB0byB0aGUgc3lzY3RsIHRyZWUsIGFuZCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyAod2hvIGNhbiByZWFkL3dyaXRlIHdoYXQpIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBzZWN1cml0eSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGhvdyBpdCBoYW5kbGVzIGNvbmZsaWN0cyBpZiBzb21lb25lIHRyaWVzIHRvIHJlZ2lzdGVyIHRoZSBzYW1lIG5hbWUgdHdpY2U7IGEgd2VsbC1kZWZpbmVkIGVycm9yIHBhdGggaXMgY3JpdGljYWwgaGVyZS4gQW5kIHdoYXQgYWJvdXQgaW5oZXJpdGFuY2U/IElmIEknbSByZWdpc3RlcmluZyBhIG5vZGUgdW5kZXIgYW4gZXhpc3RpbmcgYnJhbmNoLCBob3cgZG9lcyBpdCBtYW5hZ2UgaW5oZXJpdGluZyBwcm9wZXJ0aWVzIGZyb20gdGhlIHBhcmVudD8gVGhpcyBpcyBhbGwgYWJvdXQgY29uc3RydWN0aW5nIHRoZSBoaWVyYXJjaHkgY29ycmVjdGx5LlxuXG5Db252ZXJzZWx5LCBgdW5peF9zeXNjdGxfdW5yZWdpc3RlcmAgbXVzdCBtZXRpY3Vsb3VzbHkgZGlzbWFudGxlIHRoZSBlbnRyaWVzLiBNZW1vcnkgbGVha3MgaW4gdGhpcyBhcmVhIGFyZSAqdW5hY2NlcHRhYmxlKi4gV2UgbmVlZCB0byByZWxlYXNlIGFsbCB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZXMsIHNldmVyIHRoZSBsaW5rcyBpbiB0aGUgc3lzY3RsIHRyZWUsIGFuZCBoYW5kbGUgYW55IHJhY2UgY29uZGl0aW9ucyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjb250cm9sIG5vZGUuIFByb3BlciByZWZlcmVuY2UgY291bnRpbmcsIG9yIGNhcmVmdWwgdXNlIG9mIG11dGV4ZXMsIHdpbGwgYmUgdml0YWwgdG8gbWFraW5nIHRoaXMgcHJvY2VzcyByb2J1c3QuIEkgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgZnJlZWluZyBhIG5vZGUgd2l0aCBhY3RpdmUgY2hpbGRyZW4uXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyBpbiBib3RoIGZ1bmN0aW9ucy4gV2hhdCBoYXBwZW5zIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBXaGF0IGFib3V0IGludmFsaWQgYXJndW1lbnRzIG9yIGF0dGVtcHRzIHRvIGRlcmVnaXN0ZXIgc29tZXRoaW5nIHRoYXQgaXNuJ3QgcmVnaXN0ZXJlZD8gSSdtIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGVycm9yIGNvZGVzIGFuZCBwZXJoYXBzIHNvbWUgaW5mb3JtYXRpdmUgbG9nZ2luZy4gVGhlIHN5c3RlbSBoYXMgdG8gYmUgZmF1bHQtdG9sZXJhbnQgd2hlbiBvdGhlciBwcm9ncmFtcyB1c2UgaXQuXG5cbkluIGVzc2VuY2UsIHVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIHVuZGVyc3RhbmRpbmcgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgVW5peCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTWFraW5nIGNoYW5nZXMgdG8gYHN5c2N0bGAgaXMgYW4gZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFiaWxpdHksIHNvIHRoZXkgKm11c3QqIGJlIGRvbmUgY29ycmVjdGx5LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo1OS4yNTkxMTEyNjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTI5NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfc3lzY3RsX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9hZl91bml4LmM9MzgxMz1zdGF0aWMgaW50IF9fbmV0X2luaXQgdW5peF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNy1cXHRuZXQtXFx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4gPSAxMDtcXG5uZXQvdW5peC9hZl91bml4LmM6MzgxODpcXHRpZiAodW5peF9zeXNjdGxfcmVnaXN0ZXIobmV0KSlcXG5uZXQvdW5peC9hZl91bml4LmMtMzgxOS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODUwLSNlbmRpZlxcbm5ldC91bml4L2FmX3VuaXguYzozODUxOlxcdHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIobmV0KTtcXG5uZXQvdW5peC9hZl91bml4LmMtMzg1Mi1vdXQ6XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IHVuaXhfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4NTktXFx0a3ZmcmVlKG5ldC1cXHUwMDNldW54LnRhYmxlLmxvY2tzKTtcXG5uZXQvdW5peC9hZl91bml4LmM6Mzg2MDpcXHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM4NjEtXFx0cmVtb3ZlX3Byb2NfZW50cnkoXFxcInVuaXhcXFwiLCBuZXQtXFx1MDAzZXByb2NfbmV0KTtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguaD0zNz1sb25nIHVuaXhfb3V0cV9sZW4oc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguaC00MC0jaWZkZWYgQ09ORklHX1NZU0NUTFxcbm5ldC91bml4L2FmX3VuaXguaDo0MTppbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvdW5peC9hZl91bml4Lmg6NDI6dm9pZCB1bml4X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCk7XFxubmV0L3VuaXgvYWZfdW5peC5oLTQzLSNlbHNlXFxubmV0L3VuaXgvYWZfdW5peC5oOjQ0OnN0YXRpYyBpbmxpbmUgaW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvdW5peC9hZl91bml4LmgtNDUte1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5oLTQ4LVxcbm5ldC91bml4L2FmX3VuaXguaDo0OTpzdGF0aWMgaW5saW5lIHZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvYWZfdW5peC5oLTUwLXtcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozOTppbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNDAte1xcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNjQtXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6NjU6dm9pZCB1bml4X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy02Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjU5LjMwNTI1MjUyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTYwNzQ2NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIEtlcm5lbCBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCBmdW5jdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHNvbWV0aGluZyB3ZSdyZSBhY3R1YWxseSB1c2luZz8gUmlnaHQsIGl0J3MgYSBzdGFuZGFyZCBzeXNjdGwgaGFuZGxlciwgcGFydCBvZiBga2VybmVsL3N5c2N0bC5jYC4gQW5kIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciBwdXR0aW5nIHRoaXMgc3lzY3RsIHRhYmxlIGludG8gcGxhY2UuIEdvb2QsIHRoYXQgY29uZmlybXMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCByZWxldmFuY2UuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIHRpY2tlZCBhbGwgdGhlIGJveGVzLiBPa2F5LCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpbmNsdWRlcyBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCB3aGljaCBsb29rcyBwcm9taXNpbmcuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgcmVxdWlyZXMgYFVOSVhgIGFuZCBgU1lTQ1RMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIEFGX1VOSVggc29ja2V0IGNvbnRleHQuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29saWQ6IGEgY3JpdGljYWwgY2hhbmdlIGluIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gIOKAkyBzaGlmdGluZyBmcm9tIGEgc2lnbmVkIGBpbnRgIHRvIGFuIHVuc2lnbmVkIGBpbnRgLCBhbmQgbW92aW5nIHRoZSBoYW5kbGVyIHRvIGBwcm9jX2RvdWludHZlY19taW5tYXhgLiBJdCdzIGEgY2xlYXIgbW9kaWZpY2F0aW9uIHRvIHRoZSBBRl9VTklYIHNvY2tldCBzeXNjdGwgaW50ZXJmYWNlLCBlZmZlY3RpdmVseSByZWplY3RpbmcgbmVnYXRpdmUgdmFsdWVzLiBBbmQgdGhlIGJpZyBwbHVzIGlzIHRoYXQgaXQgaXMgcmVhY2hhYmxlIHZpYSBRRU1VL0dDRSwgc28gaXRzIGV4cG9zdXJlIGlzIGhpZ2guIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCB0aGVyZWZvcmUgcmVxdWlyZXMgdGhvcm91Z2ggZXhhbWluYXRpb24uXG5cbkFscmlnaHQsIGxldCdzIGxvZyB0aGlzIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODQsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjA0LjI2NjAwMjE2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDQxNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bml4X3N5c2N0bF9yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVTklYIHNvY2tldCBzeXNjdGwgdGFibGUgdG8gdXNlIHVuc2lnbmVkIGludGVnZXIgc2VtYW50aWNzIGFuZCBwcm9jX2RvdWludHZlY19taW5tYXggZm9yIG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuIGluc3RlYWQgb2YgcHJvY19kb2ludHZlYy4gVGhpcyBjaGFuZ2VzIHN5c2N0bCBpbnB1dCB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVhcIixcbiAgICBcIlNZU0NUTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVOSVggc29ja2V0IHN5c2N0bCB0YWJsZSB0byB1c2UgdW5zaWduZWQgaW50ZWdlciBzZW1hbnRpY3MgYW5kIHByb2NfZG91aW50dmVjX21pbm1heCBmb3IgbmV0LnVuaXgubWF4X2RncmFtX3FsZW4gaW5zdGVhZCBvZiBwcm9jX2RvaW50dmVjLiBUaGlzIGNoYW5nZXMgc3lzY3RsIGlucHV0IHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjA0LjMzNzQ0OTgwNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNzI2MTg5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowODowNC4zMzc4NjAwMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzA3MjIwNTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgc3lzY3RsIHBhcmFtZXRlciAnbmV0LnVuaXgubWF4X2RncmFtX3FsZW4nIGFuZCB0aGUgZmllbGQgJ3N5c2N0bF9tYXhfZGdyYW1fcWxlbicgaW4gc3RydWN0IG5ldG5zX3VuaXggZnJvbSAnaW50JyB0byAndW5zaWduZWQgaW50Jywgc3dpdGNoaW5nIHRoZSBwcm9jIGhhbmRsZXIgZnJvbSBwcm9jX2RvaW50dmVjIHRvIHByb2NfZG91aW50dmVjX21pbm1heC4gXFxuXFxuVGhlIHZhcmlhYmxlIGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gMTAgaW4gdW5peF9uZXRfaW5pdCgpLCBhbmQgcmVhZGluZy93cml0aW5nIHRocm91Z2ggcHJvY19kb3VpbnR2ZWNfbWlubWF4IG9wZXJhdGVzIGRpcmVjdGx5IG9uIHRoaXMgaW5pdGlhbGl6ZWQgdW5zaWduZWQgaW50ZWdlci4gVGhlcmUgYXJlIG5vIG5ld2x5IGFsbG9jYXRlZCBidWZmZXJzLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjaGFuZ2VzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZjYzNmEwMGQ1NWFkZDBmZmMyYjEwZjY2YmE1Y2IyMDY3YmFkNTFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDk6MDY6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZmUxY2E4NmYyODJmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtMzgxOCw4ICszODE4LDkgQEAgbDNtZGV2X2FjY2VwdCAtIEJPT0xFQU5cbiBgYC9wcm9jL3N5cy9uZXQvdW5peC8qYGBcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbi1tYXhfZGdyYW1fcWxlbiAtIElOVEVHRVJcbittYXhfZGdyYW1fcWxlbiAtIFVOU0lHTkVEIElOVEVHRVJcbiBcdFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBkZ3JhbSBzb2NrZXQgcmVjZWl2ZSBxdWV1ZVxuIFxuLVx0RGVmYXVsdDogMTBcbitcdE5lZ2F0aXZlIHZhbHVlcyBhcmUgcmVqZWN0ZWQuXG4gXG4rXHREZWZhdWx0OiAxMFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaCBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuaW5kZXggOTg1OWQxMzRkNWE4OS4uZTIzM2M0MjgzMjQzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oXG5AQCAtMTUsNyArMTUsNyBAQCBzdHJ1Y3QgdW5peF90YWJsZSB7XG4gc3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XG4gc3RydWN0IG5ldG5zX3VuaXgge1xuIFx0c3RydWN0IHVuaXhfdGFibGVcdHRhYmxlO1xuLVx0aW50XHRcdFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuK1x0dW5zaWduZWQgaW50XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyXHQqY3RsO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4rKysgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTE3LDkgKzE3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJtYXhfZGdyYW1fcWxlblwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG4tXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxuIFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY1xuK1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91aW50dmVjX21pbm1heCxcbiBcdH0sXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjA0LjMzNzg2MTU4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTk1NjUwNTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IHNob3VsZCB3ZSBldmVuIGNvbnNpZGVyIEtNU0FOIGZ1enppbmcgZm9yIHRoaXMgY2hhbmdlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggaXRzZWxmIGZpcnN0LCBvZiBjb3Vyc2UuXG5cblJpZ2h0LCBzbyB0aGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdGAsIGBpbmNsdWRlL25ldC9uZXRucy91bml4LmhgLCBhbmQgYG5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jYC4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBzaGlmdGluZyBgbWF4X2RncmFtX3FsZW5gIGZyb20gYW4gYElOVEVHRVJgIHRvIGFuIGBVTlNJR05FRCBJTlRFR0VSYCwgd2l0aCBzb21lIGRvY3VtZW50YXRpb24gYWRkZWQgdGhhdCBjbGFyaWZpZXMgd2UncmUgcmVqZWN0aW5nIG5lZ2F0aXZlIHZhbHVlcy4gVGhlIHJlbGF0ZWQgc3RydWN0IGRlZmluaXRpb25zIGluIGB1bml4LmhgIGFyZSBhbHNvIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSBmcm9tIGBpbnRgIHRvIGB1bnNpZ25lZCBpbnRgLiBUaGUgY29ycmVzcG9uZGluZyBgc3lzY3RsYCBoYW5kbGluZyBmdW5jdGlvbiBhbmQgdGhlIGBtYXhsZW5gIGFyZSBhbGwgYWRhcHRlZC5cblxuTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogd2hlcmUgaXMgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgYWN0dWFsbHkgKnVzZWQqPyBEb2VzIHRoaXMgY2hhbmdlIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcywgc3VjaCBhcyBvdmVyZmxvd3Mgb3IgdW5pbml0aWFsaXplZCByZWFkcz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyBvZiB0aGlzIHZhcmlhYmxlIHdpdGhpbiB0aGUgY29kZS4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgYG5ldC91bml4L2AgZGlyZWN0b3J5LCBhbmQgaWYgdGhhdCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uLCBJJ2xsIGV4cGFuZCB0aGUgc2VhcmNoLiBCYXNlZCBvbiB0aGlzLCBJIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgZnV6emluZyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjIwLjI5NDM3MTAyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjY1MTUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjdGxfbWF4X2RncmFtX3FsZW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oPTE2PXN0cnVjdCBuZXRuc191bml4IHtcXG5pbmNsdWRlL25ldC9uZXRucy91bml4LmgtMTctXFx0c3RydWN0IHVuaXhfdGFibGVcXHR0YWJsZTtcXG5pbmNsdWRlL25ldC9uZXRucy91bml4Lmg6MTg6XFx0dW5zaWduZWQgaW50XFx0XFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbmluY2x1ZGUvbmV0L25ldG5zL3VuaXguaC0xOS1cXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlclxcdCpjdGw7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MTA5ND1zdGF0aWMgc3RydWN0IHNvY2sgKnVuaXhfY3JlYXRlMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuLCBpbnQgdHlwZSlcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMTIxLVxcdHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZVxcdD0gdW5peF93cml0ZV9zcGFjZTtcXG5uZXQvdW5peC9hZl91bml4LmM6MTEyMjpcXHRzay1cXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nXFx0PSBSRUFEX09OQ0UobmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHRcXHQ9IHVuaXhfc29ja19kZXN0cnVjdG9yO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4MTM9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTYtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTc6XFx0bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTgtXFx0aWYgKHVuaXhfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0xOC1cXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtYXhfZGdyYW1fcWxlblxcXCIsXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6MTk6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTIwLVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTMzLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM0OlxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowODoyMS43NDcwMjc2MzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2Nzc4NjM5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byBLZXJuZWwgUGFyYW1ldGVyIFR1bmluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBiYWNrbG9nIGxpbWl0LCBzcGVjaWZpY2FsbHkgd2l0aCBgc2stXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcm9jX2RvdWludHZlY19taW5tYXhgIGludGVyYWN0cyB3aXRoIHRoaXMgYW5kIGhvdyBpdCdzIGRlZmluZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBjb25uZWN0aW9uIGZvciB0aGUgdXNlci1zcGFjZSB0dW5pbmcgb2YgbmV0d29yayBwYXJhbWV0ZXJzLlxuXG5NeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgcmVwcmVzZW50cyBhbiBhZGp1c3RhYmxlIHBhcmFtZXRlciByZWxhdGVkIHRvIFRDUCBhY2sgYmFja2xvZyBvciBhIHJlbGF0ZWQgcXVldWUsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCBpcyB0aGUga2VybmVsIGZ1bmN0aW9uIHRoYXQgbWFuYWdlcyB0aGUgcmFuZ2UgYW5kIHZhbHVlIG9mIHRoaXMgdHVuYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgb24gd2hhdCBjb250ZXh0IGl0IGlzIGFwcGxpZWQuXG5cbk5leHQsIEknbGwgZHJpbGwgaW50byB0aGUgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBkaXNzZWN0IHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCwgcHJvYmFibHkgd2l0aCBgdW5peF90YWJsZWAgY29udGV4dCB0b28sIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIHByb2JhYmx5IGV4cG9zZSB3aGF0IG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHdlIGFjY2VwdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjQyLjQyNDg5NzcxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogTkVUNDpcXHRTeXNjdGwgaW50ZXJmYWNlIHRvIG5ldCBhZl91bml4IHN1YnN5c3RlbS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBBdXRob3JzOlxcdE1pa2UgU2hhdmVyLlxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHRcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2FmX3VuaXguaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHQjaW5jbHVkZSBcXFwiYWZfdW5peC5oXFxcIlxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuICAxNzpcXHRcXHR7XFxuICAxODpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtYXhfZGdyYW1fcWxlblxcXCIsXFxuICAxOTpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXFxuICAyMDpcXHRcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcXG4gIDIxOlxcdFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbiAgMjI6XFx0XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LFxcbiAgMjM6XFx0XFx0fSxcXG4gIDI0OlxcdH07XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0dGFibGUgPSBrbWVtZHVwKHVuaXhfdGFibGUsIHNpemVvZih1bml4X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuICAzMTpcXHRcXHRpZiAoIXRhYmxlKVxcbiAgMzI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRyZXR1cm4gdGFibGU7XFxuICAzNzpcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdGludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbiAgNDQ6XFx0XFx0XFx0dGFibGUgPSB1bml4X3RhYmxlO1xcbiAgNDU6XFx0XFx0fSBlbHNlIHtcXG4gIDQ2OlxcdFxcdFxcdHRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTtcXG4gIDQ3OlxcdFxcdFxcdGlmICghdGFibGUpXFxuICA0ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4gIDQ5OlxcdFxcdH1cXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowODo0Mi40MjQ5NjExMTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4NTA3MjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBIZXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCB3ZSBhbHdheXMgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBkZWFsaW5nIHdpdGggYHByb2NfZG91aW50dmVjX21pbm1heGAgcmVhZGluZyBhbmQgd3JpdGluZyBhbiBgdW5zaWduZWQgaW50YCBmcm9tIGB0YWJsZS1cdTAwM2VkYXRhYC4gVGhlbiB0aGVyZSdzIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gLCB3aGljaCBpcyBhbiBgdW5zaWduZWQgaW50YCB3aXRoaW4gYHN0cnVjdCBuZXRuc191bml4YC4gSSBrbm93IGl0J3MgaW5pdGlhbGl6ZWQgdG8gYDEwYCBpbiBgdW5peF9uZXRfaW5pdGAsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgbGluZSBoZXJlIGlzIGBzay1cdTAwM2Vza19tYXhfYWNrX2JhY2tsb2cgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4pO2Agd2hlbiBVbml4IHNvY2tldHMgYXJlIGNyZWF0ZWQuIEkgYWxzbyBjaGVja2VkIHRoYXQgYGV4dHJhMWAgYW5kIGBleHRyYTJgIGFyZSBgTlVMTGAgaW4gYHVuaXhfdGFibGVgLCBtZWFuaW5nIGBwcm9jX2RvdWludHZlY19taW5tYXhgIGlzIGNvcnJlY3RseSBlbmZvcmNpbmcgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdW5zaWduZWQgdmFsdWVzLCBhbmQgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgYm91bmRzLlxuXG5TbywgYW0gSSBzZWVpbmcgYW55IHJlZCBmbGFncyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMuIEFzIG1lbnRpb25lZCwgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gdGhhdCdzIGNvdmVyZWQuIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSByZWFkaW5nIGFuZCB3cml0aW5nIG9mIHVuc2lnbmVkIGludGVnZXJzIGNvcnJlY3RseS4gVGhlcmUncyBubyBwb3NzaWJpbGl0eSBvZiBhIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWsgdmlhIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBieXRlcy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSBiZWluZyByZWFkIG9yIHBhc3NlZCBhcm91bmQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdl4oCUanVzdCB0eXBlIGFsdGVyYXRpb25zLCBub3QgbWVtb3J5IG1hbmlwdWxhdGlvbuKAlEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC5cblxuTGV0J3MgZG91YmxlLWNoZWNrLCB0aG91Z2gsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlJ3JlIGxvb2tpbmcgYXQgS0FTQU4gKGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycykgdnMgS01TQU4gaGVyZS4gS0FTQU4gaXMgYWxyZWFkeSBjb3ZlcmluZyB0aGluZ3MgbGlrZSBzeXNjdGwgaGFuZGxpbmcsIHRhYmxlIGR1cGxpY2F0aW9uLCBhbmQgYmFzaWMgc29ja2V0IHF1ZXVlIGxlbmd0aHMuIFRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyB0aGUgdHlwZSBvZiBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCwgYW5kIGFkanVzdHMgdGhlIHN5c2N0bCBoYW5kbGVyLiBJdCdzIGp1c3QgYSByZWZhY3RvcmluZy4gSXQncyBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncywgaXNu4oCZdCB0b3VjaGluZyBhbnkgYnVmZmVyIGJvdW5kYXJpZXMgZm9yIGNvcHkgb3BlcmF0aW9ucywgYW5kIGlzbid0IGdlbmVyYXRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGNvcGllcy4gSXTigJlzIGEgY2xlYW4gYW5kIGxvY2FsaXplZCBjaGFuZ2UuXG5cbk9rYXksIHRoYXQncyBlbm91Z2ggZm9yIG1lLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NDcsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDg6NTEuNDEwMDM1NTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzeXNjdGwgcGFyYW1ldGVyICduZXQudW5peC5tYXhfZGdyYW1fcWxlbicgYW5kIHRoZSBmaWVsZCAnc3lzY3RsX21heF9kZ3JhbV9xbGVuJyBpbiBzdHJ1Y3QgbmV0bnNfdW5peCBmcm9tICdpbnQnIHRvICd1bnNpZ25lZCBpbnQnLCBzd2l0Y2hpbmcgdGhlIHByb2MgaGFuZGxlciBmcm9tIHByb2NfZG9pbnR2ZWMgdG8gcHJvY19kb3VpbnR2ZWNfbWlubWF4LiBcXG5cXG5UaGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCB0byAxMCBpbiB1bml4X25ldF9pbml0KCksIGFuZCByZWFkaW5nL3dyaXRpbmcgdGhyb3VnaCBwcm9jX2RvdWludHZlY19taW5tYXggb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhpcyBpbml0aWFsaXplZCB1bnNpZ25lZCBpbnRlZ2VyLiBUaGVyZSBhcmUgbm8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcnMsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGNoYW5nZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHN5c2N0bCBwYXJhbWV0ZXIgJ25ldC51bml4Lm1heF9kZ3JhbV9xbGVuJyBhbmQgdGhlIGZpZWxkICdzeXNjdGxfbWF4X2RncmFtX3FsZW4nIGluIHN0cnVjdCBuZXRuc191bml4IGZyb20gJ2ludCcgdG8gJ3Vuc2lnbmVkIGludCcsIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxcblxcblRoZSB2YXJpYWJsZSBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHRvIDEwIGluIHVuaXhfbmV0X2luaXQoKSwgYW5kIHJlYWRpbmcvd3JpdGluZyB0aHJvdWdoIHByb2NfZG91aW50dmVjX21pbm1heCBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGlzIGluaXRpYWxpemVkIHVuc2lnbmVkIGludGVnZXIuIFRoZXJlIGFyZSBubyBuZXdseSBhbGxvY2F0ZWQgYnVmZmVycywgbm8gc3RydWN0dXJlIHBhZGRpbmcgY2hhbmdlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqk9np[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 09:05:06 +0000 UTC FinishedAt: 2026-08-29 09:08:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "SYSCTL" ], "series_id": "0701ee87-fe45-4126-814c-c6cffb2bd191" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "unix_sysctl_register" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzeXNjdGwgcGFyYW1ldGVyICYjMzk7bmV0LnVuaXgubWF4X2RncmFtX3FsZW4mIzM5OyBhbmQgdGhlIGZpZWxkICYjMzk7c3lzY3RsX21heF9kZ3JhbV9xbGVuJiMzOTsgaW4gc3RydWN0IG5ldG5zX3VuaXggZnJvbSAmIzM5O2ludCYjMzk7IHRvICYjMzk7dW5zaWduZWQgaW50JiMzOTssIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxuXG5UaGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCB0byAxMCBpbiB1bml4X25ldF9pbml0KCksIGFuZCByZWFkaW5nL3dyaXRpbmcgdGhyb3VnaCBwcm9jX2RvdWludHZlY19taW5tYXggb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhpcyBpbml0aWFsaXplZCB1bnNpZ25lZCBpbnRlZ2VyLiBUaGVyZSBhcmUgbm8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcnMsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGNoYW5nZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVU5JWCBzb2NrZXQgc3lzY3RsIHRhYmxlIHRvIHVzZSB1bnNpZ25lZCBpbnRlZ2VyIHNlbWFudGljcyBhbmQgcHJvY19kb3VpbnR2ZWNfbWlubWF4IGZvciBuZXQudW5peC5tYXhfZGdyYW1fcWxlbiBpbnN0ZWFkIG9mIHByb2NfZG9pbnR2ZWMuIFRoaXMgY2hhbmdlcyBzeXNjdGwgaW5wdXQgdmFsaWRhdGlvbiBhbmQgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBmNjM2YTAwZDU1YWRkMGZmYzJiMTBmNjZiYTVjYjIwNjdiYWQ1MWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwOTowNjo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZmUxY2E4NmYyODJmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtMzgxOCw4ICYjNDM7MzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOXG4gYGAvcHJvYy9zeXMvbmV0L3VuaXgvKmBgXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4tbWF4X2RncmFtX3FsZW4gLSBJTlRFR0VSXG4mIzQzO21heF9kZ3JhbV9xbGVuIC0gVU5TSUdORUQgSU5URUdFUlxuIFx0VGhlIG1heGltdW0gbGVuZ3RoIG9mIGRncmFtIHNvY2tldCByZWNlaXZlIHF1ZXVlXG4gXG4tXHREZWZhdWx0OiAxMFxuJiM0MztcdE5lZ2F0aXZlIHZhbHVlcyBhcmUgcmVqZWN0ZWQuXG4gXG4mIzQzO1x0RGVmYXVsdDogMTBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmggYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbmluZGV4IDk4NTlkMTM0ZDVhODkuLmUyMzNjNDI4MzI0M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuQEAgLTE1LDcgJiM0MzsxNSw3IEBAIHN0cnVjdCB1bml4X3RhYmxlIHtcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbiBzdHJ1Y3QgbmV0bnNfdW5peCB7XG4gXHRzdHJ1Y3QgdW5peF90YWJsZVx0dGFibGU7XG4tXHRpbnRcdFx0XHRzeXNjdGxfbWF4X2RncmFtX3FsZW47XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyXHQqY3RsO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTE3LDkgJiM0MzsxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21heF9kZ3JhbV9xbGVuXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG4tXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLVx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LFxuIFx0fSxcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVOSVggc29ja2V0IHN5c2N0bCB0YWJsZSB0byB1c2UgdW5zaWduZWQgaW50ZWdlciBzZW1hbnRpY3MgYW5kIHByb2NfZG91aW50dmVjX21pbm1heCBmb3IgbmV0LnVuaXgubWF4X2RncmFtX3FsZW4gaW5zdGVhZCBvZiBwcm9jX2RvaW50dmVjLiBUaGlzIGNoYW5nZXMgc3lzY3RsIGlucHV0IHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZjYzNmEwMGQ1NWFkZDBmZmMyYjEwZjY2YmE1Y2IyMDY3YmFkNTFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDk6MDY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CmluZGV4IDIwOGY0Njk2N2VlNTkuLjJmZTFjYTg2ZjI4MmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CkBAIC0zODE4LDggJiM0MzszODE4LDkgQEAgbDNtZGV2X2FjY2VwdCAtIEJPT0xFQU4KIGBgL3Byb2Mvc3lzL25ldC91bml4LypgYAogPT09PT09PT09PT09PT09PT09PT09PT09CiAKLW1heF9kZ3JhbV9xbGVuIC0gSU5URUdFUgomIzQzO21heF9kZ3JhbV9xbGVuIC0gVU5TSUdORUQgSU5URUdFUgogCVRoZSBtYXhpbXVtIGxlbmd0aCBvZiBkZ3JhbSBzb2NrZXQgcmVjZWl2ZSBxdWV1ZQogCi0JRGVmYXVsdDogMTAKJiM0MzsJTmVnYXRpdmUgdmFsdWVzIGFyZSByZWplY3RlZC4KIAomIzQzOwlEZWZhdWx0OiAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oCmluZGV4IDk4NTlkMTM0ZDVhODkuLmUyMzNjNDI4MzI0M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmgKQEAgLTE1LDcgJiM0MzsxNSw3IEBAIHN0cnVjdCB1bml4X3RhYmxlIHsKIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyOwogc3RydWN0IG5ldG5zX3VuaXggewogCXN0cnVjdCB1bml4X3RhYmxlCXRhYmxlOwotCWludAkJCXN5c2N0bF9tYXhfZGdyYW1fcWxlbjsKJiM0MzsJdW5zaWduZWQgaW50CQlzeXNjdGxfbWF4X2RncmFtX3FsZW47CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmN0bDsKIH07CiAKZGlmZiAtLWdpdCBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKQEAgLTE3LDkgJiM0MzsxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7bWF4X2RncmFtX3FsZW4mIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKJiM0MzsJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvdWludHZlY19taW5tYXgsCiAJfSwKIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb21taXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdXBkYXRpbmcgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBtYXhfZGdyYW1fcWxlbmAgaW4gdGhlIGBpcC1zeXNjdGwucnN0YCBmaWxlLiBUaGF0JiMzOTtzIGdvb2QsIGFsd2F5cyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgZG9jcyBpbiBzeW5jLiBUaGVuLCB0aGVyZSYjMzk7cyBhIGNoYW5nZSBpbiBgaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oYCB3aGVyZSB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgZnJvbSBhIHNpZ25lZCBgaW50YCB0byBhbiB1bnNpZ25lZCBgdW5zaWduZWQgaW50YC4gSW50ZXJlc3RpbmfigKYgVGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zLiBBbmQgZmluYWxseSwgaW4gYG5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jYCwgd2UmIzM5O3JlIGdldHRpbmcgYSBzaXplIGNoYW5nZSBmb3IgYG1heGxlbmAgYW5kIHVwZGF0aW5nIHRoZSBgcHJvY19oYW5kbGVyYCB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gUmlnaHQsIHRoaXMgcHJvYmFibHkgbWVhbnMgd2UmIzM5O3JlIGFsbG93aW5nIGZvciBsYXJnZXIgcXVldWUgbGVuZ3RocyBub3csIHVzaW5nIGEgbW9yZSByb2J1c3Qgc3lzY3RsIGhhbmRsZXIuCgpTbywgdGhlIGtleSBoZXJlIGlzIHRoYXQgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZSBjaGFuZ2UgdG8gaXRzIHR5cGUgYW5kIHRoZSBpbmNyZWFzZWQgbWF4IHZhbHVlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGp1c3QgcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCB0byBsb2NhdGUgYWxsIHRoZSByZWxldmFudCBvY2N1cnJlbmNlcyBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaXRzIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2N0bF9tYXhfZGdyYW1fcWxlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRucy91bml4Lmg9MTY9c3RydWN0IG5ldG5zX3VuaXgge1xuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oLTE3LVx0c3RydWN0IHVuaXhfdGFibGVcdHRhYmxlO1xuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oOjE4Olx0dW5zaWduZWQgaW50XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbmluY2x1ZGUvbmV0L25ldG5zL3VuaXguaC0xOS1cdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyXHQqY3RsO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0xMDk0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdW5peF9jcmVhdGUxKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4sIGludCB0eXBlKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMTIxLVx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2VcdD0gdW5peF93cml0ZV9zcGFjZTtcbm5ldC91bml4L2FmX3VuaXguYzoxMTIyOlx0c2stXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nXHQ9IFJFQURfT05DRShuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbik7XG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cdHNrLVx1MDAzZXNrX2Rlc3RydWN0XHRcdD0gdW5peF9zb2NrX2Rlc3RydWN0b3I7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4MTM9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODE2LVxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTc6XHRuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiA9IDEwO1xubmV0L3VuaXgvYWZfdW5peC5jLTM4MTgtXHRpZiAodW5peF9zeXNjdGxfcmVnaXN0ZXIobmV0KSlcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMTgtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDttYXhfZGdyYW1fcWxlblwmIzM0Oyxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjE5Olx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0yMC1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxuLS1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMzMtXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozNDpcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3lzY3RsIERlZmluaXRpb24gQ2hhbmdlIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgY2hhbmdlcyB0aGUgc3lzY3RsIGRlZmluaXRpb24gZm9yIGBuZXQudW5peC5tYXhfZGdyYW1fcWxlbmAuIEl0JiMzOTtzIG1vdmluZyBmcm9tIHVzaW5nIGBwcm9jX2RvaW50dmVjYCB3aXRoIGFuIGBpbnRgIHRvIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHdpdGggYW4gYHVuc2lnbmVkIGludGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgc3BlbmQgdGltZSBmdXp6aW5nIG9yIGlmIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBtaW5vciwgcG90ZW50aWFsbHkgaW5zaWduaWZpY2FudCwgbW9kaWZpY2F0aW9uLgoKV2FpdCBhIG1vbWVudCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgZmlyc3QuIExldCYjMzk7cyBtYWtlIHN1cmU6ICpvbmx5KiBjaGFuZ2VzIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBjb3NtZXRpYyBsb2dnaW5nIGNoYW5nZXMsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY29uc3RhbnQgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIChyZXF1aXJpbmcgc3BlY2lhbCBoYXJkd2FyZSkgc2hvdWxkIGJlIGZsYWdnZWQgYXMgbm90IHdvcnRoIGZ1enppbmcuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgZHVyaW5nIHVucGx1Zy91bmJpbmQgYXJlIGFsc28gbm90IHdvcnRoIGZ1enppbmcuIEFscmlnaHQsIHRoYXQmIzM5O3MgdGhlIHNjb3BlLgoKT2theSwgYmFjayB0byB0aGUgY2hhbmdlLiBUaGlzICppcyogYSBjaGFuZ2UgdG8gdGhlIHN5c2N0bCB0YWJsZSwgbm90IGp1c3QgYSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnQgdXBkYXRlLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNoYW5nZSBpbiB0aGUgKnR5cGUqIG9mIHRoZSBzeXNjdGwgaGFuZGxlcjogdXNpbmcgYHByb2NfZG91aW50dmVjX21pbm1heGAgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN5c2N0bC4gU3BlY2lmaWNhbGx5LCBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCB3aWxsIG5vdyB2YWxpZGF0ZSB2YWx1ZXMsIHJlamVjdGluZyBhbmQgY2xhbXBpbmcgbmVnYXRpdmUgdmFsdWVzLiBQcmV2aW91c2x5LCBzeXNjdGwgd3JpdGVycyBjb3VsZCBoYXZlIHNldCBuZWdhdGl2ZSB2YWx1ZXMhCgpTbywgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgdGhpcyBjb25zdGl0dXRlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBJdCAqY291bGQqIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYmVjYXVzZSB0aGUgc3lzY3RsIHRhYmxlIHdpbGwgYmUgbW9kaWZpZWQuCgpJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHRoaXMuIFdlJiMzOTtyZSBub3QgbmVjZXNzYXJpbHkgZnV6emluZyAqc3lzY3RsKiBpdHNlbGYsIHJpZ2h0PyBXZSYjMzk7cmUgcG90ZW50aWFsbHkgZnV6emluZyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBwcm9jZXNzLiBXaGF0IGZ1bmN0aW9ucyB3b3VsZCBiZSBhZmZlY3RlZCBhbmQgdGhlcmVmb3JlIGZ1enplZD8gV291bGQgaXQgYmUgc29tZXRoaW5nIGxpa2UgdGhlIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgb3IgYHVuaXhfY3JlYXRlMWAgZnVuY3Rpb25zPwoKTGV0IG1lIGp1c3QgcmUtcmVhZCB0aGUgd29ydGggZnV6emluZyBjcml0ZXJpYSBvbmNlIG1vcmU6IGFueSBjb3JlIGxvZ2ljLCBkcml2ZXJzIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFyZSB3b3J0aCBmdXp6aW5nLgoKQWxyaWdodCwgd2hhdCBleGFjdGx5IGRpZCB0aGlzIHBhdGNoIG1vZGlmeT8gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc3lzdGVtPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBORVQ0Olx0U3lzY3RsIGludGVyZmFjZSB0byBuZXQgYWZfdW5peCBzdWJzeXN0ZW0uXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBBdXRob3JzOlx0TWlrZSBTaGF2ZXIuXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9hZl91bml4LmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG4gIDEzOlx0XG4gIDE0Olx0I2luY2x1ZGUgXCYjMzQ7YWZfdW5peC5oXCYjMzQ7XG4gIDE1Olx0XG4gIDE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuICAxNzpcdFx0e1xuICAxODpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bWF4X2RncmFtX3FsZW5cJiMzNDssXG4gIDE5Olx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbixcbiAgMjA6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxuICAyMTpcdFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gIDIyOlx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LFxuICAyMzpcdFx0fSxcbiAgMjQ6XHR9O1xuICAyNTpcdFxuICAyNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4gIDI3Olx0e1xuICAyODpcdFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gIDI5Olx0XG4gIDMwOlx0XHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiAgMzE6XHRcdGlmICghdGFibGUpXG4gIDMyOlx0XHRcdHJldHVybiBOVUxMO1xuICAzMzpcdFxuICAzNDpcdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuICAzNTpcdFxuICAzNjpcdFx0cmV0dXJuIHRhYmxlO1xuICAzNzpcdH1cbiAgMzg6XHRcbiAgMzk6XHRpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4gIDQwOlx0e1xuICA0MTpcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gIDQ0Olx0XHRcdHRhYmxlID0gdW5peF90YWJsZTtcbiAgNDU6XHRcdH0gZWxzZSB7XG4gIDQ2Olx0XHRcdHRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTtcbiAgNDc6XHRcdFx0aWYgKCF0YWJsZSlcbiAgNDg6XHRcdFx0XHRnb3RvIGVycl9hbGxvYztcbiAgNDk6XHRcdH1cbiAgNTA6XHRcbiAgNTE6XHRcdG5ldC1cdTAwM2V1bnguY3RsID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC91bml4XCYjMzQ7LCB0YWJsZSxcbiAgNTI6XHRcdFx0XHRcdFx0ICAgICAgQVJSQVlfU0laRSh1bml4X3RhYmxlKSk7XG4gIDUzOlx0XHRpZiAobmV0LVx1MDAzZXVueC5jdGwgPT0gTlVMTClcbiAgNTQ6XHRcdFx0Z290byBlcnJfcmVnO1xuICA1NTpcdFxuICA1NjpcdFx0cmV0dXJuIDA7XG4gIDU3Olx0XG4gIDU4Olx0ZXJyX3JlZzpcbiAgNTk6XHRcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuICA2MDpcdFx0XHRrZnJlZSh0YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6ICYjMzQ7V2hhdCBoYXBwZW5zIHdoZW4gd2Ugd3JpdGUgdG8gYG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuYD8mIzM0OyBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGNoYW5naW5nIGhvdyB0aGlzIHN5c2N0bCBpcyBoYW5kbGVkLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBwcm9jX2RvaW50dmVjYCB3aXRoIGFuIGBpbnRgLCBidXQgbm93IGl0JiMzOTtzIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHdpdGggYW4gYHVuc2lnbmVkIGludGAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaWYgdGhpcyBjaGFuZ2UganVzdGlmaWVzIGZ1cnRoZXIgZnV6emluZyBlZmZvcnRzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBDYW4gc3l6a2FsbGVyIGFjdHVhbGx5IHdyaXRlIHRvIGAvcHJvYy9zeXMvbmV0L3VuaXgvbWF4X2RncmFtX3FsZW5gIGFuZCBjcmVhdGUgVU5JWCBzb2NrZXRzPyBZZXMsIEkga25vdyBzeXNjdGwgd3JpdGVzIGFyZSBhIGNvbW1vbiB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBVTklYIHNvY2tldCBjcmVhdGlvbiBsaWtlbHkgKnJlYWRzKiB0aGF0IHN5c2N0bCB2YWx1ZS4gQnV0IGlzIHRoaXMgYSBtaW5vciBpbnB1dCB2YWxpZGF0aW9uIHR3ZWFrPwoKSG9sZCBvbi4gTGV0IG1lIGNvbnN1bHQgdGhlIGV4cGxpY2l0IGluc3RydWN0aW9ucyBoZXJlLCBiZWNhdXNlIEkgcmVjYWxsIGEgbmVnYXRpdmUgbGlzdC4gVGhlIHByb21wdCBnaXZlcyBtZSBhIHByZWNpc2Ugc2V0IG9mIGNyaXRlcmlhLgoKVGhlIHByb21wdCBlc3NlbnRpYWxseSB0ZWxscyBtZSAmIzM0O2RvbiYjMzk7dCBib3RoZXIgZnV6emluZyYjMzQ7IGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGRvY3VtZW50YXRpb24sIEtjb25maWcgY2hhbmdlcywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIEFsc28sIGl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIFBDSWUvU21hcnROSUMvR1BVIGRyaXZlcnMgYW5kIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MuIEkmIzM5O20gcmVhbGx5IGdsYWQgZm9yIHRoaXMgbmVnYXRpdmUgbGlzdCwgYmVjYXVzZSBpdCBxdWlja2x5IGhlbHBzIGV2YWx1YXRlIGEgY2hhbmdlLgoKVGhlIHBvc2l0aXZlIGNyaXRlcmlhOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKCkFscmlnaHQsIGxldCYjMzk7cyBhcHBseSB0aGUgcHJvbXB0IHRvIHRoZSBjdXJyZW50IHBhdGNoLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBBRl9VTklYIHN5c2N0bCBoYW5kbGVyIGluIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AgYW5kIGBpbmNsdWRlL25ldC9uZXRucy91bml4LmhgLiBJdCBpbnZvbHZlcyBhIGRhdGEgdHlwZSBjaGFuZ2UgZnJvbSBgaW50YCB0byBgdW5zaWduZWQgaW50YCwgYW5kIHRoZSBwcm9jIGhhbmRsZXIgY2hhbmdlcyBmcm9tIGBwcm9jX2RvaW50dmVjYCB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gVGhpcyBpcyBpbnNpZGUgdGhlIGNvcmUgVU5JWCBzb2NrZXQgc3Vic3lzdGVtLiBJdCYjMzk7cyBmdWxseSBhY2Nlc3NpYmxlLCByZWFjaGFibGUsIGFuZCB0ZXN0YWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBLY29uZmlnIHRvIG1ha2Ugc3VyZSBBRl9VTklYIGlzIGVuYWJsZWQgYnV0LCBiYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhpcyBjaGFuZ2UgbG9va3MgbGlrZSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNy1cdG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XG5uZXQvdW5peC9hZl91bml4LmM6MzgxODpcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTktXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC91bml4L2FmX3VuaXguaD0zNz1sb25nIHVuaXhfb3V0cV9sZW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmgtNDAtI2lmZGVmIENPTkZJR19TWVNDVExcbm5ldC91bml4L2FmX3VuaXguaDo0MTppbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaC00Mi12b2lkIHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaC00My0jZWxzZVxubmV0L3VuaXgvYWZfdW5peC5oOjQ0OnN0YXRpYyBpbmxpbmUgaW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L2FmX3VuaXguaC00NS17XG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM5OmludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBVbml4IERvbWFpbiBTb2NrZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVuaXggZG9tYWluIHNvY2tldHMgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYG5ldC91bml4L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzLiBUaGVuLCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgYXNwZWN0cywgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBuZXQvdW5peC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHNob3VsZCBmaW5kIGFsbCB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgdGhlIFVuaXggZG9tYWluIHNvY2tldCBmdW5jdGlvbmFsaXR5LiBIb3BlZnVsbHksIHRoZXNlIHR3byBmaWxlcywgd29ya2luZyBpbiB0YW5kZW0sIHdpbGwgcHJvdmlkZSB0aGUgY29tcGxldGUgcGljdHVyZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaXMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2N0bF9uZXRfdW5peCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L01ha2VmaWxlPTg9dW5peC15XHRcdFx0Oj0gYWZfdW5peC5vIGdhcmJhZ2Uub1xubmV0L3VuaXgvTWFrZWZpbGU6OTp1bml4LSQoQ09ORklHX1NZU0NUTClcdCYjNDM7PSBzeXNjdGxfbmV0X3VuaXgub1xubmV0L3VuaXgvTWFrZWZpbGUtMTAtdW5peC0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVuaXhfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyOQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgVU5JWCBEb21haW4gU29ja2V0cyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVOSVggZG9tYWluIHNvY2tldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBhcmUgYG5ldC91bml4L0tjb25maWdgIGFuZCBgbmV0L0tjb25maWdgLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIHVuZGVyIG9uZSBvZiB0aG9zZSwgYWx0aG91Z2ggdGhlIG9yZ2FuaXphdGlvbmFsIHN0cnVjdHVyZSBjYW4gYmUgYSBiaXTigKYgaWRpb3N5bmNyYXRpYyBhdCB0aW1lcy4gTXkgZ3V0IHNheXMgaXQmIzM5O2xsIGJlIGluIGBuZXQvdW5peC9LY29uZmlnYCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgVU5JWCBzb2NrZXRzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYm90aCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IHJlbGV2YW50IGNyb3NzLXJlZmVyZW5jaW5nIG9yIGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBjb25maWcgaGFzIHRvIHNheS4gTm8gcG9pbnQgaW4gbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhdCB0aGlzIHBvaW50LCBiZXN0IHRvIHZlcmlmeSBteSBtZW50YWwgbW9kZWwgYWdhaW5zdCB0aGUgYWN0dWFsIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVOSVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTE0OD1jb25maWcgU09MQVJJU19YODZfUEFSVElUSU9OXG4tLVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE1Ny1cbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzoxNTg6Y29uZmlnIFVOSVhXQVJFX0RJU0tMQUJFTFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE1OS1cdGJvb2wgXCYjMzQ7VW5peHdhcmUgc2xpY2VzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnPTc4PWNvbmZpZyBWVF9IV19DT05TT0xFX0JJTkRJTkdcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnLTkzLVxuZHJpdmVycy90dHkvS2NvbmZpZzo5NDpjb25maWcgVU5JWDk4X1BUWVNcbmRyaXZlcnMvdHR5L0tjb25maWctOTUtXHRib29sIFwmIzM0O1VuaXg5OCBQVFkgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvdW5peC9LY29uZmlnLTUtXG5uZXQvdW5peC9LY29uZmlnOjY6Y29uZmlnIFVOSVhcbm5ldC91bml4L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VW5peCBkb21haW4gc29ja2V0c1wmIzM0O1xuLS1cbm5ldC91bml4L0tjb25maWc9MTk9Y29uZmlnXHRBRl9VTklYX09PQlxuLS1cbm5ldC91bml4L0tjb25maWctMjUtXG5uZXQvdW5peC9LY29uZmlnOjI2OmNvbmZpZyBVTklYX0RJQUdcbm5ldC91bml4L0tjb25maWctMjctXHR0cmlzdGF0ZSBcJiMzNDtVTklYOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLY29uZmlnIGZvciBhIENvbXByZWhlbnNpdmUgVmlldyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBjb21wcmVoZW5zaXZlIGluZm9ybWF0aW9uIGlzIHRoZSBgbmV0L3VuaXgvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgaGVhZCBzdHJhaWdodCB0aGVyZSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBwb3NzaWJsZSwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBzdHJ1Y3R1cmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLiBJIHdhbnQgdG8gc2VlIGV2ZXJ5dGhpbmcgYXQgb25jZSwgbm90IGp1c3Qgc25pcHBldHMuIFRoYXQgS2NvbmZpZyBmaWxlIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBhdmFpbGFibGUgYnVpbGQtdGltZSBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVW5peCBEb21haW4gU29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgVU5JWFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtVbml4IGRvbWFpbiBzb2NrZXRzXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XG4gIDEwOlx0XHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxuICAxMTpcdFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXG4gIDEyOlx0XHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcbiAgMTM6XHRcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxuICAxNDpcdFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxuICAxNTpcdFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnXHRBRl9VTklYX09PQlxuICAyMDpcdFx0Ym9vbCBcJiMzNDtVTklYOiBvdXQtb2YtYm91bmQgbWVzc2FnZXNcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVU5JWFxuICAyMjpcdFx0ZGVmYXVsdCB5XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgVU5JWF9ESUFHXG4gIDI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVTklYOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMjg6XHRcdGRlcGVuZHMgb24gVU5JWFxuICAyOTpcdFx0ZGVmYXVsdCBuXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFN1cHBvcnQgZm9yIFVOSVggc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MzkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVU5JWCBhbmQgU1lTQ1RMIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFVOSVggYW5kIFNZU0NUTCBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGVzZSBzZXR0aW5ncy4gTG9va3MgbGlrZSBgVU5JWGAgYW5kIGBTWVNDVExgIGFyZSB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVnaXN0ZXJzIHRoZXNlIHNldHRpbmdzLiBMZXQgbWUgY2hlY2sgZm9yIHJlbGV2YW50ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIGVzc2VudGlhbGx5LCB0aGUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgZGVmaW5pbmcgdGhpcyBjb25maWd1cmF0aW9uLgoKSG1tLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIHNlZW1zIHByb21pc2luZy4gV2FpdCwgaXQmIzM5O3Mgbm90IHN0YXRpYz8gSW50ZXJlc3RpbmcuIGBpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzeXNjdGwgZW50cmllcyBhcmUgYWN0dWFsbHkgYWNjZXNzZWQuIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHRocm91Z2ggcHJvY2ZzIHN5c2N0bCBoYW5kbGVycy4gSSYjMzk7bSByZW1lbWJlcmluZyB0aGlzIGZyb20gZXhwZXJpZW5jZSwgc2luY2UgSSBvZnRlbiB3b3JrIHdpdGggcHJvY2ZzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBzb21ldGhpbmcgbGlrZSBgL3Byb2Mvc3lzL25ldC91bml4L21heF9kZ3JhbV9xbGVuYCBpcyBoYW5kbGVkLiBSaWdodCwgd3JpdGVzIGFuZCByZWFkcyB0byB0aGF0IGZpbGUgdHJpZ2dlciBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gSXQgYXBwZWFycyB0aGF0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoaXMgc3lzY3RsIGVudHJ5LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gY29uZmlybWF0aW9uIHRoYXQgaXQgcmVnaXN0ZXJzIHRoZSBzeXNjdGwgZW50cnkuIEkgY2FuIHNlZSB0aGF0IGB1bml4X2NyZWF0ZTFgIHJlYWRzIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gLiBJIG5lZWQgdG8gYmUgY2VydGFpbi4KCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCAmIzM0O0ZvY3VzU3ltYm9sJiMzNDsg4oCTIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBgbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNgLiBHb29kLCB0aGF0IG1ha2VzIGl0IGVhc3kgdG8gdHJhY2UuIEkmIzM5O20gY29uZmlybWluZyB0aGF0JiMzOTtzIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IG90aGVyIHBhcnRzLiBJcyBgdW5peF9jcmVhdGUxYCBzdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bml4X2NyZWF0ZTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9MTA4Mz1zdHJ1Y3QgcHJvdG8gdW5peF9zdHJlYW1fcHJvdG8gPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwOTMtXG5uZXQvdW5peC9hZl91bml4LmM6MTA5NDpzdGF0aWMgc3RydWN0IHNvY2sgKnVuaXhfY3JlYXRlMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuLCBpbnQgdHlwZSlcbm5ldC91bml4L2FmX3VuaXguYy0xMDk1LXtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MTE0OT1zdGF0aWMgaW50IHVuaXhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMTc5LVxubmV0L3VuaXgvYWZfdW5peC5jOjExODA6XHRzayA9IHVuaXhfY3JlYXRlMShuZXQsIHNvY2ssIGtlcm4sIHNvY2stXHUwMDNldHlwZSk7XG5uZXQvdW5peC9hZl91bml4LmMtMTE4MS1cdGlmIChJU19FUlIoc2spKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYz0xNjM0PXN0YXRpYyBpbnQgdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTE2NjctXHQvKiBjcmVhdGUgbmV3IHNvY2sgZm9yIGNvbXBsZXRlIGNvbm5lY3Rpb24gKi9cbm5ldC91bml4L2FmX3VuaXguYzoxNjY4Olx0bmV3c2sgPSB1bml4X2NyZWF0ZTEobmV0LCBOVUxMLCAwLCBzb2NrLVx1MDAzZXR5cGUpO1xubmV0L3VuaXgvYWZfdW5peC5jLTE2NjktXHRpZiAoSVNfRVJSKG5ld3NrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSBjb250ZXh0IG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFsczoKCioqRGl2aW5nIGludG8gc3lzY3RsIFJlZ2lzdHJhdGlvbiBhbmQgRGVyZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgYW5kIGB1bml4X3N5c2N0bF91bnJlZ2lzdGVyYC4gVGhlc2UgYXJlICpjcnVjaWFsKiBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoYXQgYC9wcm9jL3N5c2AgaW50ZXJmYWNlLCB0aGUgZ2F0ZXdheSB0byBrZXJuZWwgdHVuYWJsZXMgYW5kIHN5c3RlbSBzdGF0ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MsIGVzcGVjaWFsbHkgaW4gdGhlIFVuaXggY29udGV4dC4gVGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBnb3QgaXRzIG51YW5jZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGEgcHJvcGVyIGFuZCBjbGVhbiBoYW5kbGluZyBvZiB0aGUgY29udHJvbCBub2RlIGxpZmVjeWNsZS4KCmB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgdGhlIGtleS4gSSBiZXQgaXQgaGFuZGxlcyBhbGwgdGhlIGhlYXZ5IGxpZnRpbmcg4oCTIGFsbG9jYXRpb24gb2YgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMsIHNldHRpbmcgdXAgdGhlIGxpbmthZ2UgdG8gdGhlIHN5c2N0bCB0cmVlLCBhbmQgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgKHdobyBjYW4gcmVhZC93cml0ZSB3aGF0KSBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgc2VjdXJpdHkgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaG93IGl0IGhhbmRsZXMgY29uZmxpY3RzIGlmIHNvbWVvbmUgdHJpZXMgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgbmFtZSB0d2ljZTsgYSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aCBpcyBjcml0aWNhbCBoZXJlLiBBbmQgd2hhdCBhYm91dCBpbmhlcml0YW5jZT8gSWYgSSYjMzk7bSByZWdpc3RlcmluZyBhIG5vZGUgdW5kZXIgYW4gZXhpc3RpbmcgYnJhbmNoLCBob3cgZG9lcyBpdCBtYW5hZ2UgaW5oZXJpdGluZyBwcm9wZXJ0aWVzIGZyb20gdGhlIHBhcmVudD8gVGhpcyBpcyBhbGwgYWJvdXQgY29uc3RydWN0aW5nIHRoZSBoaWVyYXJjaHkgY29ycmVjdGx5LgoKQ29udmVyc2VseSwgYHVuaXhfc3lzY3RsX3VucmVnaXN0ZXJgIG11c3QgbWV0aWN1bG91c2x5IGRpc21hbnRsZSB0aGUgZW50cmllcy4gTWVtb3J5IGxlYWtzIGluIHRoaXMgYXJlYSBhcmUgKnVuYWNjZXB0YWJsZSouIFdlIG5lZWQgdG8gcmVsZWFzZSBhbGwgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzLCBzZXZlciB0aGUgbGlua3MgaW4gdGhlIHN5c2N0bCB0cmVlLCBhbmQgaGFuZGxlIGFueSByYWNlIGNvbmRpdGlvbnMgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgY29udHJvbCBub2RlLiBQcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjYXJlZnVsIHVzZSBvZiBtdXRleGVzLCB3aWxsIGJlIHZpdGFsIHRvIG1ha2luZyB0aGlzIHByb2Nlc3Mgcm9idXN0LiBJIG5lZWQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGZyZWVpbmcgYSBub2RlIHdpdGggYWN0aXZlIGNoaWxkcmVuLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyBpbiBib3RoIGZ1bmN0aW9ucy4gV2hhdCBoYXBwZW5zIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBXaGF0IGFib3V0IGludmFsaWQgYXJndW1lbnRzIG9yIGF0dGVtcHRzIHRvIGRlcmVnaXN0ZXIgc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IHJlZ2lzdGVyZWQ/IEkmIzM5O20gaG9waW5nIHRvIHNlZSB3ZWxsLWRlZmluZWQgZXJyb3IgY29kZXMgYW5kIHBlcmhhcHMgc29tZSBpbmZvcm1hdGl2ZSBsb2dnaW5nLiBUaGUgc3lzdGVtIGhhcyB0byBiZSBmYXVsdC10b2xlcmFudCB3aGVuIG90aGVyIHByb2dyYW1zIHVzZSBpdC4KCkluIGVzc2VuY2UsIHVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIHVuZGVyc3RhbmRpbmcgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgVW5peCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTWFraW5nIGNoYW5nZXMgdG8gYHN5c2N0bGAgaXMgYW4gZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFiaWxpdHksIHNvIHRoZXkgKm11c3QqIGJlIGRvbmUgY29ycmVjdGx5LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc3lzY3RsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNy1cdG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XG5uZXQvdW5peC9hZl91bml4LmM6MzgxODpcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTktXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODUwLSNlbmRpZlxubmV0L3VuaXgvYWZfdW5peC5jOjM4NTE6XHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XG5uZXQvdW5peC9hZl91bml4LmMtMzg1Mi1vdXQ6XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4NTY9c3RhdGljIHZvaWQgX19uZXRfZXhpdCB1bml4X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzg1OS1cdGt2ZnJlZShuZXQtXHUwMDNldW54LnRhYmxlLmxvY2tzKTtcbm5ldC91bml4L2FmX3VuaXguYzozODYwOlx0dW5peF9zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xubmV0L3VuaXgvYWZfdW5peC5jLTM4NjEtXHRyZW1vdmVfcHJvY19lbnRyeShcJiMzNDt1bml4XCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXQpO1xuLS1cbm5ldC91bml4L2FmX3VuaXguaD0zNz1sb25nIHVuaXhfb3V0cV9sZW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmgtNDAtI2lmZGVmIENPTkZJR19TWVNDVExcbm5ldC91bml4L2FmX3VuaXguaDo0MTppbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaDo0Mjp2b2lkIHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC91bml4L2FmX3VuaXguaC00My0jZWxzZVxubmV0L3VuaXgvYWZfdW5peC5oOjQ0OnN0YXRpYyBpbmxpbmUgaW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L2FmX3VuaXguaC00NS17XG4tLVxubmV0L3VuaXgvYWZfdW5peC5oLTQ4LVxubmV0L3VuaXgvYWZfdW5peC5oOjQ5OnN0YXRpYyBpbmxpbmUgdm9pZCB1bml4X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L2FmX3VuaXguaC01MC17XG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM5OmludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTQwLXtcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy02NC1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjY1OnZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy02Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg0CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBLZXJuZWwgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCBmdW5jdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHNvbWV0aGluZyB3ZSYjMzk7cmUgYWN0dWFsbHkgdXNpbmc/IFJpZ2h0LCBpdCYjMzk7cyBhIHN0YW5kYXJkIHN5c2N0bCBoYW5kbGVyLCBwYXJ0IG9mIGBrZXJuZWwvc3lzY3RsLmNgLiBBbmQgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBpcyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBwdXR0aW5nIHRoaXMgc3lzY3RsIHRhYmxlIGludG8gcGxhY2UuIEdvb2QsIHRoYXQgY29uZmlybXMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCByZWxldmFuY2UuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIHRpY2tlZCBhbGwgdGhlIGJveGVzLiBPa2F5LCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpbmNsdWRlcyBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCB3aGljaCBsb29rcyBwcm9taXNpbmcuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgcmVxdWlyZXMgYFVOSVhgIGFuZCBgU1lTQ1RMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIEFGX1VOSVggc29ja2V0IGNvbnRleHQuCgpUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHNvbGlkOiBhIGNyaXRpY2FsIGNoYW5nZSBpbiBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCDigJMgc2hpZnRpbmcgZnJvbSBhIHNpZ25lZCBgaW50YCB0byBhbiB1bnNpZ25lZCBgaW50YCwgYW5kIG1vdmluZyB0aGUgaGFuZGxlciB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gSXQmIzM5O3MgYSBjbGVhciBtb2RpZmljYXRpb24gdG8gdGhlIEFGX1VOSVggc29ja2V0IHN5c2N0bCBpbnRlcmZhY2UsIGVmZmVjdGl2ZWx5IHJlamVjdGluZyBuZWdhdGl2ZSB2YWx1ZXMuIEFuZCB0aGUgYmlnIHBsdXMgaXMgdGhhdCBpdCBpcyByZWFjaGFibGUgdmlhIFFFTVUvR0NFLCBzbyBpdHMgZXhwb3N1cmUgaXMgaGlnaC4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aG9yb3VnaCBleGFtaW5hdGlvbi4KCkFscmlnaHQsIGxldCYjMzk7cyBsb2cgdGhpcyB3aXRoIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVTklYIHNvY2tldCBzeXNjdGwgdGFibGUgdG8gdXNlIHVuc2lnbmVkIGludGVnZXIgc2VtYW50aWNzIGFuZCBwcm9jX2RvdWludHZlY19taW5tYXggZm9yIG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuIGluc3RlYWQgb2YgcHJvY19kb2ludHZlYy4gVGhpcyBjaGFuZ2VzIHN5c2N0bCBpbnB1dCB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVTklYIHNvY2tldCBzeXNjdGwgdGFibGUgdG8gdXNlIHVuc2lnbmVkIGludGVnZXIgc2VtYW50aWNzIGFuZCBwcm9jX2RvdWludHZlY19taW5tYXggZm9yIG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuIGluc3RlYWQgb2YgcHJvY19kb2ludHZlYy4gVGhpcyBjaGFuZ2VzIHN5c2N0bCBpbnB1dCB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgc3lzY3RsIHBhcmFtZXRlciAmIzM5O25ldC51bml4Lm1heF9kZ3JhbV9xbGVuJiMzOTsgYW5kIHRoZSBmaWVsZCAmIzM5O3N5c2N0bF9tYXhfZGdyYW1fcWxlbiYjMzk7IGluIHN0cnVjdCBuZXRuc191bml4IGZyb20gJiMzOTtpbnQmIzM5OyB0byAmIzM5O3Vuc2lnbmVkIGludCYjMzk7LCBzd2l0Y2hpbmcgdGhlIHByb2MgaGFuZGxlciBmcm9tIHByb2NfZG9pbnR2ZWMgdG8gcHJvY19kb3VpbnR2ZWNfbWlubWF4LiBcblxuVGhlIHZhcmlhYmxlIGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gMTAgaW4gdW5peF9uZXRfaW5pdCgpLCBhbmQgcmVhZGluZy93cml0aW5nIHRocm91Z2ggcHJvY19kb3VpbnR2ZWNfbWlubWF4IG9wZXJhdGVzIGRpcmVjdGx5IG9uIHRoaXMgaW5pdGlhbGl6ZWQgdW5zaWduZWQgaW50ZWdlci4gVGhlcmUgYXJlIG5vIG5ld2x5IGFsbG9jYXRlZCBidWZmZXJzLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjaGFuZ2VzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGY2MzZhMDBkNTVhZGQwZmZjMmIxMGY2NmJhNWNiMjA2N2JhZDUxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDA5OjA2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li4yZmUxY2E4NmYyODJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtMzgxOCw4ICYjNDM7MzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOCiBgYC9wcm9jL3N5cy9uZXQvdW5peC8qYGAKID09PT09PT09PT09PT09PT09PT09PT09PQogCi1tYXhfZGdyYW1fcWxlbiAtIElOVEVHRVIKJiM0MzttYXhfZGdyYW1fcWxlbiAtIFVOU0lHTkVEIElOVEVHRVIKIAlUaGUgbWF4aW11bSBsZW5ndGggb2YgZGdyYW0gc29ja2V0IHJlY2VpdmUgcXVldWUKIAotCURlZmF1bHQ6IDEwCiYjNDM7CU5lZ2F0aXZlIHZhbHVlcyBhcmUgcmVqZWN0ZWQuCiAKJiM0MzsJRGVmYXVsdDogMTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaCBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaAppbmRleCA5ODU5ZDEzNGQ1YTg5Li5lMjMzYzQyODMyNDNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oCkBAIC0xNSw3ICYjNDM7MTUsNyBAQCBzdHJ1Y3QgdW5peF90YWJsZSB7CiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjsKIHN0cnVjdCBuZXRuc191bml4IHsKIAlzdHJ1Y3QgdW5peF90YWJsZQl0YWJsZTsKLQlpbnQJCQlzeXNjdGxfbWF4X2RncmFtX3FsZW47CiYjNDM7CXVuc2lnbmVkIGludAkJc3lzY3RsX21heF9kZ3JhbV9xbGVuOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSpjdGw7CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCmluZGV4IDQ3NjYwZDU3MjZiYmQuLjhmNmYwNjU3NDk1YWEgMTAwNjQ0Ci0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCkBAIC0xNyw5ICYjNDM7MTcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O21heF9kZ3JhbV9xbGVuJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCiYjNDM7CQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LAogCX0sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBzaG91bGQgd2UgZXZlbiBjb25zaWRlciBLTVNBTiBmdXp6aW5nIGZvciB0aGlzIGNoYW5nZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBmaXJzdCwgb2YgY291cnNlLgoKUmlnaHQsIHNvIHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgaW4gYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0YCwgYGluY2x1ZGUvbmV0L25ldG5zL3VuaXguaGAsIGFuZCBgbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNgLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtyZSBzaGlmdGluZyBgbWF4X2RncmFtX3FsZW5gIGZyb20gYW4gYElOVEVHRVJgIHRvIGFuIGBVTlNJR05FRCBJTlRFR0VSYCwgd2l0aCBzb21lIGRvY3VtZW50YXRpb24gYWRkZWQgdGhhdCBjbGFyaWZpZXMgd2UmIzM5O3JlIHJlamVjdGluZyBuZWdhdGl2ZSB2YWx1ZXMuIFRoZSByZWxhdGVkIHN0cnVjdCBkZWZpbml0aW9ucyBpbiBgdW5peC5oYCBhcmUgYWxzbyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgZnJvbSBgaW50YCB0byBgdW5zaWduZWQgaW50YC4gVGhlIGNvcnJlc3BvbmRpbmcgYHN5c2N0bGAgaGFuZGxpbmcgZnVuY3Rpb24gYW5kIHRoZSBgbWF4bGVuYCBhcmUgYWxsIGFkYXB0ZWQuCgpOb3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGVyZSBpcyBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCBhY3R1YWxseSAqdXNlZCo/IERvZXMgdGhpcyBjaGFuZ2UgcG90ZW50aWFsbHkgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBzdWNoIGFzIG92ZXJmbG93cyBvciB1bmluaXRpYWxpemVkIHJlYWRzPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaW5zdGFuY2VzIG9mIHRoaXMgdmFyaWFibGUgd2l0aGluIHRoZSBjb2RlLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBuZXQvdW5peC9gIGRpcmVjdG9yeSwgYW5kIGlmIHRoYXQgZG9lc24mIzM5O3QgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24sIEkmIzM5O2xsIGV4cGFuZCB0aGUgc2VhcmNoLiBCYXNlZCBvbiB0aGlzLCBJIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgZnV6emluZyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3lzY3RsX21heF9kZ3JhbV9xbGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaD0xNj1zdHJ1Y3QgbmV0bnNfdW5peCB7XG5pbmNsdWRlL25ldC9uZXRucy91bml4LmgtMTctXHRzdHJ1Y3QgdW5peF90YWJsZVx0dGFibGU7XG5pbmNsdWRlL25ldC9uZXRucy91bml4Lmg6MTg6XHR1bnNpZ25lZCBpbnRcdFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oLTE5LVx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXJcdCpjdGw7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwOTQ9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTExMjEtXHRzay1cdTAwM2Vza193cml0ZV9zcGFjZVx0PSB1bml4X3dyaXRlX3NwYWNlO1xubmV0L3VuaXgvYWZfdW5peC5jOjExMjI6XHRzay1cdTAwM2Vza19tYXhfYWNrX2JhY2tsb2dcdD0gUkVBRF9PTkNFKG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuKTtcbm5ldC91bml4L2FmX3VuaXguYy0xMTIzLVx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdFx0PSB1bml4X3NvY2tfZGVzdHJ1Y3Rvcjtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzgxMz1zdGF0aWMgaW50IF9fbmV0X2luaXQgdW5peF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTYtXG5uZXQvdW5peC9hZl91bml4LmM6MzgxNzpcdG5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XG5uZXQvdW5peC9hZl91bml4LmMtMzgxOC1cdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxuLS1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0xOC1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21heF9kZ3JhbV9xbGVuXCYjMzQ7LFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6MTk6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbixcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTIwLVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4tLVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zMy1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM0Olx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gS2VybmVsIFBhcmFtZXRlciBUdW5pbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgYmFja2xvZyBsaW1pdCwgc3BlY2lmaWNhbGx5IHdpdGggYHNrLSZndDtza19tYXhfYWNrX2JhY2tsb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHByb2NfZG91aW50dmVjX21pbm1heGAgaW50ZXJhY3RzIHdpdGggdGhpcyBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBjb25uZWN0aW9uIGZvciB0aGUgdXNlci1zcGFjZSB0dW5pbmcgb2YgbmV0d29yayBwYXJhbWV0ZXJzLgoKTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIHJlcHJlc2VudHMgYW4gYWRqdXN0YWJsZSBwYXJhbWV0ZXIgcmVsYXRlZCB0byBUQ1AgYWNrIGJhY2tsb2cgb3IgYSByZWxhdGVkIHF1ZXVlLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IGBwcm9jX2RvdWludHZlY19taW5tYXhgIGlzIHRoZSBrZXJuZWwgZnVuY3Rpb24gdGhhdCBtYW5hZ2VzIHRoZSByYW5nZSBhbmQgdmFsdWUgb2YgdGhpcyB0dW5hYmxlLiBJIG5lZWQgdG8gYmUgc3VyZSBvbiB3aGF0IGNvbnRleHQgaXQgaXMgYXBwbGllZC4KCk5leHQsIEkmIzM5O2xsIGRyaWxsIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBwcm9jX2RvdWludHZlY19taW5tYXhgLCBwcm9iYWJseSB3aXRoIGB1bml4X3RhYmxlYCBjb250ZXh0IHRvbywgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIHdpbGwgcHJvYmFibHkgZXhwb3NlIHdoYXQgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgd2UgYWNjZXB0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIE5FVDQ6XHRTeXNjdGwgaW50ZXJmYWNlIHRvIG5ldCBhZl91bml4IHN1YnN5c3RlbS5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcnM6XHRNaWtlIFNoYXZlci5cbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2FmX3VuaXguaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbiAgMTM6XHRcbiAgMTQ6XHQjaW5jbHVkZSBcJiMzNDthZl91bml4LmhcJiMzNDtcbiAgMTU6XHRcbiAgMTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4gIDE3Olx0XHR7XG4gIDE4Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDttYXhfZGdyYW1fcWxlblwmIzM0OyxcbiAgMTk6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuICAyMDpcdFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4gIDIxOlx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiAgMjI6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWludHZlY19taW5tYXgsXG4gIDIzOlx0XHR9LFxuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiAgMjc6XHR7XG4gIDI4Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiAgMjk6XHRcbiAgMzA6XHRcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuICAzMTpcdFx0aWYgKCF0YWJsZSlcbiAgMzI6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDMzOlx0XG4gIDM0Olx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47XG4gIDM1Olx0XG4gIDM2Olx0XHRyZXR1cm4gdGFibGU7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdGludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbiAgNDA6XHR7XG4gIDQxOlx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiAgNDI6XHRcbiAgNDM6XHRcdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiAgNDQ6XHRcdFx0dGFibGUgPSB1bml4X3RhYmxlO1xuICA0NTpcdFx0fSBlbHNlIHtcbiAgNDY6XHRcdFx0dGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpO1xuICA0NzpcdFx0XHRpZiAoIXRhYmxlKVxuICA0ODpcdFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuICA0OTpcdFx0fVxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjQ3CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCB3ZSBhbHdheXMgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHJlYWRpbmcgYW5kIHdyaXRpbmcgYW4gYHVuc2lnbmVkIGludGAgZnJvbSBgdGFibGUtJmd0O2RhdGFgLiBUaGVuIHRoZXJlJiMzOTtzIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gLCB3aGljaCBpcyBhbiBgdW5zaWduZWQgaW50YCB3aXRoaW4gYHN0cnVjdCBuZXRuc191bml4YC4gSSBrbm93IGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGAxMGAgaW4gYHVuaXhfbmV0X2luaXRgLCBzbyB0aGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIGxpbmUgaGVyZSBpcyBgc2stJmd0O3NrX21heF9hY2tfYmFja2xvZyA9IFJFQURfT05DRShuZXQtJmd0O3VueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4pO2Agd2hlbiBVbml4IHNvY2tldHMgYXJlIGNyZWF0ZWQuIEkgYWxzbyBjaGVja2VkIHRoYXQgYGV4dHJhMWAgYW5kIGBleHRyYTJgIGFyZSBgTlVMTGAgaW4gYHVuaXhfdGFibGVgLCBtZWFuaW5nIGBwcm9jX2RvdWludHZlY19taW5tYXhgIGlzIGNvcnJlY3RseSBlbmZvcmNpbmcgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVuc2lnbmVkIHZhbHVlcywgYW5kIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGJvdW5kcy4KClNvLCBhbSBJIHNlZWluZyBhbnkgcmVkIGZsYWdzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIHZhcmlhYmxlcy4gQXMgbWVudGlvbmVkLCBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBzbyB0aGF0JiMzOTtzIGNvdmVyZWQuIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSByZWFkaW5nIGFuZCB3cml0aW5nIG9mIHVuc2lnbmVkIGludGVnZXJzIGNvcnJlY3RseS4gVGhlcmUmIzM5O3Mgbm8gcG9zc2liaWxpdHkgb2YgYSBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrIHZpYSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgYnl0ZXMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgYmVpbmcgcmVhZCBvciBwYXNzZWQgYXJvdW5kLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2XigJRqdXN0IHR5cGUgYWx0ZXJhdGlvbnMsIG5vdCBtZW1vcnkgbWFuaXB1bGF0aW9u4oCUS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2ssIHRob3VnaCwganVzdCB0byBiZSB0aG9yb3VnaC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgS0FTQU4gKGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycykgdnMgS01TQU4gaGVyZS4gS0FTQU4gaXMgYWxyZWFkeSBjb3ZlcmluZyB0aGluZ3MgbGlrZSBzeXNjdGwgaGFuZGxpbmcsIHRhYmxlIGR1cGxpY2F0aW9uLCBhbmQgYmFzaWMgc29ja2V0IHF1ZXVlIGxlbmd0aHMuIFRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyB0aGUgdHlwZSBvZiBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCwgYW5kIGFkanVzdHMgdGhlIHN5c2N0bCBoYW5kbGVyLiBJdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcuIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLCBpc27igJl0IHRvdWNoaW5nIGFueSBidWZmZXIgYm91bmRhcmllcyBmb3IgY29weSBvcGVyYXRpb25zLCBhbmQgaXNuJiMzOTt0IGdlbmVyYXRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGNvcGllcy4gSXTigJlzIGEgY2xlYW4gYW5kIGxvY2FsaXplZCBjaGFuZ2UuCgpPa2F5LCB0aGF0JiMzOTtzIGVub3VnaCBmb3IgbWUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHN5c2N0bCBwYXJhbWV0ZXIgJiMzOTtuZXQudW5peC5tYXhfZGdyYW1fcWxlbiYjMzk7IGFuZCB0aGUgZmllbGQgJiMzOTtzeXNjdGxfbWF4X2RncmFtX3FsZW4mIzM5OyBpbiBzdHJ1Y3QgbmV0bnNfdW5peCBmcm9tICYjMzk7aW50JiMzOTsgdG8gJiMzOTt1bnNpZ25lZCBpbnQmIzM5Oywgc3dpdGNoaW5nIHRoZSBwcm9jIGhhbmRsZXIgZnJvbSBwcm9jX2RvaW50dmVjIHRvIHByb2NfZG91aW50dmVjX21pbm1heC4gXG5cblRoZSB2YXJpYWJsZSBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHRvIDEwIGluIHVuaXhfbmV0X2luaXQoKSwgYW5kIHJlYWRpbmcvd3JpdGluZyB0aHJvdWdoIHByb2NfZG91aW50dmVjX21pbm1heCBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGlzIGluaXRpYWxpemVkIHVuc2lnbmVkIGludGVnZXIuIFRoZXJlIGFyZSBubyBuZXdseSBhbGxvY2F0ZWQgYnVmZmVycywgbm8gc3RydWN0dXJlIHBhZGRpbmcgY2hhbmdlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzeXNjdGwgcGFyYW1ldGVyICYjMzk7bmV0LnVuaXgubWF4X2RncmFtX3FsZW4mIzM5OyBhbmQgdGhlIGZpZWxkICYjMzk7c3lzY3RsX21heF9kZ3JhbV9xbGVuJiMzOTsgaW4gc3RydWN0IG5ldG5zX3VuaXggZnJvbSAmIzM5O2ludCYjMzk7IHRvICYjMzk7dW5zaWduZWQgaW50JiMzOTssIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxuXG5UaGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCB0byAxMCBpbiB1bml4X25ldF9pbml0KCksIGFuZCByZWFkaW5nL3dyaXRpbmcgdGhyb3VnaCBwcm9jX2RvdWludHZlY19taW5tYXggb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhpcyBpbml0aWFsaXplZCB1bnNpZ25lZCBpbnRlZ2VyLiBUaGVyZSBhcmUgbm8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcnMsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGNoYW5nZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNjo1Ny43MzA1ODMyNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2Nzk0OTk1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHN5c2N0bCBwYXJhbWV0ZXIgJ25ldC51bml4Lm1heF9kZ3JhbV9xbGVuJyBhbmQgdGhlIGZpZWxkICdzeXNjdGxfbWF4X2RncmFtX3FsZW4nIGluIHN0cnVjdCBuZXRuc191bml4IGZyb20gJ2ludCcgdG8gJ3Vuc2lnbmVkIGludCcsIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxcblxcblRoZSB2YXJpYWJsZSBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHRvIDEwIGluIHVuaXhfbmV0X2luaXQoKSwgYW5kIHJlYWRpbmcvd3JpdGluZyB0aHJvdWdoIHByb2NfZG91aW50dmVjX21pbm1heCBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGlzIGluaXRpYWxpemVkIHVuc2lnbmVkIGludGVnZXIuIFRoZXJlIGFyZSBubyBuZXdseSBhbGxvY2F0ZWQgYnVmZmVycywgbm8gc3RydWN0dXJlIHBhZGRpbmcgY2hhbmdlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVOSVggc29ja2V0IHN5c2N0bCB0YWJsZSB0byB1c2UgdW5zaWduZWQgaW50ZWdlciBzZW1hbnRpY3MgYW5kIHByb2NfZG91aW50dmVjX21pbm1heCBmb3IgbmV0LnVuaXgubWF4X2RncmFtX3FsZW4gaW5zdGVhZCBvZiBwcm9jX2RvaW50dmVjLiBUaGlzIGNoYW5nZXMgc3lzY3RsIGlucHV0IHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA2OjU3LjczMDU4ODU3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA4ODQwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGY2MzZhMDBkNTVhZGQwZmZjMmIxMGY2NmJhNWNiMjA2N2JhZDUxZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwOTowNjo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmZlMWNhODZmMjgyZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuQEAgLTM4MTgsOCArMzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOXFxuIGBgL3Byb2Mvc3lzL25ldC91bml4LypgYFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuLW1heF9kZ3JhbV9xbGVuIC0gSU5URUdFUlxcbittYXhfZGdyYW1fcWxlbiAtIFVOU0lHTkVEIElOVEVHRVJcXG4gXFx0VGhlIG1heGltdW0gbGVuZ3RoIG9mIGRncmFtIHNvY2tldCByZWNlaXZlIHF1ZXVlXFxuIFxcbi1cXHREZWZhdWx0OiAxMFxcbitcXHROZWdhdGl2ZSB2YWx1ZXMgYXJlIHJlamVjdGVkLlxcbiBcXG4rXFx0RGVmYXVsdDogMTBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oXFxuaW5kZXggOTg1OWQxMzRkNWE4OS4uZTIzM2M0MjgzMjQzZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcXG5AQCAtMTUsNyArMTUsNyBAQCBzdHJ1Y3QgdW5peF90YWJsZSB7XFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xcbiBzdHJ1Y3QgbmV0bnNfdW5peCB7XFxuIFxcdHN0cnVjdCB1bml4X3RhYmxlXFx0dGFibGU7XFxuLVxcdGludFxcdFxcdFxcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlclxcdCpjdGw7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXFxuaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDRcXG4tLS0gYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xcbisrKyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXFxuQEAgLTE3LDkgKzE3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm1heF9kZ3JhbV9xbGVuXFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxcbi1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4rXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXFxuIFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbi1cXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91aW50dmVjX21pbm1heCxcXG4gXFx0fSxcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA2OjU4LjE0MDA3NDkxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjYxOTczNzEyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVU5JWCBzb2NrZXQgc3lzY3RsIHRhYmxlIHRvIHVzZSB1bnNpZ25lZCBpbnRlZ2VyIHNlbWFudGljcyBhbmQgcHJvY19kb3VpbnR2ZWNfbWlubWF4IGZvciBuZXQudW5peC5tYXhfZGdyYW1fcWxlbiBpbnN0ZWFkIG9mIHByb2NfZG9pbnR2ZWMuIFRoaXMgY2hhbmdlcyBzeXNjdGwgaW5wdXQgdmFsaWRhdGlvbiBhbmQgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGY2MzZhMDBkNTVhZGQwZmZjMmIxMGY2NmJhNWNiMjA2N2JhZDUxZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDA5OjA2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmZlMWNhODZmMjgyZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTM4MTgsOCArMzgxOCw5IEBAIGwzbWRldl9hY2NlcHQgLSBCT09MRUFOXG4gYGAvcHJvYy9zeXMvbmV0L3VuaXgvKmBgXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4tbWF4X2RncmFtX3FsZW4gLSBJTlRFR0VSXG4rbWF4X2RncmFtX3FsZW4gLSBVTlNJR05FRCBJTlRFR0VSXG4gXHRUaGUgbWF4aW11bSBsZW5ndGggb2YgZGdyYW0gc29ja2V0IHJlY2VpdmUgcXVldWVcbiBcbi1cdERlZmF1bHQ6IDEwXG4rXHROZWdhdGl2ZSB2YWx1ZXMgYXJlIHJlamVjdGVkLlxuIFxuK1x0RGVmYXVsdDogMTBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmggYi9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbmluZGV4IDk4NTlkMTM0ZDVhODkuLmUyMzNjNDI4MzI0M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy91bml4LmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuQEAgLTE1LDcgKzE1LDcgQEAgc3RydWN0IHVuaXhfdGFibGUge1xuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xuIHN0cnVjdCBuZXRuc191bml4IHtcbiBcdHN0cnVjdCB1bml4X3RhYmxlXHR0YWJsZTtcbi1cdGludFx0XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbitcdHVuc2lnbmVkIGludFx0XHRzeXNjdGxfbWF4X2RncmFtX3FsZW47XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlclx0KmN0bDtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcbmluZGV4IDQ3NjYwZDU3MjZiYmQuLjhmNmYwNjU3NDk1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuKysrIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcbkBAIC0xNyw5ICsxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibWF4X2RncmFtX3FsZW5cIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuLVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLVx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWludHZlY19taW5tYXgsXG4gXHR9LFxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNjo1OC4xNDAwNzY0MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTQwNzc5MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBjb21taXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSB1cGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYG1heF9kZ3JhbV9xbGVuYCBpbiB0aGUgYGlwLXN5c2N0bC5yc3RgIGZpbGUuIFRoYXQncyBnb29kLCBhbHdheXMgaW1wb3J0YW50IHRvIGtlZXAgdGhlIGRvY3MgaW4gc3luYy4gVGhlbiwgdGhlcmUncyBhIGNoYW5nZSBpbiBgaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oYCB3aGVyZSB0aGV5J3JlIHN3aXRjaGluZyBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCBmcm9tIGEgc2lnbmVkIGBpbnRgIHRvIGFuIHVuc2lnbmVkIGB1bnNpZ25lZCBpbnRgLiBJbnRlcmVzdGluZ+KApiBUaGlzIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMuIEFuZCBmaW5hbGx5LCBpbiBgbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNgLCB3ZSdyZSBnZXR0aW5nIGEgc2l6ZSBjaGFuZ2UgZm9yIGBtYXhsZW5gIGFuZCB1cGRhdGluZyB0aGUgYHByb2NfaGFuZGxlcmAgdG8gYHByb2NfZG91aW50dmVjX21pbm1heGAuIFJpZ2h0LCB0aGlzIHByb2JhYmx5IG1lYW5zIHdlJ3JlIGFsbG93aW5nIGZvciBsYXJnZXIgcXVldWUgbGVuZ3RocyBub3csIHVzaW5nIGEgbW9yZSByb2J1c3Qgc3lzY3RsIGhhbmRsZXIuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSB0byBpdHMgdHlwZSBhbmQgdGhlIGluY3JlYXNlZCBtYXggdmFsdWUuIExldCdzIHNlZS4uLiBJJ2xsIGp1c3QgcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCB0byBsb2NhdGUgYWxsIHRoZSByZWxldmFudCBvY2N1cnJlbmNlcyBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaXRzIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MDUuMjgwODU4NTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTEwNTM2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY3RsX21heF9kZ3JhbV9xbGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldG5zL3VuaXguaD0xNj1zdHJ1Y3QgbmV0bnNfdW5peCB7XFxuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oLTE3LVxcdHN0cnVjdCB1bml4X3RhYmxlXFx0dGFibGU7XFxuaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oOjE4OlxcdHVuc2lnbmVkIGludFxcdFxcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG5pbmNsdWRlL25ldC9uZXRucy91bml4LmgtMTktXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXJcXHQqY3RsO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTEwOTQ9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMS1cXHRzay1cXHUwMDNlc2tfd3JpdGVfc3BhY2VcXHQ9IHVuaXhfd3JpdGVfc3BhY2U7XFxubmV0L3VuaXgvYWZfdW5peC5jOjExMjI6XFx0c2stXFx1MDAzZXNrX21heF9hY2tfYmFja2xvZ1xcdD0gUkVBRF9PTkNFKG5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbik7XFxubmV0L3VuaXgvYWZfdW5peC5jLTExMjMtXFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0XFx0XFx0PSB1bml4X3NvY2tfZGVzdHJ1Y3RvcjtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODE2LVxcbm5ldC91bml4L2FmX3VuaXguYzozODE3OlxcdG5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiA9IDEwO1xcbm5ldC91bml4L2FmX3VuaXguYy0zODE4LVxcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMTgtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibWF4X2RncmFtX3FsZW5cXFwiLFxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjE5OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbixcXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0yMC1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zMy1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozNDpcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MDcuMDkxOTE2OTMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5NTgzNDIwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3lzY3RsIERlZmluaXRpb24gQ2hhbmdlIGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgY2hhbmdlcyB0aGUgc3lzY3RsIGRlZmluaXRpb24gZm9yIGBuZXQudW5peC5tYXhfZGdyYW1fcWxlbmAuIEl0J3MgbW92aW5nIGZyb20gdXNpbmcgYHByb2NfZG9pbnR2ZWNgIHdpdGggYW4gYGludGAgdG8gYHByb2NfZG91aW50dmVjX21pbm1heGAgd2l0aCBhbiBgdW5zaWduZWQgaW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBzcGVuZCB0aW1lIGZ1enppbmcgb3IgaWYgaXQncyBhIHJlbGF0aXZlbHkgbWlub3IsIHBvdGVudGlhbGx5IGluc2lnbmlmaWNhbnQsIG1vZGlmaWNhdGlvbi5cblxuV2FpdCBhIG1vbWVudCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgZmlyc3QuIExldCdzIG1ha2Ugc3VyZTogKm9ubHkqIGNoYW5nZXMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcgY2hhbmdlcywgbm9uLWZ1bmN0aW9uYWwgbnVtZXJpYyBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgKHJlcXVpcmluZyBzcGVjaWFsIGhhcmR3YXJlKSBzaG91bGQgYmUgZmxhZ2dlZCBhcyBub3Qgd29ydGggZnV6emluZy4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBkdXJpbmcgdW5wbHVnL3VuYmluZCBhcmUgYWxzbyBub3Qgd29ydGggZnV6emluZy4gQWxyaWdodCwgdGhhdCdzIHRoZSBzY29wZS5cblxuT2theSwgYmFjayB0byB0aGUgY2hhbmdlLiBUaGlzICppcyogYSBjaGFuZ2UgdG8gdGhlIHN5c2N0bCB0YWJsZSwgbm90IGp1c3QgYSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnQgdXBkYXRlLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNoYW5nZSBpbiB0aGUgKnR5cGUqIG9mIHRoZSBzeXNjdGwgaGFuZGxlcjogdXNpbmcgYHByb2NfZG91aW50dmVjX21pbm1heGAgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN5c2N0bC4gU3BlY2lmaWNhbGx5LCBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCB3aWxsIG5vdyB2YWxpZGF0ZSB2YWx1ZXMsIHJlamVjdGluZyBhbmQgY2xhbXBpbmcgbmVnYXRpdmUgdmFsdWVzLiBQcmV2aW91c2x5LCBzeXNjdGwgd3JpdGVycyBjb3VsZCBoYXZlIHNldCBuZWdhdGl2ZSB2YWx1ZXMhXG5cblNvLCB0aGUgbmV4dCBxdWVzdGlvbjogZG9lcyB0aGlzIGNvbnN0aXR1dGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IEl0ICpjb3VsZCogYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBiZWNhdXNlIHRoZSBzeXNjdGwgdGFibGUgd2lsbCBiZSBtb2RpZmllZC5cblxuSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB0aGlzLiBXZSdyZSBub3QgbmVjZXNzYXJpbHkgZnV6emluZyAqc3lzY3RsKiBpdHNlbGYsIHJpZ2h0PyBXZSdyZSBwb3RlbnRpYWxseSBmdXp6aW5nIHRoZSBpbnB1dCB2YWxpZGF0aW9uIHByb2Nlc3MuIFdoYXQgZnVuY3Rpb25zIHdvdWxkIGJlIGFmZmVjdGVkIGFuZCB0aGVyZWZvcmUgZnV6emVkPyBXb3VsZCBpdCBiZSBzb21ldGhpbmcgbGlrZSB0aGUgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBvciBgdW5peF9jcmVhdGUxYCBmdW5jdGlvbnM/XG5cbkxldCBtZSBqdXN0IHJlLXJlYWQgdGhlIHdvcnRoIGZ1enppbmcgY3JpdGVyaWEgb25jZSBtb3JlOiBhbnkgY29yZSBsb2dpYywgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBhcmUgd29ydGggZnV6emluZy5cblxuQWxyaWdodCwgd2hhdCBleGFjdGx5IGRpZCB0aGlzIHBhdGNoIG1vZGlmeT8gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc3lzdGVtPyBMZXQncyBjaGVjayB0aGUgYG5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzoyNS4wNTAyNjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIE5FVDQ6XFx0U3lzY3RsIGludGVyZmFjZSB0byBuZXQgYWZfdW5peCBzdWJzeXN0ZW0uXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQXV0aG9yczpcXHRNaWtlIFNoYXZlci5cXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hZl91bml4LmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0I2luY2x1ZGUgXFxcImFmX3VuaXguaFxcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbiAgMTc6XFx0XFx0e1xcbiAgMTg6XFx0XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibWF4X2RncmFtX3FsZW5cXFwiLFxcbiAgMTk6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxcbiAgMjA6XFx0XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHVuc2lnbmVkIGludCksXFxuICAyMTpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4gIDIyOlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91aW50dmVjX21pbm1heCxcXG4gIDIzOlxcdFxcdH0sXFxuICAyNDpcXHR9O1xcbiAgMjU6XFx0XFxuICAyNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbiAgMjc6XFx0e1xcbiAgMjg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xcbiAgMzE6XFx0XFx0aWYgKCF0YWJsZSlcXG4gIDMyOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cmV0dXJuIHRhYmxlO1xcbiAgMzc6XFx0fVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuICA0MDpcXHR7XFxuICA0MTpcXHRcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0aWYgKG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4gIDQ0OlxcdFxcdFxcdHRhYmxlID0gdW5peF90YWJsZTtcXG4gIDQ1OlxcdFxcdH0gZWxzZSB7XFxuICA0NjpcXHRcXHRcXHR0YWJsZSA9IHVuaXhfdGFibGVfZHVwKG5ldCk7XFxuICA0NzpcXHRcXHRcXHRpZiAoIXRhYmxlKVxcbiAgNDg6XFx0XFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuICA0OTpcXHRcXHR9XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdG5ldC1cXHUwMDNldW54LmN0bCA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcXFwibmV0L3VuaXhcXFwiLCB0YWJsZSxcXG4gIDUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEFSUkFZX1NJWkUodW5peF90YWJsZSkpO1xcbiAgNTM6XFx0XFx0aWYgKG5ldC1cXHUwMDNldW54LmN0bCA9PSBOVUxMKVxcbiAgNTQ6XFx0XFx0XFx0Z290byBlcnJfcmVnO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRyZXR1cm4gMDtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0ZXJyX3JlZzpcXG4gIDU5OlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4gIDYwOlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MjUuMDUwMzI1OTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDIzNDc0NTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBcIldoYXQgaGFwcGVucyB3aGVuIHdlIHdyaXRlIHRvIGBuZXQudW5peC5tYXhfZGdyYW1fcWxlbmA/XCIgSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBjaGFuZ2luZyBob3cgdGhpcyBzeXNjdGwgaXMgaGFuZGxlZC4gUHJldmlvdXNseSwgaXQgdXNlZCBgcHJvY19kb2ludHZlY2Agd2l0aCBhbiBgaW50YCwgYnV0IG5vdyBpdCdzIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHdpdGggYW4gYHVuc2lnbmVkIGludGAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaWYgdGhpcyBjaGFuZ2UganVzdGlmaWVzIGZ1cnRoZXIgZnV6emluZyBlZmZvcnRzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgaG93IHN5emthbGxlciBvcGVyYXRlcy4gQ2FuIHN5emthbGxlciBhY3R1YWxseSB3cml0ZSB0byBgL3Byb2Mvc3lzL25ldC91bml4L21heF9kZ3JhbV9xbGVuYCBhbmQgY3JlYXRlIFVOSVggc29ja2V0cz8gWWVzLCBJIGtub3cgc3lzY3RsIHdyaXRlcyBhcmUgYSBjb21tb24gdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQgVU5JWCBzb2NrZXQgY3JlYXRpb24gbGlrZWx5ICpyZWFkcyogdGhhdCBzeXNjdGwgdmFsdWUuIEJ1dCBpcyB0aGlzIGEgbWlub3IgaW5wdXQgdmFsaWRhdGlvbiB0d2Vhaz9cblxuSG9sZCBvbi4gTGV0IG1lIGNvbnN1bHQgdGhlIGV4cGxpY2l0IGluc3RydWN0aW9ucyBoZXJlLCBiZWNhdXNlIEkgcmVjYWxsIGEgbmVnYXRpdmUgbGlzdC4gVGhlIHByb21wdCBnaXZlcyBtZSBhIHByZWNpc2Ugc2V0IG9mIGNyaXRlcmlhLlxuXG5UaGUgcHJvbXB0IGVzc2VudGlhbGx5IHRlbGxzIG1lIFwiZG9uJ3QgYm90aGVyIGZ1enppbmdcIiBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGNoYW5nZXMsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBBbHNvLCBpdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llL1NtYXJ0TklDL0dQVSBkcml2ZXJzIGFuZCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBJJ20gcmVhbGx5IGdsYWQgZm9yIHRoaXMgbmVnYXRpdmUgbGlzdCwgYmVjYXVzZSBpdCBxdWlja2x5IGhlbHBzIGV2YWx1YXRlIGEgY2hhbmdlLlxuXG5UaGUgcG9zaXRpdmUgY3JpdGVyaWE6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5BbHJpZ2h0LCBsZXQncyBhcHBseSB0aGUgcHJvbXB0IHRvIHRoZSBjdXJyZW50IHBhdGNoLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBBRl9VTklYIHN5c2N0bCBoYW5kbGVyIGluIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AgYW5kIGBpbmNsdWRlL25ldC9uZXRucy91bml4LmhgLiBJdCBpbnZvbHZlcyBhIGRhdGEgdHlwZSBjaGFuZ2UgZnJvbSBgaW50YCB0byBgdW5zaWduZWQgaW50YCwgYW5kIHRoZSBwcm9jIGhhbmRsZXIgY2hhbmdlcyBmcm9tIGBwcm9jX2RvaW50dmVjYCB0byBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gVGhpcyBpcyBpbnNpZGUgdGhlIGNvcmUgVU5JWCBzb2NrZXQgc3Vic3lzdGVtLiBJdCdzIGZ1bGx5IGFjY2Vzc2libGUsIHJlYWNoYWJsZSwgYW5kIHRlc3RhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIEtjb25maWcgdG8gbWFrZSBzdXJlIEFGX1VOSVggaXMgZW5hYmxlZCBidXQsIGJhc2VkIG9uIGFsbCBvZiB0aGlzLCB0aGlzIGNoYW5nZSBsb29rcyBsaWtlIGl0J3Mgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU4MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjM1LjI4NTA3NDk5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MDMyOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODE3LVxcdG5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiA9IDEwO1xcbm5ldC91bml4L2FmX3VuaXguYzozODE4OlxcdGlmICh1bml4X3N5c2N0bF9yZWdpc3RlcihuZXQpKVxcbm5ldC91bml4L2FmX3VuaXguYy0zODE5LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5oPTM3PWxvbmcgdW5peF9vdXRxX2xlbihzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5oLTQwLSNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubmV0L3VuaXgvYWZfdW5peC5oOjQxOmludCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xcbm5ldC91bml4L2FmX3VuaXguaC00Mi12b2lkIHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvdW5peC9hZl91bml4LmgtNDMtI2Vsc2VcXG5uZXQvdW5peC9hZl91bml4Lmg6NDQ6c3RhdGljIGlubGluZSBpbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC91bml4L2FmX3VuaXguaC00NS17XFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0yNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtMzgtXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6Mzk6aW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MzcuMTA0MTEyODg2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwNTc1MDk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVbml4IERvbWFpbiBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVW5peCBkb21haW4gc29ja2V0cyB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZXQvdW5peC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcy4gVGhlbiwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhYmxlIGFzcGVjdHMsIEknbGwgbmVlZCB0byBleGFtaW5lIGBuZXQvdW5peC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGZpbmQgYWxsIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBiZWhhdmlvciBvZiB0aGUgVW5peCBkb21haW4gc29ja2V0IGZ1bmN0aW9uYWxpdHkuIEhvcGVmdWxseSwgdGhlc2UgdHdvIGZpbGVzLCB3b3JraW5nIGluIHRhbmRlbSwgd2lsbCBwcm92aWRlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBpcyBidWlsdCBhbmQgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjM5LjUwOTg2NjcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY0MTU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjdGxfbmV0X3VuaXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvTWFrZWZpbGU9OD11bml4LXlcXHRcXHRcXHQ6PSBhZl91bml4Lm8gZ2FyYmFnZS5vXFxubmV0L3VuaXgvTWFrZWZpbGU6OTp1bml4LSQoQ09ORklHX1NZU0NUTClcXHQrPSBzeXNjdGxfbmV0X3VuaXgub1xcbm5ldC91bml4L01ha2VmaWxlLTEwLXVuaXgtJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVuaXhfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6MzkuNTUzNTEyMzI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Mjk1OTE2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVTklYIERvbWFpbiBTb2NrZXRzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVOSVggZG9tYWluIHNvY2tldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBhcmUgYG5ldC91bml4L0tjb25maWdgIGFuZCBgbmV0L0tjb25maWdgLiBJJ20gcHJldHR5IHN1cmUgaXQncyB1bmRlciBvbmUgb2YgdGhvc2UsIGFsdGhvdWdoIHRoZSBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmUgY2FuIGJlIGEgYml04oCmIGlkaW9zeW5jcmF0aWMgYXQgdGltZXMuIE15IGd1dCBzYXlzIGl0J2xsIGJlIGluIGBuZXQvdW5peC9LY29uZmlnYCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgVU5JWCBzb2NrZXRzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYm90aCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhbnkgcmVsZXZhbnQgY3Jvc3MtcmVmZXJlbmNpbmcgb3IgZGVwZW5kZW5jaWVzIEknbSBtaXNzaW5nLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgY29uZmlnIGhhcyB0byBzYXkuIE5vIHBvaW50IGluIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYXQgdGhpcyBwb2ludCwgYmVzdCB0byB2ZXJpZnkgbXkgbWVudGFsIG1vZGVsIGFnYWluc3QgdGhlIGFjdHVhbCBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjksIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo0NC40ODMxMDU5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDI0NTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVU5JWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWc9MTQ4PWNvbmZpZyBTT0xBUklTX1g4Nl9QQVJUSVRJT05cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0xNTctXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjE1ODpjb25maWcgVU5JWFdBUkVfRElTS0xBQkVMXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE1OS1cXHRib29sIFxcXCJVbml4d2FyZSBzbGljZXMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdHR5L0tjb25maWc9Nzg9Y29uZmlnIFZUX0hXX0NPTlNPTEVfQklORElOR1xcbi0tXFxuZHJpdmVycy90dHkvS2NvbmZpZy05My1cXG5kcml2ZXJzL3R0eS9LY29uZmlnOjk0OmNvbmZpZyBVTklYOThfUFRZU1xcbmRyaXZlcnMvdHR5L0tjb25maWctOTUtXFx0Ym9vbCBcXFwiVW5peDk4IFBUWSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC91bml4L0tjb25maWctNS1cXG5uZXQvdW5peC9LY29uZmlnOjY6Y29uZmlnIFVOSVhcXG5uZXQvdW5peC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVW5peCBkb21haW4gc29ja2V0c1xcXCJcXG4tLVxcbm5ldC91bml4L0tjb25maWc9MTk9Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4tLVxcbm5ldC91bml4L0tjb25maWctMjUtXFxubmV0L3VuaXgvS2NvbmZpZzoyNjpjb25maWcgVU5JWF9ESUFHXFxubmV0L3VuaXgvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiVU5JWDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo0Ni4wNDMzNTcwMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NzE0NzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWcgZm9yIGEgQ29tcHJlaGVuc2l2ZSBWaWV3KipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUsIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgY29tcHJlaGVuc2l2ZSBpbmZvcm1hdGlvbiBpcyB0aGUgYG5ldC91bml4L0tjb25maWdgIGZpbGUuIEknbGwgaGVhZCBzdHJhaWdodCB0aGVyZSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCdzIHBvc3NpYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyBldmVyeXRoaW5nIGlzIHN0cnVjdHVyZWQgZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUuIEkgd2FudCB0byBzZWUgZXZlcnl0aGluZyBhdCBvbmNlLCBub3QganVzdCBzbmlwcGV0cy4gVGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGF2YWlsYWJsZSBidWlsZC10aW1lIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjQ4LjEyMDUwNzAzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVuaXggRG9tYWluIFNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFVOSVhcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlVuaXggZG9tYWluIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XFxuICAxMDpcXHRcXHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxcbiAgMTE6XFx0XFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXFxuICAxMjpcXHRcXHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcXG4gIDEzOlxcdFxcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxcbiAgMTQ6XFx0XFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxcbiAgMTU6XFx0XFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgU2F5IFkgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlVOSVg6IG91dC1vZi1ib3VuZCBtZXNzYWdlc1xcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVU5JWFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIFVOSVhfRElBR1xcbiAgMjc6XFx0XFx0dHJpc3RhdGUgXFxcIlVOSVg6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gVU5JWFxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBuXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFN1cHBvcnQgZm9yIFVOSVggc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjQ4LjEyMDU3MDQ4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzE4MTg1NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFVOSVggYW5kIFNZU0NUTCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVU5JWCBhbmQgU1lTQ1RMIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZXNlIHNldHRpbmdzLiBMb29rcyBsaWtlIGBVTklYYCBhbmQgYFNZU0NUTGAgYXJlIHRoZSBrZXkgYXJlYXMgdG8gaW52ZXN0aWdhdGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSByZWdpc3RlcnMgdGhlc2Ugc2V0dGluZ3MuIExldCBtZSBjaGVjayBmb3IgcmVsZXZhbnQgXCJGb2N1c1N5bWJvbHNcIiDigJMgZXNzZW50aWFsbHksIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBkZWZpbmluZyB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cbkhtbSwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBzZWVtcyBwcm9taXNpbmcuIFdhaXQsIGl0J3Mgbm90IHN0YXRpYz8gSW50ZXJlc3RpbmcuIGBpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzeXNjdGwgZW50cmllcyBhcmUgYWN0dWFsbHkgYWNjZXNzZWQuIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHRocm91Z2ggcHJvY2ZzIHN5c2N0bCBoYW5kbGVycy4gSSdtIHJlbWVtYmVyaW5nIHRoaXMgZnJvbSBleHBlcmllbmNlLCBzaW5jZSBJIG9mdGVuIHdvcmsgd2l0aCBwcm9jZnMuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBzb21ldGhpbmcgbGlrZSBgL3Byb2Mvc3lzL25ldC91bml4L21heF9kZ3JhbV9xbGVuYCBpcyBoYW5kbGVkLiBSaWdodCwgd3JpdGVzIGFuZCByZWFkcyB0byB0aGF0IGZpbGUgdHJpZ2dlciBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YC4gSXQgYXBwZWFycyB0aGF0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoaXMgc3lzY3RsIGVudHJ5LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBjb25maXJtYXRpb24gdGhhdCBpdCByZWdpc3RlcnMgdGhlIHN5c2N0bCBlbnRyeS4gSSBjYW4gc2VlIHRoYXQgYHVuaXhfY3JlYXRlMWAgcmVhZHMgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAuIEkgbmVlZCB0byBiZSBjZXJ0YWluLlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBcIkZvY3VzU3ltYm9sXCIg4oCTIGl0J3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGluIGBuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY2AuIEdvb2QsIHRoYXQgbWFrZXMgaXQgZWFzeSB0byB0cmFjZS4gSSdtIGNvbmZpcm1pbmcgdGhhdCdzIHRoZSByZWdpc3RyYXRpb24gcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IG90aGVyIHBhcnRzLiBJcyBgdW5peF9jcmVhdGUxYCBzdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDc6NTMuNDM4NzU4NTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI5MDU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X2NyZWF0ZTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTEwODM9c3RydWN0IHByb3RvIHVuaXhfc3RyZWFtX3Byb3RvID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwOTMtXFxubmV0L3VuaXgvYWZfdW5peC5jOjEwOTQ6c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwOTUte1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTExNDk9c3RhdGljIGludCB1bml4X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMTc5LVxcbm5ldC91bml4L2FmX3VuaXguYzoxMTgwOlxcdHNrID0gdW5peF9jcmVhdGUxKG5ldCwgc29jaywga2Vybiwgc29jay1cXHUwMDNldHlwZSk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTExODEtXFx0aWYgKElTX0VSUihzaykpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MTYzND1zdGF0aWMgaW50IHVuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTE2NjctXFx0LyogY3JlYXRlIG5ldyBzb2NrIGZvciBjb21wbGV0ZSBjb25uZWN0aW9uICovXFxubmV0L3VuaXgvYWZfdW5peC5jOjE2Njg6XFx0bmV3c2sgPSB1bml4X2NyZWF0ZTEobmV0LCBOVUxMLCAwLCBzb2NrLVxcdTAwM2V0eXBlKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMTY2OS1cXHRpZiAoSVNfRVJSKG5ld3NrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo1My40ODYwNTIzMTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3MzA1NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgY29udGV4dCBvZiBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqRGl2aW5nIGludG8gc3lzY3RsIFJlZ2lzdHJhdGlvbiBhbmQgRGVyZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGFuZCBgdW5peF9zeXNjdGxfdW5yZWdpc3RlcmAuIFRoZXNlIGFyZSAqY3J1Y2lhbCogZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGF0IGAvcHJvYy9zeXNgIGludGVyZmFjZSwgdGhlIGdhdGV3YXkgdG8ga2VybmVsIHR1bmFibGVzIGFuZCBzeXN0ZW0gc3RhdGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLCBlc3BlY2lhbGx5IGluIHRoZSBVbml4IGNvbnRleHQuIFRoZSBhcmNoaXRlY3R1cmUncyBnb3QgaXRzIG51YW5jZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGEgcHJvcGVyIGFuZCBjbGVhbiBoYW5kbGluZyBvZiB0aGUgY29udHJvbCBub2RlIGxpZmVjeWNsZS5cblxuYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCBpcyB0aGUga2V5LiBJIGJldCBpdCBoYW5kbGVzIGFsbCB0aGUgaGVhdnkgbGlmdGluZyDigJMgYWxsb2NhdGlvbiBvZiB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgc2V0dGluZyB1cCB0aGUgbGlua2FnZSB0byB0aGUgc3lzY3RsIHRyZWUsIGFuZCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyAod2hvIGNhbiByZWFkL3dyaXRlIHdoYXQpIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBzZWN1cml0eSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGhvdyBpdCBoYW5kbGVzIGNvbmZsaWN0cyBpZiBzb21lb25lIHRyaWVzIHRvIHJlZ2lzdGVyIHRoZSBzYW1lIG5hbWUgdHdpY2U7IGEgd2VsbC1kZWZpbmVkIGVycm9yIHBhdGggaXMgY3JpdGljYWwgaGVyZS4gQW5kIHdoYXQgYWJvdXQgaW5oZXJpdGFuY2U/IElmIEknbSByZWdpc3RlcmluZyBhIG5vZGUgdW5kZXIgYW4gZXhpc3RpbmcgYnJhbmNoLCBob3cgZG9lcyBpdCBtYW5hZ2UgaW5oZXJpdGluZyBwcm9wZXJ0aWVzIGZyb20gdGhlIHBhcmVudD8gVGhpcyBpcyBhbGwgYWJvdXQgY29uc3RydWN0aW5nIHRoZSBoaWVyYXJjaHkgY29ycmVjdGx5LlxuXG5Db252ZXJzZWx5LCBgdW5peF9zeXNjdGxfdW5yZWdpc3RlcmAgbXVzdCBtZXRpY3Vsb3VzbHkgZGlzbWFudGxlIHRoZSBlbnRyaWVzLiBNZW1vcnkgbGVha3MgaW4gdGhpcyBhcmVhIGFyZSAqdW5hY2NlcHRhYmxlKi4gV2UgbmVlZCB0byByZWxlYXNlIGFsbCB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZXMsIHNldmVyIHRoZSBsaW5rcyBpbiB0aGUgc3lzY3RsIHRyZWUsIGFuZCBoYW5kbGUgYW55IHJhY2UgY29uZGl0aW9ucyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjb250cm9sIG5vZGUuIFByb3BlciByZWZlcmVuY2UgY291bnRpbmcsIG9yIGNhcmVmdWwgdXNlIG9mIG11dGV4ZXMsIHdpbGwgYmUgdml0YWwgdG8gbWFraW5nIHRoaXMgcHJvY2VzcyByb2J1c3QuIEkgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgZnJlZWluZyBhIG5vZGUgd2l0aCBhY3RpdmUgY2hpbGRyZW4uXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyBpbiBib3RoIGZ1bmN0aW9ucy4gV2hhdCBoYXBwZW5zIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBXaGF0IGFib3V0IGludmFsaWQgYXJndW1lbnRzIG9yIGF0dGVtcHRzIHRvIGRlcmVnaXN0ZXIgc29tZXRoaW5nIHRoYXQgaXNuJ3QgcmVnaXN0ZXJlZD8gSSdtIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGVycm9yIGNvZGVzIGFuZCBwZXJoYXBzIHNvbWUgaW5mb3JtYXRpdmUgbG9nZ2luZy4gVGhlIHN5c3RlbSBoYXMgdG8gYmUgZmF1bHQtdG9sZXJhbnQgd2hlbiBvdGhlciBwcm9ncmFtcyB1c2UgaXQuXG5cbkluIGVzc2VuY2UsIHVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIHVuZGVyc3RhbmRpbmcgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgVW5peCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTWFraW5nIGNoYW5nZXMgdG8gYHN5c2N0bGAgaXMgYW4gZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFiaWxpdHksIHNvIHRoZXkgKm11c3QqIGJlIGRvbmUgY29ycmVjdGx5LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowNzo1OS4yNTkxMTEyNjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTI5NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfc3lzY3RsX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9hZl91bml4LmM9MzgxMz1zdGF0aWMgaW50IF9fbmV0X2luaXQgdW5peF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNy1cXHRuZXQtXFx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4gPSAxMDtcXG5uZXQvdW5peC9hZl91bml4LmM6MzgxODpcXHRpZiAodW5peF9zeXNjdGxfcmVnaXN0ZXIobmV0KSlcXG5uZXQvdW5peC9hZl91bml4LmMtMzgxOS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODUwLSNlbmRpZlxcbm5ldC91bml4L2FmX3VuaXguYzozODUxOlxcdHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIobmV0KTtcXG5uZXQvdW5peC9hZl91bml4LmMtMzg1Mi1vdXQ6XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IHVuaXhfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4NTktXFx0a3ZmcmVlKG5ldC1cXHUwMDNldW54LnRhYmxlLmxvY2tzKTtcXG5uZXQvdW5peC9hZl91bml4LmM6Mzg2MDpcXHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM4NjEtXFx0cmVtb3ZlX3Byb2NfZW50cnkoXFxcInVuaXhcXFwiLCBuZXQtXFx1MDAzZXByb2NfbmV0KTtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguaD0zNz1sb25nIHVuaXhfb3V0cV9sZW4oc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguaC00MC0jaWZkZWYgQ09ORklHX1NZU0NUTFxcbm5ldC91bml4L2FmX3VuaXguaDo0MTppbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvdW5peC9hZl91bml4Lmg6NDI6dm9pZCB1bml4X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCk7XFxubmV0L3VuaXgvYWZfdW5peC5oLTQzLSNlbHNlXFxubmV0L3VuaXgvYWZfdW5peC5oOjQ0OnN0YXRpYyBpbmxpbmUgaW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvdW5peC9hZl91bml4LmgtNDUte1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5oLTQ4LVxcbm5ldC91bml4L2FmX3VuaXguaDo0OTpzdGF0aWMgaW5saW5lIHZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvYWZfdW5peC5oLTUwLXtcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozOTppbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNDAte1xcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNjQtXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6NjU6dm9pZCB1bml4X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy02Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA3OjU5LjMwNTI1MjUyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTYwNzQ2NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIEtlcm5lbCBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCBmdW5jdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHNvbWV0aGluZyB3ZSdyZSBhY3R1YWxseSB1c2luZz8gUmlnaHQsIGl0J3MgYSBzdGFuZGFyZCBzeXNjdGwgaGFuZGxlciwgcGFydCBvZiBga2VybmVsL3N5c2N0bC5jYC4gQW5kIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgaXMgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciBwdXR0aW5nIHRoaXMgc3lzY3RsIHRhYmxlIGludG8gcGxhY2UuIEdvb2QsIHRoYXQgY29uZmlybXMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCByZWxldmFuY2UuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIHRpY2tlZCBhbGwgdGhlIGJveGVzLiBPa2F5LCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpbmNsdWRlcyBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCB3aGljaCBsb29rcyBwcm9taXNpbmcuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgcmVxdWlyZXMgYFVOSVhgIGFuZCBgU1lTQ1RMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIEFGX1VOSVggc29ja2V0IGNvbnRleHQuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29saWQ6IGEgY3JpdGljYWwgY2hhbmdlIGluIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gIOKAkyBzaGlmdGluZyBmcm9tIGEgc2lnbmVkIGBpbnRgIHRvIGFuIHVuc2lnbmVkIGBpbnRgLCBhbmQgbW92aW5nIHRoZSBoYW5kbGVyIHRvIGBwcm9jX2RvdWludHZlY19taW5tYXhgLiBJdCdzIGEgY2xlYXIgbW9kaWZpY2F0aW9uIHRvIHRoZSBBRl9VTklYIHNvY2tldCBzeXNjdGwgaW50ZXJmYWNlLCBlZmZlY3RpdmVseSByZWplY3RpbmcgbmVnYXRpdmUgdmFsdWVzLiBBbmQgdGhlIGJpZyBwbHVzIGlzIHRoYXQgaXQgaXMgcmVhY2hhYmxlIHZpYSBRRU1VL0dDRSwgc28gaXRzIGV4cG9zdXJlIGlzIGhpZ2guIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCB0aGVyZWZvcmUgcmVxdWlyZXMgdGhvcm91Z2ggZXhhbWluYXRpb24uXG5cbkFscmlnaHQsIGxldCdzIGxvZyB0aGlzIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODQsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjA0LjI2NjAwMjE2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDQxNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bml4X3N5c2N0bF9yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVTklYIHNvY2tldCBzeXNjdGwgdGFibGUgdG8gdXNlIHVuc2lnbmVkIGludGVnZXIgc2VtYW50aWNzIGFuZCBwcm9jX2RvdWludHZlY19taW5tYXggZm9yIG5ldC51bml4Lm1heF9kZ3JhbV9xbGVuIGluc3RlYWQgb2YgcHJvY19kb2ludHZlYy4gVGhpcyBjaGFuZ2VzIHN5c2N0bCBpbnB1dCB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVhcIixcbiAgICBcIlNZU0NUTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVOSVggc29ja2V0IHN5c2N0bCB0YWJsZSB0byB1c2UgdW5zaWduZWQgaW50ZWdlciBzZW1hbnRpY3MgYW5kIHByb2NfZG91aW50dmVjX21pbm1heCBmb3IgbmV0LnVuaXgubWF4X2RncmFtX3FsZW4gaW5zdGVhZCBvZiBwcm9jX2RvaW50dmVjLiBUaGlzIGNoYW5nZXMgc3lzY3RsIGlucHV0IHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjA0LjMzNzQ0OTgwNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNzI2MTg5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowODowNC4zMzc4NjAwMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzA3MjIwNTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgc3lzY3RsIHBhcmFtZXRlciAnbmV0LnVuaXgubWF4X2RncmFtX3FsZW4nIGFuZCB0aGUgZmllbGQgJ3N5c2N0bF9tYXhfZGdyYW1fcWxlbicgaW4gc3RydWN0IG5ldG5zX3VuaXggZnJvbSAnaW50JyB0byAndW5zaWduZWQgaW50Jywgc3dpdGNoaW5nIHRoZSBwcm9jIGhhbmRsZXIgZnJvbSBwcm9jX2RvaW50dmVjIHRvIHByb2NfZG91aW50dmVjX21pbm1heC4gXFxuXFxuVGhlIHZhcmlhYmxlIGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gMTAgaW4gdW5peF9uZXRfaW5pdCgpLCBhbmQgcmVhZGluZy93cml0aW5nIHRocm91Z2ggcHJvY19kb3VpbnR2ZWNfbWlubWF4IG9wZXJhdGVzIGRpcmVjdGx5IG9uIHRoaXMgaW5pdGlhbGl6ZWQgdW5zaWduZWQgaW50ZWdlci4gVGhlcmUgYXJlIG5vIG5ld2x5IGFsbG9jYXRlZCBidWZmZXJzLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjaGFuZ2VzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZjYzNmEwMGQ1NWFkZDBmZmMyYjEwZjY2YmE1Y2IyMDY3YmFkNTFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDk6MDY6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZmUxY2E4NmYyODJmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtMzgxOCw4ICszODE4LDkgQEAgbDNtZGV2X2FjY2VwdCAtIEJPT0xFQU5cbiBgYC9wcm9jL3N5cy9uZXQvdW5peC8qYGBcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbi1tYXhfZGdyYW1fcWxlbiAtIElOVEVHRVJcbittYXhfZGdyYW1fcWxlbiAtIFVOU0lHTkVEIElOVEVHRVJcbiBcdFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBkZ3JhbSBzb2NrZXQgcmVjZWl2ZSBxdWV1ZVxuIFxuLVx0RGVmYXVsdDogMTBcbitcdE5lZ2F0aXZlIHZhbHVlcyBhcmUgcmVqZWN0ZWQuXG4gXG4rXHREZWZhdWx0OiAxMFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaCBiL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuaW5kZXggOTg1OWQxMzRkNWE4OS4uZTIzM2M0MjgzMjQzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3VuaXguaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oXG5AQCAtMTUsNyArMTUsNyBAQCBzdHJ1Y3QgdW5peF90YWJsZSB7XG4gc3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XG4gc3RydWN0IG5ldG5zX3VuaXgge1xuIFx0c3RydWN0IHVuaXhfdGFibGVcdHRhYmxlO1xuLVx0aW50XHRcdFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuK1x0dW5zaWduZWQgaW50XHRcdHN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyXHQqY3RsO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggNDc2NjBkNTcyNmJiZC4uOGY2ZjA2NTc0OTVhYSAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4rKysgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTE3LDkgKzE3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJtYXhfZGdyYW1fcWxlblwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG4tXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxuIFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY1xuK1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91aW50dmVjX21pbm1heCxcbiBcdH0sXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjA0LjMzNzg2MTU4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTk1NjUwNTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IHNob3VsZCB3ZSBldmVuIGNvbnNpZGVyIEtNU0FOIGZ1enppbmcgZm9yIHRoaXMgY2hhbmdlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggaXRzZWxmIGZpcnN0LCBvZiBjb3Vyc2UuXG5cblJpZ2h0LCBzbyB0aGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdGAsIGBpbmNsdWRlL25ldC9uZXRucy91bml4LmhgLCBhbmQgYG5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jYC4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBzaGlmdGluZyBgbWF4X2RncmFtX3FsZW5gIGZyb20gYW4gYElOVEVHRVJgIHRvIGFuIGBVTlNJR05FRCBJTlRFR0VSYCwgd2l0aCBzb21lIGRvY3VtZW50YXRpb24gYWRkZWQgdGhhdCBjbGFyaWZpZXMgd2UncmUgcmVqZWN0aW5nIG5lZ2F0aXZlIHZhbHVlcy4gVGhlIHJlbGF0ZWQgc3RydWN0IGRlZmluaXRpb25zIGluIGB1bml4LmhgIGFyZSBhbHNvIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSBmcm9tIGBpbnRgIHRvIGB1bnNpZ25lZCBpbnRgLiBUaGUgY29ycmVzcG9uZGluZyBgc3lzY3RsYCBoYW5kbGluZyBmdW5jdGlvbiBhbmQgdGhlIGBtYXhsZW5gIGFyZSBhbGwgYWRhcHRlZC5cblxuTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogd2hlcmUgaXMgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgYWN0dWFsbHkgKnVzZWQqPyBEb2VzIHRoaXMgY2hhbmdlIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcywgc3VjaCBhcyBvdmVyZmxvd3Mgb3IgdW5pbml0aWFsaXplZCByZWFkcz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyBvZiB0aGlzIHZhcmlhYmxlIHdpdGhpbiB0aGUgY29kZS4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgYG5ldC91bml4L2AgZGlyZWN0b3J5LCBhbmQgaWYgdGhhdCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uLCBJJ2xsIGV4cGFuZCB0aGUgc2VhcmNoLiBCYXNlZCBvbiB0aGlzLCBJIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGV4cGFuZCB0aGUgZnV6emluZyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjIwLjI5NDM3MTAyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjY1MTUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjdGxfbWF4X2RncmFtX3FsZW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0bnMvdW5peC5oPTE2PXN0cnVjdCBuZXRuc191bml4IHtcXG5pbmNsdWRlL25ldC9uZXRucy91bml4LmgtMTctXFx0c3RydWN0IHVuaXhfdGFibGVcXHR0YWJsZTtcXG5pbmNsdWRlL25ldC9uZXRucy91bml4Lmg6MTg6XFx0dW5zaWduZWQgaW50XFx0XFx0c3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbmluY2x1ZGUvbmV0L25ldG5zL3VuaXguaC0xOS1cXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlclxcdCpjdGw7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MTA5ND1zdGF0aWMgc3RydWN0IHNvY2sgKnVuaXhfY3JlYXRlMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuLCBpbnQgdHlwZSlcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMTIxLVxcdHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZVxcdD0gdW5peF93cml0ZV9zcGFjZTtcXG5uZXQvdW5peC9hZl91bml4LmM6MTEyMjpcXHRzay1cXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nXFx0PSBSRUFEX09OQ0UobmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHRcXHQ9IHVuaXhfc29ja19kZXN0cnVjdG9yO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4MTM9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTYtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTc6XFx0bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTgtXFx0aWYgKHVuaXhfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0xNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0xOC1cXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtYXhfZGdyYW1fcWxlblxcXCIsXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6MTk6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTIwLVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxcbi0tXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTMzLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jOjM0OlxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowODoyMS43NDcwMjc2MzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2Nzc4NjM5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byBLZXJuZWwgUGFyYW1ldGVyIFR1bmluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBiYWNrbG9nIGxpbWl0LCBzcGVjaWZpY2FsbHkgd2l0aCBgc2stXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcm9jX2RvdWludHZlY19taW5tYXhgIGludGVyYWN0cyB3aXRoIHRoaXMgYW5kIGhvdyBpdCdzIGRlZmluZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgY3J1Y2lhbCBjb25uZWN0aW9uIGZvciB0aGUgdXNlci1zcGFjZSB0dW5pbmcgb2YgbmV0d29yayBwYXJhbWV0ZXJzLlxuXG5NeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgcmVwcmVzZW50cyBhbiBhZGp1c3RhYmxlIHBhcmFtZXRlciByZWxhdGVkIHRvIFRDUCBhY2sgYmFja2xvZyBvciBhIHJlbGF0ZWQgcXVldWUsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCBpcyB0aGUga2VybmVsIGZ1bmN0aW9uIHRoYXQgbWFuYWdlcyB0aGUgcmFuZ2UgYW5kIHZhbHVlIG9mIHRoaXMgdHVuYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgb24gd2hhdCBjb250ZXh0IGl0IGlzIGFwcGxpZWQuXG5cbk5leHQsIEknbGwgZHJpbGwgaW50byB0aGUgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBkaXNzZWN0IHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgcHJvY19kb3VpbnR2ZWNfbWlubWF4YCwgcHJvYmFibHkgd2l0aCBgdW5peF90YWJsZWAgY29udGV4dCB0b28sIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIHByb2JhYmx5IGV4cG9zZSB3aGF0IG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHdlIGFjY2VwdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA5OjA4OjQyLjQyNDg5NzcxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogTkVUNDpcXHRTeXNjdGwgaW50ZXJmYWNlIHRvIG5ldCBhZl91bml4IHN1YnN5c3RlbS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBBdXRob3JzOlxcdE1pa2UgU2hhdmVyLlxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHRcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2FmX3VuaXguaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHQjaW5jbHVkZSBcXFwiYWZfdW5peC5oXFxcIlxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuICAxNzpcXHRcXHR7XFxuICAxODpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtYXhfZGdyYW1fcWxlblxcXCIsXFxuICAxOTpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXFxuICAyMDpcXHRcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgaW50KSxcXG4gIDIxOlxcdFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbiAgMjI6XFx0XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb3VpbnR2ZWNfbWlubWF4LFxcbiAgMjM6XFx0XFx0fSxcXG4gIDI0OlxcdH07XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0dGFibGUgPSBrbWVtZHVwKHVuaXhfdGFibGUsIHNpemVvZih1bml4X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuICAzMTpcXHRcXHRpZiAoIXRhYmxlKVxcbiAgMzI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRyZXR1cm4gdGFibGU7XFxuICAzNzpcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdGludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbiAgNDQ6XFx0XFx0XFx0dGFibGUgPSB1bml4X3RhYmxlO1xcbiAgNDU6XFx0XFx0fSBlbHNlIHtcXG4gIDQ2OlxcdFxcdFxcdHRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTtcXG4gIDQ3OlxcdFxcdFxcdGlmICghdGFibGUpXFxuICA0ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4gIDQ5OlxcdFxcdH1cXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwOTowODo0Mi40MjQ5NjExMTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4NTA3MjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBIZXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCB3ZSBhbHdheXMgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBkZWFsaW5nIHdpdGggYHByb2NfZG91aW50dmVjX21pbm1heGAgcmVhZGluZyBhbmQgd3JpdGluZyBhbiBgdW5zaWduZWQgaW50YCBmcm9tIGB0YWJsZS1cdTAwM2VkYXRhYC4gVGhlbiB0aGVyZSdzIGBzeXNjdGxfbWF4X2RncmFtX3FsZW5gLCB3aGljaCBpcyBhbiBgdW5zaWduZWQgaW50YCB3aXRoaW4gYHN0cnVjdCBuZXRuc191bml4YC4gSSBrbm93IGl0J3MgaW5pdGlhbGl6ZWQgdG8gYDEwYCBpbiBgdW5peF9uZXRfaW5pdGAsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgbGluZSBoZXJlIGlzIGBzay1cdTAwM2Vza19tYXhfYWNrX2JhY2tsb2cgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4pO2Agd2hlbiBVbml4IHNvY2tldHMgYXJlIGNyZWF0ZWQuIEkgYWxzbyBjaGVja2VkIHRoYXQgYGV4dHJhMWAgYW5kIGBleHRyYTJgIGFyZSBgTlVMTGAgaW4gYHVuaXhfdGFibGVgLCBtZWFuaW5nIGBwcm9jX2RvdWludHZlY19taW5tYXhgIGlzIGNvcnJlY3RseSBlbmZvcmNpbmcgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdW5zaWduZWQgdmFsdWVzLCBhbmQgdGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgYm91bmRzLlxuXG5TbywgYW0gSSBzZWVpbmcgYW55IHJlZCBmbGFncyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGVyZSBhcmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMuIEFzIG1lbnRpb25lZCwgYHN5c2N0bF9tYXhfZGdyYW1fcWxlbmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gdGhhdCdzIGNvdmVyZWQuIGBwcm9jX2RvdWludHZlY19taW5tYXhgIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSByZWFkaW5nIGFuZCB3cml0aW5nIG9mIHVuc2lnbmVkIGludGVnZXJzIGNvcnJlY3RseS4gVGhlcmUncyBubyBwb3NzaWJpbGl0eSBvZiBhIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWsgdmlhIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBieXRlcy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSBiZWluZyByZWFkIG9yIHBhc3NlZCBhcm91bmQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdl4oCUanVzdCB0eXBlIGFsdGVyYXRpb25zLCBub3QgbWVtb3J5IG1hbmlwdWxhdGlvbuKAlEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC5cblxuTGV0J3MgZG91YmxlLWNoZWNrLCB0aG91Z2gsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlJ3JlIGxvb2tpbmcgYXQgS0FTQU4gKGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycykgdnMgS01TQU4gaGVyZS4gS0FTQU4gaXMgYWxyZWFkeSBjb3ZlcmluZyB0aGluZ3MgbGlrZSBzeXNjdGwgaGFuZGxpbmcsIHRhYmxlIGR1cGxpY2F0aW9uLCBhbmQgYmFzaWMgc29ja2V0IHF1ZXVlIGxlbmd0aHMuIFRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyB0aGUgdHlwZSBvZiBgc3lzY3RsX21heF9kZ3JhbV9xbGVuYCwgYW5kIGFkanVzdHMgdGhlIHN5c2N0bCBoYW5kbGVyLiBJdCdzIGp1c3QgYSByZWZhY3RvcmluZy4gSXQncyBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncywgaXNu4oCZdCB0b3VjaGluZyBhbnkgYnVmZmVyIGJvdW5kYXJpZXMgZm9yIGNvcHkgb3BlcmF0aW9ucywgYW5kIGlzbid0IGdlbmVyYXRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGNvcGllcy4gSXTigJlzIGEgY2xlYW4gYW5kIGxvY2FsaXplZCBjaGFuZ2UuXG5cbk9rYXksIHRoYXQncyBlbm91Z2ggZm9yIG1lLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NDcsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDk6MDg6NTEuNDEwMDM1NTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzeXNjdGwgcGFyYW1ldGVyICduZXQudW5peC5tYXhfZGdyYW1fcWxlbicgYW5kIHRoZSBmaWVsZCAnc3lzY3RsX21heF9kZ3JhbV9xbGVuJyBpbiBzdHJ1Y3QgbmV0bnNfdW5peCBmcm9tICdpbnQnIHRvICd1bnNpZ25lZCBpbnQnLCBzd2l0Y2hpbmcgdGhlIHByb2MgaGFuZGxlciBmcm9tIHByb2NfZG9pbnR2ZWMgdG8gcHJvY19kb3VpbnR2ZWNfbWlubWF4LiBcXG5cXG5UaGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCB0byAxMCBpbiB1bml4X25ldF9pbml0KCksIGFuZCByZWFkaW5nL3dyaXRpbmcgdGhyb3VnaCBwcm9jX2RvdWludHZlY19taW5tYXggb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhpcyBpbml0aWFsaXplZCB1bnNpZ25lZCBpbnRlZ2VyLiBUaGVyZSBhcmUgbm8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcnMsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGNoYW5nZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHN5c2N0bCBwYXJhbWV0ZXIgJ25ldC51bml4Lm1heF9kZ3JhbV9xbGVuJyBhbmQgdGhlIGZpZWxkICdzeXNjdGxfbWF4X2RncmFtX3FsZW4nIGluIHN0cnVjdCBuZXRuc191bml4IGZyb20gJ2ludCcgdG8gJ3Vuc2lnbmVkIGludCcsIHN3aXRjaGluZyB0aGUgcHJvYyBoYW5kbGVyIGZyb20gcHJvY19kb2ludHZlYyB0byBwcm9jX2RvdWludHZlY19taW5tYXguIFxcblxcblRoZSB2YXJpYWJsZSBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHRvIDEwIGluIHVuaXhfbmV0X2luaXQoKSwgYW5kIHJlYWRpbmcvd3JpdGluZyB0aHJvdWdoIHByb2NfZG91aW50dmVjX21pbm1heCBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGlzIGluaXRpYWxpemVkIHVuc2lnbmVkIGludGVnZXIuIFRoZXJlIGFyZSBubyBuZXdseSBhbGxvY2F0ZWQgYnVmZmVycywgbm8gc3RydWN0dXJlIHBhZGRpbmcgY2hhbmdlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqk9np[1] Phase: Succeeded StartedAt: 2026-08-29 09:09:03 +0000 UTC FinishedAt: 2026-08-29 09:09:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 09:09:03 +0000 UTC FinishedAt: 2026-08-29 09:09:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2] Phase: Succeeded StartedAt: 2026-08-29 09:09:03 +0000 UTC FinishedAt: 2026-08-29 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 09:09:03 +0000 UTC FinishedAt: 2026-08-29 09:48:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 09:09:03 +0000 UTC FinishedAt: 2026-08-29 09:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 09:09:03 +0000 UTC FinishedAt: 2026-08-29 09:09:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqk9np/series-workflowqk9np-convert-artifact-3371366326/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 09:09:13 +0000 UTC FinishedAt: 2026-08-29 09:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 09:09:13 +0000 UTC FinishedAt: 2026-08-29 09:27:11 +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:*ad646bb0-a032-4420-9006-208fb441dafe,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-workflowqk9np/series-workflowqk9np-convert-artifact-3371366326/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": "cc5e2a3f-612f-4a45-a249-94fa8d7d3a6b", "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-workflowqk9np/series-workflowqk9np-build-action-3292798668/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 09:09:13 +0000 UTC FinishedAt: 2026-08-29 09:27:01 +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:*ad646bb0-a032-4420-9006-208fb441dafe,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-workflowqk9np/series-workflowqk9np-convert-artifact-3371366326/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": "cc5e2a3f-612f-4a45-a249-94fa8d7d3a6b", "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-workflowqk9np/series-workflowqk9np-build-action-3292798668/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 09:27:11 +0000 UTC FinishedAt: 2026-08-29 09:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 09:27:11 +0000 UTC FinishedAt: 2026-08-29 09:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 09:27:11 +0000 UTC FinishedAt: 2026-08-29 09:27:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 09:27:11 +0000 UTC FinishedAt: 2026-08-29 09:27:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqk9np/series-workflowqk9np-convert-artifact-411116873/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 09:27:22 +0000 UTC FinishedAt: 2026-08-29 09:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 09:27:22 +0000 UTC FinishedAt: 2026-08-29 09:29:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cc5e2a3f-612f-4a45-a249-94fa8d7d3a6b,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-workflowqk9np/series-workflowqk9np-build-action-3292798668/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-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 09:29:16 +0000 UTC FinishedAt: 2026-08-29 09:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 09:29:16 +0000 UTC FinishedAt: 2026-08-29 09:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 09:29:16 +0000 UTC FinishedAt: 2026-08-29 09:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 09:29:16 +0000 UTC FinishedAt: 2026-08-29 09:45:10 +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:*ad646bb0-a032-4420-9006-208fb441dafe,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-workflowqk9np/series-workflowqk9np-convert-artifact-411116873/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": "7d9e9e9f-2f6c-4652-a805-bb55c25312b5", "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-workflowqk9np/series-workflowqk9np-build-action-2324083749/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 09:29:16 +0000 UTC FinishedAt: 2026-08-29 09:45:00 +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:*ad646bb0-a032-4420-9006-208fb441dafe,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-workflowqk9np/series-workflowqk9np-convert-artifact-411116873/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": "7d9e9e9f-2f6c-4652-a805-bb55c25312b5", "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-workflowqk9np/series-workflowqk9np-build-action-2324083749/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 09:45:10 +0000 UTC FinishedAt: 2026-08-29 09:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 09:45:10 +0000 UTC FinishedAt: 2026-08-29 09:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 09:45:10 +0000 UTC FinishedAt: 2026-08-29 09:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 09:45:10 +0000 UTC FinishedAt: 2026-08-29 09:46:58 +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:*7d9e9e9f-2f6c-4652-a805-bb55c25312b5,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-workflowqk9np/series-workflowqk9np-build-action-2324083749/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-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 09:47:07 +0000 UTC FinishedAt: 2026-08-29 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 09:47:07 +0000 UTC FinishedAt: 2026-08-29 09:48:24 +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":["unix_sysctl_register"],"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:*cc5e2a3f-612f-4a45-a249-94fa8d7d3a6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7d9e9e9f-2f6c-4652-a805-bb55c25312b5,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-workflowqk9np/series-workflowqk9np-build-action-3292798668/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-workflowqk9np/series-workflowqk9np-build-action-2324083749/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 09:47:07 +0000 UTC FinishedAt: 2026-08-29 09:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 09:47:07 +0000 UTC FinishedAt: 2026-08-29 09:47:12 +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":["unix_sysctl_register"],"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-workflowqk9np/series-workflowqk9np-convert-artifact-3687755422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 09:47:07 +0000 UTC FinishedAt: 2026-08-29 09:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 09:47:07 +0000 UTC FinishedAt: 2026-08-29 09:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 09:47:07 +0000 UTC FinishedAt: 2026-08-29 09:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 09:47:17 +0000 UTC FinishedAt: 2026-08-29 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqk9np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","SYSCTL"],"series_id":"0701ee87-fe45-4126-814c-c6cffb2bd191","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 09:47:17 +0000 UTC FinishedAt: 2026-08-29 09:48:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cc5e2a3f-612f-4a45-a249-94fa8d7d3a6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7d9e9e9f-2f6c-4652-a805-bb55c25312b5,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-workflowqk9np/series-workflowqk9np-build-action-3292798668/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-workflowqk9np/series-workflowqk9np-build-action-2324083749/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-workflowqk9np/series-workflowqk9np-convert-artifact-3687755422/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,}