Name: series-workflowh69cj Phase: Succeeded StartedAt: 2026-07-20 21:42:50 +0000 UTC FinishedAt: 2026-07-21 02:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[0] Phase: Succeeded StartedAt: 2026-07-20 21:42:50 +0000 UTC FinishedAt: 2026-07-20 22:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 21:42:50 +0000 UTC FinishedAt: 2026-07-20 22:05:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD", "TLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD", "TLS" ], "series_id": "33a8b962-17d1-41ff-bdc9-8a5ea1c08524" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_tcp_recv_actor", "svc_tcp_rectype_actor", "svc_tcp_recvfrom", "tls_sw_read_sock_rectype", "__tls_sw_read_sock" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3RjcF9yZWN2X2FjdG9yJiMzNDssCiAgICAmIzM0O3N2Y190Y3BfcmVjdHlwZV9hY3RvciYjMzQ7LAogICAgJiMzNDtzdmNfdGNwX3JlY3Zmcm9tJiMzNDssCiAgICAmIzM0O3Rsc19zd19yZWFkX3NvY2tfcmVjdHlwZSYjMzQ7LAogICAgJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmM0NGIwMjM5YjMxN2ZmNDg4MTgxZDc5MjVjNGVjYjA1YWQxODZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDIyOjA0OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5pbmRleCAyNzcxODhhNDBjNzJlMy4uN2ExOWE3NDNhNjE3NzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5AQCAtMTk4LDYgJiM0MzsxOTgsMTMgQEAgc3RydWN0IHNrX2J1ZmY7XG4gc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7XG4gdHlwZWRlZiBpbnQgKCpza19yZWFkX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosIHN0cnVjdCBza19idWZmICosXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCwgc2l6ZV90KTtcbiYjNDM7LyogcmVjdHlwZSBjYXJyaWVzIHRoZSB0cmFuc3BvcnQgcmVjb3JkIHR5cGUsIGZvciBleGFtcGxlIGFcbiYjNDM7ICogVExTX1JFQ09SRF9UWVBFXyogdmFsdWUuXG4mIzQzOyAqL1xuJiM0Mzt0eXBlZGVmIGludCAoKnNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQsIHNpemVfdCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdTggcmVjdHlwZSk7XG4gdHlwZWRlZiBpbnQgKCpza2JfcmVhZF9hY3Rvcl90KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcbiBcbkBAIC0yNjQsNiAmIzQzOzI3MSwyNyBAQCBzdHJ1Y3QgcHJvdG9fb3BzIHtcbiBcdCAqL1xuIFx0aW50XHRcdCgqcmVhZF9zb2NrKShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHRcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiByZWFkX3NvY2tfcmVjdHlwZSBzcGxpdHMgZGVsaXZlcnkgYWNyb3NzIHR3byBjYWxsYmFja3M6XG4mIzQzO1x0ICogcmVjdl9hY3RvciBmb3IgZGF0YSByZWNvcmRzLCBwZXIgdGhlIHNrX3JlYWRfYWN0b3JfdFxuJiM0MztcdCAqIGNvbnZlbnRpb24sIGFuZCByZWN0eXBlX2FjdG9yIGZvciBhbGwgb3RoZXIgcmVjb3JkcyxcbiYjNDM7XHQgKiB3aXRoIHJlY3R5cGUgaWRlbnRpZnlpbmcgZWFjaC4gQSBOVUxMIHJlY3R5cGVfYWN0b3JcbiYjNDM7XHQgKiBsZWF2ZXMgbm9uLWRhdGEgcmVjb3JkcyBwZW5kaW5nLiByZWN0eXBlX2FjdG9yIHJldHVybnMgMFxuJiM0MztcdCAqIHRvIGNvbnN1bWUgYSByZWNvcmQgb3IgbmVnYXRpdmUgdG8gbGVhdmUgaXQgcGVuZGluZyBmb3JcbiYjNDM7XHQgKiByZWRlbGl2ZXJ5IGFuZCBzdG9wIGRlbGl2ZXJ5OyB0aGUgbmVnYXRpdmUgcmV0dXJuIGlzIGFcbiYjNDM7XHQgKiBiYWNrcHJlc3N1cmUgc2lnbmFsLCBub3QgYSBmYXRhbCBlcnJvci4gQm90aCBjYWxsYmFja3NcbiYjNDM7XHQgKiByZXBvcnQgZXJyb3JzIGFuZCBlYXJseSBzdG9wIHRoZSB3YXkgcmVjdl9hY3RvciBkb2VzOlxuJiM0MztcdCAqIGJ5IHNldHRpbmcgZGVzYy1cdTAwM2Vjb3VudCB0byAwIGFuZCByZWNvcmRpbmcgdGhlIHJlYXNvbiBpblxuJiM0MztcdCAqIGRlc2MtXHUwMDNlZXJyb3IsIHBlciB0aGUgcmVhZF9kZXNjcmlwdG9yX3QgY29udmVudGlvbiBhbmRcbiYjNDM7XHQgKiBpbmRlcGVuZGVudCBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIHJlcG9ydHNcbiYjNDM7XHQgKiBvbmx5IGRhdGEgYnl0ZXMgY29uc3VtZWQgYnkgcmVjdl9hY3RvcjsgdGhlIGNhbGxlclxuJiM0MztcdCAqIGRldGVjdHMgYW4gZXJyb3Igb3IgZWFybHkgc3RvcCB2aWEgZGVzYy1cdTAwM2Vjb3VudCBhbmRcbiYjNDM7XHQgKiBkZXNjLVx1MDAzZWVycm9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGludFx0XHQoKnJlYWRfc29ja19yZWN0eXBlKShzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuJiM0MztcdFx0XHRcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3RvcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7XG4gXHQvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHJlYWRfc29jaygpLCBpdCByZWFkcyBhbiBlbnRpcmUgc2tiIGF0IGEgdGltZS4gKi9cbiBcdGludFx0XHQoKnJlYWRfc2tiKShzdHJ1Y3Qgc29jayAqc2ssIHNrYl9yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7XG4gXHRpbnRcdFx0KCpzZW5kbXNnX2xvY2tlZCkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZGUuLjliOWUwZGE5ZTczY2Q2IDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXG5AQCAtOCwxNSAmIzQzOzgsNiBAQFxuICAqIGV2ZW5seSB3aGVuIHNlcnZpY2luZyBhIHNpbmdsZSBjbGllbnQuIE1heSBuZWVkIHRvIG1vZGlmeSB0aGVcbiAgKiBzdmNfeHBydF9lbnF1ZXVlIHByb2NlZHVyZS4uLlxuICAqXG4tICogVENQIHN1cHBvcnQgaXMgbGFyZ2VseSB1bnRlc3RlZCBhbmQgbWF5IGJlIGEgbGl0dGxlIHNsb3cuIFRoZSBwcm9ibGVtXG4tICogaXMgdGhhdCB3ZSBjdXJyZW50bHkgZG8gdHdvIHNlcGFyYXRlIHJlY3Zmcm9tJiMzOTtzLCBvbmUgZm9yIHRoZSA0LWJ5dGVcbi0gKiByZWNvcmQgbGVuZ3RoLCBhbmQgdGhlIHNlY29uZCBmb3IgdGhlIGFjdHVhbCByZWNvcmQuIFRoaXMgY291bGQgcG9zc2libHlcbi0gKiBiZSBpbXByb3ZlZCBieSBhbHdheXMgcmVhZGluZyBhIG1pbmltdW0gc2l6ZSBvZiBhcm91bmQgMTAwIGJ5dGVzIGFuZFxuLSAqIHR1Y2tpbmcgYW55IHN1cGVyZmx1b3VzIGJ5dGVzIGF3YXkgaW4gYSB0ZW1wb3Jhcnkgc3RvcmUuIFN0aWxsLCB0aGF0XG4tICogbGVhdmVzIHdyaXRlIHJlcXVlc3RzIG91dCBpbiB0aGUgcmFpbi4gQW4gYWx0ZXJuYXRpdmUgbWF5IGJlIHRvIHBlZWsgYXRcbi0gKiB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSwgYW5kIGlmIGl0IG1hdGNoZXMgdGhlIG5leHQgVENQIHNlcXVlbmNlXG4tICogbnVtYmVyLCB0byBleHRyYWN0IHRoZSByZWNvcmQgbWFya2VyLiBZdWNrLlxuLSAqXG4gICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggXHUwMDNjb2tpckBtb25hZC5zd2IuZGVcdTAwM2VcbiAgKi9cbiBcbkBAIC0yMzgsMTM4ICYjNDM7MjI5LDYgQEAgc3RhdGljIGludCBzdmNfb25lX3NvY2tfbmFtZShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIGNoYXIgKmJ1ZiwgaW50IHJlbWFpbmluZylcbiBcdHJldHVybiBsZW47XG4gfVxuIFxuLXN0YXRpYyBpbnRcbi1zdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnLCBpbnQgcmV0KVxuLXtcbi1cdHU4IGNvbnRlbnRfdHlwZSA9IHRsc19nZXRfcmVjb3JkX3R5cGUoc29jay1cdTAwM2VzaywgY21zZyk7XG4tXHR1OCBsZXZlbCwgZGVzY3JpcHRpb247XG4tXG4tXHRzd2l0Y2ggKGNvbnRlbnRfdHlwZSkge1xuLVx0Y2FzZSAwOlxuLVx0XHRicmVhaztcbi1cdGNhc2UgVExTX1JFQ09SRF9UWVBFX0RBVEE6XG4tXHRcdC8qIFRMUyBzZXRzIEVPUiBhdCB0aGUgZW5kIG9mIGVhY2ggYXBwbGljYXRpb24gZGF0YVxuLVx0XHQgKiByZWNvcmQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIG1vcmUgZnJhbWVzXG4tXHRcdCAqIHdhaXRpbmcgdG8gYmUgZGVjcnlwdGVkLlxuLVx0XHQgKi9cbi1cdFx0bXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjY9IH5NU0dfRU9SO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVExTX1JFQ09SRF9UWVBFX0FMRVJUOlxuLVx0XHR0bHNfYWxlcnRfcmVjdihzb2NrLVx1MDAzZXNrLCBtc2csIFx1MDAyNmxldmVsLCBcdTAwMjZkZXNjcmlwdGlvbik7XG4tXHRcdHJldCA9IChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpID9cbi1cdFx0XHQtRU5PVENPTk4gOiAtRUFHQUlOO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdC8qIGRpc2NhcmQgdGhpcyByZWNvcmQgdHlwZSAqL1xuLVx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGludFxuLXN2Y190Y3Bfc29ja19yZWN2X2Ntc2coc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50ICptc2dfZmxhZ3MpXG4te1xuLVx0dW5pb24ge1xuLVx0XHRzdHJ1Y3QgY21zZ2hkclx0Y21zZztcbi1cdFx0dThcdFx0YnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHU4KSldO1xuLVx0fSB1O1xuLVx0dTggYWxlcnRbMl07XG4tXHRzdHJ1Y3Qga3ZlYyBhbGVydF9rdmVjID0ge1xuLVx0XHQuaW92X2Jhc2UgPSBhbGVydCxcbi1cdFx0Lmlvdl9sZW4gPSBzaXplb2YoYWxlcnQpLFxuLVx0fTtcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuLVx0XHQubXNnX2ZsYWdzID0gKm1zZ19mbGFncyxcbi1cdFx0Lm1zZ19jb250cm9sID0gXHUwMDI2dSxcbi1cdFx0Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKHUpLFxuLVx0fTtcbi1cdGludCByZXQ7XG4tXG4tXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBcdTAwMjZhbGVydF9rdmVjLCAxLFxuLVx0XHQgICAgICBhbGVydF9rdmVjLmlvdl9sZW4pO1xuLVx0cmV0ID0gc29ja19yZWN2bXNnKHNvY2ssIFx1MDAyNm1zZywgTVNHX0RPTlRXQUlUKTtcbi1cdGlmIChyZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLVx1MDAzZXNrLCBcdTAwMjZ1LmNtc2cpID09IFRMU19SRUNPUkRfVFlQRV9BTEVSVCkge1xuLVx0XHRpb3ZfaXRlcl9yZXZlcnQoXHUwMDI2bXNnLm1zZ19pdGVyLCByZXQpO1xuLVx0XHRyZXQgPSBzdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHNvY2ssIFx1MDAyNm1zZywgXHUwMDI2dS5jbXNnLCAtRUFHQUlOKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi1zdmNfdGNwX3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRpbnQgcmV0O1xuLVx0c3RydWN0IHNvY2tldCAqc29jayA9IHN2c2stXHUwMDNlc2tfc29jaztcbi1cbi1cdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBtc2csIE1TR19ET05UV0FJVCk7XG4tXHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0NUUlVOQykge1xuLVx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNj0gfihNU0dfQ1RSVU5DIHwgTVNHX0VPUik7XG4tXHRcdGlmIChyZXQgPT0gMCB8fCByZXQgPT0gLUVJTylcbi1cdFx0XHRyZXQgPSBzdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHNvY2ssIFx1MDAyNm1zZy1cdTAwM2Vtc2dfZmxhZ3MpO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tI2lmIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRVxuLXN0YXRpYyB2b2lkIHN2Y19mbHVzaF9idmVjKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHNlZWspXG4te1xuLVx0c3RydWN0IGJ2ZWNfaXRlciBiaSA9IHtcbi1cdFx0LmJpX3NpemVcdD0gc2l6ZSAmIzQzOyBzZWVrLFxuLVx0fTtcbi1cdHN0cnVjdCBiaW9fdmVjIGJ2O1xuLVxuLVx0YnZlY19pdGVyX2FkdmFuY2UoYnZlYywgXHUwMDI2YmksIHNlZWsgXHUwMDI2IFBBR0VfTUFTSyk7XG4tXHRmb3JfZWFjaF9idmVjKGJ2LCBidmVjLCBiaSwgYmkpXG4tXHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJ2LmJ2X3BhZ2UpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsXG4tXHRcdFx0XHQgIHNpemVfdCBzZWVrKVxuLXtcbi19XG4tI2VuZGlmXG4tXG4tLypcbi0gKiBSZWFkIGZyb20gQHJxc3RwJiMzOTtzIHRyYW5zcG9ydCBzb2NrZXQuIFRoZSBpbmNvbWluZyBtZXNzYWdlIGZpbGxzIHdob2xlXG4tICogcGFnZXMgaW4gQHJxc3RwJiMzOTtzIHJxX3BhZ2VzIGFycmF5IHVudGlsIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIG1lc3NhZ2Vcbi0gKiBoYXMgYmVlbiByZWNlaXZlZCBpbnRvIGEgcGFydGlhbCBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tc2coc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc2l6ZV90IGJ1Zmxlbixcbi1cdFx0XHRcdHNpemVfdCBzZWVrKVxuLXtcbi1cdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9XG4tXHRcdGNvbnRhaW5lcl9vZihycXN0cC1cdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xuLVx0c3RydWN0IGJpb192ZWMgKmJ2ZWMgPSBycXN0cC1cdTAwM2VycV9idmVjO1xuLVx0c3RydWN0IG1zZ2hkciBtc2cgPSB7IE5VTEwgfTtcbi1cdHVuc2lnbmVkIGludCBpO1xuLVx0c3NpemVfdCBsZW47XG4tXHRzaXplX3QgdDtcbi1cbi1cdGNsZWFyX2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4tXG4tXHRmb3IgKGkgPSAwLCB0ID0gMDsgdCBcdTAwM2MgYnVmbGVuOyBpJiM0MzsmIzQzOywgdCAmIzQzOz0gUEFHRV9TSVpFKVxuLVx0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWNbaV0sIHJxc3RwLVx1MDAzZXJxX3BhZ2VzW2ldLCBQQUdFX1NJWkUsIDApO1xuLVxuLVx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYnZlYywgaSwgYnVmbGVuKTtcbi1cdGlmIChzZWVrKSB7XG4tXHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2bXNnLm1zZ19pdGVyLCBzZWVrKTtcbi1cdFx0YnVmbGVuIC09IHNlZWs7XG4tXHR9XG4tXHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcdTAwMjZtc2cpO1xuLVx0aWYgKGxlbiBcdTAwM2UgMClcbi1cdFx0c3ZjX2ZsdXNoX2J2ZWMoYnZlYywgbGVuLCBzZWVrKTtcbi1cbi1cdC8qIElmIHdlIHJlYWQgYSBmdWxsIHJlY29yZCwgdGhlbiBhc3N1bWUgdGhlcmUgbWF5IGJlIG1vcmVcbi1cdCAqIGRhdGEgdG8gcmVhZCAoc3RyZWFtIGJhc2VkIHNvY2tldHMgb25seSEpXG4tXHQgKi9cbi1cdGlmIChsZW4gPT0gYnVmbGVuKVxuLVx0XHRzZXRfYml0KFhQVF9EQVRBLCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2ZsYWdzKTtcbi1cbi1cdHJldHVybiBsZW47XG4tfVxuLVxuIC8qXG4gICogU2V0IHNvY2tldCBzbmQgYW5kIHJjdiBidWZmZXIgbGVuZ3Roc1xuICAqL1xuQEAgLTEwNDgsNTAgJiM0Mzs5MDcsNiBAQCBzdGF0aWMgdm9pZCBzdmNfdGNwX2NsZWFyX3BhZ2VzKHN0cnVjdCBzdmNfc29jayAqc3ZzaylcbiBcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiA9IDA7XG4gfVxuIFxuLS8qXG4tICogUmVjZWl2ZSBmcmFnbWVudCByZWNvcmQgaGVhZGVyIGludG8gc2tfbWFya2VyLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3RydWN0IHN2Y19zb2NrICpzdnNrLFxuLVx0XHRcdFx0ICAgc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi17XG4tXHRzc2l6ZV90IHdhbnQsIGxlbjtcbi1cbi1cdC8qIElmIHdlIGhhdmVuJiMzOTt0IGdvdHRlbiB0aGUgcmVjb3JkIGxlbmd0aCB5ZXQsXG4tXHQgKiBnZXQgdGhlIG5leHQgZm91ciBieXRlcy5cbi1cdCAqL1xuLVx0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIFx1MDAzYyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7XG4tXHRcdHN0cnVjdCBtc2doZHJcdG1zZyA9IHsgTlVMTCB9O1xuLVx0XHRzdHJ1Y3Qga3ZlY1x0aW92O1xuLVxuLVx0XHR3YW50ID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAtIHN2c2stXHUwMDNlc2tfdGNwbGVuO1xuLVx0XHRpb3YuaW92X2Jhc2UgPSAoKGNoYXIgKilcdTAwMjZzdnNrLVx1MDAzZXNrX21hcmtlcikgJiM0Mzsgc3Zzay1cdTAwM2Vza190Y3BsZW47XG4tXHRcdGlvdi5pb3ZfbGVuICA9IHdhbnQ7XG4tXHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmlvdiwgMSwgd2FudCk7XG4tXHRcdGxlbiA9IHN2Y190Y3Bfc29ja19yZWN2bXNnKHN2c2ssIFx1MDAyNm1zZyk7XG4tXHRcdGlmIChsZW4gXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGxlbjtcbi1cdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gJiM0Mzs9IGxlbjtcbi1cdFx0aWYgKGxlbiBcdTAwM2Mgd2FudCkge1xuLVx0XHRcdC8qIGNhbGwgYWdhaW4gdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzICovXG4tXHRcdFx0Z290byBlcnJfc2hvcnQ7XG4tXHRcdH1cbi1cdFx0dHJhY2Vfc3Zjc29ja19tYXJrZXIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzdnNrLVx1MDAzZXNrX21hcmtlcik7XG4tXHRcdGlmIChzdmNfc29ja19yZWNsZW4oc3ZzaykgJiM0Mzsgc3Zzay1cdTAwM2Vza19kYXRhbGVuIFx1MDAzZVxuLVx0XHQgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbWF4X21lc2cpXG4tXHRcdFx0Z290byBlcnJfdG9vX2xhcmdlO1xuLVx0fVxuLVx0cmV0dXJuIHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcbi1cbi1lcnJfdG9vX2xhcmdlOlxuLVx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcJiMzNDtzdmM6ICVzIG92ZXJzaXplZCBSUEMgZnJhZ21lbnQgKCV1IG9jdGV0cykgZnJvbSAlcElTcGNcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIHN2c2stXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVx1MDAzZXN2X25hbWUsXG4tXHRcdFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbi1cdFx0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcbi1cdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4tZXJyX3Nob3J0OlxuLVx0cmV0dXJuIC1FQUdBSU47XG4tfVxuLVxuIHN0YXRpYyBpbnQgcmVjZWl2ZV9jYl9yZXBseShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4ge1xuIFx0c3RydWN0IHJwY194cHJ0ICpiY194cHJ0ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9iY194cHJ0O1xuQEAgLTExMzQsMTYgJiM0Mzs5NDksMTQ0IEBAIHN0YXRpYyB2b2lkIHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3RydWN0IHN2Y19zb2NrICpzdnNrKVxuIFx0c3Zzay1cdTAwM2Vza19tYXJrZXIgPSB4ZHJfemVybztcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHJlYWRfc29jayBkYXRhIGFjdG9yOiByZWNlaXZlcyBhcHBsaWNhdGlvbiBkYXRhIGZyb20gdGhlXG4mIzQzOyAqIHRyYW5zcG9ydCBzb2NrZXQsIHBhcnNpbmcgdGhlIFJQQyByZWNvcmQgc3RyZWFtIChmcmFnbWVudFxuJiM0MzsgKiBoZWFkZXJzIGFuZCBtZXNzYWdlIGJvZGllcykgYW5kIGFzc2VtYmxpbmcgY29tcGxldGUgUlBDXG4mIzQzOyAqIG1lc3NhZ2VzIGludG8gcnFzdHAtXHUwMDNlcnFfcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLVx1MDAzZWFyZy5kYXRhO1xuJiM0MztcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YocnFzdHAtXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcbiYjNDM7XHRzaXplX3QgcmVjbGVuLCByZWNlaXZlZCwgd2FudCwgdGFrZSwgZG9uZSwgbjtcbiYjNDM7XHRzaXplX3QgY29uc3VtZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRlc2MtXHUwMDNlY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIFx1MDAzYyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7XG4mIzQzO1x0XHR3YW50ID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAtIHN2c2stXHUwMDNlc2tfdGNwbGVuO1xuJiM0MztcdFx0biA9IG1pbih3YW50LCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdCAgKGNoYXIgKilcdTAwMjZzdnNrLVx1MDAzZXNrX21hcmtlciAmIzQzO1xuJiM0MztcdFx0XHRcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4sIG4pKVxuJiM0MztcdFx0XHRnb3RvIGZhdWx0O1xuJiM0MztcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gJiM0Mzs9IG47XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IG47XG4mIzQzO1x0XHRsZW4gLT0gbjtcbiYjNDM7XHRcdGNvbnN1bWVkICYjNDM7PSBuO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdnNrLVx1MDAzZXNrX3RjcGxlbiBcdTAwM2Mgc2l6ZW9mKHJwY19mcmFnaGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGNvbnN1bWVkO1xuJiM0MztcbiYjNDM7XHRcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc3Zzay1cdTAwM2Vza19tYXJrZXIpO1xuJiM0MztcdFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSAmIzQzOyBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXG4mIzQzO1x0XHQgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbWF4X21lc2cpIHtcbiYjNDM7XHRcdFx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcJiMzNDtzdmM6ICVzIG92ZXJzaXplZCBSUEMgZnJhZ21lbnQgKCV1IG9jdGV0cykgZnJvbSAlcElTcGNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdmNfc29ja19yZWNsZW4oc3ZzayksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2VlcnJvciA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4mIzQzO1x0XHRcdHJldHVybiBjb25zdW1lZDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlY2xlbiA9IHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcbiYjNDM7XHRyZWNlaXZlZCA9IHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKTtcbiYjNDM7XHR3YW50ID0gcmVjbGVuIC0gcmVjZWl2ZWQ7XG4mIzQzO1x0dGFrZSA9IG1pbih3YW50LCBsZW4pO1xuJiM0MztcdGRvbmUgPSAwO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoZG9uZSBcdTAwM2MgdGFrZSkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBnID0gc3Zzay1cdTAwM2Vza19kYXRhbGVuIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBnX29mZiA9IHN2c2stXHUwMDNlc2tfZGF0YWxlbiBcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xuJiM0MztcdFx0c2l6ZV90IGNodW5rID0gbWluKHRha2UgLSBkb25lLFxuJiM0MztcdFx0XHRcdCAgIFBBR0VfU0laRSAtIChzaXplX3QpcGdfb2ZmKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCxcbiYjNDM7XHRcdFx0XHQgIHBhZ2VfYWRkcmVzcyhycXN0cC1cdTAwM2VycV9wYWdlc1twZ10pICYjNDM7IHBnX29mZixcbiYjNDM7XHRcdFx0XHQgIGNodW5rKSlcbiYjNDM7XHRcdFx0Z290byBmYXVsdDtcbiYjNDM7XHRcdGZsdXNoX2RjYWNoZV9wYWdlKHJxc3RwLVx1MDAzZXJxX3BhZ2VzW3BnXSk7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IGNodW5rO1xuJiM0MztcdFx0ZG9uZSAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRzdnNrLVx1MDAzZXNrX2RhdGFsZW4gJiM0Mzs9IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7XHRzdnNrLVx1MDAzZXNrX3RjcGxlbiAmIzQzOz0gdGFrZTtcbiYjNDM7XHRjb25zdW1lZCAmIzQzOz0gdGFrZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSBcdTAwM2U9IHJlY2xlbikge1xuJiM0MztcdFx0aWYgKHN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSlcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3Zzayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29uc3VtZWQ7XG4mIzQzO1xuJiM0MztmYXVsdDpcbiYjNDM7XHRkZXNjLVx1MDAzZWVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbiYjNDM7XHRyZXR1cm4gY29uc3VtZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHJlYWRfc29ja19yZWN0eXBlIG5vbi1kYXRhIHJlY29yZCBhY3RvcjogcmVjZWl2ZXMgbm9uLWRhdGEgVExTXG4mIzQzOyAqIHJlY29yZHMgKGFsZXJ0cywgaGFuZHNoYWtlIG1lc3NhZ2VzKSBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG9cbiYjNDM7ICogdHJhbnNwb3J0LWxldmVsIGFjdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCB0byBjb25zdW1lIHRoZSByZWNvcmQgYW5kIGFsbG93IHRoZSBUTFMgbGF5ZXIgdG9cbiYjNDM7ICogY29udGludWUgZGVsaXZlcmluZyBzdWJzZXF1ZW50IHJlY29yZHMuIEEgbmVnYXRpdmUgcmV0dXJuXG4mIzQzOyAqIGNhdXNlcyB0aGUgVExTIGxheWVyIHRvIHJlcXVldWUgdGhlIHNrYiBvbiBpdHMgcnhfbGlzdCxcbiYjNDM7ICogYmxvY2tpbmcgYWxsIGZ1cnRoZXIgcmVjb3JkIGRlbGl2ZXJ5IG9uIHRoaXMgY29ubmVjdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLFxuJiM0MztcdFx0XHRcdCB1OCByZWN0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN2Y19ycXN0ICpycXN0cCA9IGRlc2MtXHUwMDNlYXJnLmRhdGE7XG4mIzQzO1x0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihycXN0cC1cdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHJlY3R5cGUpIHtcbiYjNDM7XHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDoge1xuJiM0MztcdFx0dTggYWxlcnRbMl0gPSB7fSwgbGV2ZWwsIGRlc2NyaXB0aW9uO1xuJiM0MztcdFx0c3RydWN0IGt2ZWMga3ZlYyA9IHtcbiYjNDM7XHRcdFx0Lmlvdl9iYXNlID0gYWxlcnQsXG4mIzQzO1x0XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSxcbiYjNDM7XHRcdH07XG4mIzQzO1x0XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9O1xuJiM0MztcbiYjNDM7XHRcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LCBhbGVydCwgbWluKGxlbiwgc2l6ZW9mKGFsZXJ0KSkpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmt2ZWMsIDEsIHNpemVvZihhbGVydCkpO1xuJiM0MztcdFx0dGxzX2FsZXJ0X3JlY3Yoc3Zzay1cdTAwM2Vza19zaywgXHUwMDI2bXNnLCBcdTAwMjZsZXZlbCwgXHUwMDI2ZGVzY3JpcHRpb24pO1xuJiM0MztcdFx0aWYgKGxldmVsID09IFRMU19BTEVSVF9MRVZFTF9GQVRBTCkge1xuJiM0MztcdFx0XHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuJiM0MztcdFx0XHRkZXNjLVx1MDAzZWVycm9yID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHN2Y190Y3BfcmVjdmZyb20gLSBSZWNlaXZlIGRhdGEgZnJvbSBhIFRDUCBzb2NrZXRcbiAgKiBAcnFzdHA6IHJlcXVlc3Qgc3RydWN0dXJlIGludG8gd2hpY2ggdG8gcmVjZWl2ZSBhbiBSUEMgQ2FsbFxuICAqXG4gICogQ2FsbGVkIGluIGEgbG9vcCB3aGVuIFhQVF9EQVRBIGhhcyBiZWVuIHNldC5cbiAgKlxuLSAqIFJlYWQgdGhlIDQtYnl0ZSBzdHJlYW0gcmVjb3JkIG1hcmtlciwgdGhlbiB1c2UgdGhlIHJlY29yZCBsZW5ndGhcbi0gKiBpbiB0aGF0IG1hcmtlciB0byBzZXQgdXAgZXhhY3RseSB0aGUgcmVzb3VyY2VzIG5lZWRlZCB0byByZWNlaXZlXG4tICogdGhlIG5leHQgUlBDIG1lc3NhZ2UgaW50byBAcnFzdHAuXG4tICpcbiAgKiBSZXR1cm5zOlxuICAqICAgT24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHJlY2VpdmVkIFJQQyBDYWxsLCBvclxuICAqICAgJTAgaWYgYSBjb21wbGV0ZSBSUEMgQ2FsbCBtZXNzYWdlIHdhcyBub3QgcmVhZHkgdG8gcmV0dXJuXG5AQCAtMTE1NywyNiAmIzQzOzExMDAsNDAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4gXHRzdHJ1Y3Qgc3ZjX3NvY2tcdCpzdnNrID1cbiBcdFx0Y29udGFpbmVyX29mKHJxc3RwLVx1MDAzZXJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7XG4gXHRzdHJ1Y3Qgc3ZjX3NlcnZcdCpzZXJ2ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXI7XG4tXHRzaXplX3Qgd2FudCwgYmFzZTtcbiYjNDM7XHRzdHJ1Y3Qgc29ja1x0KnNrID0gc3Zzay1cdTAwM2Vza19zaztcbiYjNDM7XHRyZWFkX2Rlc2NyaXB0b3JfdCBkZXNjID0ge1xuJiM0MztcdFx0LmFyZy5kYXRhID0gcnFzdHAsXG4mIzQzO1x0fTtcbiBcdHNzaXplX3QgbGVuO1xuIFx0X19iZTMyICpwO1xuIFx0X19iZTMyIGNhbGxkaXI7XG4gXG4gXHRjbGVhcl9iaXQoWFBUX0RBVEEsIFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpO1xuLVx0bGVuID0gc3ZjX3RjcF9yZWFkX21hcmtlcihzdnNrLCBycXN0cCk7XG4tXHRpZiAobGVuIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yO1xuIFxuLVx0YmFzZSA9IHN2Y190Y3BfcmVzdG9yZV9wYWdlcyhzdnNrLCBycXN0cCk7XG4tXHR3YW50ID0gbGVuIC0gKHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7XG4tXHRsZW4gPSBzdmNfdGNwX3JlYWRfbXNnKHJxc3RwLCBiYXNlICYjNDM7IHdhbnQsIGJhc2UpO1xuLVx0aWYgKGxlbiBcdTAwM2U9IDApIHtcbi1cdFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIGxlbik7XG4tXHRcdHN2c2stXHUwMDNlc2tfdGNwbGVuICYjNDM7PSBsZW47XG4tXHRcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiAmIzQzOz0gbGVuO1xuJiM0MztcdHN2Y190Y3BfcmVzdG9yZV9wYWdlcyhzdnNrLCBycXN0cCk7XG4mIzQzO1x0cnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAtXHUwMDNlcnFfcGFnZXNbMF0pO1xuJiM0MztcbiYjNDM7XHRkZXNjLmNvdW50ID0gc2Vydi1cdTAwM2Vzdl9tYXhfbWVzZztcbiYjNDM7XHRsb2NrX3NvY2soc2spO1xuJiM0MztcdGlmIChzdnNrLVx1MDAzZXNrX3NvY2stXHUwMDNlb3BzLVx1MDAzZXJlYWRfc29ja19yZWN0eXBlKVxuJiM0MztcdFx0bGVuID0gc3Zzay1cdTAwM2Vza19zb2NrLVx1MDAzZW9wcy1cdTAwM2VyZWFkX3NvY2tfcmVjdHlwZShzaywgXHUwMDI2ZGVzYyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgc3ZjX3RjcF9yZWN2X2FjdG9yLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBzdmNfdGNwX3JlY3R5cGVfYWN0b3IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlbiA9IHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrKHNrLCBcdTAwMjZkZXNjLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHN2Y190Y3BfcmVjdl9hY3Rvcik7XG4mIzQzO1x0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MuZXJyb3IgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGxlbiA9IGRlc2MuZXJyb3I7XG4mIzQzO1x0XHRnb3RvIGVycl9kaXNjYXJkO1xuIFx0fVxuLVx0aWYgKGxlbiAhPSB3YW50IHx8ICFzdmNfc29ja19maW5hbF9yZWMoc3ZzaykpXG4mIzQzO1x0aWYgKGRlc2MuY291bnQgIT0gMCkge1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRcdGdvdG8gZXJyX2luY29tcGxldGU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNjIDgpXG4gXHRcdGdvdG8gZXJyX251dHM7XG4gXG5AQCAtMTE4NSw4ICYjNDM7MTE0MiwxMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGlmIChycXN0cC1cdTAwM2VycV9hcmcubGVuIFx1MDAzYz0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbikge1xuIFx0XHRycXN0cC1cdTAwM2VycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gcnFzdHAtXHUwMDNlcnFfYXJnLmxlbjtcbiBcdFx0cnFzdHAtXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gMDtcbi1cdH0gZWxzZVxuLVx0XHRycXN0cC1cdTAwM2VycV9hcmcucGFnZV9sZW4gPSBycXN0cC1cdTAwM2VycV9hcmcubGVuIC0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cnFzdHAtXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gcnFzdHAtXHUwMDNlcnFfYXJnLmxlbiAtXG4mIzQzO1x0XHRcdHJxc3RwLVx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW47XG4mIzQzO1x0fVxuIFxuIFx0cnFzdHAtXHUwMDNlcnFfeHBydF9jdHh0ICAgPSBOVUxMO1xuIFx0cnFzdHAtXHUwMDNlcnFfcHJvdFx0ICAgICAgPSBJUFBST1RPX1RDUDtcbkBAIC0xMjA3LDExICYjNDM7MTE2NiwxMyBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGlmIChsZW4gXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHJxc3RwLVx1MDAzZXJxX2FyZy5sZW4pO1xuIFx0c3ZjX3hwcnRfY29weV9hZGRycyhycXN0cCwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbiBcdGlmIChzZXJ2LVx1MDAzZXN2X3N0YXRzKVxuIFx0XHRzZXJ2LVx1MDAzZXN2X3N0YXRzLVx1MDAzZW5ldHRjcGNudCYjNDM7JiM0Mzs7XG4gXG4gXHRzdmNfc29ja19zZWN1cmVfcG9ydChycXN0cCk7XG4mIzQzO1x0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cdTAwM2VycV94cHJ0KTtcbiBcdHJldHVybiBycXN0cC1cdTAwM2VycV9hcmcubGVuO1xuIFxuQEAgLTEyMTksOSAmIzQzOzExODAsNyBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdHN2Y190Y3Bfc2F2ZV9wYWdlcyhzdnNrLCBycXN0cCk7XG4gXHRpZiAobGVuIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBsZW4gIT0gLUVBR0FJTilcbiBcdFx0Z290byBlcnJfZGVsZXRlO1xuLVx0aWYgKGxlbiA9PSB3YW50KVxuLVx0XHRzdmNfdGNwX2ZyYWdtZW50X3JlY2VpdmVkKHN2c2spO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChzdnNrLVx1MDAzZXNrX3RjcGxlbiBcdTAwM2U9IHNpemVvZihycGNfZnJhZ2hkcikpXG4gXHRcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3Zfc2hvcnQoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LFxuIFx0XHRcdFx0c3ZjX3NvY2tfcmVjbGVuKHN2c2spLFxuIFx0XHRcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gLSBzaXplb2YocnBjX2ZyYWdoZHIpKTtcbkBAIC0xMjMzLDEyICYjNDM7MTE5MiwyMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGdvdG8gZXJyX25vY2xvc2U7XG4gZXJyX251dHM6XG4gXHRzdnNrLVx1MDAzZXNrX2RhdGFsZW4gPSAwO1xuJiM0MztcdGdvdG8gZXJyX2RlbGV0ZTtcbiYjNDM7ZXJyX2Rpc2NhcmQ6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDbGVhciBza19kYXRhbGVuIHNvIHRoZSB0ZWFyZG93bi10aW1lXG4mIzQzO1x0ICogc3ZjX3RjcF9jbGVhcl9wYWdlcygpIGRvZXMgbm90IHdhbGsgdGhlIGVtcHRpZWRcbiYjNDM7XHQgKiBzdnNrLVx1MDAzZXNrX3BhZ2VzW10uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Zzay1cdTAwM2Vza19kYXRhbGVuID0gMDtcbiBlcnJfZGVsZXRlOlxuIFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9lcnIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBsZW4pO1xuIFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbiBlcnJfbm9jbG9zZTpcbiBcdHN2Y194cHJ0X3JlY2VpdmVkKHJxc3RwLVx1MDAzZXJxX3hwcnQpO1xuLVx0cmV0dXJuIDA7XHQvKiByZWNvcmQgbm90IGNvbXBsZXRlICovXG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHMuaCBiL25ldC90bHMvdGxzLmhcbmluZGV4IDYwYTM3YmRhYWEyNTA2Li5jMjFkMmE5ODVlMTM3MyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzLmhcbkBAIC0xNjgsNiAmIzQzOzE2OCw5IEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHQgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpO1xuJiM0MztpbnQgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4mIzQzO1x0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4mIzQzO1x0XHRcdCAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7XG4gXG4gaW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xuIHZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggOGM1ODhjZGFiNzMzZGEuLjQ5NjNlMGNhZjZkNTNhIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC05NDksMTIgJiM0Mzs5NDksMTcgQEAgc3RhdGljIHZvaWQgYnVpbGRfcHJvdG9fb3BzKHN0cnVjdCBwcm90b19vcHMgb3BzW1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR11cbiBcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnNwbGljZV9yZWFkXHQ9IHRsc19zd19zcGxpY2VfcmVhZDtcbiBcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnBvbGxcdFx0PSB0bHNfc2tfcG9sbDtcbiBcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja1x0PSB0bHNfc3dfcmVhZF9zb2NrO1xuJiM0MztcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbiBcbiBcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbiYjNDM7XHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZVx0PSB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGU7XG4gXG4mIzQzO1x0LyogVExTX0hXIChkZXZpY2Ugb2ZmbG9hZCkgUlggZW50cmllcyBpbmhlcml0XG4mIzQzO1x0ICogcmVhZF9zb2NreyxfcmVjdHlwZX0gZnJvbSBTVyB2aWEgdGhlIHN0cnVjdCBjb3BpZXMgYmVsb3cuXG4mIzQzO1x0ICovXG4gI2lmZGVmIENPTkZJR19UTFNfREVWSUNFXG4gXHRvcHNbVExTX0hXICBdW1RMU19CQVNFXSA9IG9wc1tUTFNfQkFTRV1bVExTX0JBU0VdO1xuIFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N3LmMgYi9uZXQvdGxzL3Rsc19zdy5jXG5pbmRleCBkNGFmYzkwZmQ3OTY2ZS4uYWYzNDdiNWIxN2ZhOGMgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19zdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19zdy5jXG5AQCAtMjA0OSwxNCAmIzQzOzIwNDksMjEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbiBcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xuIH1cbiBcbi1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLVx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuJiM0MzsvKiBDb25zZWN1dGl2ZSBlbXB0eSBkYXRhIHJlY29yZHMgZGVsaXZlciBubyBieXRlczsgY2FwIHRoZW0gcGVyXG4mIzQzOyAqIGNhbGwgc28gYSBwZWVyIHN0cmVhbWluZyB0aGVtIGNhbm5vdCBob2xkIHRoZSBzb2NrZXQgbG9jayBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBUTFNfUlhfTk9EQVRBX0xJTUlUIDE2XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuJiM0MztcdFx0XHQgICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcbiYjNDM7XHRcdFx0ICAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3RvcilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCA9IHRsc19zd19jdHhfcngodGxzX2N0eCk7XG4gXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xuIFx0c3RydWN0IHN0cnBfbXNnICpyeG0gPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5vZGF0YV9jb3VudCA9IDA7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0c2l6ZV90IGZsdXNoZWRfYXQgPSAwO1xuIFx0Ym9vbCByZWxlYXNlZCA9IHRydWU7XG5AQCAtMjEwOSwxMCAmIzQzOzIxMTYsMjcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcbiBcdFx0fVxuIFxuLVx0XHQvKiByZWFkX3NvY2sgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGNvbnRyb2wgbWVzc2FnZXMgKi9cbiYjNDM7XHRcdC8qIENvbnRyb2wgcmVjb3JkcyAoYWxlcnRzLCBoYW5kc2hha2UpIHJlYWNoIGEgY29uc3VtZXJcbiYjNDM7XHRcdCAqIG9ubHkgdGhyb3VnaCByZWN0eXBlX2FjdG9yOyB3aXRob3V0IG9uZSwgcmVhZF9zb2NrXG4mIzQzO1x0XHQgKiByZWplY3RzIHRoZW0uXG4mIzQzO1x0XHQgKi9cbiBcdFx0aWYgKHRsbS1cdTAwM2Vjb250cm9sICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuJiM0MztcdFx0XHRpZiAoIXJlY3R5cGVfYWN0b3IpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0ZXJyID0gcmVjdHlwZV9hY3RvcihkZXNjLCBza2IsIHJ4bS1cdTAwM2VvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHQgcnhtLVx1MDAzZWZ1bGxfbGVuLFxuJiM0MztcdFx0XHRcdFx0IHRsbS1cdTAwM2Vjb250cm9sKTtcbiYjNDM7XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0XHQvKiByZWN0eXBlX2FjdG9yIGNvbnN1bWVzIHRoZSB3aG9sZSByZWNvcmQ7IG5vIHBhcnRpYWwgcGF0aCAqL1xuJiM0MztcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0XHRza2IgPSBOVUxMO1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO25vZGF0YV9jb3VudCBcdTAwM2U9IFRMU19SWF9OT0RBVEFfTElNSVQpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4gXHRcdC8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIChsZWdhbCBpbiBUTFMgMS4zKSBnaXZlcyBhIHplcm9cbkBAIC0yMTIyLDcgJiM0MzsyMTQ2LDEzIEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdCAqIGhlcmUgaW5zdGVhZC5cbiBcdFx0ICovXG4gXHRcdGlmIChyeG0tXHUwMDNlZnVsbF9sZW4gPT0gMCkge1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdC8qIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBhbnkgcGFyc2VkIHJlY29yZFxuJiM0MztcdFx0XHQgKiBvbiBleGl0LCBzbyByZXR1cm5pbmcgMCBoZXJlIGNhbm5vdCBzdHJhbmQgaXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO25vZGF0YV9jb3VudCBcdTAwM2U9IFRMU19SWF9OT0RBVEFfTElNSVQpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0yMTMzLDYgJiM0MzsyMTYzLDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuIFx0XHR9XG4gXHRcdGNvcGllZCAmIzQzOz0gdXNlZDtcbiYjNDM7XHRcdG5vZGF0YV9jb3VudCA9IDA7XG4gXHRcdGlmICh1c2VkIFx1MDAzYyByeG0tXHUwMDNlZnVsbF9sZW4pIHtcbiBcdFx0XHRyeG0tXHUwMDNlb2Zmc2V0ICYjNDM7PSB1c2VkO1xuIFx0XHRcdHJ4bS1cdTAwM2VmdWxsX2xlbiAtPSB1c2VkO1xuQEAgLTIxNTEsNiAmIzQzOzIxODIsMTkgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdGdvdG8gcmVhZF9zb2NrX2VuZDtcbiB9XG4gXG4mIzQzO2ludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4mIzQzO1x0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiYjNDM7XHRcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcbiYjNDM7XHRcdFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgcmVjdHlwZV9hY3Rvcik7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuaW5kZXggY2JkZDNlYTI4Yjk5OGYuLjgxMzYzMDZiNWNhYTc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbkBAIC00MjcsNyAmIzQzOzQyNyw4IEBAIEZJWFRVUkVfU0VUVVAodGxzKVxuIFxuIEZJWFRVUkVfVEVBUkRPV04odGxzKVxuIHtcbi1cdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuIFx0Y2xvc2Uoc2VsZi1cdTAwM2VjZmQpO1xuIH1cbiBcbkBAIC04OTcsNiAmIzQzOzg5OCwxMTQgQEAgVEVTVF9GKHRscywgc3BsaWNlX2RlY19jbXNnX3RvX3BpcGUpXG4gXHRFWFBFQ1RfRVEobWVtY21wKHRlc3Rfc3RyLCBidWYsIHNlbmRfbGVuKSwgMCk7XG4gfVxuIFxuJiM0MzsvKiBWZXJpZnkgc3BsaWNlIGhhbmRsZXMgZGF0YS1jb250cm9sLWRhdGE6IHNwbGljZSByZWFkcyB0aGUgZGF0YVxuJiM0MzsgKiByZWNvcmRzIHN1Y2Nlc3NmdWxseSB3aGlsZSB0aGUgaW50ZXJ2ZW5pbmcgY29udHJvbCByZWNvcmQgbXVzdFxuJiM0MzsgKiBiZSBkcmFpbmVkIHZpYSByZWN2bXNnIGJlZm9yZSBzcGxpY2UgY2FuIGNvbnRpbnVlLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgc3BsaWNlX2RhdGFfY21zZ19kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbiYjNDM7XHRjaGFyIG1lbV9yZWN2W1RMU19QQVlMT0FEX01BWF9MRU5dO1xuJiM0MztcdGludCBzZW5kX2xlbiA9IDQwOTY7XG4mIzQzO1x0Y2hhciAqY3RybF9zdHIgPSBcJiMzNDtjb250cm9sXCYjMzQ7O1xuJiM0MztcdGludCBjdHJsX2xlbiA9IHN0cmxlbihjdHJsX3N0cikgJiM0MzsgMTtcbiYjNDM7XHRjaGFyIGN0cmxfYnVmWzhdO1xuJiM0MztcdGludCBwWzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2VuZDogZGF0YSwgY29udHJvbCwgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmxfc3RyLCBjdHJsX2xlbiwgMCksXG4mIzQzO1x0XHQgIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpY2UgZmlyc3QgZGF0YSByZWNvcmQgKi9cbiYjNDM7XHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGljZSBoaXRzIGNvbnRyb2wgcmVjb3JkLCBmYWlscyAqL1xuJiM0MztcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gdGhlIGNvbnRyb2wgcmVjb3JkIHZpYSByZWN2bXNnICovXG4mIzQzO1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuJiM0MztcdFx0XHRcdGN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksXG4mIzQzO1x0XHQgIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGN0cmxfc3RyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaWNlIHNlY29uZCBkYXRhIHJlY29yZCAqL1xuJiM0MztcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFZlcmlmeSB0aGF0IG11bHRpcGxlIGNvbnNlY3V0aXZlIGNvbnRyb2wgcmVjb3JkcyBiZXR3ZWVuIGRhdGFcbiYjNDM7ICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzXG4mIzQzOyAqIGFmdGVyd2FyZC4gIFRoZSB0d28gY29udHJvbCByZWNvcmRzIHVzZSBkaWZmZXJlbnQgY29udGVudCB0eXBlc1xuJiM0MzsgKiB0byB2ZXJpZnkgdHlwZSBwcmVzZXJ2YXRpb24gYWNyb3NzIHRoZSBzcGxpY2UgYm91bmRhcnkuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCBzcGxpY2VfbXVsdGlfY21zZ19kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbiYjNDM7XHRjaGFyIG1lbV9yZWN2W1RMU19QQVlMT0FEX01BWF9MRU5dO1xuJiM0MztcdGludCBzZW5kX2xlbiA9IDQwOTY7XG4mIzQzO1x0Y2hhciAqY3RybDEgPSBcJiMzNDthbGVydDFcJiMzNDs7XG4mIzQzO1x0Y2hhciAqY3RybDIgPSBcJiMzNDthbGVydDJcJiMzNDs7XG4mIzQzO1x0aW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmwxKSAmIzQzOyAxO1xuJiM0MztcdGNoYXIgY3RybF9idWZbN107XG4mIzQzO1x0aW50IHBbMl07XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bWVtcm5kKG1lbV9zZW5kLCBzaXplb2YobWVtX3NlbmQpKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBTZW5kOiBkYXRhLCBjb250cm9sKDEwMCksIGNvbnRyb2woMjAwKSwgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjdHJsX2xlbiwgMCksIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAyMDAsIGN0cmwyLCBjdHJsX2xlbiwgMCksIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpY2UgZmlyc3QgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKG1lbV9zZW5kLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaWNlIGZhaWxzIG9uIGZpcnN0IGNvbnRyb2wgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcbiYjNDM7XHQvKiBEcmFpbiBmaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4mIzQzO1x0XHRcdFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcbiYjNDM7XHRcdCAgY3RybF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoY3RybDEsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpY2UgZmFpbHMgb24gc2Vjb25kIGNvbnRyb2wgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcbiYjNDM7XHQvKiBEcmFpbiBzZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovXG4mIzQzO1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMjAwLFxuJiM0MztcdFx0XHRcdGN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksXG4mIzQzO1x0XHQgIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGN0cmwyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaWNlIHNlY29uZCBkYXRhICovXG4mIzQzO1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoXHUwMDI2bWVtX3NlbmRbc2VuZF9sZW5dLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0YodGxzLCByZWN2X2FuZF9zcGxpY2UpXG4ge1xuIFx0aW50IHNlbmRfbGVuID0gVExTX1BBWUxPQURfTUFYX0xFTjtcbkBAIC0xNjgyLDYgJiM0MzsxNzkxLDE5MyBAQCBURVNUX0YodGxzLCBkYXRhX2NvbnRyb2xfZGF0YSlcbiBcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTtcbiB9XG4gXG4mIzQzOy8qIEZ1bGx5IGNvbnN1bWUgYSBkYXRhLWNvbnRyb2wtZGF0YSBzZXF1ZW5jZS4gIFRoZSBleGlzdGluZ1xuJiM0MzsgKiBkYXRhX2NvbnRyb2xfZGF0YSB0ZXN0IG9ubHkgcGVla3M7IHRoaXMgZXhlcmNpc2VzIGNvbXBsZXRlXG4mIzQzOyAqIHJlY29yZCBkZWxpdmVyeSB0aHJvdWdoIHJlY3YgYW5kIHJlY3Ztc2cuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCByZWN2X2RhdGFfY21zZ19kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqZGF0YTEgPSBcJiMzNDtmaXJzdF9kYXRhXCYjMzQ7O1xuJiM0MztcdGNoYXIgKmN0cmwgPSBcJiMzNDtjdHJsX21zZ1wmIzM0OztcbiYjNDM7XHRjaGFyICpkYXRhMiA9IFwmIzM0O3NlY29uZF9kYXRhXCYjMzQ7O1xuJiM0MztcdGludCBkMV9sZW4gPSBzdHJsZW4oZGF0YTEpICYjNDM7IDE7XG4mIzQzO1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7XG4mIzQzO1x0aW50IGQyX2xlbiA9IHN0cmxlbihkYXRhMikgJiM0MzsgMTtcbiYjNDM7XHRjaGFyIGJ1ZlsyMF07XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YTEsIGQxX2xlbiwgMCksIGQxX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTtcbiYjNDM7XG4mIzQzO1x0LyogRmlyc3QgZGF0YSByZWNvcmQgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIHJlY3Ygd2l0aG91dCBjbXNnIGJ1ZmZlciBmYWlscyBvbiBjb250cm9sIHJlY29yZCAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUlPKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybCwgY19sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2Vjb25kIGRhdGEgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgZDJfbGVuLCBNU0dfV0FJVEFMTCksIGQyX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEyLCBkMl9sZW4pLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUGVlayBhdCBhbiBpbnRlcmxlYXZlZCBjb250cm9sIHJlY29yZCBhZnRlciB0aGUgcHJlY2VkaW5nIGRhdGFcbiYjNDM7ICogcmVjb3JkIGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGNvbnN1bWUgaXQuICBNU0dfUEVFSyBleHBvc2VzIHRoZVxuJiM0MzsgKiBjb250cm9sIHJlY29yZCYjMzk7cyB0eXBlIHdpdGhvdXQgY29uc3VtaW5nIGl0LlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgcGVla19jbXNnX2FmdGVyX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkYXRhID0gXCYjMzQ7bGVhZGluZ1wmIzM0OztcbiYjNDM7XHRjaGFyICpjdHJsID0gXCYjMzQ7bWlkZGxlXCYjMzQ7O1xuJiM0MztcdGNoYXIgKnRhaWwgPSBcJiMzNDt0cmFpbGluZ1wmIzM0OztcbiYjNDM7XHRpbnQgZF9sZW4gPSBzdHJsZW4oZGF0YSkgJiM0MzsgMTtcbiYjNDM7XHRpbnQgY19sZW4gPSBzdHJsZW4oY3RybCkgJiM0MzsgMTtcbiYjNDM7XHRpbnQgdF9sZW4gPSBzdHJsZW4odGFpbCkgJiM0MzsgMTtcbiYjNDM7XHRjaGFyIGJ1ZlsyMF07XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCB0YWlsLCB0X2xlbiwgMCksIHRfbGVuKTtcbiYjNDM7XG4mIzQzO1x0LyogQ29uc3VtZSBsZWFkaW5nIGRhdGEgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIFBlZWsgYXQgdGhlIGNvbnRyb2wgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuJiM0MztcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19QRUVLKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBDb25zdW1lIHRoZSBjb250cm9sIHJlY29yZCAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBUcmFpbGluZyBkYXRhICovXG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgdF9sZW4sIE1TR19XQUlUQUxMKSwgdF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCB0YWlsLCB0X2xlbiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDb250cm9sIHJlY29yZCBhcyB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBzdHJlYW0sIGZvbGxvd2VkIGJ5XG4mIzQzOyAqIGRhdGEuICBUaGUgY29udHJvbCByZWNvcmQgbXVzdCBiZSBkcmFpbmVkIGJlZm9yZSB0aGUgZGF0YSByZWNvcmRcbiYjNDM7ICogYmVjb21lcyBhdmFpbGFibGUuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCBjbXNnX2JlZm9yZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqY3RybCA9IFwmIzM0O2FsZXJ0XCYjMzQ7O1xuJiM0MztcdGNoYXIgKmRhdGEgPSBcJiMzNDtwYXlsb2FkXCYjMzQ7O1xuJiM0MztcdGludCBjX2xlbiA9IHN0cmxlbihjdHJsKSAmIzQzOyAxO1xuJiM0MztcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSAmIzQzOyAxO1xuJiM0MztcdGNoYXIgYnVmWzIwXTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gVExTIHN1cHBvcnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xuJiM0MztcbiYjNDM7XHQvKiByZWN2IHdpdGhvdXQgY21zZyBmYWlscyAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUlPKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybCwgY19sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRGF0YSBmb2xsb3dzICovXG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgZF9sZW4sIE1TR19XQUlUQUxMKSwgZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUd28gZGlmZmVyZW50IGNvbnRyb2wgcmVjb3JkIHR5cGVzIGludGVybGVhdmVkIHdpdGggZGF0YS5cbiYjNDM7ICogRWFjaCBjb250cm9sIHJlY29yZCBpcyBkZWxpdmVyZWQgd2l0aCBpdHMgb3duIHR5cGUgcHJlc2VydmVkO1xuJiM0MzsgKiB2ZXJpZnkgYm90aCB0eXBlcyBhcnJpdmUgaW50YWN0LlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgbWl4ZWRfY29udHJvbF90eXBlcylcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmRhdGExID0gXCYjMzQ7ZGF0YTFcJiMzNDs7XG4mIzQzO1x0Y2hhciAqY3RybDEgPSBcJiMzNDtoYW5kc2hha2VcJiMzNDs7XG4mIzQzO1x0Y2hhciAqY3RybDIgPSBcJiMzNDthbGVydF9tc2dcJiMzNDs7XG4mIzQzO1x0Y2hhciAqZGF0YTIgPSBcJiMzNDtkYXRhMlwmIzM0OztcbiYjNDM7XHRpbnQgZDFfbGVuID0gc3RybGVuKGRhdGExKSAmIzQzOyAxO1xuJiM0MztcdGludCBjMV9sZW4gPSBzdHJsZW4oY3RybDEpICYjNDM7IDE7XG4mIzQzO1x0aW50IGMyX2xlbiA9IHN0cmxlbihjdHJsMikgJiM0MzsgMTtcbiYjNDM7XHRpbnQgZDJfbGVuID0gc3RybGVuKGRhdGEyKSAmIzQzOyAxO1xuJiM0MztcdGNoYXIgYnVmWzIwXTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gVExTIHN1cHBvcnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBkYXRhMSwgZDFfbGVuLCAwKSwgZDFfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjMV9sZW4sIDApLCBjMV9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDIwMCwgY3RybDIsIGMyX2xlbiwgMCksIGMyX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YTIsIGQyX2xlbiwgMCksIGQyX2xlbik7XG4mIzQzO1xuJiM0MztcdC8qIEZpcnN0IGRhdGEgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIEZpcnN0IGNvbnRyb2wgKHR5cGUgMTAwKSAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMxX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwxLCBjMV9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2Vjb25kIGNvbnRyb2wgKHR5cGUgMjAwKSAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDIwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMyX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwyLCBjMl9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2Vjb25kIGRhdGEgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBkMl9sZW4sIE1TR19XQUlUQUxMKSwgZDJfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTIsIGQyX2xlbiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUcmFpbGluZyBjb250cm9sIHJlY29yZCB3aXRoIG5vIGRhdGEgZm9sbG93aW5nIGl0LiAgVGhlIHNlbmRlclxuJiM0MzsgKiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlIGNvbnRyb2wgcmVjb3JkOyB0aGUgcmVjZWl2ZXJcbiYjNDM7ICogZHJhaW5zIHRoZSBjb250cm9sIGFuZCB0aGVuIG9ic2VydmVzIEVPRi5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih0bHMsIGRhdGFfY21zZ19lb2YpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkYXRhID0gXCYjMzQ7cGF5bG9hZFwmIzM0OztcbiYjNDM7XHRjaGFyICpjdHJsID0gXCYjMzQ7ZmluYWxcJiMzNDs7XG4mIzQzO1x0aW50IGRfbGVuID0gc3RybGVuKGRhdGEpICYjNDM7IDE7XG4mIzQzO1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7XG4mIzQzO1x0Y2hhciBidWZbMjBdO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKHNlbGYtXHUwMDNlZmQpLCAwKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qIENvbnN1bWUgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YSwgZF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gdHJhaWxpbmcgY29udHJvbCAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfRih0bHMsIHNodXRkb3duKVxuIHtcbiBcdGNoYXIgY29uc3QgKnRlc3Rfc3RyID0gXCYjMzQ7dGVzdF9yZWFkXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y190Y3BfcmVjdl9hY3RvciYjMzQ7LAogICAgJiMzNDtzdmNfdGNwX3JlY3R5cGVfYWN0b3ImIzM0OywKICAgICYjMzQ7c3ZjX3RjcF9yZWN2ZnJvbSYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUmIzM0OywKICAgICYjMzQ7X190bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcHJvdG9fb3BzIGNhbGxiYWNrIGByZWFkX3NvY2tfcmVjdHlwZWAgdG8gYWxsb3cgcmVhZGluZyBub24tZGF0YSBUTFMgcmVjb3JkcyAobGlrZSBhbGVydHMgYW5kIGhhbmRzaGFrZSBtZXNzYWdlcykgZGlyZWN0bHkgZnJvbSB0aGUgc29ja2V0LiBJdCBpbXBsZW1lbnRzIHRoaXMgaW4gdGhlIFRMUyBzb2Z0d2FyZSBwYXRoIChgX190bHNfc3dfcmVhZF9zb2NrYCwgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWApIGFuZCB1c2VzIGl0IGluIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZSAoYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgc3ZjX3RjcF9yZWN2ZnJvbWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBpbiB0aGUgVExTIHJlY29yZCBwYXJzaW5nIGFuZCBSUEMgbWVzc2FnZSBhc3NlbWJseSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmM0NGIwMjM5YjMxN2ZmNDg4MTgxZDc5MjVjNGVjYjA1YWQxODZiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDIyOjA0OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggMjc3MTg4YTQwYzcyZTMuLjdhMTlhNzQzYTYxNzc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTE5OCw2ICYjNDM7MTk4LDEzIEBAIHN0cnVjdCBza19idWZmOwogc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7CiB0eXBlZGVmIGludCAoKnNrX3JlYWRfYWN0b3JfdCkocmVhZF9kZXNjcmlwdG9yX3QgKiwgc3RydWN0IHNrX2J1ZmYgKiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQsIHNpemVfdCk7CiYjNDM7LyogcmVjdHlwZSBjYXJyaWVzIHRoZSB0cmFuc3BvcnQgcmVjb3JkIHR5cGUsIGZvciBleGFtcGxlIGEKJiM0MzsgKiBUTFNfUkVDT1JEX1RZUEVfKiB2YWx1ZS4KJiM0MzsgKi8KJiM0Mzt0eXBlZGVmIGludCAoKnNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKiwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGludCwgc2l6ZV90LAomIzQzOwkJCQkgICAgICAgdTggcmVjdHlwZSk7CiB0eXBlZGVmIGludCAoKnNrYl9yZWFkX2FjdG9yX3QpKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopOwogCiAKQEAgLTI2NCw2ICYjNDM7MjcxLDI3IEBAIHN0cnVjdCBwcm90b19vcHMgewogCSAqLwogCWludAkJKCpyZWFkX3NvY2spKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCQkJICAgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7CiYjNDM7CS8qCiYjNDM7CSAqIHJlYWRfc29ja19yZWN0eXBlIHNwbGl0cyBkZWxpdmVyeSBhY3Jvc3MgdHdvIGNhbGxiYWNrczoKJiM0MzsJICogcmVjdl9hY3RvciBmb3IgZGF0YSByZWNvcmRzLCBwZXIgdGhlIHNrX3JlYWRfYWN0b3JfdAomIzQzOwkgKiBjb252ZW50aW9uLCBhbmQgcmVjdHlwZV9hY3RvciBmb3IgYWxsIG90aGVyIHJlY29yZHMsCiYjNDM7CSAqIHdpdGggcmVjdHlwZSBpZGVudGlmeWluZyBlYWNoLiBBIE5VTEwgcmVjdHlwZV9hY3RvcgomIzQzOwkgKiBsZWF2ZXMgbm9uLWRhdGEgcmVjb3JkcyBwZW5kaW5nLiByZWN0eXBlX2FjdG9yIHJldHVybnMgMAomIzQzOwkgKiB0byBjb25zdW1lIGEgcmVjb3JkIG9yIG5lZ2F0aXZlIHRvIGxlYXZlIGl0IHBlbmRpbmcgZm9yCiYjNDM7CSAqIHJlZGVsaXZlcnkgYW5kIHN0b3AgZGVsaXZlcnk7IHRoZSBuZWdhdGl2ZSByZXR1cm4gaXMgYQomIzQzOwkgKiBiYWNrcHJlc3N1cmUgc2lnbmFsLCBub3QgYSBmYXRhbCBlcnJvci4gQm90aCBjYWxsYmFja3MKJiM0MzsJICogcmVwb3J0IGVycm9ycyBhbmQgZWFybHkgc3RvcCB0aGUgd2F5IHJlY3ZfYWN0b3IgZG9lczoKJiM0MzsJICogYnkgc2V0dGluZyBkZXNjLSZndDtjb3VudCB0byAwIGFuZCByZWNvcmRpbmcgdGhlIHJlYXNvbiBpbgomIzQzOwkgKiBkZXNjLSZndDtlcnJvciwgcGVyIHRoZSByZWFkX2Rlc2NyaXB0b3JfdCBjb252ZW50aW9uIGFuZAomIzQzOwkgKiBpbmRlcGVuZGVudCBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIHJlcG9ydHMKJiM0MzsJICogb25seSBkYXRhIGJ5dGVzIGNvbnN1bWVkIGJ5IHJlY3ZfYWN0b3I7IHRoZSBjYWxsZXIKJiM0MzsJICogZGV0ZWN0cyBhbiBlcnJvciBvciBlYXJseSBzdG9wIHZpYSBkZXNjLSZndDtjb3VudCBhbmQKJiM0MzsJICogZGVzYy0mZ3Q7ZXJyb3IuCiYjNDM7CSAqLwomIzQzOwlpbnQJCSgqcmVhZF9zb2NrX3JlY3R5cGUpKHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJCSAgICAgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiYjNDM7CQkJCQkgICAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yLAomIzQzOwkJCQkJICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKTsKIAkvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHJlYWRfc29jaygpLCBpdCByZWFkcyBhbiBlbnRpcmUgc2tiIGF0IGEgdGltZS4gKi8KIAlpbnQJCSgqcmVhZF9za2IpKHN0cnVjdCBzb2NrICpzaywgc2tiX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKTsKIAlpbnQJCSgqc2VuZG1zZ19sb2NrZWQpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1MGU1ZTdmNWI3NjJkZS4uOWI5ZTBkYTllNzNjZDYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC04LDE1ICYjNDM7OCw2IEBACiAgKiBldmVubHkgd2hlbiBzZXJ2aWNpbmcgYSBzaW5nbGUgY2xpZW50LiBNYXkgbmVlZCB0byBtb2RpZnkgdGhlCiAgKiBzdmNfeHBydF9lbnF1ZXVlIHByb2NlZHVyZS4uLgogICoKLSAqIFRDUCBzdXBwb3J0IGlzIGxhcmdlbHkgdW50ZXN0ZWQgYW5kIG1heSBiZSBhIGxpdHRsZSBzbG93LiBUaGUgcHJvYmxlbQotICogaXMgdGhhdCB3ZSBjdXJyZW50bHkgZG8gdHdvIHNlcGFyYXRlIHJlY3Zmcm9tJiMzOTtzLCBvbmUgZm9yIHRoZSA0LWJ5dGUKLSAqIHJlY29yZCBsZW5ndGgsIGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgYWN0dWFsIHJlY29yZC4gVGhpcyBjb3VsZCBwb3NzaWJseQotICogYmUgaW1wcm92ZWQgYnkgYWx3YXlzIHJlYWRpbmcgYSBtaW5pbXVtIHNpemUgb2YgYXJvdW5kIDEwMCBieXRlcyBhbmQKLSAqIHR1Y2tpbmcgYW55IHN1cGVyZmx1b3VzIGJ5dGVzIGF3YXkgaW4gYSB0ZW1wb3Jhcnkgc3RvcmUuIFN0aWxsLCB0aGF0Ci0gKiBsZWF2ZXMgd3JpdGUgcmVxdWVzdHMgb3V0IGluIHRoZSByYWluLiBBbiBhbHRlcm5hdGl2ZSBtYXkgYmUgdG8gcGVlayBhdAotICogdGhlIGZpcnN0IHNrYiBpbiB0aGUgcXVldWUsIGFuZCBpZiBpdCBtYXRjaGVzIHRoZSBuZXh0IFRDUCBzZXF1ZW5jZQotICogbnVtYmVyLCB0byBleHRyYWN0IHRoZSByZWNvcmQgbWFya2VyLiBZdWNrLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoICZsdDtva2lyQG1vbmFkLnN3Yi5kZSZndDsKICAqLwogCkBAIC0yMzgsMTM4ICYjNDM7MjI5LDYgQEAgc3RhdGljIGludCBzdmNfb25lX3NvY2tfbmFtZShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIGNoYXIgKmJ1ZiwgaW50IHJlbWFpbmluZykKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50Ci1zdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2csIGludCByZXQpCi17Ci0JdTggY29udGVudF90eXBlID0gdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLSZndDtzaywgY21zZyk7Ci0JdTggbGV2ZWwsIGRlc2NyaXB0aW9uOwotCi0Jc3dpdGNoIChjb250ZW50X3R5cGUpIHsKLQljYXNlIDA6Ci0JCWJyZWFrOwotCWNhc2UgVExTX1JFQ09SRF9UWVBFX0RBVEE6Ci0JCS8qIFRMUyBzZXRzIEVPUiBhdCB0aGUgZW5kIG9mIGVhY2ggYXBwbGljYXRpb24gZGF0YQotCQkgKiByZWNvcmQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIG1vcmUgZnJhbWVzCi0JCSAqIHdhaXRpbmcgdG8gYmUgZGVjcnlwdGVkLgotCQkgKi8KLQkJbXNnLSZndDttc2dfZmxhZ3MgJmFtcDs9IH5NU0dfRU9SOwotCQlicmVhazsKLQljYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDoKLQkJdGxzX2FsZXJ0X3JlY3Yoc29jay0mZ3Q7c2ssIG1zZywgJmFtcDtsZXZlbCwgJmFtcDtkZXNjcmlwdGlvbik7Ci0JCXJldCA9IChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpID8KLQkJCS1FTk9UQ09OTiA6IC1FQUdBSU47Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIGRpc2NhcmQgdGhpcyByZWNvcmQgdHlwZSAqLwotCQlyZXQgPSAtRUFHQUlOOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1zdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCAqbXNnX2ZsYWdzKQotewotCXVuaW9uIHsKLQkJc3RydWN0IGNtc2doZHIJY21zZzsKLQkJdTgJCWJ1ZltDTVNHX1NQQUNFKHNpemVvZih1OCkpXTsKLQl9IHU7Ci0JdTggYWxlcnRbMl07Ci0Jc3RydWN0IGt2ZWMgYWxlcnRfa3ZlYyA9IHsKLQkJLmlvdl9iYXNlID0gYWxlcnQsCi0JCS5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSwKLQl9OwotCXN0cnVjdCBtc2doZHIgbXNnID0gewotCQkubXNnX2ZsYWdzID0gKm1zZ19mbGFncywKLQkJLm1zZ19jb250cm9sID0gJmFtcDt1LAotCQkubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YodSksCi0JfTsKLQlpbnQgcmV0OwotCi0JaW92X2l0ZXJfa3ZlYygmYW1wO21zZy5tc2dfaXRlciwgSVRFUl9ERVNULCAmYW1wO2FsZXJ0X2t2ZWMsIDEsCi0JCSAgICAgIGFsZXJ0X2t2ZWMuaW92X2xlbik7Ci0JcmV0ID0gc29ja19yZWN2bXNnKHNvY2ssICZhbXA7bXNnLCBNU0dfRE9OVFdBSVQpOwotCWlmIChyZXQgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLSZndDtzaywgJmFtcDt1LmNtc2cpID09IFRMU19SRUNPUkRfVFlQRV9BTEVSVCkgewotCQlpb3ZfaXRlcl9yZXZlcnQoJmFtcDttc2cubXNnX2l0ZXIsIHJldCk7Ci0JCXJldCA9IHN2Y190Y3Bfc29ja19wcm9jZXNzX2Ntc2coc29jaywgJmFtcDttc2csICZhbXA7dS5jbXNnLCAtRUFHQUlOKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gc3Zzay0mZ3Q7c2tfc29jazsKLQotCXJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBtc2csIE1TR19ET05UV0FJVCk7Ci0JaWYgKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19DVFJVTkMpIHsKLQkJbXNnLSZndDttc2dfZmxhZ3MgJmFtcDs9IH4oTVNHX0NUUlVOQyB8IE1TR19FT1IpOwotCQlpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU8pCi0JCQlyZXQgPSBzdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHNvY2ssICZhbXA7bXNnLSZndDttc2dfZmxhZ3MpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0jaWYgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFCi1zdGF0aWMgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsIHNpemVfdCBzZWVrKQotewotCXN0cnVjdCBidmVjX2l0ZXIgYmkgPSB7Ci0JCS5iaV9zaXplCT0gc2l6ZSAmIzQzOyBzZWVrLAotCX07Ci0Jc3RydWN0IGJpb192ZWMgYnY7Ci0KLQlidmVjX2l0ZXJfYWR2YW5jZShidmVjLCAmYW1wO2JpLCBzZWVrICZhbXA7IFBBR0VfTUFTSyk7Ci0JZm9yX2VhY2hfYnZlYyhidiwgYnZlYywgYmksIGJpKQotCQlmbHVzaF9kY2FjaGVfcGFnZShidi5idl9wYWdlKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3ZjX2ZsdXNoX2J2ZWMoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWMsIHNpemVfdCBzaXplLAotCQkJCSAgc2l6ZV90IHNlZWspCi17Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFJlYWQgZnJvbSBAcnFzdHAmIzM5O3MgdHJhbnNwb3J0IHNvY2tldC4gVGhlIGluY29taW5nIG1lc3NhZ2UgZmlsbHMgd2hvbGUKLSAqIHBhZ2VzIGluIEBycXN0cCYjMzk7cyBycV9wYWdlcyBhcnJheSB1bnRpbCB0aGUgbGFzdCBwYWdlIG9mIHRoZSBtZXNzYWdlCi0gKiBoYXMgYmVlbiByZWNlaXZlZCBpbnRvIGEgcGFydGlhbCBwYWdlLgotICovCi1zdGF0aWMgc3NpemVfdCBzdmNfdGNwX3JlYWRfbXNnKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHNpemVfdCBidWZsZW4sCi0JCQkJc2l6ZV90IHNlZWspCi17Ci0Jc3RydWN0IHN2Y19zb2NrICpzdnNrID0KLQkJY29udGFpbmVyX29mKHJxc3RwLSZndDtycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOwotCXN0cnVjdCBiaW9fdmVjICpidmVjID0gcnFzdHAtJmd0O3JxX2J2ZWM7Ci0Jc3RydWN0IG1zZ2hkciBtc2cgPSB7IE5VTEwgfTsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzc2l6ZV90IGxlbjsKLQlzaXplX3QgdDsKLQotCWNsZWFyX2JpdChYUFRfREFUQSwgJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9mbGFncyk7Ci0KLQlmb3IgKGkgPSAwLCB0ID0gMDsgdCAmbHQ7IGJ1ZmxlbjsgaSYjNDM7JiM0MzssIHQgJiM0Mzs9IFBBR0VfU0laRSkKLQkJYnZlY19zZXRfcGFnZSgmYW1wO2J2ZWNbaV0sIHJxc3RwLSZndDtycV9wYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTsKLQotCWlvdl9pdGVyX2J2ZWMoJmFtcDttc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYnZlYywgaSwgYnVmbGVuKTsKLQlpZiAoc2VlaykgewotCQlpb3ZfaXRlcl9hZHZhbmNlKCZhbXA7bXNnLm1zZ19pdGVyLCBzZWVrKTsKLQkJYnVmbGVuIC09IHNlZWs7Ci0JfQotCWxlbiA9IHN2Y190Y3Bfc29ja19yZWN2bXNnKHN2c2ssICZhbXA7bXNnKTsKLQlpZiAobGVuICZndDsgMCkKLQkJc3ZjX2ZsdXNoX2J2ZWMoYnZlYywgbGVuLCBzZWVrKTsKLQotCS8qIElmIHdlIHJlYWQgYSBmdWxsIHJlY29yZCwgdGhlbiBhc3N1bWUgdGhlcmUgbWF5IGJlIG1vcmUKLQkgKiBkYXRhIHRvIHJlYWQgKHN0cmVhbSBiYXNlZCBzb2NrZXRzIG9ubHkhKQotCSAqLwotCWlmIChsZW4gPT0gYnVmbGVuKQotCQlzZXRfYml0KFhQVF9EQVRBLCAmYW1wO3N2c2stJmd0O3NrX3hwcnQueHB0X2ZsYWdzKTsKLQotCXJldHVybiBsZW47Ci19Ci0KIC8qCiAgKiBTZXQgc29ja2V0IHNuZCBhbmQgcmN2IGJ1ZmZlciBsZW5ndGhzCiAgKi8KQEAgLTEwNDgsNTAgJiM0Mzs5MDcsNiBAQCBzdGF0aWMgdm9pZCBzdmNfdGNwX2NsZWFyX3BhZ2VzKHN0cnVjdCBzdmNfc29jayAqc3ZzaykKIAlzdnNrLSZndDtza19kYXRhbGVuID0gMDsKIH0KIAotLyoKLSAqIFJlY2VpdmUgZnJhZ21lbnQgcmVjb3JkIGhlYWRlciBpbnRvIHNrX21hcmtlci4KLSAqLwotc3RhdGljIHNzaXplX3Qgc3ZjX3RjcF9yZWFkX21hcmtlcihzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssCi0JCQkJICAgc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlzc2l6ZV90IHdhbnQsIGxlbjsKLQotCS8qIElmIHdlIGhhdmVuJiMzOTt0IGdvdHRlbiB0aGUgcmVjb3JkIGxlbmd0aCB5ZXQsCi0JICogZ2V0IHRoZSBuZXh0IGZvdXIgYnl0ZXMuCi0JICovCi0JaWYgKHN2c2stJmd0O3NrX3RjcGxlbiAmbHQ7IHNpemVvZihycGNfZnJhZ2hkcikpIHsKLQkJc3RydWN0IG1zZ2hkcgltc2cgPSB7IE5VTEwgfTsKLQkJc3RydWN0IGt2ZWMJaW92OwotCi0JCXdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay0mZ3Q7c2tfdGNwbGVuOwotCQlpb3YuaW92X2Jhc2UgPSAoKGNoYXIgKikmYW1wO3N2c2stJmd0O3NrX21hcmtlcikgJiM0Mzsgc3Zzay0mZ3Q7c2tfdGNwbGVuOwotCQlpb3YuaW92X2xlbiAgPSB3YW50OwotCQlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsICZhbXA7aW92LCAxLCB3YW50KTsKLQkJbGVuID0gc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3ZzaywgJmFtcDttc2cpOwotCQlpZiAobGVuICZsdDsgMCkKLQkJCXJldHVybiBsZW47Ci0JCXN2c2stJmd0O3NrX3RjcGxlbiAmIzQzOz0gbGVuOwotCQlpZiAobGVuICZsdDsgd2FudCkgewotCQkJLyogY2FsbCBhZ2FpbiB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgKi8KLQkJCWdvdG8gZXJyX3Nob3J0OwotCQl9Ci0JCXRyYWNlX3N2Y3NvY2tfbWFya2VyKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCwgc3Zzay0mZ3Q7c2tfbWFya2VyKTsKLQkJaWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSAmIzQzOyBzdnNrLSZndDtza19kYXRhbGVuICZndDsKLQkJICAgIHN2c2stJmd0O3NrX3hwcnQueHB0X3NlcnZlci0mZ3Q7c3ZfbWF4X21lc2cpCi0JCQlnb3RvIGVycl90b29fbGFyZ2U7Ci0JfQotCXJldHVybiBzdmNfc29ja19yZWNsZW4oc3Zzayk7Ci0KLWVycl90b29fbGFyZ2U6Ci0JbmV0X25vdGljZV9yYXRlbGltaXRlZCgmIzM0O3N2YzogJXMgb3ZlcnNpemVkIFJQQyBmcmFnbWVudCAoJXUgb2N0ZXRzKSBmcm9tICVwSVNwY1xuJiMzNDssCi0JCQkgICAgICAgc3Zzay0mZ3Q7c2tfeHBydC54cHRfc2VydmVyLSZndDtzdl9uYW1lLAotCQkJICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSwKLQkJCSAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9yZW1vdGUpOwotCXN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCk7Ci1lcnJfc2hvcnQ6Ci0JcmV0dXJuIC1FQUdBSU47Ci19Ci0KIHN0YXRpYyBpbnQgcmVjZWl2ZV9jYl9yZXBseShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7CiAJc3RydWN0IHJwY194cHJ0ICpiY194cHJ0ID0gc3Zzay0mZ3Q7c2tfeHBydC54cHRfYmNfeHBydDsKQEAgLTExMzQsMTYgJiM0Mzs5NDksMTQ0IEBAIHN0YXRpYyB2b2lkIHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3RydWN0IHN2Y19zb2NrICpzdnNrKQogCXN2c2stJmd0O3NrX21hcmtlciA9IHhkcl96ZXJvOwogfQogCiYjNDM7LyoKJiM0MzsgKiByZWFkX3NvY2sgZGF0YSBhY3RvcjogcmVjZWl2ZXMgYXBwbGljYXRpb24gZGF0YSBmcm9tIHRoZQomIzQzOyAqIHRyYW5zcG9ydCBzb2NrZXQsIHBhcnNpbmcgdGhlIFJQQyByZWNvcmQgc3RyZWFtIChmcmFnbWVudAomIzQzOyAqIGhlYWRlcnMgYW5kIG1lc3NhZ2UgYm9kaWVzKSBhbmQgYXNzZW1ibGluZyBjb21wbGV0ZSBSUEMKJiM0MzsgKiBtZXNzYWdlcyBpbnRvIHJxc3RwLSZndDtycV9wYWdlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwID0gZGVzYy0mZ3Q7YXJnLmRhdGE7CiYjNDM7CXN0cnVjdCBzdmNfc29jayAqc3ZzayA9CiYjNDM7CQljb250YWluZXJfb2YocnFzdHAtJmd0O3JxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7CiYjNDM7CXNpemVfdCByZWNsZW4sIHJlY2VpdmVkLCB3YW50LCB0YWtlLCBkb25lLCBuOwomIzQzOwlzaXplX3QgY29uc3VtZWQgPSAwOwomIzQzOwomIzQzOwlpZiAoIWRlc2MtJmd0O2NvdW50KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChzdnNrLSZndDtza190Y3BsZW4gJmx0OyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7CiYjNDM7CQl3YW50ID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAtIHN2c2stJmd0O3NrX3RjcGxlbjsKJiM0MzsJCW4gPSBtaW4od2FudCwgbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LAomIzQzOwkJCQkgIChjaGFyICopJmFtcDtzdnNrLSZndDtza19tYXJrZXIgJiM0MzsKJiM0MzsJCQkJCXN2c2stJmd0O3NrX3RjcGxlbiwgbikpCiYjNDM7CQkJZ290byBmYXVsdDsKJiM0MzsJCXN2c2stJmd0O3NrX3RjcGxlbiAmIzQzOz0gbjsKJiM0MzsJCW9mZnNldCAmIzQzOz0gbjsKJiM0MzsJCWxlbiAtPSBuOwomIzQzOwkJY29uc3VtZWQgJiM0Mzs9IG47CiYjNDM7CiYjNDM7CQlpZiAoc3Zzay0mZ3Q7c2tfdGNwbGVuICZsdDsgc2l6ZW9mKHJwY19mcmFnaGRyKSkKJiM0MzsJCQlyZXR1cm4gY29uc3VtZWQ7CiYjNDM7CiYjNDM7CQl0cmFjZV9zdmNzb2NrX21hcmtlcigmYW1wO3N2c2stJmd0O3NrX3hwcnQsIHN2c2stJmd0O3NrX21hcmtlcik7CiYjNDM7CQlpZiAoc3ZjX3NvY2tfcmVjbGVuKHN2c2spICYjNDM7IHN2c2stJmd0O3NrX2RhdGFsZW4gJmd0OwomIzQzOwkJICAgIHN2c2stJmd0O3NrX3hwcnQueHB0X3NlcnZlci0mZ3Q7c3ZfbWF4X21lc2cpIHsKJiM0MzsJCQluZXRfbm90aWNlX3JhdGVsaW1pdGVkKCYjMzQ7c3ZjOiAlcyBvdmVyc2l6ZWQgUlBDIGZyYWdtZW50ICgldSBvY3RldHMpIGZyb20gJXBJU3BjXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgICBzdnNrLSZndDtza194cHJ0LnhwdF9zZXJ2ZXItJmd0O3N2X25hbWUsCiYjNDM7CQkJCQkgICAgICAgc3ZjX3NvY2tfcmVjbGVuKHN2c2spLAomIzQzOwkJCQkJICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3N2c2stJmd0O3NrX3hwcnQueHB0X3JlbW90ZSk7CiYjNDM7CQkJZGVzYy0mZ3Q7ZXJyb3IgPSAtRU1TR1NJWkU7CiYjNDM7CQkJZGVzYy0mZ3Q7Y291bnQgPSAwOwomIzQzOwkJCXJldHVybiBjb25zdW1lZDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZWNsZW4gPSBzdmNfc29ja19yZWNsZW4oc3Zzayk7CiYjNDM7CXJlY2VpdmVkID0gc3Zzay0mZ3Q7c2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKTsKJiM0MzsJd2FudCA9IHJlY2xlbiAtIHJlY2VpdmVkOwomIzQzOwl0YWtlID0gbWluKHdhbnQsIGxlbik7CiYjNDM7CWRvbmUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IHRha2UpIHsKJiM0MzsJCXVuc2lnbmVkIGludCBwZyA9IHN2c2stJmd0O3NrX2RhdGFsZW4gJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCXVuc2lnbmVkIGludCBwZ19vZmYgPSBzdnNrLSZndDtza19kYXRhbGVuICZhbXA7IChQQUdFX1NJWkUgLSAxKTsKJiM0MzsJCXNpemVfdCBjaHVuayA9IG1pbih0YWtlIC0gZG9uZSwKJiM0MzsJCQkJICAgUEFHRV9TSVpFIC0gKHNpemVfdClwZ19vZmYpOwomIzQzOwomIzQzOwkJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsCiYjNDM7CQkJCSAgcGFnZV9hZGRyZXNzKHJxc3RwLSZndDtycV9wYWdlc1twZ10pICYjNDM7IHBnX29mZiwKJiM0MzsJCQkJICBjaHVuaykpCiYjNDM7CQkJZ290byBmYXVsdDsKJiM0MzsJCWZsdXNoX2RjYWNoZV9wYWdlKHJxc3RwLSZndDtycV9wYWdlc1twZ10pOwomIzQzOwkJb2Zmc2V0ICYjNDM7PSBjaHVuazsKJiM0MzsJCWRvbmUgJiM0Mzs9IGNodW5rOwomIzQzOwkJc3Zzay0mZ3Q7c2tfZGF0YWxlbiAmIzQzOz0gY2h1bms7CiYjNDM7CX0KJiM0MzsJc3Zzay0mZ3Q7c2tfdGNwbGVuICYjNDM7PSB0YWtlOwomIzQzOwljb25zdW1lZCAmIzQzOz0gdGFrZTsKJiM0MzsKJiM0MzsJaWYgKHN2c2stJmd0O3NrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcikgJmd0Oz0gcmVjbGVuKSB7CiYjNDM7CQlpZiAoc3ZjX3NvY2tfZmluYWxfcmVjKHN2c2spKQomIzQzOwkJCWRlc2MtJmd0O2NvdW50ID0gMDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzdmNfdGNwX2ZyYWdtZW50X3JlY2VpdmVkKHN2c2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb25zdW1lZDsKJiM0MzsKJiM0MztmYXVsdDoKJiM0MzsJZGVzYy0mZ3Q7ZXJyb3IgPSAtRUZBVUxUOwomIzQzOwlkZXNjLSZndDtjb3VudCA9IDA7CiYjNDM7CXJldHVybiBjb25zdW1lZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiByZWFkX3NvY2tfcmVjdHlwZSBub24tZGF0YSByZWNvcmQgYWN0b3I6IHJlY2VpdmVzIG5vbi1kYXRhIFRMUwomIzQzOyAqIHJlY29yZHMgKGFsZXJ0cywgaGFuZHNoYWtlIG1lc3NhZ2VzKSBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG8KJiM0MzsgKiB0cmFuc3BvcnQtbGV2ZWwgYWN0aW9ucy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgMCB0byBjb25zdW1lIHRoZSByZWNvcmQgYW5kIGFsbG93IHRoZSBUTFMgbGF5ZXIgdG8KJiM0MzsgKiBjb250aW51ZSBkZWxpdmVyaW5nIHN1YnNlcXVlbnQgcmVjb3Jkcy4gQSBuZWdhdGl2ZSByZXR1cm4KJiM0MzsgKiBjYXVzZXMgdGhlIFRMUyBsYXllciB0byByZXF1ZXVlIHRoZSBza2Igb24gaXRzIHJ4X2xpc3QsCiYjNDM7ICogYmxvY2tpbmcgYWxsIGZ1cnRoZXIgcmVjb3JkIGRlbGl2ZXJ5IG9uIHRoaXMgY29ubmVjdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHN2Y190Y3BfcmVjdHlwZV9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLAomIzQzOwkJCQkgdTggcmVjdHlwZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLSZndDthcmcuZGF0YTsKJiM0MzsJc3RydWN0IHN2Y19zb2NrICpzdnNrID0KJiM0MzsJCWNvbnRhaW5lcl9vZihycXN0cC0mZ3Q7cnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChyZWN0eXBlKSB7CiYjNDM7CWNhc2UgVExTX1JFQ09SRF9UWVBFX0FMRVJUOiB7CiYjNDM7CQl1OCBhbGVydFsyXSA9IHt9LCBsZXZlbCwgZGVzY3JpcHRpb247CiYjNDM7CQlzdHJ1Y3Qga3ZlYyBrdmVjID0gewomIzQzOwkJCS5pb3ZfYmFzZSA9IGFsZXJ0LAomIzQzOwkJCS5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSwKJiM0MzsJCX07CiYjNDM7CQlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9OwomIzQzOwomIzQzOwkJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsIGFsZXJ0LCBtaW4obGVuLCBzaXplb2YoYWxlcnQpKSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsICZhbXA7a3ZlYywgMSwgc2l6ZW9mKGFsZXJ0KSk7CiYjNDM7CQl0bHNfYWxlcnRfcmVjdihzdnNrLSZndDtza19zaywgJmFtcDttc2csICZhbXA7bGV2ZWwsICZhbXA7ZGVzY3JpcHRpb24pOwomIzQzOwkJaWYgKGxldmVsID09IFRMU19BTEVSVF9MRVZFTF9GQVRBTCkgewomIzQzOwkJCXN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCk7CiYjNDM7CQkJZGVzYy0mZ3Q7ZXJyb3IgPSAtRU5PVENPTk47CiYjNDM7CQkJZGVzYy0mZ3Q7Y291bnQgPSAwOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogc3ZjX3RjcF9yZWN2ZnJvbSAtIFJlY2VpdmUgZGF0YSBmcm9tIGEgVENQIHNvY2tldAogICogQHJxc3RwOiByZXF1ZXN0IHN0cnVjdHVyZSBpbnRvIHdoaWNoIHRvIHJlY2VpdmUgYW4gUlBDIENhbGwKICAqCiAgKiBDYWxsZWQgaW4gYSBsb29wIHdoZW4gWFBUX0RBVEEgaGFzIGJlZW4gc2V0LgogICoKLSAqIFJlYWQgdGhlIDQtYnl0ZSBzdHJlYW0gcmVjb3JkIG1hcmtlciwgdGhlbiB1c2UgdGhlIHJlY29yZCBsZW5ndGgKLSAqIGluIHRoYXQgbWFya2VyIHRvIHNldCB1cCBleGFjdGx5IHRoZSByZXNvdXJjZXMgbmVlZGVkIHRvIHJlY2VpdmUKLSAqIHRoZSBuZXh0IFJQQyBtZXNzYWdlIGludG8gQHJxc3RwLgotICoKICAqIFJldHVybnM6CiAgKiAgIE9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSByZWNlaXZlZCBSUEMgQ2FsbCwgb3IKICAqICAgJTAgaWYgYSBjb21wbGV0ZSBSUEMgQ2FsbCBtZXNzYWdlIHdhcyBub3QgcmVhZHkgdG8gcmV0dXJuCkBAIC0xMTU3LDI2ICYjNDM7MTEwMCw0MCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIAlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2sgPQogCQljb250YWluZXJfb2YocnFzdHAtJmd0O3JxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7CiAJc3RydWN0IHN2Y19zZXJ2CSpzZXJ2ID0gc3Zzay0mZ3Q7c2tfeHBydC54cHRfc2VydmVyOwotCXNpemVfdCB3YW50LCBiYXNlOwomIzQzOwlzdHJ1Y3Qgc29jawkqc2sgPSBzdnNrLSZndDtza19zazsKJiM0MzsJcmVhZF9kZXNjcmlwdG9yX3QgZGVzYyA9IHsKJiM0MzsJCS5hcmcuZGF0YSA9IHJxc3RwLAomIzQzOwl9OwogCXNzaXplX3QgbGVuOwogCV9fYmUzMiAqcDsKIAlfX2JlMzIgY2FsbGRpcjsKIAogCWNsZWFyX2JpdChYUFRfREFUQSwgJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9mbGFncyk7Ci0JbGVuID0gc3ZjX3RjcF9yZWFkX21hcmtlcihzdnNrLCBycXN0cCk7Ci0JaWYgKGxlbiAmbHQ7IDApCi0JCWdvdG8gZXJyb3I7CiAKLQliYXNlID0gc3ZjX3RjcF9yZXN0b3JlX3BhZ2VzKHN2c2ssIHJxc3RwKTsKLQl3YW50ID0gbGVuIC0gKHN2c2stJmd0O3NrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcikpOwotCWxlbiA9IHN2Y190Y3BfcmVhZF9tc2cocnFzdHAsIGJhc2UgJiM0Mzsgd2FudCwgYmFzZSk7Ci0JaWYgKGxlbiAmZ3Q7PSAwKSB7Ci0JCXRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoJmFtcDtzdnNrLSZndDtza194cHJ0LCBsZW4pOwotCQlzdnNrLSZndDtza190Y3BsZW4gJiM0Mzs9IGxlbjsKLQkJc3Zzay0mZ3Q7c2tfZGF0YWxlbiAmIzQzOz0gbGVuOwomIzQzOwlzdmNfdGNwX3Jlc3RvcmVfcGFnZXMoc3ZzaywgcnFzdHApOwomIzQzOwlycXN0cC0mZ3Q7cnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAtJmd0O3JxX3BhZ2VzWzBdKTsKJiM0MzsKJiM0MzsJZGVzYy5jb3VudCA9IHNlcnYtJmd0O3N2X21heF9tZXNnOwomIzQzOwlsb2NrX3NvY2soc2spOwomIzQzOwlpZiAoc3Zzay0mZ3Q7c2tfc29jay0mZ3Q7b3BzLSZndDtyZWFkX3NvY2tfcmVjdHlwZSkKJiM0MzsJCWxlbiA9IHN2c2stJmd0O3NrX3NvY2stJmd0O29wcy0mZ3Q7cmVhZF9zb2NrX3JlY3R5cGUoc2ssICZhbXA7ZGVzYywKJiM0MzsJCQkJCQkJICAgIHN2Y190Y3BfcmVjdl9hY3RvciwKJiM0MzsJCQkJCQkJICAgIHN2Y190Y3BfcmVjdHlwZV9hY3Rvcik7CiYjNDM7CWVsc2UKJiM0MzsJCWxlbiA9IHN2c2stJmd0O3NrX3NvY2stJmd0O29wcy0mZ3Q7cmVhZF9zb2NrKHNrLCAmYW1wO2Rlc2MsCiYjNDM7CQkJCQkJICAgICBzdmNfdGNwX3JlY3ZfYWN0b3IpOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwomIzQzOwlpZiAoZGVzYy5lcnJvciAmbHQ7IDApIHsKJiM0MzsJCWxlbiA9IGRlc2MuZXJyb3I7CiYjNDM7CQlnb3RvIGVycl9kaXNjYXJkOwogCX0KLQlpZiAobGVuICE9IHdhbnQgfHwgIXN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSkKJiM0MzsJaWYgKGRlc2MuY291bnQgIT0gMCkgewomIzQzOwkJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQkJc2V0X2JpdChYUFRfREFUQSwgJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9mbGFncyk7CiAJCWdvdG8gZXJyX2luY29tcGxldGU7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc3Zzay0mZ3Q7c2tfZGF0YWxlbiAmbHQ7IDgpCiAJCWdvdG8gZXJyX251dHM7CiAKQEAgLTExODUsOCAmIzQzOzExNDIsMTAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiAJaWYgKHJxc3RwLSZndDtycV9hcmcubGVuICZsdDs9IHJxc3RwLSZndDtycV9hcmcuaGVhZFswXS5pb3ZfbGVuKSB7CiAJCXJxc3RwLSZndDtycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gcnFzdHAtJmd0O3JxX2FyZy5sZW47CiAJCXJxc3RwLSZndDtycV9hcmcucGFnZV9sZW4gPSAwOwotCX0gZWxzZQotCQlycXN0cC0mZ3Q7cnFfYXJnLnBhZ2VfbGVuID0gcnFzdHAtJmd0O3JxX2FyZy5sZW4gLSBycXN0cC0mZ3Q7cnFfYXJnLmhlYWRbMF0uaW92X2xlbjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJxc3RwLSZndDtycV9hcmcucGFnZV9sZW4gPSBycXN0cC0mZ3Q7cnFfYXJnLmxlbiAtCiYjNDM7CQkJcnFzdHAtJmd0O3JxX2FyZy5oZWFkWzBdLmlvdl9sZW47CiYjNDM7CX0KIAogCXJxc3RwLSZndDtycV94cHJ0X2N0eHQgICA9IE5VTEw7CiAJcnFzdHAtJmd0O3JxX3Byb3QJICAgICAgPSBJUFBST1RPX1RDUDsKQEAgLTEyMDcsMTEgJiM0MzsxMTY2LDEzIEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogCWlmIChsZW4gJmx0OyAwKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CXRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoJmFtcDtzdnNrLSZndDtza194cHJ0LCBycXN0cC0mZ3Q7cnFfYXJnLmxlbik7CiAJc3ZjX3hwcnRfY29weV9hZGRycyhycXN0cCwgJmFtcDtzdnNrLSZndDtza194cHJ0KTsKIAlpZiAoc2Vydi0mZ3Q7c3Zfc3RhdHMpCiAJCXNlcnYtJmd0O3N2X3N0YXRzLSZndDtuZXR0Y3BjbnQmIzQzOyYjNDM7OwogCiAJc3ZjX3NvY2tfc2VjdXJlX3BvcnQocnFzdHApOwomIzQzOwlzZXRfYml0KFhQVF9EQVRBLCAmYW1wO3N2c2stJmd0O3NrX3hwcnQueHB0X2ZsYWdzKTsKIAlzdmNfeHBydF9yZWNlaXZlZChycXN0cC0mZ3Q7cnFfeHBydCk7CiAJcmV0dXJuIHJxc3RwLSZndDtycV9hcmcubGVuOwogCkBAIC0xMjE5LDkgJiM0MzsxMTgwLDcgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiAJc3ZjX3RjcF9zYXZlX3BhZ2VzKHN2c2ssIHJxc3RwKTsKIAlpZiAobGVuICZsdDsgMCAmYW1wOyZhbXA7IGxlbiAhPSAtRUFHQUlOKQogCQlnb3RvIGVycl9kZWxldGU7Ci0JaWYgKGxlbiA9PSB3YW50KQotCQlzdmNfdGNwX2ZyYWdtZW50X3JlY2VpdmVkKHN2c2spOwotCWVsc2UKJiM0MzsJaWYgKHN2c2stJmd0O3NrX3RjcGxlbiAmZ3Q7PSBzaXplb2YocnBjX2ZyYWdoZHIpKQogCQl0cmFjZV9zdmNzb2NrX3RjcF9yZWN2X3Nob3J0KCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCwKIAkJCQlzdmNfc29ja19yZWNsZW4oc3ZzayksCiAJCQkJc3Zzay0mZ3Q7c2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7CkBAIC0xMjMzLDEyICYjNDM7MTE5MiwyMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIAlnb3RvIGVycl9ub2Nsb3NlOwogZXJyX251dHM6CiAJc3Zzay0mZ3Q7c2tfZGF0YWxlbiA9IDA7CiYjNDM7CWdvdG8gZXJyX2RlbGV0ZTsKJiM0MztlcnJfZGlzY2FyZDoKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgc2tfZGF0YWxlbiBzbyB0aGUgdGVhcmRvd24tdGltZQomIzQzOwkgKiBzdmNfdGNwX2NsZWFyX3BhZ2VzKCkgZG9lcyBub3Qgd2FsayB0aGUgZW1wdGllZAomIzQzOwkgKiBzdnNrLSZndDtza19wYWdlc1tdLgomIzQzOwkgKi8KJiM0MzsJc3Zzay0mZ3Q7c2tfZGF0YWxlbiA9IDA7CiBlcnJfZGVsZXRlOgogCXRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCwgbGVuKTsKIAlzdmNfeHBydF9kZWZlcnJlZF9jbG9zZSgmYW1wO3N2c2stJmd0O3NrX3hwcnQpOwogZXJyX25vY2xvc2U6CiAJc3ZjX3hwcnRfcmVjZWl2ZWQocnFzdHAtJmd0O3JxX3hwcnQpOwotCXJldHVybiAwOwkvKiByZWNvcmQgbm90IGNvbXBsZXRlICovCiYjNDM7CXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHMuaCBiL25ldC90bHMvdGxzLmgKaW5kZXggNjBhMzdiZGFhYTI1MDYuLmMyMWQyYTk4NWUxMzczIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rscy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzLmgKQEAgLTE2OCw2ICYjNDM7MTY4LDkgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLAogCQkJICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpOwomIzQzO2ludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCQkgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLAomIzQzOwkJCSAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7CiAKIGludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTsKIHZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IDhjNTg4Y2RhYjczM2RhLi40OTYzZTBjYWY2ZDUzYSAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uYwpAQCAtOTQ5LDEyICYjNDM7OTQ5LDE3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddCiAJb3BzW1RMU19CQVNFXVtUTFNfU1cgIF0uc3BsaWNlX3JlYWQJPSB0bHNfc3dfc3BsaWNlX3JlYWQ7CiAJb3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucG9sbAkJPSB0bHNfc2tfcG9sbDsKIAlvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2sJPSB0bHNfc3dfcmVhZF9zb2NrOwomIzQzOwlvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZQk9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTsKIAogCW9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07CiAJb3BzW1RMU19TVyAgXVtUTFNfU1cgIF0uc3BsaWNlX3JlYWQJPSB0bHNfc3dfc3BsaWNlX3JlYWQ7CiAJb3BzW1RMU19TVyAgXVtUTFNfU1cgIF0ucG9sbAkJPSB0bHNfc2tfcG9sbDsKIAlvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2sJPSB0bHNfc3dfcmVhZF9zb2NrOwomIzQzOwlvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZQk9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTsKIAomIzQzOwkvKiBUTFNfSFcgKGRldmljZSBvZmZsb2FkKSBSWCBlbnRyaWVzIGluaGVyaXQKJiM0MzsJICogcmVhZF9zb2NreyxfcmVjdHlwZX0gZnJvbSBTVyB2aWEgdGhlIHN0cnVjdCBjb3BpZXMgYmVsb3cuCiYjNDM7CSAqLwogI2lmZGVmIENPTkZJR19UTFNfREVWSUNFCiAJb3BzW1RMU19IVyAgXVtUTFNfQkFTRV0gPSBvcHNbVExTX0JBU0VdW1RMU19CQVNFXTsKIApkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfc3cuYyBiL25ldC90bHMvdGxzX3N3LmMKaW5kZXggZDRhZmM5MGZkNzk2NmUuLmFmMzQ3YjViMTdmYThjIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19zdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX3N3LmMKQEAgLTIwNDksMTQgJiM0MzsyMDQ5LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsCiAJZ290byBzcGxpY2VfcmVhZF9lbmQ7CiB9CiAKLWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCi0JCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpCiYjNDM7LyogQ29uc2VjdXRpdmUgZW1wdHkgZGF0YSByZWNvcmRzIGRlbGl2ZXIgbm8gYnl0ZXM7IGNhcCB0aGVtIHBlcgomIzQzOyAqIGNhbGwgc28gYSBwZWVyIHN0cmVhbWluZyB0aGVtIGNhbm5vdCBob2xkIHRoZSBzb2NrZXQgbG9jayBoZXJlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVExTX1JYX05PREFUQV9MSU1JVCAxNgomIzQzOwomIzQzO3N0YXRpYyBpbnQgX190bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiYjNDM7CQkJICAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsCiYjNDM7CQkJICAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3RvcikKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7CiAJc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHggPSB0bHNfc3dfY3R4X3J4KHRsc19jdHgpOwogCXN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gJmFtcDt0bHNfY3R4LSZndDtwcm90X2luZm87CiAJc3RydWN0IHN0cnBfbXNnICpyeG0gPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBpbnQgbm9kYXRhX2NvdW50ID0gMDsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCXNpemVfdCBmbHVzaGVkX2F0ID0gMDsKIAlib29sIHJlbGVhc2VkID0gdHJ1ZTsKQEAgLTIxMDksMTAgJiM0MzsyMTE2LDI3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCQl0bHNfcnhfcmVjX2RvbmUoY3R4KTsKIAkJfQogCi0JCS8qIHJlYWRfc29jayBkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgY29udHJvbCBtZXNzYWdlcyAqLwomIzQzOwkJLyogQ29udHJvbCByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSkgcmVhY2ggYSBjb25zdW1lcgomIzQzOwkJICogb25seSB0aHJvdWdoIHJlY3R5cGVfYWN0b3I7IHdpdGhvdXQgb25lLCByZWFkX3NvY2sKJiM0MzsJCSAqIHJlamVjdHMgdGhlbS4KJiM0MzsJCSAqLwogCQlpZiAodGxtLSZndDtjb250cm9sICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKJiM0MzsJCQlpZiAoIXJlY3R5cGVfYWN0b3IpIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZXJyID0gcmVjdHlwZV9hY3RvcihkZXNjLCBza2IsIHJ4bS0mZ3Q7b2Zmc2V0LAomIzQzOwkJCQkJIHJ4bS0mZ3Q7ZnVsbF9sZW4sCiYjNDM7CQkJCQkgdGxtLSZndDtjb250cm9sKTsKJiM0MzsJCQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCS8qIHJlY3R5cGVfYWN0b3IgY29uc3VtZXMgdGhlIHdob2xlIHJlY29yZDsgbm8gcGFydGlhbCBwYXRoICovCiYjNDM7CQkJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJCQlza2IgPSBOVUxMOwomIzQzOwkJCWlmICgmIzQzOyYjNDM7bm9kYXRhX2NvdW50ICZndDs9IFRMU19SWF9OT0RBVEFfTElNSVQpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVybwpAQCAtMjEyMiw3ICYjNDM7MjE0NiwxMyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkgKiBoZXJlIGluc3RlYWQuCiAJCSAqLwogCQlpZiAocnhtLSZndDtmdWxsX2xlbiA9PSAwKSB7CiYjNDM7CQkJZXJyID0gMDsKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQkJLyogdGxzX3J4X3JlYWRlcl9yZWxlYXNlKCkgYW5ub3VuY2VzIGFueSBwYXJzZWQgcmVjb3JkCiYjNDM7CQkJICogb24gZXhpdCwgc28gcmV0dXJuaW5nIDAgaGVyZSBjYW5ub3Qgc3RyYW5kIGl0LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgmIzQzOyYjNDM7bm9kYXRhX2NvdW50ICZndDs9IFRMU19SWF9OT0RBVEFfTElNSVQpCiYjNDM7CQkJCWJyZWFrOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMjEzMyw2ICYjNDM7MjE2Myw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCQlnb3RvIHJlYWRfc29ja19yZXF1ZXVlOwogCQl9CiAJCWNvcGllZCAmIzQzOz0gdXNlZDsKJiM0MzsJCW5vZGF0YV9jb3VudCA9IDA7CiAJCWlmICh1c2VkICZsdDsgcnhtLSZndDtmdWxsX2xlbikgewogCQkJcnhtLSZndDtvZmZzZXQgJiM0Mzs9IHVzZWQ7CiAJCQlyeG0tJmd0O2Z1bGxfbGVuIC09IHVzZWQ7CkBAIC0yMTUxLDYgJiM0MzsyMTgyLDE5IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJZ290byByZWFkX3NvY2tfZW5kOwogfQogCiYjNDM7aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpCiYjNDM7ewomIzQzOwlyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAomIzQzOwkJCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsCiYjNDM7CQkJICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgcmVjdHlwZV9hY3Rvcik7CiYjNDM7fQomIzQzOwogYm9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCmluZGV4IGNiZGQzZWEyOGI5OThmLi44MTM2MzA2YjVjYWE3NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYwpAQCAtNDI3LDcgJiM0Mzs0MjcsOCBAQCBGSVhUVVJFX1NFVFVQKHRscykKIAogRklYVFVSRV9URUFSRE9XTih0bHMpCiB7Ci0JY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O2ZkKTsKIAljbG9zZShzZWxmLSZndDtjZmQpOwogfQogCkBAIC04OTcsNiAmIzQzOzg5OCwxMTQgQEAgVEVTVF9GKHRscywgc3BsaWNlX2RlY19jbXNnX3RvX3BpcGUpCiAJRVhQRUNUX0VRKG1lbWNtcCh0ZXN0X3N0ciwgYnVmLCBzZW5kX2xlbiksIDApOwogfQogCiYjNDM7LyogVmVyaWZ5IHNwbGljZSBoYW5kbGVzIGRhdGEtY29udHJvbC1kYXRhOiBzcGxpY2UgcmVhZHMgdGhlIGRhdGEKJiM0MzsgKiByZWNvcmRzIHN1Y2Nlc3NmdWxseSB3aGlsZSB0aGUgaW50ZXJ2ZW5pbmcgY29udHJvbCByZWNvcmQgbXVzdAomIzQzOyAqIGJlIGRyYWluZWQgdmlhIHJlY3Ztc2cgYmVmb3JlIHNwbGljZSBjYW4gY29udGludWUuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgc3BsaWNlX2RhdGFfY21zZ19kYXRhKQomIzQzO3sKJiM0MzsJY2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTsKJiM0MzsJY2hhciBtZW1fcmVjdltUTFNfUEFZTE9BRF9NQVhfTEVOXTsKJiM0MzsJaW50IHNlbmRfbGVuID0gNDA5NjsKJiM0MzsJY2hhciAqY3RybF9zdHIgPSAmIzM0O2NvbnRyb2wmIzM0OzsKJiM0MzsJaW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmxfc3RyKSAmIzQzOyAxOwomIzQzOwljaGFyIGN0cmxfYnVmWzhdOwomIzQzOwlpbnQgcFsyXTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CW1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7CiYjNDM7CiYjNDM7CUFTU0VSVF9HRShwaXBlKHApLCAwKTsKJiM0MzsKJiM0MzsJLyogU2VuZDogZGF0YSwgY29udHJvbCwgZGF0YSAqLwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgbWVtX3NlbmQsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLSZndDtmZCwgMTAwLCBjdHJsX3N0ciwgY3RybF9sZW4sIDApLAomIzQzOwkJICBjdHJsX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCAmYW1wO21lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBmaXJzdCBkYXRhIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7CiYjNDM7CUVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBoaXRzIGNvbnRyb2wgcmVjb3JkLCBmYWlscyAqLwomIzQzOwlFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlOVkFMKTsKJiM0MzsKJiM0MzsJLyogRHJhaW4gdGhlIGNvbnRyb2wgcmVjb3JkIHZpYSByZWN2bXNnICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAxMDAsCiYjNDM7CQkJCWN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksCiYjNDM7CQkgIGN0cmxfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChjdHJsX3N0ciwgY3RybF9idWYsIGN0cmxfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBzZWNvbmQgZGF0YSByZWNvcmQgKi8KJiM0MzsJRVhQRUNUX0VRKHNwbGljZShzZWxmLSZndDtjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoJmFtcDttZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBWZXJpZnkgdGhhdCBtdWx0aXBsZSBjb25zZWN1dGl2ZSBjb250cm9sIHJlY29yZHMgYmV0d2VlbiBkYXRhCiYjNDM7ICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzCiYjNDM7ICogYWZ0ZXJ3YXJkLiAgVGhlIHR3byBjb250cm9sIHJlY29yZHMgdXNlIGRpZmZlcmVudCBjb250ZW50IHR5cGVzCiYjNDM7ICogdG8gdmVyaWZ5IHR5cGUgcHJlc2VydmF0aW9uIGFjcm9zcyB0aGUgc3BsaWNlIGJvdW5kYXJ5LgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIHNwbGljZV9tdWx0aV9jbXNnX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyIG1lbV9zZW5kW1RMU19QQVlMT0FEX01BWF9MRU5dOwomIzQzOwljaGFyIG1lbV9yZWN2W1RMU19QQVlMT0FEX01BWF9MRU5dOwomIzQzOwlpbnQgc2VuZF9sZW4gPSA0MDk2OwomIzQzOwljaGFyICpjdHJsMSA9ICYjMzQ7YWxlcnQxJiMzNDs7CiYjNDM7CWNoYXIgKmN0cmwyID0gJiMzNDthbGVydDImIzM0OzsKJiM0MzsJaW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmwxKSAmIzQzOyAxOwomIzQzOwljaGFyIGN0cmxfYnVmWzddOwomIzQzOwlpbnQgcFsyXTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CW1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7CiYjNDM7CiYjNDM7CUFTU0VSVF9HRShwaXBlKHApLCAwKTsKJiM0MzsKJiM0MzsJLyogU2VuZDogZGF0YSwgY29udHJvbCgxMDApLCBjb250cm9sKDIwMCksIGRhdGEgKi8KJiM0MzsJRVhQRUNUX0VRKHNlbmQoc2VsZi0mZ3Q7ZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi0mZ3Q7ZmQsIDEwMCwgY3RybDEsIGN0cmxfbGVuLCAwKSwgY3RybF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLSZndDtmZCwgMjAwLCBjdHJsMiwgY3RybF9sZW4sIDApLCBjdHJsX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCAmYW1wO21lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBmaXJzdCBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShzcGxpY2Uoc2VsZi0mZ3Q7Y2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKG1lbV9zZW5kLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJLyogU3BsaWNlIGZhaWxzIG9uIGZpcnN0IGNvbnRyb2wgcmVjb3JkICovCiYjNDM7CUVYUEVDVF9FUShzcGxpY2Uoc2VsZi0mZ3Q7Y2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwomIzQzOwkvKiBEcmFpbiBmaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi8KJiM0MzsJRVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLSZndDtjZmQsIDEwMCwKJiM0MzsJCQkJY3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSwKJiM0MzsJCSAgY3RybF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGN0cmwxLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJLyogU3BsaWNlIGZhaWxzIG9uIHNlY29uZCBjb250cm9sIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlOVkFMKTsKJiM0MzsKJiM0MzsJLyogRHJhaW4gc2Vjb25kIGNvbnRyb2wgKHR5cGUgMjAwKSAqLwomIzQzOwlFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtJmd0O2NmZCwgMjAwLAomIzQzOwkJCQljdHJsX2J1Ziwgc2l6ZW9mKGN0cmxfYnVmKSwgTVNHX1dBSVRBTEwpLAomIzQzOwkJICBjdHJsX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoY3RybDIsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBTcGxpY2Ugc2Vjb25kIGRhdGEgKi8KJiM0MzsJRVhQRUNUX0VRKHNwbGljZShzZWxmLSZndDtjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoJmFtcDttZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApOwomIzQzO30KJiM0MzsKIFRFU1RfRih0bHMsIHJlY3ZfYW5kX3NwbGljZSkKIHsKIAlpbnQgc2VuZF9sZW4gPSBUTFNfUEFZTE9BRF9NQVhfTEVOOwpAQCAtMTY4Miw2ICYjNDM7MTc5MSwxOTMgQEAgVEVTVF9GKHRscywgZGF0YV9jb250cm9sX2RhdGEpCiAJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTsKIH0KIAomIzQzOy8qIEZ1bGx5IGNvbnN1bWUgYSBkYXRhLWNvbnRyb2wtZGF0YSBzZXF1ZW5jZS4gIFRoZSBleGlzdGluZwomIzQzOyAqIGRhdGFfY29udHJvbF9kYXRhIHRlc3Qgb25seSBwZWVrczsgdGhpcyBleGVyY2lzZXMgY29tcGxldGUKJiM0MzsgKiByZWNvcmQgZGVsaXZlcnkgdGhyb3VnaCByZWN2IGFuZCByZWN2bXNnLgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIHJlY3ZfZGF0YV9jbXNnX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyICpkYXRhMSA9ICYjMzQ7Zmlyc3RfZGF0YSYjMzQ7OwomIzQzOwljaGFyICpjdHJsID0gJiMzNDtjdHJsX21zZyYjMzQ7OwomIzQzOwljaGFyICpkYXRhMiA9ICYjMzQ7c2Vjb25kX2RhdGEmIzM0OzsKJiM0MzsJaW50IGQxX2xlbiA9IHN0cmxlbihkYXRhMSkgJiM0MzsgMTsKJiM0MzsJaW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7CiYjNDM7CWludCBkMl9sZW4gPSBzdHJsZW4oZGF0YTIpICYjNDM7IDE7CiYjNDM7CWNoYXIgYnVmWzIwXTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBkYXRhMSwgZDFfbGVuLCAwKSwgZDFfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi0mZ3Q7ZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTsKJiM0MzsKJiM0MzsJLyogRmlyc3QgZGF0YSByZWNvcmQgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGQxX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIHJlY3Ygd2l0aG91dCBjbXNnIGJ1ZmZlciBmYWlscyBvbiBjb250cm9sIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlPKTsKJiM0MzsKJiM0MzsJLyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqLwomIzQzOwlFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtJmd0O2NmZCwgMTAwLAomIzQzOwkJCQlidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFNlY29uZCBkYXRhIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQsIGJ1ZiwgZDJfbGVuLCBNU0dfV0FJVEFMTCksIGQyX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMiwgZDJfbGVuKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFBlZWsgYXQgYW4gaW50ZXJsZWF2ZWQgY29udHJvbCByZWNvcmQgYWZ0ZXIgdGhlIHByZWNlZGluZyBkYXRhCiYjNDM7ICogcmVjb3JkIGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGNvbnN1bWUgaXQuICBNU0dfUEVFSyBleHBvc2VzIHRoZQomIzQzOyAqIGNvbnRyb2wgcmVjb3JkJiMzOTtzIHR5cGUgd2l0aG91dCBjb25zdW1pbmcgaXQuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgcGVla19jbXNnX2FmdGVyX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyICpkYXRhID0gJiMzNDtsZWFkaW5nJiMzNDs7CiYjNDM7CWNoYXIgKmN0cmwgPSAmIzM0O21pZGRsZSYjMzQ7OwomIzQzOwljaGFyICp0YWlsID0gJiMzNDt0cmFpbGluZyYjMzQ7OwomIzQzOwlpbnQgZF9sZW4gPSBzdHJsZW4oZGF0YSkgJiM0MzsgMTsKJiM0MzsJaW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7CiYjNDM7CWludCB0X2xlbiA9IHN0cmxlbih0YWlsKSAmIzQzOyAxOwomIzQzOwljaGFyIGJ1ZlsyMF07CiYjNDM7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtJmd0O2ZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgdGFpbCwgdF9sZW4sIDApLCB0X2xlbik7CiYjNDM7CiYjNDM7CS8qIENvbnN1bWUgbGVhZGluZyBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBQZWVrIGF0IHRoZSBjb250cm9sIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtJmd0O2NmZCwgMTAwLAomIzQzOwkJCQlidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIGNfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIENvbnN1bWUgdGhlIGNvbnRyb2wgcmVjb3JkICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAxMDAsCiYjNDM7CQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBUcmFpbGluZyBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCB0X2xlbiwgTVNHX1dBSVRBTEwpLCB0X2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCB0YWlsLCB0X2xlbiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBDb250cm9sIHJlY29yZCBhcyB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBzdHJlYW0sIGZvbGxvd2VkIGJ5CiYjNDM7ICogZGF0YS4gIFRoZSBjb250cm9sIHJlY29yZCBtdXN0IGJlIGRyYWluZWQgYmVmb3JlIHRoZSBkYXRhIHJlY29yZAomIzQzOyAqIGJlY29tZXMgYXZhaWxhYmxlLgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIGNtc2dfYmVmb3JlX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyICpjdHJsID0gJiMzNDthbGVydCYjMzQ7OwomIzQzOwljaGFyICpkYXRhID0gJiMzNDtwYXlsb2FkJiMzNDs7CiYjNDM7CWludCBjX2xlbiA9IHN0cmxlbihjdHJsKSAmIzQzOyAxOwomIzQzOwlpbnQgZF9sZW4gPSBzdHJsZW4oZGF0YSkgJiM0MzsgMTsKJiM0MzsJY2hhciBidWZbMjBdOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bm90bHMpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBUTFMgc3VwcG9ydCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi0mZ3Q7ZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBkYXRhLCBkX2xlbiwgMCksIGRfbGVuKTsKJiM0MzsKJiM0MzsJLyogcmVjdiB3aXRob3V0IGNtc2cgZmFpbHMgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJTyk7CiYjNDM7CiYjNDM7CS8qIERyYWluIGNvbnRyb2wgdmlhIHJlY3Ztc2cgKi8KJiM0MzsJRVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLSZndDtjZmQsIDEwMCwKJiM0MzsJCQkJYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBEYXRhIGZvbGxvd3MgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIGRfbGVuLCBNU0dfV0FJVEFMTCksIGRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFR3byBkaWZmZXJlbnQgY29udHJvbCByZWNvcmQgdHlwZXMgaW50ZXJsZWF2ZWQgd2l0aCBkYXRhLgomIzQzOyAqIEVhY2ggY29udHJvbCByZWNvcmQgaXMgZGVsaXZlcmVkIHdpdGggaXRzIG93biB0eXBlIHByZXNlcnZlZDsKJiM0MzsgKiB2ZXJpZnkgYm90aCB0eXBlcyBhcnJpdmUgaW50YWN0LgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIG1peGVkX2NvbnRyb2xfdHlwZXMpCiYjNDM7ewomIzQzOwljaGFyICpkYXRhMSA9ICYjMzQ7ZGF0YTEmIzM0OzsKJiM0MzsJY2hhciAqY3RybDEgPSAmIzM0O2hhbmRzaGFrZSYjMzQ7OwomIzQzOwljaGFyICpjdHJsMiA9ICYjMzQ7YWxlcnRfbXNnJiMzNDs7CiYjNDM7CWNoYXIgKmRhdGEyID0gJiMzNDtkYXRhMiYjMzQ7OwomIzQzOwlpbnQgZDFfbGVuID0gc3RybGVuKGRhdGExKSAmIzQzOyAxOwomIzQzOwlpbnQgYzFfbGVuID0gc3RybGVuKGN0cmwxKSAmIzQzOyAxOwomIzQzOwlpbnQgYzJfbGVuID0gc3RybGVuKGN0cmwyKSAmIzQzOyAxOwomIzQzOwlpbnQgZDJfbGVuID0gc3RybGVuKGRhdGEyKSAmIzQzOyAxOwomIzQzOwljaGFyIGJ1ZlsyMF07CiYjNDM7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgZGF0YTEsIGQxX2xlbiwgMCksIGQxX2xlbik7CiYjNDM7CUVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtJmd0O2ZkLCAxMDAsIGN0cmwxLCBjMV9sZW4sIDApLCBjMV9sZW4pOwomIzQzOwlFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLSZndDtmZCwgMjAwLCBjdHJsMiwgYzJfbGVuLCAwKSwgYzJfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHNlbmQoc2VsZi0mZ3Q7ZmQsIGRhdGEyLCBkMl9sZW4sIDApLCBkMl9sZW4pOwomIzQzOwomIzQzOwkvKiBGaXJzdCBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTEsIGQxX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBGaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi8KJiM0MzsJRVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLSZndDtjZmQsIDEwMCwKJiM0MzsJCQkJYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBjMV9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybDEsIGMxX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBTZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAyMDAsCiYjNDM7CQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgYzJfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwyLCBjMl9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJLyogU2Vjb25kIGRhdGEgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTIsIGQyX2xlbiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUcmFpbGluZyBjb250cm9sIHJlY29yZCB3aXRoIG5vIGRhdGEgZm9sbG93aW5nIGl0LiAgVGhlIHNlbmRlcgomIzQzOyAqIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBhZnRlciB0aGUgY29udHJvbCByZWNvcmQ7IHRoZSByZWNlaXZlcgomIzQzOyAqIGRyYWlucyB0aGUgY29udHJvbCBhbmQgdGhlbiBvYnNlcnZlcyBFT0YuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgZGF0YV9jbXNnX2VvZikKJiM0Mzt7CiYjNDM7CWNoYXIgKmRhdGEgPSAmIzM0O3BheWxvYWQmIzM0OzsKJiM0MzsJY2hhciAqY3RybCA9ICYjMzQ7ZmluYWwmIzM0OzsKJiM0MzsJaW50IGRfbGVuID0gc3RybGVuKGRhdGEpICYjNDM7IDE7CiYjNDM7CWludCBjX2xlbiA9IHN0cmxlbihjdHJsKSAmIzQzOyAxOwomIzQzOwljaGFyIGJ1ZlsyMF07CiYjNDM7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtJmd0O2ZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2Uoc2VsZi0mZ3Q7ZmQpLCAwKTsKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyogQ29uc3VtZSBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBEcmFpbiB0cmFpbGluZyBjb250cm9sICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAxMDAsCiYjNDM7CQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgMCk7CiYjNDM7fQomIzQzOwogVEVTVF9GKHRscywgc2h1dGRvd24pCiB7CiAJY2hhciBjb25zdCAqdGVzdF9zdHIgPSAmIzM0O3Rlc3RfcmVhZCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcwNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2tldCBSZWNvcmQgVHlwZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBwcmV0dHkgY2xlYW4gcmVmYWN0b3IgZm9yIGhvdyB3ZSBoYW5kbGUgcmVjb3JkIHR5cGVzIGF0IHRoZSBzb2NrZXQgbGV2ZWwuICBUaGUgY29yZSBpZGVhIGlzIHRvIGludHJvZHVjZSBhIG5ldyBjYWxsYmFjaywgYHJlYWRfc29ja19yZWN0eXBlYCwgdG8gdGhlIGBzdHJ1Y3QgcHJvdG9fb3BzYC4gIFRoaXMgbG9va3MgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoIGZvciBhZGRpbmcgbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgaG93IHdlIHJlYWQgZGF0YSBiYXNlZCBvbiByZWNvcmQgdHlwZXMsIHdoaWNoIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBwcm90b2NvbHMgbGlrZSBUTFMgdGhhdCBoYXZlIGNvbXBsZXggZnJhbWluZy4KClRoZSBtZWF0IG9mIGl0IGlzIHRoYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMgbmV3IGNhbGxiYWNrLiAgSXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgZXhpc3RpbmcgZnVuY3Rpb25zLCBgc3ZjX3RjcF9zb2NrX3JlY3Ztc2dgIGFuZCBgc3ZjX3RjcF9yZWFkX21zZ2AsIHdpdGggdGhlIG5ldyBgc3ZjX3RjcF9yZWN2X2FjdG9yYCBhbmQgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAgd2hpY2ggc2VlbXMgdG8gc3VnZ2VzdCBhIG1vdmUgdG93YXJkIGEgbW9yZSBhY3Rvci1iYXNlZCBtb2RlbCBmb3IgaGFuZGxpbmcgdGhlIFRDUCByZWFkIGxvb3AuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBJ4oCZbGwgd2FudCB0byBzZWUgaG93IHRoZXNlIGFjdG9ycyBpbnRlcmFjdCBpbiBtb3JlIGRldGFpbC4KClRoZSBUTFMgc2lkZSBpcyBhbHNvIHRvdWNoZWQsIHdpdGggYG5ldC90bHMvdGxzX3N3LmNgIGdldHRpbmcgYSBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgVExTIGlzIGEga2V5IGJlbmVmaWNpYXJ5IGhlcmUuIFRoaXMgc2VlbXMgbG9naWNhbCBnaXZlbiB0aGUgcmVsaWFuY2Ugb24gcmVjb3JkIGZyYW1pbmcgd2l0aGluIFRMUy4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsLCBtb2RpZnlpbmcgaG93IFJQQyBvdmVyIFRDUCBoYW5kbGVzIFRMUyByZWNvcmRzLgoKVGhlIGRlZmluaXRpb25zIG9mIGBza19yZWFkX3JlY3R5cGVfYWN0b3JfdGAgYW5kIGByZWFkX3NvY2tfcmVjdHlwZWAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgIGFyZSBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuIEkgYW0gY3VyaW91cyB0byBleGFtaW5lIGhvdyB0aGUgYHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90YCBpbnRlcmFjdHMgd2l0aCB0aGUgYHJlYWRfc29ja2AgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuICBXZSBuZWVkIGBDT05GSUdfU1VOUlBDYCBmb3IgdGhlIFJQQyBzaWRlIGFuZCBgQ09ORklHX1RMU2AgZm9yIHRoZSBUTFMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmNvbmZpZyBtb3JlIGNsb3NlbHkuIEl0IG1lbnRpb25zIGBDT05GSUdfVExTX0RFVklDRWAgaW4gYG5ldC90bHMvdGxzX21haW4uY2AgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGB0bHNfc3cuY2AuIFRoaXMgYWxzbyBuZWVkcyBjb25zaWRlcmF0aW9uLgoKT2theSwgbGV0IG1lIHF1aWNrbHkgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlcyB0byB2ZXJpZnkgaG93IHRoaXMgaXMgdXNlZCBvdXRzaWRlIG9mIHRoZXNlIGltbWVkaWF0ZSBjaGFuZ2VzLiBJIHdhbnQgdG8gc2VlIGhvdyBicm9hZGx5IGByZWFkX3NvY2tfcmVjdHlwZWAgYW5kIGBza19yZWFkX3JlY3R5cGVfYWN0b3JfdGAgYXJlIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgZXhpc3RpbmcgbmV0d29ya2luZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfc29ja19yZWN0eXBlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0Lmg9MjExPXN0cnVjdCBwcm90b19vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0LmgtMjc0LVx0LypcbmluY2x1ZGUvbGludXgvbmV0Lmg6Mjc1Olx0ICogcmVhZF9zb2NrX3JlY3R5cGUgc3BsaXRzIGRlbGl2ZXJ5IGFjcm9zcyB0d28gY2FsbGJhY2tzOlxuaW5jbHVkZS9saW51eC9uZXQuaC0yNzYtXHQgKiByZWN2X2FjdG9yIGZvciBkYXRhIHJlY29yZHMsIHBlciB0aGUgc2tfcmVhZF9hY3Rvcl90XG4tLVxuaW5jbHVkZS9saW51eC9uZXQuaC0yOTAtXHQgKi9cbmluY2x1ZGUvbGludXgvbmV0Lmg6MjkxOlx0aW50XHRcdCgqcmVhZF9zb2NrX3JlY3R5cGUpKHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvbmV0LmgtMjkyLVx0XHRcdFx0XHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTk1OD1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMDM5LS8qXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMDQwOiAqIHJlYWRfc29ja19yZWN0eXBlIG5vbi1kYXRhIHJlY29yZCBhY3RvcjogcmVjZWl2ZXMgbm9uLWRhdGEgVExTXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMDQxLSAqIHJlY29yZHMgKGFsZXJ0cywgaGFuZHNoYWtlIG1lc3NhZ2VzKSBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG9cbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xMDk4PXN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExMTctXHRsb2NrX3NvY2soc2spO1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTExODpcdGlmIChzdnNrLVx1MDAzZXNrX3NvY2stXHUwMDNlb3BzLVx1MDAzZXJlYWRfc29ja19yZWN0eXBlKVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTExOTpcdFx0bGVuID0gc3Zzay1cdTAwM2Vza19zb2NrLVx1MDAzZW9wcy1cdTAwM2VyZWFkX3NvY2tfcmVjdHlwZShzaywgXHUwMDI2ZGVzYyxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExMjAtXHRcdFx0XHRcdFx0XHQgICAgc3ZjX3RjcF9yZWN2X2FjdG9yLFxuLS1cbm5ldC90bHMvdGxzLmg9MTY5PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rscy5oLTE3MC1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XG5uZXQvdGxzL3Rscy5oOjE3MTppbnQgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rscy5oLTE3Mi1cdFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYz05NDA9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9fb3BzKHN0cnVjdCBwcm90b19vcHMgb3BzW1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTk1MS1cdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja1x0PSB0bHNfc3dfcmVhZF9zb2NrO1xubmV0L3Rscy90bHNfbWFpbi5jOjk1MjpcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbm5ldC90bHMvdGxzX21haW4uYy05NTMtXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTk1Ny1cdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnJlYWRfc29ja1x0PSB0bHNfc3dfcmVhZF9zb2NrO1xubmV0L3Rscy90bHNfbWFpbi5jOjk1ODpcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbm5ldC90bHMvdGxzX21haW4uYy05NTktXG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMTg1PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTkwLVxubmV0L3Rscy90bHNfc3cuYzoyMTkxOmludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC90bHMvdGxzX3N3LmMtMjE5Mi1cdFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU29ja2V0IFJlY2VpdmUgVHlwZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHJlYWRfc29ja19yZWN0eXBlYCBpbnRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3QsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGxlbWVudGVkIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC90bHMvdGxzX3N3LmNgIGFzIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLiBUaGF0IG1ha2VzIHNlbnNlIC0gVExTIHByb2JhYmx5IG5lZWRzIHRvIGtub3cgdGhlIHJlY29yZCB0eXBlIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4KCkkgc2VlIGl0JiMzOTtzIGFsc28gYmVpbmcgdXNlZCBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHdpdGhpbiBgc3ZjX3RjcF9yZWN2ZnJvbWAuIFRoYXQmIzM5O3MgYSBiaXQgdW5leHBlY3RlZCwgYnV0IHByb2JhYmx5IG1lYW5zIFN1blJQQyBjYW4gYWxzbyBiZW5lZml0IGZyb20gdGhpcyBzb2NrZXQtbGV2ZWwgdHlwZSByZXRyaWV2YWwgZm9yIFRDUCBjb25uZWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gaG93IHRoYXQmIzM5O3MgYmVpbmcgdXNlZCB0aGVyZS4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcyBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBzdmNfdGNwX3JlY3ZfYWN0b3JgLCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCwgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWAgYW5kIGBfX3Rsc19zd19yZWFkX3NvY2tgLgoKR2l2ZW4gdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBzZWVtcyBjZW50cmFsLCBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fdGxzX3N3X3JlYWRfc29ja2AgaW4gYG5ldC90bHMvdGxzX3N3LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgcHVsbGluZyB0aGlzIHJlY29yZCB0eXBlIGluZm9ybWF0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgYmFzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3cuYz0xOTgzPXNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMDU2LVxubmV0L3Rscy90bHNfc3cuYzoyMDU3OnN0YXRpYyBpbnQgX190bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rsc19zdy5jLTIwNTgtXHRcdFx0ICAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMTg1PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTg3LXtcbm5ldC90bHMvdGxzX3N3LmM6MjE4ODpcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIE5VTEwpO1xubmV0L3Rscy90bHNfc3cuYy0yMTg5LX1cbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTIxOTE9aW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjE5NC17XG5uZXQvdGxzL3Rsc19zdy5jOjIxOTU6XHRyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCByZWN0eXBlX2FjdG9yKTtcbm5ldC90bHMvdGxzX3N3LmMtMjE5Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoZXNlIHN5bWJvbHMgcmVsYXRlOiBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLCBhbmQgYF9fdGxzX3N3X3JlYWRfc29ja2AuIFRoZXNlIHNlZW0gdG8gYmUgY29yZSB0byBzb21lIHNvcnQgb2YgbmV0d29yayBwcm90b2NvbCBoYW5kbGluZywgcHJvYmFibHkgVENQIGFuZCBsaWtlbHkgaW52b2x2aW5nIFRMUy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGVuYWJsaW5nIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgU1VOUlBDYCBhbmQgYFRMU2AuIElzIGBTVU5SUENgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgYW0gSSBnb2luZyB0byBuZWVkIHNvbWV0aGluZyBtb3JlLCBwZXJoYXBzIGEgZGVidWcgb3B0aW9uIGxpa2UgYFNVTlJQQ19ERUJVR2A/IFVzdWFsbHksIHBsYWluIGBTVU5SUENgIGlzIGVub3VnaCB0byBlbmFibGUgc3RhbmRhcmQgUlBDIGZ1bmN0aW9uYWxpdHksIGJ1dCBJIGNhbiYjMzk7dCBhc3N1bWUgdGhhdCB3aXRob3V0IGNoZWNraW5nLiBBaCwgdGhlIHBsb3QgdGhpY2tlbnMuLi4gYFNVTlJQQ2AgaXMgYSAqdHJpc3RhdGUqIGNvbmZpZywgc28gSSBuZWVkIHRvIGJlIG1vcmUgY2FyZWZ1bC4KClRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc3VucnBjL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgU1VOUlBDYCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBUTFMtcmVsYXRlZCBzeW1ib2xzLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVU5SUEMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXG5uZXQvc3VucnBjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTUtXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNDktXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclwmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7UlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgUlBDLW92ZXItVExTIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBTVU5SUENgIGlzIGZ1bmRhbWVudGFsIHRvIE5GUyBhbmQgYE5GU0RgIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBzZWN1cml0eS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBteSB3b3JrLCBJIHNob3VsZCBzZWUgaWYgdGhlcmUgaXMgYSBjb25maWcgaW4gcGxhY2UgZm9yIFJQQyBvdmVyIFRMUy4gSXQmIzM5O3MgYSBrZXkgc2VjdXJpdHkgbWVhc3VyZSB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSB0aGF0IFRMUyBpcyBwcm9wZXJseSBzZXQgdXAgZm9yIFJQQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlBDX1RMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzY2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgZm9yIFRMUyBDb25maWd1cmF0aW9uIGluIFJQQyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gc2VlIGhvdyBUTFMgaXMgY29uZmlndXJlZCwgb3IgaWYgaXQmIzM5O3MgZXZlbiAqY29uc2lkZXJlZCogaW4gdGhlIGNvbnRleHQgb2YgYG5ldC9zdW5ycGNgLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBuZXQvc3VucnBjL0tjb25maWdgIGhhcyB0byBzYXkuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb25zLCBhbmQgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IGFueSBUTFMgc3VwcG9ydCwgb3IgdGhlICpwb3RlbnRpYWwqIGZvciBUTFMsIHdpbGwgYmUgY29udHJvbGxlZCB0aHJvdWdoIGEgS2NvbmZpZyBvcHRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZmxhZ3MgcmVsYXRpbmcgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIFRMUywgcG90ZW50aWFsbHkgZGVwZW5kZW50IG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIChsaWtlIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgbGlicmFyaWVzKSwgYW5kIG1heWJlIGV2ZW4gb3B0aW9ucyBmb3Igc2VsZWN0aW5nIGJldHdlZW4gZGlmZmVyZW50IFRMUyBpbXBsZW1lbnRhdGlvbnMgaWYgbXVsdGlwbGUgYXJlIHN1cHBvcnRlZCB3aXRoaW4gdGhpcyBSUEMgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGFueSBUTFMgb3B0aW9ucyBJIGZpbmQgYW5kIG90aGVyIFJQQyBmdW5jdGlvbmFsaXRpZXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzAKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHN5c3RlbSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGZvciBib3RoIGBTVU5SUENgIGFuZCBgVExTYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudHMgZm9yIHRoaXMgc2V0dXAuIE5vdywgbGV0JiMzOTtzIGp1c3QgY2xhcmlmeeKApiByaWdodCwgYFRMU2AgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24sIGBjb25maWcgVExTYC4gR290IGl0LiBKdXN0IGRvdWJsZS1jaGVja2luZyB0byBrZWVwIGV2ZXJ5dGhpbmcgc3RyYWlnaHQgaW4gbXkgaGVhZC4gTm8gc3VycHJpc2VzLCBqdXN0IHRoZSBleHBlY3RlZCBiYXNlbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9tbS9LY29uZmlnPTg3Mz1jb25maWcgSEFSREVOX0JSQU5DSF9ISVNUT1JZXG4tLVxuYXJjaC9hcm0vbW0vS2NvbmZpZy04ODItXG5hcmNoL2FybS9tbS9LY29uZmlnOjg4Mzpjb25maWcgVExTX1JFR19FTVVMXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cdGJvb2xcbi0tXG5uZXQvdGxzL0tjb25maWctNC0jXG5uZXQvdGxzL0tjb25maWc6NTpjb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTYzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBTY29wZSBhbmQgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggVExTLCBhcyBzdXNwZWN0ZWQuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0LiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljcy4gVGhlIG1vZGlmaWNhdGlvbnMgaGl0IGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgYW5kIGBuZXQvdGxzL3Rsc19zdy5jYC4gVGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIHNlZW0gdG8gYmUgYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCwgYW5kIGBfX3Rsc19zd19yZWFkX3NvY2tgLgoKTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIGV4cG9ydGVkIGFzIGludGVuZGVkLiBgc3ZjX3RjcF9yZWN2X2FjdG9yYCBpcyBzdGF0aWMsIGdvb2QuIFNhbWUgZ29lcyBmb3IgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGFuZCBgX190bHNfc3dfcmVhZF9zb2NrYC4gQW5kIHllcywgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWAgaXMgaW4gYG5ldC90bHMvdGxzX3N3LmNgLCBjb25maXJtaW5nIGl0JiMzOTtzIGV4cG9ydGVkLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBhbHNvIGFkZCBgc3ZjX3RjcF9yZWN2ZnJvbWAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLCBzaW5jZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSAqd2h5Ki4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgcmVhZF9zb2NrX3JlY3R5cGVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHByb3RvX29wc2AsIGFsbG93aW5nIHRoZSByZWFkaW5nIG9mIG5vbi1kYXRhIFRMUyByZWNvcmRzIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZSBhbGVydHMgYW5kIGhhbmRzaGFrZSBtZXNzYWdlcy4gVGhlIGltcGxlbWVudGF0aW9uIGlzIGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYF9fdGxzX3N3X3JlYWRfc29ja2AgYW5kIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLiBUaGUgcGF0Y2ggdGhlbiB1c2VzIHRoaXMgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlLCB3aXRoIGZ1bmN0aW9ucyBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGFuZCBgc3ZjX3RjcF9yZWN2ZnJvbWAuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZS4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgZnV6emVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gd2F0Y2ggZm9yIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnZXQgZGljZXkuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgSSYjMzk7dmUgZ290IGBUTFNgIGNvbmZpcm1lZC4gU1VOUlBDIGlzIGFsc28gcHJlc2VudC4gQWgsIHJpZ2h0LCBgU1VOUlBDYCBpcyB0cmlzdGF0ZSwgc2VsZWN0ZWQgYnkgYE5GU19GU2AgYW5kIGBORlNEYC4gRGlyZWN0IGNvbmZpZ3VyYXRpb24gaXNuJiMzOTt0IGF2YWlsYWJsZS4gRW5hYmxpbmcgaXQgaW1wbGljaXRseSByZXF1aXJlcyBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYE5GU0RgIGlzIHRoZSBtb3JlIHJlbGV2YW50IG9uZSBmb3IgbXkgYW5hbHlzaXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBmcy9uZnNkL0tjb25maWdgIHRvIGNvbmZpcm0gYW55IGRlcGVuZGVuY2llcyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIuCgpTbywgdG8gc3VtbWFyaXplIG15IGZvY3VzZWQgc3ltYm9scyBhcmU6Ci0gYHN2Y190Y3BfcmVjdl9hY3RvcmAKLSBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYAotIGBzdmNfdGNwX3JlY3Zmcm9tYAotIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgCi0gYF9fdGxzX3N3X3JlYWRfc29ja2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU0QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9uZnNkL0tjb25maWc6Mjpjb25maWcgTkZTRFxuZnMvbmZzZC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMzktXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy01MC1cbmZzL25mc2QvS2NvbmZpZzo1MTpjb25maWcgTkZTRF9WMl9BQ0xcbmZzL25mc2QvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjIgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy01NC1cbmZzL25mc2QvS2NvbmZpZzo1NTpjb25maWcgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy03Ni1cbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctOTMtXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xuZnMvbmZzZC9LY29uZmlnLTk1LVx0Ym9vbFxuZnMvbmZzZC9LY29uZmlnLTk2LVxuZnMvbmZzZC9LY29uZmlnOjk3OmNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xMDktXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEyMy1cbmZzL25mc2QvS2NvbmZpZzoxMjQ6Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMjUtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTQwLVxuZnMvbmZzZC9LY29uZmlnOjE0MTpjb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xuZnMvbmZzZC9LY29uZmlnLTE0Mi1cdGJvb2wgXCYjMzQ7TkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTUwLVxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTYzLVxuZnMvbmZzZC9LY29uZmlnOjE2NDpjb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXG5mcy9uZnNkL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTc5LVxuZnMvbmZzZC9LY29uZmlnOjE4MDpjb25maWcgTkZTRF9WNF9QT1NJWF9BQ0xTXG5mcy9uZnNkL0tjb25maWctMTgxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IE5GU3Y0IFBPU0lYIGRyYWZ0IEFDTHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNDgKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIEVuaGFuY2VkIFNlY3VyaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgdGhpcyBgcmVhZF9zb2NrX3JlY3R5cGVgIGNhbGxiYWNrIGZvciBub24tZGF0YSBUTFMgcmVjb3JkcywgaXMgcHJvcGVybHkgaW50ZWdyYXRlZCBhbmQgdGVzdGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhZGQgYE5GU0RgIHRvIHRoZSBjb25maWd1cmF0aW9ucywgc2luY2UgdGhhdCYjMzk7cyBhIGtleSBjb21wb25lbnQsIGFuZCB0aGVuIG9mIGNvdXJzZSBJIG5lZWQgYFRMU2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuCgpJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbmV0L3Rscy9LY29uZmlnYCB0byBjb25maXJtIHRoZSBgY29uZmlnIFRMU2AgcHJvbXB0IGlzIHByZXNlbnQuIFllcywgaXQgaXMuIEV4Y2VsbGVudC4gTm93LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlciwgSSBoYXZlIG15IGVuYWJsZW1lbnQgY29uZmlnIGxpc3Qgd2hpY2ggaXM6IGBbJiMzNDtORlNEJiMzNDssICYjMzQ7VExTJiMzNDtdYC4KCkkgYWxzbyBoYXZlIGlkZW50aWZpZWQgdGhlc2UgdmVyeSByZWxldmFudCBzeW1ib2xzIHdoaWNoIEkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbjogYFsmIzM0O3N2Y190Y3BfcmVjdl9hY3RvciYjMzQ7LCAmIzM0O3N2Y190Y3BfcmVjdHlwZV9hY3RvciYjMzQ7LCAmIzM0O3N2Y190Y3BfcmVjdmZyb20mIzM0OywgJiMzNDt0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUmIzM0OywgJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0O11gLiBUaGVzZSBkaXJlY3RseSByZWxhdGUgdG8gdGhlIG5ldyBgcmVhZF9zb2NrX3JlY3R5cGVgIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggYW5kIHRoZSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZS4gVGhlIGByZWFkX3NvY2tfcmVjdHlwZWAgY2FsbGJhY2sgYWxsb3dzIGRpcmVjdCByZWFkaW5nIG9mIG5vbi1kYXRhIFRMUyByZWNvcmRzIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldCBhbmQgdGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zIG9uIGNvcmUgbmV0d29ya2luZyBhbmQgUlBDIGNvZGUuCgpHaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJvdG9fb3BzIGNhbGxiYWNrLCBJIGJlbGlldmUgdGhhdCB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGdvYWwgaGVyZSBpcyB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBpbiB0aGUgVExTIHJlY29yZCBwYXJzaW5nIGFuZCBSUEMgbWVzc2FnZSBhc3NlbWJseSBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHB1cnN1aW5nLgoKSSYjMzk7bSByZWFkeSB0byBjb21taXQgdG8gZnV6emluZyB0aGlzLiBMZXQmIzM5O3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gYW5kIGdldCB0aGUgYmFsbCByb2xsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZTRCYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfdGNwX3JlY3ZfYWN0b3ImIzM0OywKICAgICYjMzQ7c3ZjX3RjcF9yZWN0eXBlX2FjdG9yJiMzNDssCiAgICAmIzM0O3N2Y190Y3BfcmVjdmZyb20mIzM0OywKICAgICYjMzQ7dGxzX3N3X3JlYWRfc29ja19yZWN0eXBlJiMzNDssCiAgICAmIzM0O19fdGxzX3N3X3JlYWRfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHByb3RvX29wcyBjYWxsYmFjayBgcmVhZF9zb2NrX3JlY3R5cGVgIHRvIGFsbG93IHJlYWRpbmcgbm9uLWRhdGEgVExTIHJlY29yZHMgKGxpa2UgYWxlcnRzIGFuZCBoYW5kc2hha2UgbWVzc2FnZXMpIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4gSXQgaW1wbGVtZW50cyB0aGlzIGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCAoYF9fdGxzX3N3X3JlYWRfc29ja2AsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgKSBhbmQgdXNlcyBpdCBpbiB0aGUgU1VOUlBDIHNlcnZlciBUQ1Agc29ja2V0IGNvZGUgKGBzdmNfdGNwX3JlY3ZfYWN0b3JgLCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCwgYHN2Y190Y3BfcmVjdmZyb21gKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgUlBDIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgaW4gdGhlIFRMUyByZWNvcmQgcGFyc2luZyBhbmQgUlBDIG1lc3NhZ2UgYXNzZW1ibHkgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3RjcF9yZWN2X2FjdG9yJiMzNDssCiAgICAmIzM0O3N2Y190Y3BfcmVjdHlwZV9hY3RvciYjMzQ7LAogICAgJiMzNDtzdmNfdGNwX3JlY3Zmcm9tJiMzNDssCiAgICAmIzM0O3Rsc19zd19yZWFkX3NvY2tfcmVjdHlwZSYjMzQ7LAogICAgJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDQ6NTEuNjY4MzY1MjI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxMjcyMDg0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX3RjcF9yZWN2X2FjdG9yXCIsXG4gICAgXCJzdmNfdGNwX3JlY3R5cGVfYWN0b3JcIixcbiAgICBcInN2Y190Y3BfcmVjdmZyb21cIixcbiAgICBcInRsc19zd19yZWFkX3NvY2tfcmVjdHlwZVwiLFxuICAgIFwiX190bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNDo1MS42NjgzNzQ4OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzE5MzE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJjNDRiMDIzOWIzMTdmZjQ4ODE4MWQ3OTI1YzRlY2IwNWFkMTg2YjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMjI6MDQ6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcXG5pbmRleCAyNzcxODhhNDBjNzJlMy4uN2ExOWE3NDNhNjE3NzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmhcXG5AQCAtMTk4LDYgKzE5OCwxMyBAQCBzdHJ1Y3Qgc2tfYnVmZjtcXG4gc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7XFxuIHR5cGVkZWYgaW50ICgqc2tfcmVhZF9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50LCBzaXplX3QpO1xcbisvKiByZWN0eXBlIGNhcnJpZXMgdGhlIHRyYW5zcG9ydCByZWNvcmQgdHlwZSwgZm9yIGV4YW1wbGUgYVxcbisgKiBUTFNfUkVDT1JEX1RZUEVfKiB2YWx1ZS5cXG4rICovXFxuK3R5cGVkZWYgaW50ICgqc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50LCBzaXplX3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1OCByZWN0eXBlKTtcXG4gdHlwZWRlZiBpbnQgKCpza2JfcmVhZF9hY3Rvcl90KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG4gXFxuIFxcbkBAIC0yNjQsNiArMjcxLDI3IEBAIHN0cnVjdCBwcm90b19vcHMge1xcbiBcXHQgKi9cXG4gXFx0aW50XFx0XFx0KCpyZWFkX3NvY2spKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdFxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xcbitcXHQvKlxcbitcXHQgKiByZWFkX3NvY2tfcmVjdHlwZSBzcGxpdHMgZGVsaXZlcnkgYWNyb3NzIHR3byBjYWxsYmFja3M6XFxuK1xcdCAqIHJlY3ZfYWN0b3IgZm9yIGRhdGEgcmVjb3JkcywgcGVyIHRoZSBza19yZWFkX2FjdG9yX3RcXG4rXFx0ICogY29udmVudGlvbiwgYW5kIHJlY3R5cGVfYWN0b3IgZm9yIGFsbCBvdGhlciByZWNvcmRzLFxcbitcXHQgKiB3aXRoIHJlY3R5cGUgaWRlbnRpZnlpbmcgZWFjaC4gQSBOVUxMIHJlY3R5cGVfYWN0b3JcXG4rXFx0ICogbGVhdmVzIG5vbi1kYXRhIHJlY29yZHMgcGVuZGluZy4gcmVjdHlwZV9hY3RvciByZXR1cm5zIDBcXG4rXFx0ICogdG8gY29uc3VtZSBhIHJlY29yZCBvciBuZWdhdGl2ZSB0byBsZWF2ZSBpdCBwZW5kaW5nIGZvclxcbitcXHQgKiByZWRlbGl2ZXJ5IGFuZCBzdG9wIGRlbGl2ZXJ5OyB0aGUgbmVnYXRpdmUgcmV0dXJuIGlzIGFcXG4rXFx0ICogYmFja3ByZXNzdXJlIHNpZ25hbCwgbm90IGEgZmF0YWwgZXJyb3IuIEJvdGggY2FsbGJhY2tzXFxuK1xcdCAqIHJlcG9ydCBlcnJvcnMgYW5kIGVhcmx5IHN0b3AgdGhlIHdheSByZWN2X2FjdG9yIGRvZXM6XFxuK1xcdCAqIGJ5IHNldHRpbmcgZGVzYy1cXHUwMDNlY291bnQgdG8gMCBhbmQgcmVjb3JkaW5nIHRoZSByZWFzb24gaW5cXG4rXFx0ICogZGVzYy1cXHUwMDNlZXJyb3IsIHBlciB0aGUgcmVhZF9kZXNjcmlwdG9yX3QgY29udmVudGlvbiBhbmRcXG4rXFx0ICogaW5kZXBlbmRlbnQgb2YgdGhlIHJldHVybiB2YWx1ZS4gVGhlIHJldHVybiB2YWx1ZSByZXBvcnRzXFxuK1xcdCAqIG9ubHkgZGF0YSBieXRlcyBjb25zdW1lZCBieSByZWN2X2FjdG9yOyB0aGUgY2FsbGVyXFxuK1xcdCAqIGRldGVjdHMgYW4gZXJyb3Igb3IgZWFybHkgc3RvcCB2aWEgZGVzYy1cXHUwMDNlY291bnQgYW5kXFxuK1xcdCAqIGRlc2MtXFx1MDAzZWVycm9yLlxcbitcXHQgKi9cXG4rXFx0aW50XFx0XFx0KCpyZWFkX3NvY2tfcmVjdHlwZSkoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90IHJlY3R5cGVfYWN0b3IpO1xcbiBcXHQvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHJlYWRfc29jaygpLCBpdCByZWFkcyBhbiBlbnRpcmUgc2tiIGF0IGEgdGltZS4gKi9cXG4gXFx0aW50XFx0XFx0KCpyZWFkX3NrYikoc3RydWN0IHNvY2sgKnNrLCBza2JfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xcbiBcXHRpbnRcXHRcXHQoKnNlbmRtc2dfbG9ja2VkKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbmluZGV4IDUwZTVlN2Y1Yjc2MmRlLi45YjllMGRhOWU3M2NkNiAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuQEAgLTgsMTUgKzgsNiBAQFxcbiAgKiBldmVubHkgd2hlbiBzZXJ2aWNpbmcgYSBzaW5nbGUgY2xpZW50LiBNYXkgbmVlZCB0byBtb2RpZnkgdGhlXFxuICAqIHN2Y194cHJ0X2VucXVldWUgcHJvY2VkdXJlLi4uXFxuICAqXFxuLSAqIFRDUCBzdXBwb3J0IGlzIGxhcmdlbHkgdW50ZXN0ZWQgYW5kIG1heSBiZSBhIGxpdHRsZSBzbG93LiBUaGUgcHJvYmxlbVxcbi0gKiBpcyB0aGF0IHdlIGN1cnJlbnRseSBkbyB0d28gc2VwYXJhdGUgcmVjdmZyb20ncywgb25lIGZvciB0aGUgNC1ieXRlXFxuLSAqIHJlY29yZCBsZW5ndGgsIGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgYWN0dWFsIHJlY29yZC4gVGhpcyBjb3VsZCBwb3NzaWJseVxcbi0gKiBiZSBpbXByb3ZlZCBieSBhbHdheXMgcmVhZGluZyBhIG1pbmltdW0gc2l6ZSBvZiBhcm91bmQgMTAwIGJ5dGVzIGFuZFxcbi0gKiB0dWNraW5nIGFueSBzdXBlcmZsdW91cyBieXRlcyBhd2F5IGluIGEgdGVtcG9yYXJ5IHN0b3JlLiBTdGlsbCwgdGhhdFxcbi0gKiBsZWF2ZXMgd3JpdGUgcmVxdWVzdHMgb3V0IGluIHRoZSByYWluLiBBbiBhbHRlcm5hdGl2ZSBtYXkgYmUgdG8gcGVlayBhdFxcbi0gKiB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSwgYW5kIGlmIGl0IG1hdGNoZXMgdGhlIG5leHQgVENQIHNlcXVlbmNlXFxuLSAqIG51bWJlciwgdG8gZXh0cmFjdCB0aGUgcmVjb3JkIG1hcmtlci4gWXVjay5cXG4tICpcXG4gICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggXFx1MDAzY29raXJAbW9uYWQuc3diLmRlXFx1MDAzZVxcbiAgKi9cXG4gXFxuQEAgLTIzOCwxMzggKzIyOSw2IEBAIHN0YXRpYyBpbnQgc3ZjX29uZV9zb2NrX25hbWUoc3RydWN0IHN2Y19zb2NrICpzdnNrLCBjaGFyICpidWYsIGludCByZW1haW5pbmcpXFxuIFxcdHJldHVybiBsZW47XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnRcXG4tc3ZjX3RjcF9zb2NrX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLVxcdFxcdFxcdCAgc3RydWN0IGNtc2doZHIgKmNtc2csIGludCByZXQpXFxuLXtcXG4tXFx0dTggY29udGVudF90eXBlID0gdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLVxcdTAwM2VzaywgY21zZyk7XFxuLVxcdHU4IGxldmVsLCBkZXNjcmlwdGlvbjtcXG4tXFxuLVxcdHN3aXRjaCAoY29udGVudF90eXBlKSB7XFxuLVxcdGNhc2UgMDpcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgVExTX1JFQ09SRF9UWVBFX0RBVEE6XFxuLVxcdFxcdC8qIFRMUyBzZXRzIEVPUiBhdCB0aGUgZW5kIG9mIGVhY2ggYXBwbGljYXRpb24gZGF0YVxcbi1cXHRcXHQgKiByZWNvcmQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIG1vcmUgZnJhbWVzXFxuLVxcdFxcdCAqIHdhaXRpbmcgdG8gYmUgZGVjcnlwdGVkLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNj0gfk1TR19FT1I7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDpcXG4tXFx0XFx0dGxzX2FsZXJ0X3JlY3Yoc29jay1cXHUwMDNlc2ssIG1zZywgXFx1MDAyNmxldmVsLCBcXHUwMDI2ZGVzY3JpcHRpb24pO1xcbi1cXHRcXHRyZXQgPSAobGV2ZWwgPT0gVExTX0FMRVJUX0xFVkVMX0ZBVEFMKSA/XFxuLVxcdFxcdFxcdC1FTk9UQ09OTiA6IC1FQUdBSU47XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBkaXNjYXJkIHRoaXMgcmVjb3JkIHR5cGUgKi9cXG4tXFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXN2Y190Y3Bfc29ja19yZWN2X2Ntc2coc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50ICptc2dfZmxhZ3MpXFxuLXtcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHRzdHJ1Y3QgY21zZ2hkclxcdGNtc2c7XFxuLVxcdFxcdHU4XFx0XFx0YnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHU4KSldO1xcbi1cXHR9IHU7XFxuLVxcdHU4IGFsZXJ0WzJdO1xcbi1cXHRzdHJ1Y3Qga3ZlYyBhbGVydF9rdmVjID0ge1xcbi1cXHRcXHQuaW92X2Jhc2UgPSBhbGVydCxcXG4tXFx0XFx0Lmlvdl9sZW4gPSBzaXplb2YoYWxlcnQpLFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcXG4tXFx0XFx0Lm1zZ19mbGFncyA9ICptc2dfZmxhZ3MsXFxuLVxcdFxcdC5tc2dfY29udHJvbCA9IFxcdTAwMjZ1LFxcbi1cXHRcXHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YodSksXFxuLVxcdH07XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgXFx1MDAyNmFsZXJ0X2t2ZWMsIDEsXFxuLVxcdFxcdCAgICAgIGFsZXJ0X2t2ZWMuaW92X2xlbik7XFxuLVxcdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBcXHUwMDI2bXNnLCBNU0dfRE9OVFdBSVQpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLVxcdTAwM2VzaywgXFx1MDAyNnUuY21zZykgPT0gVExTX1JFQ09SRF9UWVBFX0FMRVJUKSB7XFxuLVxcdFxcdGlvdl9pdGVyX3JldmVydChcXHUwMDI2bXNnLm1zZ19pdGVyLCByZXQpO1xcbi1cXHRcXHRyZXQgPSBzdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZ1LmNtc2csIC1FQUdBSU4pO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4tc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0c3RydWN0IHNvY2tldCAqc29jayA9IHN2c2stXFx1MDAzZXNrX3NvY2s7XFxuLVxcbi1cXHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgbXNnLCBNU0dfRE9OVFdBSVQpO1xcbi1cXHRpZiAobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfQ1RSVU5DKSB7XFxuLVxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjY9IH4oTVNHX0NUUlVOQyB8IE1TR19FT1IpO1xcbi1cXHRcXHRpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU8pXFxuLVxcdFxcdFxcdHJldCA9IHN2Y190Y3Bfc29ja19yZWN2X2Ntc2coc29jaywgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2ZsYWdzKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0jaWYgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFXFxuLXN0YXRpYyB2b2lkIHN2Y19mbHVzaF9idmVjKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHNlZWspXFxuLXtcXG4tXFx0c3RydWN0IGJ2ZWNfaXRlciBiaSA9IHtcXG4tXFx0XFx0LmJpX3NpemVcXHQ9IHNpemUgKyBzZWVrLFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4tXFxuLVxcdGJ2ZWNfaXRlcl9hZHZhbmNlKGJ2ZWMsIFxcdTAwMjZiaSwgc2VlayBcXHUwMDI2IFBBR0VfTUFTSyk7XFxuLVxcdGZvcl9lYWNoX2J2ZWMoYnYsIGJ2ZWMsIGJpLCBiaSlcXG4tXFx0XFx0Zmx1c2hfZGNhY2hlX3BhZ2UoYnYuYnZfcGFnZSk7XFxuLX1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIHN2Y19mbHVzaF9idmVjKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICBzaXplX3Qgc2VlaylcXG4te1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tLypcXG4tICogUmVhZCBmcm9tIEBycXN0cCdzIHRyYW5zcG9ydCBzb2NrZXQuIFRoZSBpbmNvbWluZyBtZXNzYWdlIGZpbGxzIHdob2xlXFxuLSAqIHBhZ2VzIGluIEBycXN0cCdzIHJxX3BhZ2VzIGFycmF5IHVudGlsIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIG1lc3NhZ2VcXG4tICogaGFzIGJlZW4gcmVjZWl2ZWQgaW50byBhIHBhcnRpYWwgcGFnZS5cXG4tICovXFxuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tc2coc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc2l6ZV90IGJ1ZmxlbixcXG4tXFx0XFx0XFx0XFx0c2l6ZV90IHNlZWspXFxuLXtcXG4tXFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHJxc3RwLVxcdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xcbi1cXHRzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyA9IHJxc3RwLVxcdTAwM2VycV9idmVjO1xcbi1cXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgTlVMTCB9O1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tXFx0c3NpemVfdCBsZW47XFxuLVxcdHNpemVfdCB0O1xcbi1cXG4tXFx0Y2xlYXJfYml0KFhQVF9EQVRBLCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpO1xcbi1cXG4tXFx0Zm9yIChpID0gMCwgdCA9IDA7IHQgXFx1MDAzYyBidWZsZW47IGkrKywgdCArPSBQQUdFX1NJWkUpXFxuLVxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWNbaV0sIHJxc3RwLVxcdTAwM2VycV9wYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTtcXG4tXFxuLVxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBidmVjLCBpLCBidWZsZW4pO1xcbi1cXHRpZiAoc2Vlaykge1xcbi1cXHRcXHRpb3ZfaXRlcl9hZHZhbmNlKFxcdTAwMjZtc2cubXNnX2l0ZXIsIHNlZWspO1xcbi1cXHRcXHRidWZsZW4gLT0gc2VlaztcXG4tXFx0fVxcbi1cXHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcXHUwMDI2bXNnKTtcXG4tXFx0aWYgKGxlbiBcXHUwMDNlIDApXFxuLVxcdFxcdHN2Y19mbHVzaF9idmVjKGJ2ZWMsIGxlbiwgc2Vlayk7XFxuLVxcbi1cXHQvKiBJZiB3ZSByZWFkIGEgZnVsbCByZWNvcmQsIHRoZW4gYXNzdW1lIHRoZXJlIG1heSBiZSBtb3JlXFxuLVxcdCAqIGRhdGEgdG8gcmVhZCAoc3RyZWFtIGJhc2VkIHNvY2tldHMgb25seSEpXFxuLVxcdCAqL1xcbi1cXHRpZiAobGVuID09IGJ1ZmxlbilcXG4tXFx0XFx0c2V0X2JpdChYUFRfREFUQSwgXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2ZsYWdzKTtcXG4tXFxuLVxcdHJldHVybiBsZW47XFxuLX1cXG4tXFxuIC8qXFxuICAqIFNldCBzb2NrZXQgc25kIGFuZCByY3YgYnVmZmVyIGxlbmd0aHNcXG4gICovXFxuQEAgLTEwNDgsNTAgKzkwNyw2IEBAIHN0YXRpYyB2b2lkIHN2Y190Y3BfY2xlYXJfcGFnZXMoc3RydWN0IHN2Y19zb2NrICpzdnNrKVxcbiBcXHRzdnNrLVxcdTAwM2Vza19kYXRhbGVuID0gMDtcXG4gfVxcbiBcXG4tLypcXG4tICogUmVjZWl2ZSBmcmFnbWVudCByZWNvcmQgaGVhZGVyIGludG8gc2tfbWFya2VyLlxcbi0gKi9cXG4tc3RhdGljIHNzaXplX3Qgc3ZjX3RjcF9yZWFkX21hcmtlcihzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLXtcXG4tXFx0c3NpemVfdCB3YW50LCBsZW47XFxuLVxcbi1cXHQvKiBJZiB3ZSBoYXZlbid0IGdvdHRlbiB0aGUgcmVjb3JkIGxlbmd0aCB5ZXQsXFxuLVxcdCAqIGdldCB0aGUgbmV4dCBmb3VyIGJ5dGVzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHN2c2stXFx1MDAzZXNrX3RjcGxlbiBcXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpIHtcXG4tXFx0XFx0c3RydWN0IG1zZ2hkclxcdG1zZyA9IHsgTlVMTCB9O1xcbi1cXHRcXHRzdHJ1Y3Qga3ZlY1xcdGlvdjtcXG4tXFxuLVxcdFxcdHdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay1cXHUwMDNlc2tfdGNwbGVuO1xcbi1cXHRcXHRpb3YuaW92X2Jhc2UgPSAoKGNoYXIgKilcXHUwMDI2c3Zzay1cXHUwMDNlc2tfbWFya2VyKSArIHN2c2stXFx1MDAzZXNrX3RjcGxlbjtcXG4tXFx0XFx0aW92Lmlvdl9sZW4gID0gd2FudDtcXG4tXFx0XFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFxcdTAwMjZpb3YsIDEsIHdhbnQpO1xcbi1cXHRcXHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcXHUwMDI2bXNnKTtcXG4tXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBsZW47XFxuLVxcdFxcdHN2c2stXFx1MDAzZXNrX3RjcGxlbiArPSBsZW47XFxuLVxcdFxcdGlmIChsZW4gXFx1MDAzYyB3YW50KSB7XFxuLVxcdFxcdFxcdC8qIGNhbGwgYWdhaW4gdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzICovXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3Nob3J0O1xcbi1cXHRcXHR9XFxuLVxcdFxcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzdnNrLVxcdTAwM2Vza19tYXJrZXIpO1xcbi1cXHRcXHRpZiAoc3ZjX3NvY2tfcmVjbGVuKHN2c2spICsgc3Zzay1cXHUwMDNlc2tfZGF0YWxlbiBcXHUwMDNlXFxuLVxcdFxcdCAgICBzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXFx1MDAzZXN2X21heF9tZXNnKVxcbi1cXHRcXHRcXHRnb3RvIGVycl90b29fbGFyZ2U7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcXG4tXFxuLWVycl90b29fbGFyZ2U6XFxuLVxcdG5ldF9ub3RpY2VfcmF0ZWxpbWl0ZWQoXFxcInN2YzogJXMgb3ZlcnNpemVkIFJQQyBmcmFnbWVudCAoJXUgb2N0ZXRzKSBmcm9tICVwSVNwY1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X3NlcnZlci1cXHUwMDNlc3ZfbmFtZSxcXG4tXFx0XFx0XFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcXG4tXFx0XFx0XFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcXG4tXFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQpO1xcbi1lcnJfc2hvcnQ6XFxuLVxcdHJldHVybiAtRUFHQUlOO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IHJlY2VpdmVfY2JfcmVwbHkoc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbiB7XFxuIFxcdHN0cnVjdCBycGNfeHBydCAqYmNfeHBydCA9IHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2JjX3hwcnQ7XFxuQEAgLTExMzQsMTYgKzk0OSwxNDQgQEAgc3RhdGljIHZvaWQgc3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2spXFxuIFxcdHN2c2stXFx1MDAzZXNrX21hcmtlciA9IHhkcl96ZXJvO1xcbiB9XFxuIFxcbisvKlxcbisgKiByZWFkX3NvY2sgZGF0YSBhY3RvcjogcmVjZWl2ZXMgYXBwbGljYXRpb24gZGF0YSBmcm9tIHRoZVxcbisgKiB0cmFuc3BvcnQgc29ja2V0LCBwYXJzaW5nIHRoZSBSUEMgcmVjb3JkIHN0cmVhbSAoZnJhZ21lbnRcXG4rICogaGVhZGVycyBhbmQgbWVzc2FnZSBib2RpZXMpIGFuZCBhc3NlbWJsaW5nIGNvbXBsZXRlIFJQQ1xcbisgKiBtZXNzYWdlcyBpbnRvIHJxc3RwLVxcdTAwM2VycV9wYWdlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2X2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLVxcdTAwM2VhcmcuZGF0YTtcXG4rXFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHJxc3RwLVxcdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xcbitcXHRzaXplX3QgcmVjbGVuLCByZWNlaXZlZCwgd2FudCwgdGFrZSwgZG9uZSwgbjtcXG4rXFx0c2l6ZV90IGNvbnN1bWVkID0gMDtcXG4rXFxuK1xcdGlmICghZGVzYy1cXHUwMDNlY291bnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHN2c2stXFx1MDAzZXNrX3RjcGxlbiBcXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpIHtcXG4rXFx0XFx0d2FudCA9IHNpemVvZihycGNfZnJhZ2hkcikgLSBzdnNrLVxcdTAwM2Vza190Y3BsZW47XFxuK1xcdFxcdG4gPSBtaW4od2FudCwgbGVuKTtcXG4rXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgIChjaGFyICopXFx1MDAyNnN2c2stXFx1MDAzZXNrX21hcmtlciArXFxuK1xcdFxcdFxcdFxcdFxcdHN2c2stXFx1MDAzZXNrX3RjcGxlbiwgbikpXFxuK1xcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuK1xcdFxcdHN2c2stXFx1MDAzZXNrX3RjcGxlbiArPSBuO1xcbitcXHRcXHRvZmZzZXQgKz0gbjtcXG4rXFx0XFx0bGVuIC09IG47XFxuK1xcdFxcdGNvbnN1bWVkICs9IG47XFxuK1xcbitcXHRcXHRpZiAoc3Zzay1cXHUwMDNlc2tfdGNwbGVuIFxcdTAwM2Mgc2l6ZW9mKHJwY19mcmFnaGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGNvbnN1bWVkO1xcbitcXG4rXFx0XFx0dHJhY2Vfc3Zjc29ja19tYXJrZXIoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHN2c2stXFx1MDAzZXNrX21hcmtlcik7XFxuK1xcdFxcdGlmIChzdmNfc29ja19yZWNsZW4oc3ZzaykgKyBzdnNrLVxcdTAwM2Vza19kYXRhbGVuIFxcdTAwM2VcXG4rXFx0XFx0ICAgIHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X3NlcnZlci1cXHUwMDNlc3ZfbWF4X21lc2cpIHtcXG4rXFx0XFx0XFx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcXFwic3ZjOiAlcyBvdmVyc2l6ZWQgUlBDIGZyYWdtZW50ICgldSBvY3RldHMpIGZyb20gJXBJU3BjXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3Zzay1cXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVxcdTAwM2Vzdl9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3ZjX3NvY2tfcmVjbGVuKHN2c2spLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9yZW1vdGUpO1xcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2VlcnJvciA9IC1FTVNHU0laRTtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHRcXHRyZXR1cm4gY29uc3VtZWQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmVjbGVuID0gc3ZjX3NvY2tfcmVjbGVuKHN2c2spO1xcbitcXHRyZWNlaXZlZCA9IHN2c2stXFx1MDAzZXNrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcik7XFxuK1xcdHdhbnQgPSByZWNsZW4gLSByZWNlaXZlZDtcXG4rXFx0dGFrZSA9IG1pbih3YW50LCBsZW4pO1xcbitcXHRkb25lID0gMDtcXG4rXFxuK1xcdHdoaWxlIChkb25lIFxcdTAwM2MgdGFrZSkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcGcgPSBzdnNrLVxcdTAwM2Vza19kYXRhbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwZ19vZmYgPSBzdnNrLVxcdTAwM2Vza19kYXRhbGVuIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbitcXHRcXHRzaXplX3QgY2h1bmsgPSBtaW4odGFrZSAtIGRvbmUsXFxuK1xcdFxcdFxcdFxcdCAgIFBBR0VfU0laRSAtIChzaXplX3QpcGdfb2ZmKTtcXG4rXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgIHBhZ2VfYWRkcmVzcyhycXN0cC1cXHUwMDNlcnFfcGFnZXNbcGddKSArIHBnX29mZixcXG4rXFx0XFx0XFx0XFx0ICBjaHVuaykpXFxuK1xcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuK1xcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKHJxc3RwLVxcdTAwM2VycV9wYWdlc1twZ10pO1xcbitcXHRcXHRvZmZzZXQgKz0gY2h1bms7XFxuK1xcdFxcdGRvbmUgKz0gY2h1bms7XFxuK1xcdFxcdHN2c2stXFx1MDAzZXNrX2RhdGFsZW4gKz0gY2h1bms7XFxuK1xcdH1cXG4rXFx0c3Zzay1cXHUwMDNlc2tfdGNwbGVuICs9IHRha2U7XFxuK1xcdGNvbnN1bWVkICs9IHRha2U7XFxuK1xcbitcXHRpZiAoc3Zzay1cXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSBcXHUwMDNlPSByZWNsZW4pIHtcXG4rXFx0XFx0aWYgKHN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSlcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3Zzayk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBjb25zdW1lZDtcXG4rXFxuK2ZhdWx0OlxcbitcXHRkZXNjLVxcdTAwM2VlcnJvciA9IC1FRkFVTFQ7XFxuK1xcdGRlc2MtXFx1MDAzZWNvdW50ID0gMDtcXG4rXFx0cmV0dXJuIGNvbnN1bWVkO1xcbit9XFxuK1xcbisvKlxcbisgKiByZWFkX3NvY2tfcmVjdHlwZSBub24tZGF0YSByZWNvcmQgYWN0b3I6IHJlY2VpdmVzIG5vbi1kYXRhIFRMU1xcbisgKiByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSBtZXNzYWdlcykgYW5kIHRyYW5zbGF0ZXMgdGhlbSBpbnRvXFxuKyAqIHRyYW5zcG9ydC1sZXZlbCBhY3Rpb25zLlxcbisgKlxcbisgKiBSZXR1cm5zIDAgdG8gY29uc3VtZSB0aGUgcmVjb3JkIGFuZCBhbGxvdyB0aGUgVExTIGxheWVyIHRvXFxuKyAqIGNvbnRpbnVlIGRlbGl2ZXJpbmcgc3Vic2VxdWVudCByZWNvcmRzLiBBIG5lZ2F0aXZlIHJldHVyblxcbisgKiBjYXVzZXMgdGhlIFRMUyBsYXllciB0byByZXF1ZXVlIHRoZSBza2Igb24gaXRzIHJ4X2xpc3QsXFxuKyAqIGJsb2NraW5nIGFsbCBmdXJ0aGVyIHJlY29yZCBkZWxpdmVyeSBvbiB0aGlzIGNvbm5lY3Rpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHN2Y190Y3BfcmVjdHlwZV9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLFxcbitcXHRcXHRcXHRcXHQgdTggcmVjdHlwZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwID0gZGVzYy1cXHUwMDNlYXJnLmRhdGE7XFxuK1xcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihycXN0cC1cXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcXG4rXFxuK1xcdHN3aXRjaCAocmVjdHlwZSkge1xcbitcXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDoge1xcbitcXHRcXHR1OCBhbGVydFsyXSA9IHt9LCBsZXZlbCwgZGVzY3JpcHRpb247XFxuK1xcdFxcdHN0cnVjdCBrdmVjIGt2ZWMgPSB7XFxuK1xcdFxcdFxcdC5pb3ZfYmFzZSA9IGFsZXJ0LFxcbitcXHRcXHRcXHQuaW92X2xlbiA9IHNpemVvZihhbGVydCksXFxuK1xcdFxcdH07XFxuK1xcdFxcdHN0cnVjdCBtc2doZHIgbXNnID0ge307XFxuK1xcbitcXHRcXHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCwgYWxlcnQsIG1pbihsZW4sIHNpemVvZihhbGVydCkpKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlvdl9pdGVyX2t2ZWMoXFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBcXHUwMDI2a3ZlYywgMSwgc2l6ZW9mKGFsZXJ0KSk7XFxuK1xcdFxcdHRsc19hbGVydF9yZWN2KHN2c2stXFx1MDAzZXNrX3NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZkZXNjcmlwdGlvbik7XFxuK1xcdFxcdGlmIChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpIHtcXG4rXFx0XFx0XFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQpO1xcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2VlcnJvciA9IC1FTk9UQ09OTjtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogc3ZjX3RjcF9yZWN2ZnJvbSAtIFJlY2VpdmUgZGF0YSBmcm9tIGEgVENQIHNvY2tldFxcbiAgKiBAcnFzdHA6IHJlcXVlc3Qgc3RydWN0dXJlIGludG8gd2hpY2ggdG8gcmVjZWl2ZSBhbiBSUEMgQ2FsbFxcbiAgKlxcbiAgKiBDYWxsZWQgaW4gYSBsb29wIHdoZW4gWFBUX0RBVEEgaGFzIGJlZW4gc2V0LlxcbiAgKlxcbi0gKiBSZWFkIHRoZSA0LWJ5dGUgc3RyZWFtIHJlY29yZCBtYXJrZXIsIHRoZW4gdXNlIHRoZSByZWNvcmQgbGVuZ3RoXFxuLSAqIGluIHRoYXQgbWFya2VyIHRvIHNldCB1cCBleGFjdGx5IHRoZSByZXNvdXJjZXMgbmVlZGVkIHRvIHJlY2VpdmVcXG4tICogdGhlIG5leHQgUlBDIG1lc3NhZ2UgaW50byBAcnFzdHAuXFxuLSAqXFxuICAqIFJldHVybnM6XFxuICAqICAgT24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHJlY2VpdmVkIFJQQyBDYWxsLCBvclxcbiAgKiAgICUwIGlmIGEgY29tcGxldGUgUlBDIENhbGwgbWVzc2FnZSB3YXMgbm90IHJlYWR5IHRvIHJldHVyblxcbkBAIC0xMTU3LDI2ICsxMTAwLDQwIEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbiBcXHRzdHJ1Y3Qgc3ZjX3NvY2tcXHQqc3ZzayA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZihycXN0cC1cXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcXG4gXFx0c3RydWN0IHN2Y19zZXJ2XFx0KnNlcnYgPSBzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXI7XFxuLVxcdHNpemVfdCB3YW50LCBiYXNlO1xcbitcXHRzdHJ1Y3Qgc29ja1xcdCpzayA9IHN2c2stXFx1MDAzZXNrX3NrO1xcbitcXHRyZWFkX2Rlc2NyaXB0b3JfdCBkZXNjID0ge1xcbitcXHRcXHQuYXJnLmRhdGEgPSBycXN0cCxcXG4rXFx0fTtcXG4gXFx0c3NpemVfdCBsZW47XFxuIFxcdF9fYmUzMiAqcDtcXG4gXFx0X19iZTMyIGNhbGxkaXI7XFxuIFxcbiBcXHRjbGVhcl9iaXQoWFBUX0RBVEEsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XFxuLVxcdGxlbiA9IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3ZzaywgcnFzdHApO1xcbi1cXHRpZiAobGVuIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuLVxcdGJhc2UgPSBzdmNfdGNwX3Jlc3RvcmVfcGFnZXMoc3ZzaywgcnFzdHApO1xcbi1cXHR3YW50ID0gbGVuIC0gKHN2c2stXFx1MDAzZXNrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcikpO1xcbi1cXHRsZW4gPSBzdmNfdGNwX3JlYWRfbXNnKHJxc3RwLCBiYXNlICsgd2FudCwgYmFzZSk7XFxuLVxcdGlmIChsZW4gXFx1MDAzZT0gMCkge1xcbi1cXHRcXHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2KFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbi1cXHRcXHRzdnNrLVxcdTAwM2Vza190Y3BsZW4gKz0gbGVuO1xcbi1cXHRcXHRzdnNrLVxcdTAwM2Vza19kYXRhbGVuICs9IGxlbjtcXG4rXFx0c3ZjX3RjcF9yZXN0b3JlX3BhZ2VzKHN2c2ssIHJxc3RwKTtcXG4rXFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9iYXNlID0gcGFnZV9hZGRyZXNzKHJxc3RwLVxcdTAwM2VycV9wYWdlc1swXSk7XFxuK1xcbitcXHRkZXNjLmNvdW50ID0gc2Vydi1cXHUwMDNlc3ZfbWF4X21lc2c7XFxuK1xcdGxvY2tfc29jayhzayk7XFxuK1xcdGlmIChzdnNrLVxcdTAwM2Vza19zb2NrLVxcdTAwM2VvcHMtXFx1MDAzZXJlYWRfc29ja19yZWN0eXBlKVxcbitcXHRcXHRsZW4gPSBzdnNrLVxcdTAwM2Vza19zb2NrLVxcdTAwM2VvcHMtXFx1MDAzZXJlYWRfc29ja19yZWN0eXBlKHNrLCBcXHUwMDI2ZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN2Y190Y3BfcmVjdl9hY3RvcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN2Y190Y3BfcmVjdHlwZV9hY3Rvcik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGVuID0gc3Zzay1cXHUwMDNlc2tfc29jay1cXHUwMDNlb3BzLVxcdTAwM2VyZWFkX3NvY2soc2ssIFxcdTAwMjZkZXNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN2Y190Y3BfcmVjdl9hY3Rvcik7XFxuK1xcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcbitcXHRpZiAoZGVzYy5lcnJvciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0bGVuID0gZGVzYy5lcnJvcjtcXG4rXFx0XFx0Z290byBlcnJfZGlzY2FyZDtcXG4gXFx0fVxcbi1cXHRpZiAobGVuICE9IHdhbnQgfHwgIXN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSlcXG4rXFx0aWYgKGRlc2MuY291bnQgIT0gMCkge1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0c2V0X2JpdChYUFRfREFUQSwgXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2ZsYWdzKTtcXG4gXFx0XFx0Z290byBlcnJfaW5jb21wbGV0ZTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHN2c2stXFx1MDAzZXNrX2RhdGFsZW4gXFx1MDAzYyA4KVxcbiBcXHRcXHRnb3RvIGVycl9udXRzO1xcbiBcXG5AQCAtMTE4NSw4ICsxMTQyLDEwIEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbiBcXHRpZiAocnFzdHAtXFx1MDAzZXJxX2FyZy5sZW4gXFx1MDAzYz0gcnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW4pIHtcXG4gXFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW4gPSBycXN0cC1cXHUwMDNlcnFfYXJnLmxlbjtcXG4gXFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5wYWdlX2xlbiA9IDA7XFxuLVxcdH0gZWxzZVxcbi1cXHRcXHRycXN0cC1cXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gcnFzdHAtXFx1MDAzZXJxX2FyZy5sZW4gLSBycXN0cC1cXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5wYWdlX2xlbiA9IHJxc3RwLVxcdTAwM2VycV9hcmcubGVuIC1cXG4rXFx0XFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW47XFxuK1xcdH1cXG4gXFxuIFxcdHJxc3RwLVxcdTAwM2VycV94cHJ0X2N0eHQgICA9IE5VTEw7XFxuIFxcdHJxc3RwLVxcdTAwM2VycV9wcm90XFx0ICAgICAgPSBJUFBST1RPX1RDUDtcXG5AQCAtMTIwNywxMSArMTE2NiwxMyBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbitcXHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2KFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBycXN0cC1cXHUwMDNlcnFfYXJnLmxlbik7XFxuIFxcdHN2Y194cHJ0X2NvcHlfYWRkcnMocnFzdHAsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4gXFx0aWYgKHNlcnYtXFx1MDAzZXN2X3N0YXRzKVxcbiBcXHRcXHRzZXJ2LVxcdTAwM2Vzdl9zdGF0cy1cXHUwMDNlbmV0dGNwY250Kys7XFxuIFxcbiBcXHRzdmNfc29ja19zZWN1cmVfcG9ydChycXN0cCk7XFxuK1xcdHNldF9iaXQoWFBUX0RBVEEsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XFxuIFxcdHN2Y194cHJ0X3JlY2VpdmVkKHJxc3RwLVxcdTAwM2VycV94cHJ0KTtcXG4gXFx0cmV0dXJuIHJxc3RwLVxcdTAwM2VycV9hcmcubGVuO1xcbiBcXG5AQCAtMTIxOSw5ICsxMTgwLDcgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuIFxcdHN2Y190Y3Bfc2F2ZV9wYWdlcyhzdnNrLCBycXN0cCk7XFxuIFxcdGlmIChsZW4gXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGxlbiAhPSAtRUFHQUlOKVxcbiBcXHRcXHRnb3RvIGVycl9kZWxldGU7XFxuLVxcdGlmIChsZW4gPT0gd2FudClcXG4tXFx0XFx0c3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdnNrKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAoc3Zzay1cXHUwMDNlc2tfdGNwbGVuIFxcdTAwM2U9IHNpemVvZihycGNfZnJhZ2hkcikpXFxuIFxcdFxcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3Zfc2hvcnQoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsXFxuIFxcdFxcdFxcdFxcdHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcXG4gXFx0XFx0XFx0XFx0c3Zzay1cXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7XFxuQEAgLTEyMzMsMTIgKzExOTIsMjAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuIFxcdGdvdG8gZXJyX25vY2xvc2U7XFxuIGVycl9udXRzOlxcbiBcXHRzdnNrLVxcdTAwM2Vza19kYXRhbGVuID0gMDtcXG4rXFx0Z290byBlcnJfZGVsZXRlO1xcbitlcnJfZGlzY2FyZDpcXG4rXFx0LypcXG4rXFx0ICogQ2xlYXIgc2tfZGF0YWxlbiBzbyB0aGUgdGVhcmRvd24tdGltZVxcbitcXHQgKiBzdmNfdGNwX2NsZWFyX3BhZ2VzKCkgZG9lcyBub3Qgd2FsayB0aGUgZW1wdGllZFxcbitcXHQgKiBzdnNrLVxcdTAwM2Vza19wYWdlc1tdLlxcbitcXHQgKi9cXG4rXFx0c3Zzay1cXHUwMDNlc2tfZGF0YWxlbiA9IDA7XFxuIGVycl9kZWxldGU6XFxuIFxcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbiBcXHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCk7XFxuIGVycl9ub2Nsb3NlOlxcbiBcXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cXHUwMDNlcnFfeHBydCk7XFxuLVxcdHJldHVybiAwO1xcdC8qIHJlY29yZCBub3QgY29tcGxldGUgKi9cXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzLmggYi9uZXQvdGxzL3Rscy5oXFxuaW5kZXggNjBhMzdiZGFhYTI1MDYuLmMyMWQyYTk4NWUxMzczIDEwMDY0NFxcbi0tLSBhL25ldC90bHMvdGxzLmhcXG4rKysgYi9uZXQvdGxzL3Rscy5oXFxuQEAgLTE2OCw2ICsxNjgsOSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuIFxcdFxcdFxcdCAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpO1xcbitpbnQgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuK1xcdFxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXFxuK1xcdFxcdFxcdCAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7XFxuIFxcbiBpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XFxuIHZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uNDk2M2UwY2FmNmQ1M2EgMTAwNjQ0XFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXFxuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXFxuQEAgLTk0OSwxMiArOTQ5LDE3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddXFxuIFxcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnNwbGljZV9yZWFkXFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XFxuIFxcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnBvbGxcXHRcXHQ9IHRsc19za19wb2xsO1xcbiBcXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxuK1xcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXFx0PSB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGU7XFxuIFxcbiBcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXSA9IG9wc1tUTFNfU1cgIF1bVExTX0JBU0VdO1xcbiBcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFxcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xcbiBcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5wb2xsXFx0XFx0PSB0bHNfc2tfcG9sbDtcXG4gXFx0b3BzW1RMU19TVyAgXVtUTFNfU1cgIF0ucmVhZF9zb2NrXFx0PSB0bHNfc3dfcmVhZF9zb2NrO1xcbitcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZVxcdD0gdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlO1xcbiBcXG4rXFx0LyogVExTX0hXIChkZXZpY2Ugb2ZmbG9hZCkgUlggZW50cmllcyBpbmhlcml0XFxuK1xcdCAqIHJlYWRfc29ja3ssX3JlY3R5cGV9IGZyb20gU1cgdmlhIHRoZSBzdHJ1Y3QgY29waWVzIGJlbG93LlxcbitcXHQgKi9cXG4gI2lmZGVmIENPTkZJR19UTFNfREVWSUNFXFxuIFxcdG9wc1tUTFNfSFcgIF1bVExTX0JBU0VdID0gb3BzW1RMU19CQVNFXVtUTFNfQkFTRV07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdy5jIGIvbmV0L3Rscy90bHNfc3cuY1xcbmluZGV4IGQ0YWZjOTBmZDc5NjZlLi5hZjM0N2I1YjE3ZmE4YyAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19zdy5jXFxuKysrIGIvbmV0L3Rscy90bHNfc3cuY1xcbkBAIC0yMDQ5LDE0ICsyMDQ5LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuIFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbiB9XFxuIFxcbi1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi1cXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxcbisvKiBDb25zZWN1dGl2ZSBlbXB0eSBkYXRhIHJlY29yZHMgZGVsaXZlciBubyBieXRlczsgY2FwIHRoZW0gcGVyXFxuKyAqIGNhbGwgc28gYSBwZWVyIHN0cmVhbWluZyB0aGVtIGNhbm5vdCBob2xkIHRoZSBzb2NrZXQgbG9jayBoZXJlLlxcbisgKi9cXG4rI2RlZmluZSBUTFNfUlhfTk9EQVRBX0xJTUlUIDE2XFxuK1xcbitzdGF0aWMgaW50IF9fdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbitcXHRcXHRcXHQgICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcXG4rXFx0XFx0XFx0ICAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3RvcilcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIFxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4ID0gdGxzX3N3X2N0eF9yeCh0bHNfY3R4KTtcXG4gXFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbiBcXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBpbnQgbm9kYXRhX2NvdW50ID0gMDtcXG4gXFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4gXFx0c2l6ZV90IGZsdXNoZWRfYXQgPSAwO1xcbiBcXHRib29sIHJlbGVhc2VkID0gdHJ1ZTtcXG5AQCAtMjEwOSwxMCArMjExNiwyNyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRcXHRcXHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0LyogcmVhZF9zb2NrIGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBjb250cm9sIG1lc3NhZ2VzICovXFxuK1xcdFxcdC8qIENvbnRyb2wgcmVjb3JkcyAoYWxlcnRzLCBoYW5kc2hha2UpIHJlYWNoIGEgY29uc3VtZXJcXG4rXFx0XFx0ICogb25seSB0aHJvdWdoIHJlY3R5cGVfYWN0b3I7IHdpdGhvdXQgb25lLCByZWFkX3NvY2tcXG4rXFx0XFx0ICogcmVqZWN0cyB0aGVtLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHRsbS1cXHUwMDNlY29udHJvbCAhPSBUTFNfUkVDT1JEX1RZUEVfREFUQSkge1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xcbitcXHRcXHRcXHRpZiAoIXJlY3R5cGVfYWN0b3IpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRlcnIgPSByZWN0eXBlX2FjdG9yKGRlc2MsIHNrYiwgcnhtLVxcdTAwM2VvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCByeG0tXFx1MDAzZWZ1bGxfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgdGxtLVxcdTAwM2Vjb250cm9sKTtcXG4rXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XFxuK1xcdFxcdFxcdGVyciA9IDA7XFxuK1xcdFxcdFxcdC8qIHJlY3R5cGVfYWN0b3IgY29uc3VtZXMgdGhlIHdob2xlIHJlY29yZDsgbm8gcGFydGlhbCBwYXRoICovXFxuK1xcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdFxcdFxcdGlmICgrK25vZGF0YV9jb3VudCBcXHUwMDNlPSBUTFNfUlhfTk9EQVRBX0xJTUlUKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIChsZWdhbCBpbiBUTFMgMS4zKSBnaXZlcyBhIHplcm9cXG5AQCAtMjEyMiw3ICsyMTQ2LDEzIEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdCAqIGhlcmUgaW5zdGVhZC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChyeG0tXFx1MDAzZWZ1bGxfbGVuID09IDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0LyogdGxzX3J4X3JlYWRlcl9yZWxlYXNlKCkgYW5ub3VuY2VzIGFueSBwYXJzZWQgcmVjb3JkXFxuK1xcdFxcdFxcdCAqIG9uIGV4aXQsIHNvIHJldHVybmluZyAwIGhlcmUgY2Fubm90IHN0cmFuZCBpdC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICgrK25vZGF0YV9jb3VudCBcXHUwMDNlPSBUTFNfUlhfTk9EQVRBX0xJTUlUKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIxMzMsNiArMjE2Myw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdFxcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y29waWVkICs9IHVzZWQ7XFxuK1xcdFxcdG5vZGF0YV9jb3VudCA9IDA7XFxuIFxcdFxcdGlmICh1c2VkIFxcdTAwM2MgcnhtLVxcdTAwM2VmdWxsX2xlbikge1xcbiBcXHRcXHRcXHRyeG0tXFx1MDAzZW9mZnNldCArPSB1c2VkO1xcbiBcXHRcXHRcXHRyeG0tXFx1MDAzZWZ1bGxfbGVuIC09IHVzZWQ7XFxuQEAgLTIxNTEsNiArMjE4MiwxOSBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRnb3RvIHJlYWRfc29ja19lbmQ7XFxuIH1cXG4gXFxuK2ludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuK1xcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpXFxuK3tcXG4rXFx0cmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgTlVMTCk7XFxuK31cXG4rXFxuK2ludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4rXFx0XFx0XFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcXG4rXFx0XFx0XFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxcbit7XFxuK1xcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIHJlY3R5cGVfYWN0b3IpO1xcbit9XFxuK1xcbiBib29sIHRsc19zd19zb2NrX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xcbmluZGV4IGNiZGQzZWEyOGI5OThmLi44MTM2MzA2YjVjYWE3NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcXG5AQCAtNDI3LDcgKzQyNyw4IEBAIEZJWFRVUkVfU0VUVVAodGxzKVxcbiBcXG4gRklYVFVSRV9URUFSRE9XTih0bHMpXFxuIHtcXG4tXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbiBcXHRjbG9zZShzZWxmLVxcdTAwM2VjZmQpO1xcbiB9XFxuIFxcbkBAIC04OTcsNiArODk4LDExNCBAQCBURVNUX0YodGxzLCBzcGxpY2VfZGVjX2Ntc2dfdG9fcGlwZSlcXG4gXFx0RVhQRUNUX0VRKG1lbWNtcCh0ZXN0X3N0ciwgYnVmLCBzZW5kX2xlbiksIDApO1xcbiB9XFxuIFxcbisvKiBWZXJpZnkgc3BsaWNlIGhhbmRsZXMgZGF0YS1jb250cm9sLWRhdGE6IHNwbGljZSByZWFkcyB0aGUgZGF0YVxcbisgKiByZWNvcmRzIHN1Y2Nlc3NmdWxseSB3aGlsZSB0aGUgaW50ZXJ2ZW5pbmcgY29udHJvbCByZWNvcmQgbXVzdFxcbisgKiBiZSBkcmFpbmVkIHZpYSByZWN2bXNnIGJlZm9yZSBzcGxpY2UgY2FuIGNvbnRpbnVlLlxcbisgKi9cXG4rVEVTVF9GKHRscywgc3BsaWNlX2RhdGFfY21zZ19kYXRhKVxcbit7XFxuK1xcdGNoYXIgbWVtX3NlbmRbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGludCBzZW5kX2xlbiA9IDQwOTY7XFxuK1xcdGNoYXIgKmN0cmxfc3RyID0gXFxcImNvbnRyb2xcXFwiO1xcbitcXHRpbnQgY3RybF9sZW4gPSBzdHJsZW4oY3RybF9zdHIpICsgMTtcXG4rXFx0Y2hhciBjdHJsX2J1Zls4XTtcXG4rXFx0aW50IHBbMl07XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbm90bHMpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibm8gVExTIHN1cHBvcnRcXFwiKTtcXG4rXFxuK1xcdG1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7XFxuK1xcbitcXHRBU1NFUlRfR0UocGlwZShwKSwgMCk7XFxuK1xcbitcXHQvKiBTZW5kOiBkYXRhLCBjb250cm9sLCBkYXRhICovXFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBtZW1fc2VuZCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXFx1MDAzZWZkLCAxMDAsIGN0cmxfc3RyLCBjdHJsX2xlbiwgMCksXFxuK1xcdFxcdCAgY3RybF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgXFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcbitcXHQvKiBTcGxpY2UgZmlyc3QgZGF0YSByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHNwbGljZShzZWxmLVxcdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAobWVtX3NlbmQsIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xcbitcXG4rXFx0LyogU3BsaWNlIGhpdHMgY29udHJvbCByZWNvcmQsIGZhaWxzICovXFxuK1xcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xcbitcXG4rXFx0LyogRHJhaW4gdGhlIGNvbnRyb2wgcmVjb3JkIHZpYSByZWN2bXNnICovXFxuK1xcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cXHUwMDNlY2ZkLCAxMDAsXFxuK1xcdFxcdFxcdFxcdGN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksXFxuK1xcdFxcdCAgY3RybF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGN0cmxfc3RyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcXG4rXFxuK1xcdC8qIFNwbGljZSBzZWNvbmQgZGF0YSByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHNwbGljZShzZWxmLVxcdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoXFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIFZlcmlmeSB0aGF0IG11bHRpcGxlIGNvbnNlY3V0aXZlIGNvbnRyb2wgcmVjb3JkcyBiZXR3ZWVuIGRhdGFcXG4rICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzXFxuKyAqIGFmdGVyd2FyZC4gIFRoZSB0d28gY29udHJvbCByZWNvcmRzIHVzZSBkaWZmZXJlbnQgY29udGVudCB0eXBlc1xcbisgKiB0byB2ZXJpZnkgdHlwZSBwcmVzZXJ2YXRpb24gYWNyb3NzIHRoZSBzcGxpY2UgYm91bmRhcnkuXFxuKyAqL1xcbitURVNUX0YodGxzLCBzcGxpY2VfbXVsdGlfY21zZ19kYXRhKVxcbit7XFxuK1xcdGNoYXIgbWVtX3NlbmRbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGludCBzZW5kX2xlbiA9IDQwOTY7XFxuK1xcdGNoYXIgKmN0cmwxID0gXFxcImFsZXJ0MVxcXCI7XFxuK1xcdGNoYXIgKmN0cmwyID0gXFxcImFsZXJ0MlxcXCI7XFxuK1xcdGludCBjdHJsX2xlbiA9IHN0cmxlbihjdHJsMSkgKyAxO1xcbitcXHRjaGFyIGN0cmxfYnVmWzddO1xcbitcXHRpbnQgcFsyXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0bWVtcm5kKG1lbV9zZW5kLCBzaXplb2YobWVtX3NlbmQpKTtcXG4rXFxuK1xcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcXG4rXFxuK1xcdC8qIFNlbmQ6IGRhdGEsIGNvbnRyb2woMTAwKSwgY29udHJvbCgyMDApLCBkYXRhICovXFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBtZW1fc2VuZCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXFx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjdHJsX2xlbiwgMCksIGN0cmxfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDIwMCwgY3RybDIsIGN0cmxfbGVuLCAwKSwgY3RybF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgXFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcbitcXHQvKiBTcGxpY2UgZmlyc3QgZGF0YSAqL1xcbitcXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXFx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBTcGxpY2UgZmFpbHMgb24gZmlyc3QgY29udHJvbCByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHNwbGljZShzZWxmLVxcdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XFxuK1xcbitcXHQvKiBEcmFpbiBmaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDEwMCxcXG4rXFx0XFx0XFx0XFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcXG4rXFx0XFx0ICBjdHJsX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoY3RybDEsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xcbitcXG4rXFx0LyogU3BsaWNlIGZhaWxzIG9uIHNlY29uZCBjb250cm9sIHJlY29yZCAqL1xcbitcXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXFx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFxuK1xcdC8qIERyYWluIHNlY29uZCBjb250cm9sICh0eXBlIDIwMCkgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDIwMCxcXG4rXFx0XFx0XFx0XFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcXG4rXFx0XFx0ICBjdHJsX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoY3RybDIsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xcbitcXG4rXFx0LyogU3BsaWNlIHNlY29uZCBkYXRhICovXFxuK1xcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKFxcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xcbit9XFxuK1xcbiBURVNUX0YodGxzLCByZWN2X2FuZF9zcGxpY2UpXFxuIHtcXG4gXFx0aW50IHNlbmRfbGVuID0gVExTX1BBWUxPQURfTUFYX0xFTjtcXG5AQCAtMTY4Miw2ICsxNzkxLDE5MyBAQCBURVNUX0YodGxzLCBkYXRhX2NvbnRyb2xfZGF0YSlcXG4gXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTtcXG4gfVxcbiBcXG4rLyogRnVsbHkgY29uc3VtZSBhIGRhdGEtY29udHJvbC1kYXRhIHNlcXVlbmNlLiAgVGhlIGV4aXN0aW5nXFxuKyAqIGRhdGFfY29udHJvbF9kYXRhIHRlc3Qgb25seSBwZWVrczsgdGhpcyBleGVyY2lzZXMgY29tcGxldGVcXG4rICogcmVjb3JkIGRlbGl2ZXJ5IHRocm91Z2ggcmVjdiBhbmQgcmVjdm1zZy5cXG4rICovXFxuK1RFU1RfRih0bHMsIHJlY3ZfZGF0YV9jbXNnX2RhdGEpXFxuK3tcXG4rXFx0Y2hhciAqZGF0YTEgPSBcXFwiZmlyc3RfZGF0YVxcXCI7XFxuK1xcdGNoYXIgKmN0cmwgPSBcXFwiY3RybF9tc2dcXFwiO1xcbitcXHRjaGFyICpkYXRhMiA9IFxcXCJzZWNvbmRfZGF0YVxcXCI7XFxuK1xcdGludCBkMV9sZW4gPSBzdHJsZW4oZGF0YTEpICsgMTtcXG4rXFx0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcXG4rXFx0aW50IGQyX2xlbiA9IHN0cmxlbihkYXRhMikgKyAxO1xcbitcXHRjaGFyIGJ1ZlsyMF07XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbm90bHMpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibm8gVExTIHN1cHBvcnRcXFwiKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhMSwgZDFfbGVuLCAwKSwgZDFfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7XFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTtcXG4rXFxuK1xcdC8qIEZpcnN0IGRhdGEgcmVjb3JkICovXFxuK1xcdEVYUEVDVF9FUShyZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTEsIGQxX2xlbiksIDApO1xcbitcXG4rXFx0LyogcmVjdiB3aXRob3V0IGNtc2cgYnVmZmVyIGZhaWxzIG9uIGNvbnRyb2wgcmVjb3JkICovXFxuK1xcdEVYUEVDVF9FUShyZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSU8pO1xcbitcXG4rXFx0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBTZWNvbmQgZGF0YSByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTIsIGQyX2xlbiksIDApO1xcbit9XFxuK1xcbisvKiBQZWVrIGF0IGFuIGludGVybGVhdmVkIGNvbnRyb2wgcmVjb3JkIGFmdGVyIHRoZSBwcmVjZWRpbmcgZGF0YVxcbisgKiByZWNvcmQgaGFzIGJlZW4gY29uc3VtZWQsIHRoZW4gY29uc3VtZSBpdC4gIE1TR19QRUVLIGV4cG9zZXMgdGhlXFxuKyAqIGNvbnRyb2wgcmVjb3JkJ3MgdHlwZSB3aXRob3V0IGNvbnN1bWluZyBpdC5cXG4rICovXFxuK1RFU1RfRih0bHMsIHBlZWtfY21zZ19hZnRlcl9kYXRhKVxcbit7XFxuK1xcdGNoYXIgKmRhdGEgPSBcXFwibGVhZGluZ1xcXCI7XFxuK1xcdGNoYXIgKmN0cmwgPSBcXFwibWlkZGxlXFxcIjtcXG4rXFx0Y2hhciAqdGFpbCA9IFxcXCJ0cmFpbGluZ1xcXCI7XFxuK1xcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XFxuK1xcdGludCBjX2xlbiA9IHN0cmxlbihjdHJsKSArIDE7XFxuK1xcdGludCB0X2xlbiA9IHN0cmxlbih0YWlsKSArIDE7XFxuK1xcdGNoYXIgYnVmWzIwXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVxcdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQsIHRhaWwsIHRfbGVuLCAwKSwgdF9sZW4pO1xcbitcXG4rXFx0LyogQ29uc3VtZSBsZWFkaW5nIGRhdGEgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBQZWVrIGF0IHRoZSBjb250cm9sIHJlY29yZCAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBDb25zdW1lIHRoZSBjb250cm9sIHJlY29yZCAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybCwgY19sZW4pLCAwKTtcXG4rXFxuK1xcdC8qIFRyYWlsaW5nIGRhdGEgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHRfbGVuLCBNU0dfV0FJVEFMTCksIHRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIHRhaWwsIHRfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIENvbnRyb2wgcmVjb3JkIGFzIHRoZSBmaXJzdCByZWNvcmQgaW4gdGhlIHN0cmVhbSwgZm9sbG93ZWQgYnlcXG4rICogZGF0YS4gIFRoZSBjb250cm9sIHJlY29yZCBtdXN0IGJlIGRyYWluZWQgYmVmb3JlIHRoZSBkYXRhIHJlY29yZFxcbisgKiBiZWNvbWVzIGF2YWlsYWJsZS5cXG4rICovXFxuK1RFU1RfRih0bHMsIGNtc2dfYmVmb3JlX2RhdGEpXFxuK3tcXG4rXFx0Y2hhciAqY3RybCA9IFxcXCJhbGVydFxcXCI7XFxuK1xcdGNoYXIgKmRhdGEgPSBcXFwicGF5bG9hZFxcXCI7XFxuK1xcdGludCBjX2xlbiA9IHN0cmxlbihjdHJsKSArIDE7XFxuK1xcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XFxuK1xcdGNoYXIgYnVmWzIwXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7XFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhLCBkX2xlbiwgMCksIGRfbGVuKTtcXG4rXFxuK1xcdC8qIHJlY3Ygd2l0aG91dCBjbXNnIGZhaWxzICovXFxuK1xcdEVYUEVDVF9FUShyZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSU8pO1xcbitcXG4rXFx0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBEYXRhIGZvbGxvd3MgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIGRfbGVuLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIFR3byBkaWZmZXJlbnQgY29udHJvbCByZWNvcmQgdHlwZXMgaW50ZXJsZWF2ZWQgd2l0aCBkYXRhLlxcbisgKiBFYWNoIGNvbnRyb2wgcmVjb3JkIGlzIGRlbGl2ZXJlZCB3aXRoIGl0cyBvd24gdHlwZSBwcmVzZXJ2ZWQ7XFxuKyAqIHZlcmlmeSBib3RoIHR5cGVzIGFycml2ZSBpbnRhY3QuXFxuKyAqL1xcbitURVNUX0YodGxzLCBtaXhlZF9jb250cm9sX3R5cGVzKVxcbit7XFxuK1xcdGNoYXIgKmRhdGExID0gXFxcImRhdGExXFxcIjtcXG4rXFx0Y2hhciAqY3RybDEgPSBcXFwiaGFuZHNoYWtlXFxcIjtcXG4rXFx0Y2hhciAqY3RybDIgPSBcXFwiYWxlcnRfbXNnXFxcIjtcXG4rXFx0Y2hhciAqZGF0YTIgPSBcXFwiZGF0YTJcXFwiO1xcbitcXHRpbnQgZDFfbGVuID0gc3RybGVuKGRhdGExKSArIDE7XFxuK1xcdGludCBjMV9sZW4gPSBzdHJsZW4oY3RybDEpICsgMTtcXG4rXFx0aW50IGMyX2xlbiA9IHN0cmxlbihjdHJsMikgKyAxO1xcbitcXHRpbnQgZDJfbGVuID0gc3RybGVuKGRhdGEyKSArIDE7XFxuK1xcdGNoYXIgYnVmWzIwXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQsIGRhdGExLCBkMV9sZW4sIDApLCBkMV9sZW4pO1xcbitcXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVxcdTAwM2VmZCwgMTAwLCBjdHJsMSwgYzFfbGVuLCAwKSwgYzFfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDIwMCwgY3RybDIsIGMyX2xlbiwgMCksIGMyX2xlbik7XFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTtcXG4rXFxuK1xcdC8qIEZpcnN0IGRhdGEgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGQxX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBGaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDEwMCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBjMV9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybDEsIGMxX2xlbiksIDApO1xcbitcXG4rXFx0LyogU2Vjb25kIGNvbnRyb2wgKHR5cGUgMjAwKSAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMjAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMyX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsMiwgYzJfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBTZWNvbmQgZGF0YSAqL1xcbitcXHRFWFBFQ1RfRVEocmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1ZiwgZDJfbGVuLCBNU0dfV0FJVEFMTCksIGQyX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMiwgZDJfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIFRyYWlsaW5nIGNvbnRyb2wgcmVjb3JkIHdpdGggbm8gZGF0YSBmb2xsb3dpbmcgaXQuICBUaGUgc2VuZGVyXFxuKyAqIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBhZnRlciB0aGUgY29udHJvbCByZWNvcmQ7IHRoZSByZWNlaXZlclxcbisgKiBkcmFpbnMgdGhlIGNvbnRyb2wgYW5kIHRoZW4gb2JzZXJ2ZXMgRU9GLlxcbisgKi9cXG4rVEVTVF9GKHRscywgZGF0YV9jbXNnX2VvZilcXG4re1xcbitcXHRjaGFyICpkYXRhID0gXFxcInBheWxvYWRcXFwiO1xcbitcXHRjaGFyICpjdHJsID0gXFxcImZpbmFsXFxcIjtcXG4rXFx0aW50IGRfbGVuID0gc3RybGVuKGRhdGEpICsgMTtcXG4rXFx0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcXG4rXFx0Y2hhciBidWZbMjBdO1xcbitcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XFxuK1xcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXFx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xcbitcXHRFWFBFQ1RfRVEoY2xvc2Uoc2VsZi1cXHUwMDNlZmQpLCAwKTtcXG4rXFx0c2VsZi1cXHUwMDNlZmQgPSAtMTtcXG4rXFxuK1xcdC8qIENvbnN1bWUgZGF0YSAqL1xcbitcXHRFWFBFQ1RfRVEocmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YSwgZF9sZW4pLCAwKTtcXG4rXFxuK1xcdC8qIERyYWluIHRyYWlsaW5nIGNvbnRyb2wgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDEwMCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBzaXplb2YoYnVmKSwgMCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgMCk7XFxuK31cXG4rXFxuIFRFU1RfRih0bHMsIHNodXRkb3duKVxcbiB7XFxuIFxcdGNoYXIgY29uc3QgKnRlc3Rfc3RyID0gXFxcInRlc3RfcmVhZFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA0OjUyLjI1NjM3MDM0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxNTM5MTg4NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GU0RcIixcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y190Y3BfcmVjdl9hY3RvclwiLFxuICAgIFwic3ZjX3RjcF9yZWN0eXBlX2FjdG9yXCIsXG4gICAgXCJzdmNfdGNwX3JlY3Zmcm9tXCIsXG4gICAgXCJ0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVcIixcbiAgICBcIl9fdGxzX3N3X3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcHJvdG9fb3BzIGNhbGxiYWNrIGByZWFkX3NvY2tfcmVjdHlwZWAgdG8gYWxsb3cgcmVhZGluZyBub24tZGF0YSBUTFMgcmVjb3JkcyAobGlrZSBhbGVydHMgYW5kIGhhbmRzaGFrZSBtZXNzYWdlcykgZGlyZWN0bHkgZnJvbSB0aGUgc29ja2V0LiBJdCBpbXBsZW1lbnRzIHRoaXMgaW4gdGhlIFRMUyBzb2Z0d2FyZSBwYXRoIChgX190bHNfc3dfcmVhZF9zb2NrYCwgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWApIGFuZCB1c2VzIGl0IGluIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZSAoYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgc3ZjX3RjcF9yZWN2ZnJvbWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBpbiB0aGUgVExTIHJlY29yZCBwYXJzaW5nIGFuZCBSUEMgbWVzc2FnZSBhc3NlbWJseSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYzQ0YjAyMzliMzE3ZmY0ODgxODFkNzkyNWM0ZWNiMDVhZDE4NmIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMjI6MDQ6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaFxuaW5kZXggMjc3MTg4YTQwYzcyZTMuLjdhMTlhNzQzYTYxNzc2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaFxuQEAgLTE5OCw2ICsxOTgsMTMgQEAgc3RydWN0IHNrX2J1ZmY7XG4gc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7XG4gdHlwZWRlZiBpbnQgKCpza19yZWFkX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosIHN0cnVjdCBza19idWZmICosXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCwgc2l6ZV90KTtcbisvKiByZWN0eXBlIGNhcnJpZXMgdGhlIHRyYW5zcG9ydCByZWNvcmQgdHlwZSwgZm9yIGV4YW1wbGUgYVxuKyAqIFRMU19SRUNPUkRfVFlQRV8qIHZhbHVlLlxuKyAqL1xuK3R5cGVkZWYgaW50ICgqc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKixcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQsIHNpemVfdCxcbitcdFx0XHRcdCAgICAgICB1OCByZWN0eXBlKTtcbiB0eXBlZGVmIGludCAoKnNrYl9yZWFkX2FjdG9yX3QpKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopO1xuIFxuIFxuQEAgLTI2NCw2ICsyNzEsMjcgQEAgc3RydWN0IHByb3RvX29wcyB7XG4gXHQgKi9cbiBcdGludFx0XHQoKnJlYWRfc29jaykoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xuK1x0LypcbitcdCAqIHJlYWRfc29ja19yZWN0eXBlIHNwbGl0cyBkZWxpdmVyeSBhY3Jvc3MgdHdvIGNhbGxiYWNrczpcbitcdCAqIHJlY3ZfYWN0b3IgZm9yIGRhdGEgcmVjb3JkcywgcGVyIHRoZSBza19yZWFkX2FjdG9yX3RcbitcdCAqIGNvbnZlbnRpb24sIGFuZCByZWN0eXBlX2FjdG9yIGZvciBhbGwgb3RoZXIgcmVjb3JkcyxcbitcdCAqIHdpdGggcmVjdHlwZSBpZGVudGlmeWluZyBlYWNoLiBBIE5VTEwgcmVjdHlwZV9hY3RvclxuK1x0ICogbGVhdmVzIG5vbi1kYXRhIHJlY29yZHMgcGVuZGluZy4gcmVjdHlwZV9hY3RvciByZXR1cm5zIDBcbitcdCAqIHRvIGNvbnN1bWUgYSByZWNvcmQgb3IgbmVnYXRpdmUgdG8gbGVhdmUgaXQgcGVuZGluZyBmb3JcbitcdCAqIHJlZGVsaXZlcnkgYW5kIHN0b3AgZGVsaXZlcnk7IHRoZSBuZWdhdGl2ZSByZXR1cm4gaXMgYVxuK1x0ICogYmFja3ByZXNzdXJlIHNpZ25hbCwgbm90IGEgZmF0YWwgZXJyb3IuIEJvdGggY2FsbGJhY2tzXG4rXHQgKiByZXBvcnQgZXJyb3JzIGFuZCBlYXJseSBzdG9wIHRoZSB3YXkgcmVjdl9hY3RvciBkb2VzOlxuK1x0ICogYnkgc2V0dGluZyBkZXNjLVx1MDAzZWNvdW50IHRvIDAgYW5kIHJlY29yZGluZyB0aGUgcmVhc29uIGluXG4rXHQgKiBkZXNjLVx1MDAzZWVycm9yLCBwZXIgdGhlIHJlYWRfZGVzY3JpcHRvcl90IGNvbnZlbnRpb24gYW5kXG4rXHQgKiBpbmRlcGVuZGVudCBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIHJlcG9ydHNcbitcdCAqIG9ubHkgZGF0YSBieXRlcyBjb25zdW1lZCBieSByZWN2X2FjdG9yOyB0aGUgY2FsbGVyXG4rXHQgKiBkZXRlY3RzIGFuIGVycm9yIG9yIGVhcmx5IHN0b3AgdmlhIGRlc2MtXHUwMDNlY291bnQgYW5kXG4rXHQgKiBkZXNjLVx1MDAzZWVycm9yLlxuK1x0ICovXG4rXHRpbnRcdFx0KCpyZWFkX3NvY2tfcmVjdHlwZSkoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuK1x0XHRcdFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yLFxuK1x0XHRcdFx0XHQgICAgIHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90IHJlY3R5cGVfYWN0b3IpO1xuIFx0LyogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSByZWFkX3NvY2soKSwgaXQgcmVhZHMgYW4gZW50aXJlIHNrYiBhdCBhIHRpbWUuICovXG4gXHRpbnRcdFx0KCpyZWFkX3NrYikoc3RydWN0IHNvY2sgKnNrLCBza2JfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xuIFx0aW50XHRcdCgqc2VuZG1zZ19sb2NrZWQpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmRlLi45YjllMGRhOWU3M2NkNiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTgsMTUgKzgsNiBAQFxuICAqIGV2ZW5seSB3aGVuIHNlcnZpY2luZyBhIHNpbmdsZSBjbGllbnQuIE1heSBuZWVkIHRvIG1vZGlmeSB0aGVcbiAgKiBzdmNfeHBydF9lbnF1ZXVlIHByb2NlZHVyZS4uLlxuICAqXG4tICogVENQIHN1cHBvcnQgaXMgbGFyZ2VseSB1bnRlc3RlZCBhbmQgbWF5IGJlIGEgbGl0dGxlIHNsb3cuIFRoZSBwcm9ibGVtXG4tICogaXMgdGhhdCB3ZSBjdXJyZW50bHkgZG8gdHdvIHNlcGFyYXRlIHJlY3Zmcm9tJ3MsIG9uZSBmb3IgdGhlIDQtYnl0ZVxuLSAqIHJlY29yZCBsZW5ndGgsIGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgYWN0dWFsIHJlY29yZC4gVGhpcyBjb3VsZCBwb3NzaWJseVxuLSAqIGJlIGltcHJvdmVkIGJ5IGFsd2F5cyByZWFkaW5nIGEgbWluaW11bSBzaXplIG9mIGFyb3VuZCAxMDAgYnl0ZXMgYW5kXG4tICogdHVja2luZyBhbnkgc3VwZXJmbHVvdXMgYnl0ZXMgYXdheSBpbiBhIHRlbXBvcmFyeSBzdG9yZS4gU3RpbGwsIHRoYXRcbi0gKiBsZWF2ZXMgd3JpdGUgcmVxdWVzdHMgb3V0IGluIHRoZSByYWluLiBBbiBhbHRlcm5hdGl2ZSBtYXkgYmUgdG8gcGVlayBhdFxuLSAqIHRoZSBmaXJzdCBza2IgaW4gdGhlIHF1ZXVlLCBhbmQgaWYgaXQgbWF0Y2hlcyB0aGUgbmV4dCBUQ1Agc2VxdWVuY2Vcbi0gKiBudW1iZXIsIHRvIGV4dHJhY3QgdGhlIHJlY29yZCBtYXJrZXIuIFl1Y2suXG4tICpcbiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCBcdTAwM2Nva2lyQG1vbmFkLnN3Yi5kZVx1MDAzZVxuICAqL1xuIFxuQEAgLTIzOCwxMzggKzIyOSw2IEBAIHN0YXRpYyBpbnQgc3ZjX29uZV9zb2NrX25hbWUoc3RydWN0IHN2Y19zb2NrICpzdnNrLCBjaGFyICpidWYsIGludCByZW1haW5pbmcpXG4gXHRyZXR1cm4gbGVuO1xuIH1cbiBcbi1zdGF0aWMgaW50XG4tc3ZjX3RjcF9zb2NrX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZywgaW50IHJldClcbi17XG4tXHR1OCBjb250ZW50X3R5cGUgPSB0bHNfZ2V0X3JlY29yZF90eXBlKHNvY2stXHUwMDNlc2ssIGNtc2cpO1xuLVx0dTggbGV2ZWwsIGRlc2NyaXB0aW9uO1xuLVxuLVx0c3dpdGNoIChjb250ZW50X3R5cGUpIHtcbi1cdGNhc2UgMDpcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9EQVRBOlxuLVx0XHQvKiBUTFMgc2V0cyBFT1IgYXQgdGhlIGVuZCBvZiBlYWNoIGFwcGxpY2F0aW9uIGRhdGFcbi1cdFx0ICogcmVjb3JkLCBldmVuIHRob3VnaCB0aGVyZSBtaWdodCBiZSBtb3JlIGZyYW1lc1xuLVx0XHQgKiB3YWl0aW5nIHRvIGJlIGRlY3J5cHRlZC5cbi1cdFx0ICovXG4tXHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX0VPUjtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDpcbi1cdFx0dGxzX2FsZXJ0X3JlY3Yoc29jay1cdTAwM2VzaywgbXNnLCBcdTAwMjZsZXZlbCwgXHUwMDI2ZGVzY3JpcHRpb24pO1xuLVx0XHRyZXQgPSAobGV2ZWwgPT0gVExTX0FMRVJUX0xFVkVMX0ZBVEFMKSA/XG4tXHRcdFx0LUVOT1RDT05OIDogLUVBR0FJTjtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBkaXNjYXJkIHRoaXMgcmVjb3JkIHR5cGUgKi9cbi1cdFx0cmV0ID0gLUVBR0FJTjtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi1zdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCAqbXNnX2ZsYWdzKVxuLXtcbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IGNtc2doZHJcdGNtc2c7XG4tXHRcdHU4XHRcdGJ1ZltDTVNHX1NQQUNFKHNpemVvZih1OCkpXTtcbi1cdH0gdTtcbi1cdHU4IGFsZXJ0WzJdO1xuLVx0c3RydWN0IGt2ZWMgYWxlcnRfa3ZlYyA9IHtcbi1cdFx0Lmlvdl9iYXNlID0gYWxlcnQsXG4tXHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSxcbi1cdH07XG4tXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbi1cdFx0Lm1zZ19mbGFncyA9ICptc2dfZmxhZ3MsXG4tXHRcdC5tc2dfY29udHJvbCA9IFx1MDAyNnUsXG4tXHRcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZih1KSxcbi1cdH07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgXHUwMDI2YWxlcnRfa3ZlYywgMSxcbi1cdFx0ICAgICAgYWxlcnRfa3ZlYy5pb3ZfbGVuKTtcbi1cdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBcdTAwMjZtc2csIE1TR19ET05UV0FJVCk7XG4tXHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHRsc19nZXRfcmVjb3JkX3R5cGUoc29jay1cdTAwM2VzaywgXHUwMDI2dS5jbXNnKSA9PSBUTFNfUkVDT1JEX1RZUEVfQUxFUlQpIHtcbi1cdFx0aW92X2l0ZXJfcmV2ZXJ0KFx1MDAyNm1zZy5tc2dfaXRlciwgcmV0KTtcbi1cdFx0cmV0ID0gc3ZjX3RjcF9zb2NrX3Byb2Nlc3NfY21zZyhzb2NrLCBcdTAwMjZtc2csIFx1MDAyNnUuY21zZywgLUVBR0FJTik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW50XG4tc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0aW50IHJldDtcbi1cdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBzdnNrLVx1MDAzZXNrX3NvY2s7XG4tXG4tXHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgbXNnLCBNU0dfRE9OVFdBSVQpO1xuLVx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19DVFJVTkMpIHtcbi1cdFx0bXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjY9IH4oTVNHX0NUUlVOQyB8IE1TR19FT1IpO1xuLVx0XHRpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU8pXG4tXHRcdFx0cmV0ID0gc3ZjX3RjcF9zb2NrX3JlY3ZfY21zZyhzb2NrLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2ZsYWdzKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLSNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0Vcbi1zdGF0aWMgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsIHNpemVfdCBzZWVrKVxuLXtcbi1cdHN0cnVjdCBidmVjX2l0ZXIgYmkgPSB7XG4tXHRcdC5iaV9zaXplXHQ9IHNpemUgKyBzZWVrLFxuLVx0fTtcbi1cdHN0cnVjdCBiaW9fdmVjIGJ2O1xuLVxuLVx0YnZlY19pdGVyX2FkdmFuY2UoYnZlYywgXHUwMDI2YmksIHNlZWsgXHUwMDI2IFBBR0VfTUFTSyk7XG4tXHRmb3JfZWFjaF9idmVjKGJ2LCBidmVjLCBiaSwgYmkpXG4tXHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJ2LmJ2X3BhZ2UpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsXG4tXHRcdFx0XHQgIHNpemVfdCBzZWVrKVxuLXtcbi19XG4tI2VuZGlmXG4tXG4tLypcbi0gKiBSZWFkIGZyb20gQHJxc3RwJ3MgdHJhbnNwb3J0IHNvY2tldC4gVGhlIGluY29taW5nIG1lc3NhZ2UgZmlsbHMgd2hvbGVcbi0gKiBwYWdlcyBpbiBAcnFzdHAncyBycV9wYWdlcyBhcnJheSB1bnRpbCB0aGUgbGFzdCBwYWdlIG9mIHRoZSBtZXNzYWdlXG4tICogaGFzIGJlZW4gcmVjZWl2ZWQgaW50byBhIHBhcnRpYWwgcGFnZS5cbi0gKi9cbi1zdGF0aWMgc3NpemVfdCBzdmNfdGNwX3JlYWRfbXNnKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHNpemVfdCBidWZsZW4sXG4tXHRcdFx0XHRzaXplX3Qgc2Vlaylcbi17XG4tXHRzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPVxuLVx0XHRjb250YWluZXJfb2YocnFzdHAtXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcbi1cdHN0cnVjdCBiaW9fdmVjICpidmVjID0gcnFzdHAtXHUwMDNlcnFfYnZlYztcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0geyBOVUxMIH07XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHNzaXplX3QgbGVuO1xuLVx0c2l6ZV90IHQ7XG4tXG4tXHRjbGVhcl9iaXQoWFBUX0RBVEEsIFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpO1xuLVxuLVx0Zm9yIChpID0gMCwgdCA9IDA7IHQgXHUwMDNjIGJ1ZmxlbjsgaSsrLCB0ICs9IFBBR0VfU0laRSlcbi1cdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjW2ldLCBycXN0cC1cdTAwM2VycV9wYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTtcbi1cbi1cdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIGJ2ZWMsIGksIGJ1Zmxlbik7XG4tXHRpZiAoc2Vlaykge1xuLVx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNm1zZy5tc2dfaXRlciwgc2Vlayk7XG4tXHRcdGJ1ZmxlbiAtPSBzZWVrO1xuLVx0fVxuLVx0bGVuID0gc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3ZzaywgXHUwMDI2bXNnKTtcbi1cdGlmIChsZW4gXHUwMDNlIDApXG4tXHRcdHN2Y19mbHVzaF9idmVjKGJ2ZWMsIGxlbiwgc2Vlayk7XG4tXG4tXHQvKiBJZiB3ZSByZWFkIGEgZnVsbCByZWNvcmQsIHRoZW4gYXNzdW1lIHRoZXJlIG1heSBiZSBtb3JlXG4tXHQgKiBkYXRhIHRvIHJlYWQgKHN0cmVhbSBiYXNlZCBzb2NrZXRzIG9ubHkhKVxuLVx0ICovXG4tXHRpZiAobGVuID09IGJ1Zmxlbilcbi1cdFx0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4tXG4tXHRyZXR1cm4gbGVuO1xuLX1cbi1cbiAvKlxuICAqIFNldCBzb2NrZXQgc25kIGFuZCByY3YgYnVmZmVyIGxlbmd0aHNcbiAgKi9cbkBAIC0xMDQ4LDUwICs5MDcsNiBAQCBzdGF0aWMgdm9pZCBzdmNfdGNwX2NsZWFyX3BhZ2VzKHN0cnVjdCBzdmNfc29jayAqc3ZzaylcbiBcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiA9IDA7XG4gfVxuIFxuLS8qXG4tICogUmVjZWl2ZSBmcmFnbWVudCByZWNvcmQgaGVhZGVyIGludG8gc2tfbWFya2VyLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3RydWN0IHN2Y19zb2NrICpzdnNrLFxuLVx0XHRcdFx0ICAgc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi17XG4tXHRzc2l6ZV90IHdhbnQsIGxlbjtcbi1cbi1cdC8qIElmIHdlIGhhdmVuJ3QgZ290dGVuIHRoZSByZWNvcmQgbGVuZ3RoIHlldCxcbi1cdCAqIGdldCB0aGUgbmV4dCBmb3VyIGJ5dGVzLlxuLVx0ICovXG4tXHRpZiAoc3Zzay1cdTAwM2Vza190Y3BsZW4gXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpIHtcbi1cdFx0c3RydWN0IG1zZ2hkclx0bXNnID0geyBOVUxMIH07XG4tXHRcdHN0cnVjdCBrdmVjXHRpb3Y7XG4tXG4tXHRcdHdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay1cdTAwM2Vza190Y3BsZW47XG4tXHRcdGlvdi5pb3ZfYmFzZSA9ICgoY2hhciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfbWFya2VyKSArIHN2c2stXHUwMDNlc2tfdGNwbGVuO1xuLVx0XHRpb3YuaW92X2xlbiAgPSB3YW50O1xuLVx0XHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBcdTAwMjZpb3YsIDEsIHdhbnQpO1xuLVx0XHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcdTAwMjZtc2cpO1xuLVx0XHRpZiAobGVuIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBsZW47XG4tXHRcdHN2c2stXHUwMDNlc2tfdGNwbGVuICs9IGxlbjtcbi1cdFx0aWYgKGxlbiBcdTAwM2Mgd2FudCkge1xuLVx0XHRcdC8qIGNhbGwgYWdhaW4gdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzICovXG4tXHRcdFx0Z290byBlcnJfc2hvcnQ7XG4tXHRcdH1cbi1cdFx0dHJhY2Vfc3Zjc29ja19tYXJrZXIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzdnNrLVx1MDAzZXNrX21hcmtlcik7XG4tXHRcdGlmIChzdmNfc29ja19yZWNsZW4oc3ZzaykgKyBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXG4tXHRcdCAgICBzdnNrLVx1MDAzZXNrX3hwcnQueHB0X3NlcnZlci1cdTAwM2Vzdl9tYXhfbWVzZylcbi1cdFx0XHRnb3RvIGVycl90b29fbGFyZ2U7XG4tXHR9XG4tXHRyZXR1cm4gc3ZjX3NvY2tfcmVjbGVuKHN2c2spO1xuLVxuLWVycl90b29fbGFyZ2U6XG4tXHRuZXRfbm90aWNlX3JhdGVsaW1pdGVkKFwic3ZjOiAlcyBvdmVyc2l6ZWQgUlBDIGZyYWdtZW50ICgldSBvY3RldHMpIGZyb20gJXBJU3BjXFxuXCIsXG4tXHRcdFx0ICAgICAgIHN2c2stXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVx1MDAzZXN2X25hbWUsXG4tXHRcdFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbi1cdFx0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcbi1cdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4tZXJyX3Nob3J0OlxuLVx0cmV0dXJuIC1FQUdBSU47XG4tfVxuLVxuIHN0YXRpYyBpbnQgcmVjZWl2ZV9jYl9yZXBseShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4ge1xuIFx0c3RydWN0IHJwY194cHJ0ICpiY194cHJ0ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9iY194cHJ0O1xuQEAgLTExMzQsMTYgKzk0OSwxNDQgQEAgc3RhdGljIHZvaWQgc3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2spXG4gXHRzdnNrLVx1MDAzZXNrX21hcmtlciA9IHhkcl96ZXJvO1xuIH1cbiBcbisvKlxuKyAqIHJlYWRfc29jayBkYXRhIGFjdG9yOiByZWNlaXZlcyBhcHBsaWNhdGlvbiBkYXRhIGZyb20gdGhlXG4rICogdHJhbnNwb3J0IHNvY2tldCwgcGFyc2luZyB0aGUgUlBDIHJlY29yZCBzdHJlYW0gKGZyYWdtZW50XG4rICogaGVhZGVycyBhbmQgbWVzc2FnZSBib2RpZXMpIGFuZCBhc3NlbWJsaW5nIGNvbXBsZXRlIFJQQ1xuKyAqIG1lc3NhZ2VzIGludG8gcnFzdHAtXHUwMDNlcnFfcGFnZXMuXG4rICovXG4rc3RhdGljIGludCBzdmNfdGNwX3JlY3ZfYWN0b3IocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4rXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLVx1MDAzZWFyZy5kYXRhO1xuK1x0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cbitcdFx0Y29udGFpbmVyX29mKHJxc3RwLVx1MDAzZXJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7XG4rXHRzaXplX3QgcmVjbGVuLCByZWNlaXZlZCwgd2FudCwgdGFrZSwgZG9uZSwgbjtcbitcdHNpemVfdCBjb25zdW1lZCA9IDA7XG4rXG4rXHRpZiAoIWRlc2MtXHUwMDNlY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIFx1MDAzYyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7XG4rXHRcdHdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay1cdTAwM2Vza190Y3BsZW47XG4rXHRcdG4gPSBtaW4od2FudCwgbGVuKTtcbitcbitcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsXG4rXHRcdFx0XHQgIChjaGFyICopXHUwMDI2c3Zzay1cdTAwM2Vza19tYXJrZXIgK1xuK1x0XHRcdFx0XHRzdnNrLVx1MDAzZXNrX3RjcGxlbiwgbikpXG4rXHRcdFx0Z290byBmYXVsdDtcbitcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gKz0gbjtcbitcdFx0b2Zmc2V0ICs9IG47XG4rXHRcdGxlbiAtPSBuO1xuK1x0XHRjb25zdW1lZCArPSBuO1xuK1xuK1x0XHRpZiAoc3Zzay1cdTAwM2Vza190Y3BsZW4gXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpXG4rXHRcdFx0cmV0dXJuIGNvbnN1bWVkO1xuK1xuK1x0XHR0cmFjZV9zdmNzb2NrX21hcmtlcihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHN2c2stXHUwMDNlc2tfbWFya2VyKTtcbitcdFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSArIHN2c2stXHUwMDNlc2tfZGF0YWxlbiBcdTAwM2VcbitcdFx0ICAgIHN2c2stXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVx1MDAzZXN2X21heF9tZXNnKSB7XG4rXHRcdFx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcInN2YzogJXMgb3ZlcnNpemVkIFJQQyBmcmFnbWVudCAoJXUgb2N0ZXRzKSBmcm9tICVwSVNwY1xcblwiLFxuK1x0XHRcdFx0XHQgICAgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbmFtZSxcbitcdFx0XHRcdFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbitcdFx0XHRcdFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQueHB0X3JlbW90ZSk7XG4rXHRcdFx0ZGVzYy1cdTAwM2VlcnJvciA9IC1FTVNHU0laRTtcbitcdFx0XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbitcdFx0XHRyZXR1cm4gY29uc3VtZWQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJlY2xlbiA9IHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcbitcdHJlY2VpdmVkID0gc3Zzay1cdTAwM2Vza190Y3BsZW4gLSBzaXplb2YocnBjX2ZyYWdoZHIpO1xuK1x0d2FudCA9IHJlY2xlbiAtIHJlY2VpdmVkO1xuK1x0dGFrZSA9IG1pbih3YW50LCBsZW4pO1xuK1x0ZG9uZSA9IDA7XG4rXG4rXHR3aGlsZSAoZG9uZSBcdTAwM2MgdGFrZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGcgPSBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdHVuc2lnbmVkIGludCBwZ19vZmYgPSBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDI2IChQQUdFX1NJWkUgLSAxKTtcbitcdFx0c2l6ZV90IGNodW5rID0gbWluKHRha2UgLSBkb25lLFxuK1x0XHRcdFx0ICAgUEFHRV9TSVpFIC0gKHNpemVfdClwZ19vZmYpO1xuK1xuK1x0XHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCxcbitcdFx0XHRcdCAgcGFnZV9hZGRyZXNzKHJxc3RwLVx1MDAzZXJxX3BhZ2VzW3BnXSkgKyBwZ19vZmYsXG4rXHRcdFx0XHQgIGNodW5rKSlcbitcdFx0XHRnb3RvIGZhdWx0O1xuK1x0XHRmbHVzaF9kY2FjaGVfcGFnZShycXN0cC1cdTAwM2VycV9wYWdlc1twZ10pO1xuK1x0XHRvZmZzZXQgKz0gY2h1bms7XG4rXHRcdGRvbmUgKz0gY2h1bms7XG4rXHRcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiArPSBjaHVuaztcbitcdH1cbitcdHN2c2stXHUwMDNlc2tfdGNwbGVuICs9IHRha2U7XG4rXHRjb25zdW1lZCArPSB0YWtlO1xuK1xuK1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSBcdTAwM2U9IHJlY2xlbikge1xuK1x0XHRpZiAoc3ZjX3NvY2tfZmluYWxfcmVjKHN2c2spKVxuK1x0XHRcdGRlc2MtXHUwMDNlY291bnQgPSAwO1xuK1x0XHRlbHNlXG4rXHRcdFx0c3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdnNrKTtcbitcdH1cbitcbitcdHJldHVybiBjb25zdW1lZDtcbitcbitmYXVsdDpcbitcdGRlc2MtXHUwMDNlZXJyb3IgPSAtRUZBVUxUO1xuK1x0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4rXHRyZXR1cm4gY29uc3VtZWQ7XG4rfVxuK1xuKy8qXG4rICogcmVhZF9zb2NrX3JlY3R5cGUgbm9uLWRhdGEgcmVjb3JkIGFjdG9yOiByZWNlaXZlcyBub24tZGF0YSBUTFNcbisgKiByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSBtZXNzYWdlcykgYW5kIHRyYW5zbGF0ZXMgdGhlbSBpbnRvXG4rICogdHJhbnNwb3J0LWxldmVsIGFjdGlvbnMuXG4rICpcbisgKiBSZXR1cm5zIDAgdG8gY29uc3VtZSB0aGUgcmVjb3JkIGFuZCBhbGxvdyB0aGUgVExTIGxheWVyIHRvXG4rICogY29udGludWUgZGVsaXZlcmluZyBzdWJzZXF1ZW50IHJlY29yZHMuIEEgbmVnYXRpdmUgcmV0dXJuXG4rICogY2F1c2VzIHRoZSBUTFMgbGF5ZXIgdG8gcmVxdWV1ZSB0aGUgc2tiIG9uIGl0cyByeF9saXN0LFxuKyAqIGJsb2NraW5nIGFsbCBmdXJ0aGVyIHJlY29yZCBkZWxpdmVyeSBvbiB0aGlzIGNvbm5lY3Rpb24uXG4rICovXG4rc3RhdGljIGludCBzdmNfdGNwX3JlY3R5cGVfYWN0b3IocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0IHU4IHJlY3R5cGUpXG4re1xuK1x0c3RydWN0IHN2Y19ycXN0ICpycXN0cCA9IGRlc2MtXHUwMDNlYXJnLmRhdGE7XG4rXHRzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPVxuK1x0XHRjb250YWluZXJfb2YocnFzdHAtXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcbitcbitcdHN3aXRjaCAocmVjdHlwZSkge1xuK1x0Y2FzZSBUTFNfUkVDT1JEX1RZUEVfQUxFUlQ6IHtcbitcdFx0dTggYWxlcnRbMl0gPSB7fSwgbGV2ZWwsIGRlc2NyaXB0aW9uO1xuK1x0XHRzdHJ1Y3Qga3ZlYyBrdmVjID0ge1xuK1x0XHRcdC5pb3ZfYmFzZSA9IGFsZXJ0LFxuK1x0XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSxcbitcdFx0fTtcbitcdFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7fTtcbitcbitcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsIGFsZXJ0LCBtaW4obGVuLCBzaXplb2YoYWxlcnQpKSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmt2ZWMsIDEsIHNpemVvZihhbGVydCkpO1xuK1x0XHR0bHNfYWxlcnRfcmVjdihzdnNrLVx1MDAzZXNrX3NrLCBcdTAwMjZtc2csIFx1MDAyNmxldmVsLCBcdTAwMjZkZXNjcmlwdGlvbik7XG4rXHRcdGlmIChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpIHtcbitcdFx0XHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuK1x0XHRcdGRlc2MtXHUwMDNlZXJyb3IgPSAtRU5PVENPTk47XG4rXHRcdFx0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBzdmNfdGNwX3JlY3Zmcm9tIC0gUmVjZWl2ZSBkYXRhIGZyb20gYSBUQ1Agc29ja2V0XG4gICogQHJxc3RwOiByZXF1ZXN0IHN0cnVjdHVyZSBpbnRvIHdoaWNoIHRvIHJlY2VpdmUgYW4gUlBDIENhbGxcbiAgKlxuICAqIENhbGxlZCBpbiBhIGxvb3Agd2hlbiBYUFRfREFUQSBoYXMgYmVlbiBzZXQuXG4gICpcbi0gKiBSZWFkIHRoZSA0LWJ5dGUgc3RyZWFtIHJlY29yZCBtYXJrZXIsIHRoZW4gdXNlIHRoZSByZWNvcmQgbGVuZ3RoXG4tICogaW4gdGhhdCBtYXJrZXIgdG8gc2V0IHVwIGV4YWN0bHkgdGhlIHJlc291cmNlcyBuZWVkZWQgdG8gcmVjZWl2ZVxuLSAqIHRoZSBuZXh0IFJQQyBtZXNzYWdlIGludG8gQHJxc3RwLlxuLSAqXG4gICogUmV0dXJuczpcbiAgKiAgIE9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSByZWNlaXZlZCBSUEMgQ2FsbCwgb3JcbiAgKiAgICUwIGlmIGEgY29tcGxldGUgUlBDIENhbGwgbWVzc2FnZSB3YXMgbm90IHJlYWR5IHRvIHJldHVyblxuQEAgLTExNTcsMjYgKzExMDAsNDAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4gXHRzdHJ1Y3Qgc3ZjX3NvY2tcdCpzdnNrID1cbiBcdFx0Y29udGFpbmVyX29mKHJxc3RwLVx1MDAzZXJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7XG4gXHRzdHJ1Y3Qgc3ZjX3NlcnZcdCpzZXJ2ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXI7XG4tXHRzaXplX3Qgd2FudCwgYmFzZTtcbitcdHN0cnVjdCBzb2NrXHQqc2sgPSBzdnNrLVx1MDAzZXNrX3NrO1xuK1x0cmVhZF9kZXNjcmlwdG9yX3QgZGVzYyA9IHtcbitcdFx0LmFyZy5kYXRhID0gcnFzdHAsXG4rXHR9O1xuIFx0c3NpemVfdCBsZW47XG4gXHRfX2JlMzIgKnA7XG4gXHRfX2JlMzIgY2FsbGRpcjtcbiBcbiBcdGNsZWFyX2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4tXHRsZW4gPSBzdmNfdGNwX3JlYWRfbWFya2VyKHN2c2ssIHJxc3RwKTtcbi1cdGlmIChsZW4gXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3I7XG4gXG4tXHRiYXNlID0gc3ZjX3RjcF9yZXN0b3JlX3BhZ2VzKHN2c2ssIHJxc3RwKTtcbi1cdHdhbnQgPSBsZW4gLSAoc3Zzay1cdTAwM2Vza190Y3BsZW4gLSBzaXplb2YocnBjX2ZyYWdoZHIpKTtcbi1cdGxlbiA9IHN2Y190Y3BfcmVhZF9tc2cocnFzdHAsIGJhc2UgKyB3YW50LCBiYXNlKTtcbi1cdGlmIChsZW4gXHUwMDNlPSAwKSB7XG4tXHRcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBsZW4pO1xuLVx0XHRzdnNrLVx1MDAzZXNrX3RjcGxlbiArPSBsZW47XG4tXHRcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiArPSBsZW47XG4rXHRzdmNfdGNwX3Jlc3RvcmVfcGFnZXMoc3ZzaywgcnFzdHApO1xuK1x0cnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAtXHUwMDNlcnFfcGFnZXNbMF0pO1xuK1xuK1x0ZGVzYy5jb3VudCA9IHNlcnYtXHUwMDNlc3ZfbWF4X21lc2c7XG4rXHRsb2NrX3NvY2soc2spO1xuK1x0aWYgKHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrX3JlY3R5cGUpXG4rXHRcdGxlbiA9IHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrX3JlY3R5cGUoc2ssIFx1MDAyNmRlc2MsXG4rXHRcdFx0XHRcdFx0XHQgICAgc3ZjX3RjcF9yZWN2X2FjdG9yLFxuK1x0XHRcdFx0XHRcdFx0ICAgIHN2Y190Y3BfcmVjdHlwZV9hY3Rvcik7XG4rXHRlbHNlXG4rXHRcdGxlbiA9IHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrKHNrLCBcdTAwMjZkZXNjLFxuK1x0XHRcdFx0XHRcdCAgICAgc3ZjX3RjcF9yZWN2X2FjdG9yKTtcbitcdHJlbGVhc2Vfc29jayhzayk7XG4rXG4rXHRpZiAoZGVzYy5lcnJvciBcdTAwM2MgMCkge1xuK1x0XHRsZW4gPSBkZXNjLmVycm9yO1xuK1x0XHRnb3RvIGVycl9kaXNjYXJkO1xuIFx0fVxuLVx0aWYgKGxlbiAhPSB3YW50IHx8ICFzdmNfc29ja19maW5hbF9yZWMoc3ZzaykpXG4rXHRpZiAoZGVzYy5jb3VudCAhPSAwKSB7XG4rXHRcdGlmIChsZW4gXHUwMDNlIDApXG4rXHRcdFx0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRcdGdvdG8gZXJyX2luY29tcGxldGU7XG4rXHR9XG4rXG4gXHRpZiAoc3Zzay1cdTAwM2Vza19kYXRhbGVuIFx1MDAzYyA4KVxuIFx0XHRnb3RvIGVycl9udXRzO1xuIFxuQEAgLTExODUsOCArMTE0MiwxMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGlmIChycXN0cC1cdTAwM2VycV9hcmcubGVuIFx1MDAzYz0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbikge1xuIFx0XHRycXN0cC1cdTAwM2VycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gcnFzdHAtXHUwMDNlcnFfYXJnLmxlbjtcbiBcdFx0cnFzdHAtXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gMDtcbi1cdH0gZWxzZVxuLVx0XHRycXN0cC1cdTAwM2VycV9hcmcucGFnZV9sZW4gPSBycXN0cC1cdTAwM2VycV9hcmcubGVuIC0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbjtcbitcdH0gZWxzZSB7XG4rXHRcdHJxc3RwLVx1MDAzZXJxX2FyZy5wYWdlX2xlbiA9IHJxc3RwLVx1MDAzZXJxX2FyZy5sZW4gLVxuK1x0XHRcdHJxc3RwLVx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW47XG4rXHR9XG4gXG4gXHRycXN0cC1cdTAwM2VycV94cHJ0X2N0eHQgICA9IE5VTEw7XG4gXHRycXN0cC1cdTAwM2VycV9wcm90XHQgICAgICA9IElQUFJPVE9fVENQO1xuQEAgLTEyMDcsMTEgKzExNjYsMTMgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4gXHRpZiAobGVuIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm9yO1xuIFxuK1x0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHJxc3RwLVx1MDAzZXJxX2FyZy5sZW4pO1xuIFx0c3ZjX3hwcnRfY29weV9hZGRycyhycXN0cCwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbiBcdGlmIChzZXJ2LVx1MDAzZXN2X3N0YXRzKVxuIFx0XHRzZXJ2LVx1MDAzZXN2X3N0YXRzLVx1MDAzZW5ldHRjcGNudCsrO1xuIFxuIFx0c3ZjX3NvY2tfc2VjdXJlX3BvcnQocnFzdHApO1xuK1x0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cdTAwM2VycV94cHJ0KTtcbiBcdHJldHVybiBycXN0cC1cdTAwM2VycV9hcmcubGVuO1xuIFxuQEAgLTEyMTksOSArMTE4MCw3IEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuIFx0c3ZjX3RjcF9zYXZlX3BhZ2VzKHN2c2ssIHJxc3RwKTtcbiBcdGlmIChsZW4gXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGxlbiAhPSAtRUFHQUlOKVxuIFx0XHRnb3RvIGVycl9kZWxldGU7XG4tXHRpZiAobGVuID09IHdhbnQpXG4tXHRcdHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3Zzayk7XG4tXHRlbHNlXG4rXHRpZiAoc3Zzay1cdTAwM2Vza190Y3BsZW4gXHUwMDNlPSBzaXplb2YocnBjX2ZyYWdoZHIpKVxuIFx0XHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2X3Nob3J0KFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCxcbiBcdFx0XHRcdHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbiBcdFx0XHRcdHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7XG5AQCAtMTIzMywxMiArMTE5MiwyMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGdvdG8gZXJyX25vY2xvc2U7XG4gZXJyX251dHM6XG4gXHRzdnNrLVx1MDAzZXNrX2RhdGFsZW4gPSAwO1xuK1x0Z290byBlcnJfZGVsZXRlO1xuK2Vycl9kaXNjYXJkOlxuK1x0LypcbitcdCAqIENsZWFyIHNrX2RhdGFsZW4gc28gdGhlIHRlYXJkb3duLXRpbWVcbitcdCAqIHN2Y190Y3BfY2xlYXJfcGFnZXMoKSBkb2VzIG5vdCB3YWxrIHRoZSBlbXB0aWVkXG4rXHQgKiBzdnNrLVx1MDAzZXNrX3BhZ2VzW10uXG4rXHQgKi9cbitcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiA9IDA7XG4gZXJyX2RlbGV0ZTpcbiBcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgbGVuKTtcbiBcdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4gZXJyX25vY2xvc2U6XG4gXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cdTAwM2VycV94cHJ0KTtcbi1cdHJldHVybiAwO1x0LyogcmVjb3JkIG5vdCBjb21wbGV0ZSAqL1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHMuaCBiL25ldC90bHMvdGxzLmhcbmluZGV4IDYwYTM3YmRhYWEyNTA2Li5jMjFkMmE5ODVlMTM3MyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzLmhcbisrKyBiL25ldC90bHMvdGxzLmhcbkBAIC0xNjgsNiArMTY4LDkgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxuIFx0XHRcdCAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XG4raW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuK1x0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4rXHRcdFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKTtcbiBcbiBpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uNDk2M2UwY2FmNmQ1M2EgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbisrKyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTk0OSwxMiArOTQ5LDE3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddXG4gXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XG4gXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG4gXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbitcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbiBcbiBcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbitcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbiBcbitcdC8qIFRMU19IVyAoZGV2aWNlIG9mZmxvYWQpIFJYIGVudHJpZXMgaW5oZXJpdFxuK1x0ICogcmVhZF9zb2NreyxfcmVjdHlwZX0gZnJvbSBTVyB2aWEgdGhlIHN0cnVjdCBjb3BpZXMgYmVsb3cuXG4rXHQgKi9cbiAjaWZkZWYgQ09ORklHX1RMU19ERVZJQ0VcbiBcdG9wc1tUTFNfSFcgIF1bVExTX0JBU0VdID0gb3BzW1RMU19CQVNFXVtUTFNfQkFTRV07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfc3cuYyBiL25ldC90bHMvdGxzX3N3LmNcbmluZGV4IGQ0YWZjOTBmZDc5NjZlLi5hZjM0N2I1YjE3ZmE4YyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX3N3LmNcbisrKyBiL25ldC90bHMvdGxzX3N3LmNcbkBAIC0yMDQ5LDE0ICsyMDQ5LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXG4gXHRnb3RvIHNwbGljZV9yZWFkX2VuZDtcbiB9XG4gXG4taW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcilcbisvKiBDb25zZWN1dGl2ZSBlbXB0eSBkYXRhIHJlY29yZHMgZGVsaXZlciBubyBieXRlczsgY2FwIHRoZW0gcGVyXG4rICogY2FsbCBzbyBhIHBlZXIgc3RyZWFtaW5nIHRoZW0gY2Fubm90IGhvbGQgdGhlIHNvY2tldCBsb2NrIGhlcmUuXG4rICovXG4rI2RlZmluZSBUTFNfUlhfTk9EQVRBX0xJTUlUIDE2XG4rXG4rc3RhdGljIGludCBfX3Rsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbitcdFx0XHQgICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcbitcdFx0XHQgICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4ID0gdGxzX3N3X2N0eF9yeCh0bHNfY3R4KTtcbiBcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4gXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdHVuc2lnbmVkIGludCBub2RhdGFfY291bnQgPSAwO1xuIFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbiBcdHNpemVfdCBmbHVzaGVkX2F0ID0gMDtcbiBcdGJvb2wgcmVsZWFzZWQgPSB0cnVlO1xuQEAgLTIxMDksMTAgKzIxMTYsMjcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcbiBcdFx0fVxuIFxuLVx0XHQvKiByZWFkX3NvY2sgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGNvbnRyb2wgbWVzc2FnZXMgKi9cbitcdFx0LyogQ29udHJvbCByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSkgcmVhY2ggYSBjb25zdW1lclxuK1x0XHQgKiBvbmx5IHRocm91Z2ggcmVjdHlwZV9hY3Rvcjsgd2l0aG91dCBvbmUsIHJlYWRfc29ja1xuK1x0XHQgKiByZWplY3RzIHRoZW0uXG4rXHRcdCAqL1xuIFx0XHRpZiAodGxtLVx1MDAzZWNvbnRyb2wgIT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpIHtcbi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4rXHRcdFx0aWYgKCFyZWN0eXBlX2FjdG9yKSB7XG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcbitcdFx0XHR9XG4rXHRcdFx0ZXJyID0gcmVjdHlwZV9hY3RvcihkZXNjLCBza2IsIHJ4bS1cdTAwM2VvZmZzZXQsXG4rXHRcdFx0XHRcdCByeG0tXHUwMDNlZnVsbF9sZW4sXG4rXHRcdFx0XHRcdCB0bG0tXHUwMDNlY29udHJvbCk7XG4rXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4rXHRcdFx0ZXJyID0gMDtcbitcdFx0XHQvKiByZWN0eXBlX2FjdG9yIGNvbnN1bWVzIHRoZSB3aG9sZSByZWNvcmQ7IG5vIHBhcnRpYWwgcGF0aCAqL1xuK1x0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdFx0c2tiID0gTlVMTDtcbitcdFx0XHRpZiAoKytub2RhdGFfY291bnQgXHUwMDNlPSBUTFNfUlhfTk9EQVRBX0xJTUlUKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVyb1xuQEAgLTIxMjIsNyArMjE0NiwxMyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHQgKiBoZXJlIGluc3RlYWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAocnhtLVx1MDAzZWZ1bGxfbGVuID09IDApIHtcbitcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdFx0LyogdGxzX3J4X3JlYWRlcl9yZWxlYXNlKCkgYW5ub3VuY2VzIGFueSBwYXJzZWQgcmVjb3JkXG4rXHRcdFx0ICogb24gZXhpdCwgc28gcmV0dXJuaW5nIDAgaGVyZSBjYW5ub3Qgc3RyYW5kIGl0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICgrK25vZGF0YV9jb3VudCBcdTAwM2U9IFRMU19SWF9OT0RBVEFfTElNSVQpXG4rXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTIxMzMsNiArMjE2Myw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcbiBcdFx0fVxuIFx0XHRjb3BpZWQgKz0gdXNlZDtcbitcdFx0bm9kYXRhX2NvdW50ID0gMDtcbiBcdFx0aWYgKHVzZWQgXHUwMDNjIHJ4bS1cdTAwM2VmdWxsX2xlbikge1xuIFx0XHRcdHJ4bS1cdTAwM2VvZmZzZXQgKz0gdXNlZDtcbiBcdFx0XHRyeG0tXHUwMDNlZnVsbF9sZW4gLT0gdXNlZDtcbkBAIC0yMTUxLDYgKzIxODIsMTkgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdGdvdG8gcmVhZF9zb2NrX2VuZDtcbiB9XG4gXG4raW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbitcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcilcbit7XG4rXHRyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCBOVUxMKTtcbit9XG4rXG4raW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuK1x0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4rXHRcdFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxuK3tcbitcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIHJlY3R5cGVfYWN0b3IpO1xuK31cbitcbiBib29sIHRsc19zd19zb2NrX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG5pbmRleCBjYmRkM2VhMjhiOTk4Zi4uODEzNjMwNmI1Y2FhNzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuQEAgLTQyNyw3ICs0MjcsOCBAQCBGSVhUVVJFX1NFVFVQKHRscylcbiBcbiBGSVhUVVJFX1RFQVJET1dOKHRscylcbiB7XG4tXHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4gXHRjbG9zZShzZWxmLVx1MDAzZWNmZCk7XG4gfVxuIFxuQEAgLTg5Nyw2ICs4OTgsMTE0IEBAIFRFU1RfRih0bHMsIHNwbGljZV9kZWNfY21zZ190b19waXBlKVxuIFx0RVhQRUNUX0VRKG1lbWNtcCh0ZXN0X3N0ciwgYnVmLCBzZW5kX2xlbiksIDApO1xuIH1cbiBcbisvKiBWZXJpZnkgc3BsaWNlIGhhbmRsZXMgZGF0YS1jb250cm9sLWRhdGE6IHNwbGljZSByZWFkcyB0aGUgZGF0YVxuKyAqIHJlY29yZHMgc3VjY2Vzc2Z1bGx5IHdoaWxlIHRoZSBpbnRlcnZlbmluZyBjb250cm9sIHJlY29yZCBtdXN0XG4rICogYmUgZHJhaW5lZCB2aWEgcmVjdm1zZyBiZWZvcmUgc3BsaWNlIGNhbiBjb250aW51ZS5cbisgKi9cbitURVNUX0YodGxzLCBzcGxpY2VfZGF0YV9jbXNnX2RhdGEpXG4re1xuK1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbitcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XG4rXHRpbnQgc2VuZF9sZW4gPSA0MDk2O1xuK1x0Y2hhciAqY3RybF9zdHIgPSBcImNvbnRyb2xcIjtcbitcdGludCBjdHJsX2xlbiA9IHN0cmxlbihjdHJsX3N0cikgKyAxO1xuK1x0Y2hhciBjdHJsX2J1Zls4XTtcbitcdGludCBwWzJdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0bWVtcm5kKG1lbV9zZW5kLCBzaXplb2YobWVtX3NlbmQpKTtcbitcbitcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbitcbitcdC8qIFNlbmQ6IGRhdGEsIGNvbnRyb2wsIGRhdGEgKi9cbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDEwMCwgY3RybF9zdHIsIGN0cmxfbGVuLCAwKSxcbitcdFx0ICBjdHJsX2xlbik7XG4rXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1xuK1x0LyogU3BsaWNlIGZpcnN0IGRhdGEgcmVjb3JkICovXG4rXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAobWVtX3NlbmQsIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xuK1xuK1x0LyogU3BsaWNlIGhpdHMgY29udHJvbCByZWNvcmQsIGZhaWxzICovXG4rXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcbitcbitcdC8qIERyYWluIHRoZSBjb250cm9sIHJlY29yZCB2aWEgcmVjdm1zZyAqL1xuK1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuK1x0XHRcdFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcbitcdFx0ICBjdHJsX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGN0cmxfc3RyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcbitcbitcdC8qIFNwbGljZSBzZWNvbmQgZGF0YSByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xuK31cbitcbisvKiBWZXJpZnkgdGhhdCBtdWx0aXBsZSBjb25zZWN1dGl2ZSBjb250cm9sIHJlY29yZHMgYmV0d2VlbiBkYXRhXG4rICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzXG4rICogYWZ0ZXJ3YXJkLiAgVGhlIHR3byBjb250cm9sIHJlY29yZHMgdXNlIGRpZmZlcmVudCBjb250ZW50IHR5cGVzXG4rICogdG8gdmVyaWZ5IHR5cGUgcHJlc2VydmF0aW9uIGFjcm9zcyB0aGUgc3BsaWNlIGJvdW5kYXJ5LlxuKyAqL1xuK1RFU1RfRih0bHMsIHNwbGljZV9tdWx0aV9jbXNnX2RhdGEpXG4re1xuK1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbitcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XG4rXHRpbnQgc2VuZF9sZW4gPSA0MDk2O1xuK1x0Y2hhciAqY3RybDEgPSBcImFsZXJ0MVwiO1xuK1x0Y2hhciAqY3RybDIgPSBcImFsZXJ0MlwiO1xuK1x0aW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmwxKSArIDE7XG4rXHRjaGFyIGN0cmxfYnVmWzddO1xuK1x0aW50IHBbMl07XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4rXG4rXHRtZW1ybmQobWVtX3NlbmQsIHNpemVvZihtZW1fc2VuZCkpO1xuK1xuK1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuK1xuK1x0LyogU2VuZDogZGF0YSwgY29udHJvbCgxMDApLCBjb250cm9sKDIwMCksIGRhdGEgKi9cbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDEwMCwgY3RybDEsIGN0cmxfbGVuLCAwKSwgY3RybF9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMjAwLCBjdHJsMiwgY3RybF9sZW4sIDApLCBjdHJsX2xlbik7XG4rXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1xuK1x0LyogU3BsaWNlIGZpcnN0IGRhdGEgKi9cbitcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XG4rXG4rXHQvKiBTcGxpY2UgZmFpbHMgb24gZmlyc3QgY29udHJvbCByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuK1xuK1x0LyogRHJhaW4gZmlyc3QgY29udHJvbCAodHlwZSAxMDApICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4rXHRcdFx0XHRjdHJsX2J1Ziwgc2l6ZW9mKGN0cmxfYnVmKSwgTVNHX1dBSVRBTEwpLFxuK1x0XHQgIGN0cmxfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoY3RybDEsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xuK1xuK1x0LyogU3BsaWNlIGZhaWxzIG9uIHNlY29uZCBjb250cm9sIHJlY29yZCAqL1xuK1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XG4rXG4rXHQvKiBEcmFpbiBzZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAyMDAsXG4rXHRcdFx0XHRjdHJsX2J1Ziwgc2l6ZW9mKGN0cmxfYnVmKSwgTVNHX1dBSVRBTEwpLFxuK1x0XHQgIGN0cmxfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoY3RybDIsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xuK1xuK1x0LyogU3BsaWNlIHNlY29uZCBkYXRhICovXG4rXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoXHUwMDI2bWVtX3NlbmRbc2VuZF9sZW5dLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTtcbit9XG4rXG4gVEVTVF9GKHRscywgcmVjdl9hbmRfc3BsaWNlKVxuIHtcbiBcdGludCBzZW5kX2xlbiA9IFRMU19QQVlMT0FEX01BWF9MRU47XG5AQCAtMTY4Miw2ICsxNzkxLDE5MyBAQCBURVNUX0YodGxzLCBkYXRhX2NvbnRyb2xfZGF0YSlcbiBcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTtcbiB9XG4gXG4rLyogRnVsbHkgY29uc3VtZSBhIGRhdGEtY29udHJvbC1kYXRhIHNlcXVlbmNlLiAgVGhlIGV4aXN0aW5nXG4rICogZGF0YV9jb250cm9sX2RhdGEgdGVzdCBvbmx5IHBlZWtzOyB0aGlzIGV4ZXJjaXNlcyBjb21wbGV0ZVxuKyAqIHJlY29yZCBkZWxpdmVyeSB0aHJvdWdoIHJlY3YgYW5kIHJlY3Ztc2cuXG4rICovXG4rVEVTVF9GKHRscywgcmVjdl9kYXRhX2Ntc2dfZGF0YSlcbit7XG4rXHRjaGFyICpkYXRhMSA9IFwiZmlyc3RfZGF0YVwiO1xuK1x0Y2hhciAqY3RybCA9IFwiY3RybF9tc2dcIjtcbitcdGNoYXIgKmRhdGEyID0gXCJzZWNvbmRfZGF0YVwiO1xuK1x0aW50IGQxX2xlbiA9IHN0cmxlbihkYXRhMSkgKyAxO1xuK1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcbitcdGludCBkMl9sZW4gPSBzdHJsZW4oZGF0YTIpICsgMTtcbitcdGNoYXIgYnVmWzIwXTtcbitcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGExLCBkMV9sZW4sIDApLCBkMV9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEyLCBkMl9sZW4sIDApLCBkMl9sZW4pO1xuK1xuK1x0LyogRmlyc3QgZGF0YSByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGQxX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTEsIGQxX2xlbiksIDApO1xuK1xuK1x0LyogcmVjdiB3aXRob3V0IGNtc2cgYnVmZmVyIGZhaWxzIG9uIGNvbnRyb2wgcmVjb3JkICovXG4rXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlPKTtcbitcbitcdC8qIERyYWluIGNvbnRyb2wgdmlhIHJlY3Ztc2cgKi9cbitcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbitcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XG4rXG4rXHQvKiBTZWNvbmQgZGF0YSByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEyLCBkMl9sZW4pLCAwKTtcbit9XG4rXG4rLyogUGVlayBhdCBhbiBpbnRlcmxlYXZlZCBjb250cm9sIHJlY29yZCBhZnRlciB0aGUgcHJlY2VkaW5nIGRhdGFcbisgKiByZWNvcmQgaGFzIGJlZW4gY29uc3VtZWQsIHRoZW4gY29uc3VtZSBpdC4gIE1TR19QRUVLIGV4cG9zZXMgdGhlXG4rICogY29udHJvbCByZWNvcmQncyB0eXBlIHdpdGhvdXQgY29uc3VtaW5nIGl0LlxuKyAqL1xuK1RFU1RfRih0bHMsIHBlZWtfY21zZ19hZnRlcl9kYXRhKVxuK3tcbitcdGNoYXIgKmRhdGEgPSBcImxlYWRpbmdcIjtcbitcdGNoYXIgKmN0cmwgPSBcIm1pZGRsZVwiO1xuK1x0Y2hhciAqdGFpbCA9IFwidHJhaWxpbmdcIjtcbitcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XG4rXHRpbnQgY19sZW4gPSBzdHJsZW4oY3RybCkgKyAxO1xuK1x0aW50IHRfbGVuID0gc3RybGVuKHRhaWwpICsgMTtcbitcdGNoYXIgYnVmWzIwXTtcbitcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIHRhaWwsIHRfbGVuLCAwKSwgdF9sZW4pO1xuK1xuK1x0LyogQ29uc3VtZSBsZWFkaW5nIGRhdGEgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApO1xuK1xuK1x0LyogUGVlayBhdCB0aGUgY29udHJvbCByZWNvcmQgKi9cbitcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbitcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19QRUVLKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XG4rXG4rXHQvKiBDb25zdW1lIHRoZSBjb250cm9sIHJlY29yZCAqL1xuK1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuK1x0XHRcdFx0YnVmLCBzaXplb2YoYnVmKSwgMCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuK1xuK1x0LyogVHJhaWxpbmcgZGF0YSAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgdF9sZW4sIE1TR19XQUlUQUxMKSwgdF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIHRhaWwsIHRfbGVuKSwgMCk7XG4rfVxuK1xuKy8qIENvbnRyb2wgcmVjb3JkIGFzIHRoZSBmaXJzdCByZWNvcmQgaW4gdGhlIHN0cmVhbSwgZm9sbG93ZWQgYnlcbisgKiBkYXRhLiAgVGhlIGNvbnRyb2wgcmVjb3JkIG11c3QgYmUgZHJhaW5lZCBiZWZvcmUgdGhlIGRhdGEgcmVjb3JkXG4rICogYmVjb21lcyBhdmFpbGFibGUuXG4rICovXG4rVEVTVF9GKHRscywgY21zZ19iZWZvcmVfZGF0YSlcbit7XG4rXHRjaGFyICpjdHJsID0gXCJhbGVydFwiO1xuK1x0Y2hhciAqZGF0YSA9IFwicGF5bG9hZFwiO1xuK1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcbitcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XG4rXHRjaGFyIGJ1ZlsyMF07XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4rXG4rXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XG4rXG4rXHQvKiByZWN2IHdpdGhvdXQgY21zZyBmYWlscyAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJTyk7XG4rXG4rXHQvKiBEcmFpbiBjb250cm9sIHZpYSByZWN2bXNnICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4rXHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuK1xuK1x0LyogRGF0YSBmb2xsb3dzICovXG4rXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBkX2xlbiwgTVNHX1dBSVRBTEwpLCBkX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YSwgZF9sZW4pLCAwKTtcbit9XG4rXG4rLyogVHdvIGRpZmZlcmVudCBjb250cm9sIHJlY29yZCB0eXBlcyBpbnRlcmxlYXZlZCB3aXRoIGRhdGEuXG4rICogRWFjaCBjb250cm9sIHJlY29yZCBpcyBkZWxpdmVyZWQgd2l0aCBpdHMgb3duIHR5cGUgcHJlc2VydmVkO1xuKyAqIHZlcmlmeSBib3RoIHR5cGVzIGFycml2ZSBpbnRhY3QuXG4rICovXG4rVEVTVF9GKHRscywgbWl4ZWRfY29udHJvbF90eXBlcylcbit7XG4rXHRjaGFyICpkYXRhMSA9IFwiZGF0YTFcIjtcbitcdGNoYXIgKmN0cmwxID0gXCJoYW5kc2hha2VcIjtcbitcdGNoYXIgKmN0cmwyID0gXCJhbGVydF9tc2dcIjtcbitcdGNoYXIgKmRhdGEyID0gXCJkYXRhMlwiO1xuK1x0aW50IGQxX2xlbiA9IHN0cmxlbihkYXRhMSkgKyAxO1xuK1x0aW50IGMxX2xlbiA9IHN0cmxlbihjdHJsMSkgKyAxO1xuK1x0aW50IGMyX2xlbiA9IHN0cmxlbihjdHJsMikgKyAxO1xuK1x0aW50IGQyX2xlbiA9IHN0cmxlbihkYXRhMikgKyAxO1xuK1x0Y2hhciBidWZbMjBdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YTEsIGQxX2xlbiwgMCksIGQxX2xlbik7XG4rXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjMV9sZW4sIDApLCBjMV9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMjAwLCBjdHJsMiwgYzJfbGVuLCAwKSwgYzJfbGVuKTtcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEyLCBkMl9sZW4sIDApLCBkMl9sZW4pO1xuK1xuK1x0LyogRmlyc3QgZGF0YSAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgZDFfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XG4rXG4rXHQvKiBGaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cbitcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbitcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgYzFfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsMSwgYzFfbGVuKSwgMCk7XG4rXG4rXHQvKiBTZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAyMDAsXG4rXHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMyX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybDIsIGMyX2xlbiksIDApO1xuK1xuK1x0LyogU2Vjb25kIGRhdGEgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEyLCBkMl9sZW4pLCAwKTtcbit9XG4rXG4rLyogVHJhaWxpbmcgY29udHJvbCByZWNvcmQgd2l0aCBubyBkYXRhIGZvbGxvd2luZyBpdC4gIFRoZSBzZW5kZXJcbisgKiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlIGNvbnRyb2wgcmVjb3JkOyB0aGUgcmVjZWl2ZXJcbisgKiBkcmFpbnMgdGhlIGNvbnRyb2wgYW5kIHRoZW4gb2JzZXJ2ZXMgRU9GLlxuKyAqL1xuK1RFU1RfRih0bHMsIGRhdGFfY21zZ19lb2YpXG4re1xuK1x0Y2hhciAqZGF0YSA9IFwicGF5bG9hZFwiO1xuK1x0Y2hhciAqY3RybCA9IFwiZmluYWxcIjtcbitcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XG4rXHRpbnQgY19sZW4gPSBzdHJsZW4oY3RybCkgKyAxO1xuK1x0Y2hhciBidWZbMjBdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XG4rXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKGNsb3NlKHNlbGYtXHUwMDNlZmQpLCAwKTtcbitcdHNlbGYtXHUwMDNlZmQgPSAtMTtcbitcbitcdC8qIENvbnN1bWUgZGF0YSAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgZF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XG4rXG4rXHQvKiBEcmFpbiB0cmFpbGluZyBjb250cm9sICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4rXHRcdFx0XHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XG4rXG4rXHQvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgMCk7XG4rfVxuK1xuIFRFU1RfRih0bHMsIHNodXRkb3duKVxuIHtcbiBcdGNoYXIgY29uc3QgKnRlc3Rfc3RyID0gXCJ0ZXN0X3JlYWRcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA0OjUyLjI1NjM3MjUxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjkzMDg0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgUmVjb3JkIFR5cGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgcHJldHR5IGNsZWFuIHJlZmFjdG9yIGZvciBob3cgd2UgaGFuZGxlIHJlY29yZCB0eXBlcyBhdCB0aGUgc29ja2V0IGxldmVsLiAgVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgYSBuZXcgY2FsbGJhY2ssIGByZWFkX3NvY2tfcmVjdHlwZWAsIHRvIHRoZSBgc3RydWN0IHByb3RvX29wc2AuICBUaGlzIGxvb2tzIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCBmb3IgYWRkaW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIGhvdyB3ZSByZWFkIGRhdGEgYmFzZWQgb24gcmVjb3JkIHR5cGVzLCB3aGljaCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgcHJvdG9jb2xzIGxpa2UgVExTIHRoYXQgaGF2ZSBjb21wbGV4IGZyYW1pbmcuXG5cblRoZSBtZWF0IG9mIGl0IGlzIHRoYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMgbmV3IGNhbGxiYWNrLiAgSXQncyByZXBsYWNpbmcgc29tZSBleGlzdGluZyBmdW5jdGlvbnMsIGBzdmNfdGNwX3NvY2tfcmVjdm1zZ2AgYW5kIGBzdmNfdGNwX3JlYWRfbXNnYCwgd2l0aCB0aGUgbmV3IGBzdmNfdGNwX3JlY3ZfYWN0b3JgIGFuZCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCB3aGljaCBzZWVtcyB0byBzdWdnZXN0IGEgbW92ZSB0b3dhcmQgYSBtb3JlIGFjdG9yLWJhc2VkIG1vZGVsIGZvciBoYW5kbGluZyB0aGUgVENQIHJlYWQgbG9vcC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIEnigJlsbCB3YW50IHRvIHNlZSBob3cgdGhlc2UgYWN0b3JzIGludGVyYWN0IGluIG1vcmUgZGV0YWlsLlxuXG5UaGUgVExTIHNpZGUgaXMgYWxzbyB0b3VjaGVkLCB3aXRoIGBuZXQvdGxzL3Rsc19zdy5jYCBnZXR0aW5nIGEgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWAgaW1wbGVtZW50YXRpb24uICBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgaHlwb3RoZXNpcyB0aGF0IFRMUyBpcyBhIGtleSBiZW5lZmljaWFyeSBoZXJlLiBUaGlzIHNlZW1zIGxvZ2ljYWwgZ2l2ZW4gdGhlIHJlbGlhbmNlIG9uIHJlY29yZCBmcmFtaW5nIHdpdGhpbiBUTFMuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCwgbW9kaWZ5aW5nIGhvdyBSUEMgb3ZlciBUQ1AgaGFuZGxlcyBUTFMgcmVjb3Jkcy5cblxuVGhlIGRlZmluaXRpb25zIG9mIGBza19yZWFkX3JlY3R5cGVfYWN0b3JfdGAgYW5kIGByZWFkX3NvY2tfcmVjdHlwZWAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgIGFyZSBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuIEkgYW0gY3VyaW91cyB0byBleGFtaW5lIGhvdyB0aGUgYHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90YCBpbnRlcmFjdHMgd2l0aCB0aGUgYHJlYWRfc29ja2AgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiAgV2UgbmVlZCBgQ09ORklHX1NVTlJQQ2AgZm9yIHRoZSBSUEMgc2lkZSBhbmQgYENPTkZJR19UTFNgIGZvciB0aGUgVExTIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmNvbmZpZyBtb3JlIGNsb3NlbHkuIEl0IG1lbnRpb25zIGBDT05GSUdfVExTX0RFVklDRWAgaW4gYG5ldC90bHMvdGxzX21haW4uY2AgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGB0bHNfc3cuY2AuIFRoaXMgYWxzbyBuZWVkcyBjb25zaWRlcmF0aW9uLlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2VzIHRvIHZlcmlmeSBob3cgdGhpcyBpcyB1c2VkIG91dHNpZGUgb2YgdGhlc2UgaW1tZWRpYXRlIGNoYW5nZXMuIEkgd2FudCB0byBzZWUgaG93IGJyb2FkbHkgYHJlYWRfc29ja19yZWN0eXBlYCBhbmQgYHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90YCBhcmUgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBleGlzdGluZyBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDQ6NTguNTg1Njg0NTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDg3MDk0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9zb2NrX3JlY3R5cGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXQuaD0yMTE9c3RydWN0IHByb3RvX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTI3NC1cXHQvKlxcbmluY2x1ZGUvbGludXgvbmV0Lmg6Mjc1OlxcdCAqIHJlYWRfc29ja19yZWN0eXBlIHNwbGl0cyBkZWxpdmVyeSBhY3Jvc3MgdHdvIGNhbGxiYWNrczpcXG5pbmNsdWRlL2xpbnV4L25ldC5oLTI3Ni1cXHQgKiByZWN2X2FjdG9yIGZvciBkYXRhIHJlY29yZHMsIHBlciB0aGUgc2tfcmVhZF9hY3Rvcl90XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTI5MC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L25ldC5oOjI5MTpcXHRpbnRcXHRcXHQoKnJlYWRfc29ja19yZWN0eXBlKShzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9uZXQuaC0yOTItXFx0XFx0XFx0XFx0XFx0ICAgICByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTk1OD1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEwMzktLypcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMDQwOiAqIHJlYWRfc29ja19yZWN0eXBlIG5vbi1kYXRhIHJlY29yZCBhY3RvcjogcmVjZWl2ZXMgbm9uLWRhdGEgVExTXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTA0MS0gKiByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSBtZXNzYWdlcykgYW5kIHRyYW5zbGF0ZXMgdGhlbSBpbnRvXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xMDk4PXN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTExNy1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjExMTg6XFx0aWYgKHN2c2stXFx1MDAzZXNrX3NvY2stXFx1MDAzZW9wcy1cXHUwMDNlcmVhZF9zb2NrX3JlY3R5cGUpXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTExOTpcXHRcXHRsZW4gPSBzdnNrLVxcdTAwM2Vza19zb2NrLVxcdTAwM2VvcHMtXFx1MDAzZXJlYWRfc29ja19yZWN0eXBlKHNrLCBcXHUwMDI2ZGVzYyxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMTIwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdmNfdGNwX3JlY3ZfYWN0b3IsXFxuLS1cXG5uZXQvdGxzL3Rscy5oPTE2OT1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbm5ldC90bHMvdGxzLmgtMTcwLVxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpO1xcbm5ldC90bHMvdGxzLmg6MTcxOmludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvdGxzL3Rscy5oLTE3Mi1cXHRcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTk0MD1zdGF0aWMgdm9pZCBidWlsZF9wcm90b19vcHMoc3RydWN0IHByb3RvX29wcyBvcHNbVExTX05VTV9DT05GSUddW1RMU19OVU1fQ09ORklHXSxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy05NTEtXFx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucmVhZF9zb2NrXFx0PSB0bHNfc3dfcmVhZF9zb2NrO1xcbm5ldC90bHMvdGxzX21haW4uYzo5NTI6XFx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucmVhZF9zb2NrX3JlY3R5cGVcXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtOTUzLVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTk1Ny1cXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1ODpcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZVxcdD0gdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlO1xcbm5ldC90bHMvdGxzX21haW4uYy05NTktXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTIxODU9aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjE5MC1cXG5uZXQvdGxzL3Rsc19zdy5jOjIxOTE6aW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbm5ldC90bHMvdGxzX3N3LmMtMjE5Mi1cXHRcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNTowMC44OTQ0MTgzNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTgyMjYzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29ja2V0IFJlY2VpdmUgVHlwZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgcmVhZF9zb2NrX3JlY3R5cGVgIGludG8gdGhlIGBwcm90b19vcHNgIHN0cnVjdCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBpbXBsZW1lbnRlZCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvdGxzL3Rsc19zdy5jYCBhcyBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYC4gVGhhdCBtYWtlcyBzZW5zZSAtIFRMUyBwcm9iYWJseSBuZWVkcyB0byBrbm93IHRoZSByZWNvcmQgdHlwZSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuXG5cbkkgc2VlIGl0J3MgYWxzbyBiZWluZyB1c2VkIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2Agd2l0aGluIGBzdmNfdGNwX3JlY3Zmcm9tYC4gVGhhdCdzIGEgYml0IHVuZXhwZWN0ZWQsIGJ1dCBwcm9iYWJseSBtZWFucyBTdW5SUEMgY2FuIGFsc28gYmVuZWZpdCBmcm9tIHRoaXMgc29ja2V0LWxldmVsIHR5cGUgcmV0cmlldmFsIGZvciBUQ1AgY29ubmVjdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGludG8gaG93IHRoYXQncyBiZWluZyB1c2VkIHRoZXJlLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgIGFuZCBgX190bHNfc3dfcmVhZF9zb2NrYC5cblxuR2l2ZW4gdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBzZWVtcyBjZW50cmFsLCBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fdGxzX3N3X3JlYWRfc29ja2AgaW4gYG5ldC90bHMvdGxzX3N3LmNgIHRvIHNlZSBob3cgaXQncyBhY3R1YWxseSBwdWxsaW5nIHRoaXMgcmVjb3JkIHR5cGUgaW5mb3JtYXRpb24uIFRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBiYXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU1MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNTowNi4wNzY2ODczMDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MjQ5OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Rsc19zd19yZWFkX3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfc3cuYz0xOTgzPXNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIwNTYtXFxubmV0L3Rscy90bHNfc3cuYzoyMDU3OnN0YXRpYyBpbnQgX190bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxubmV0L3Rscy90bHNfc3cuYy0yMDU4LVxcdFxcdFxcdCAgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMTg1PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIxODcte1xcbm5ldC90bHMvdGxzX3N3LmM6MjE4ODpcXHRyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCBOVUxMKTtcXG5uZXQvdGxzL3Rsc19zdy5jLTIxODktfVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMTkxPWludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjE5NC17XFxubmV0L3Rscy90bHNfc3cuYzoyMTk1OlxcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIHJlY3R5cGVfYWN0b3IpO1xcbm5ldC90bHMvdGxzX3N3LmMtMjE5Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjA4LjA1OTE5NTQzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTgwMzU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGVzZSBzeW1ib2xzIHJlbGF0ZTogYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCwgYW5kIGBfX3Rsc19zd19yZWFkX3NvY2tgLiBUaGVzZSBzZWVtIHRvIGJlIGNvcmUgdG8gc29tZSBzb3J0IG9mIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcsIHByb2JhYmx5IFRDUCBhbmQgbGlrZWx5IGludm9sdmluZyBUTFMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGVuYWJsaW5nIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgU1VOUlBDYCBhbmQgYFRMU2AuIElzIGBTVU5SUENgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgYW0gSSBnb2luZyB0byBuZWVkIHNvbWV0aGluZyBtb3JlLCBwZXJoYXBzIGEgZGVidWcgb3B0aW9uIGxpa2UgYFNVTlJQQ19ERUJVR2A/IFVzdWFsbHksIHBsYWluIGBTVU5SUENgIGlzIGVub3VnaCB0byBlbmFibGUgc3RhbmRhcmQgUlBDIGZ1bmN0aW9uYWxpdHksIGJ1dCBJIGNhbid0IGFzc3VtZSB0aGF0IHdpdGhvdXQgY2hlY2tpbmcuIEFoLCB0aGUgcGxvdCB0aGlja2Vucy4uLiBgU1VOUlBDYCBpcyBhICp0cmlzdGF0ZSogY29uZmlnLCBzbyBJIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsLlxuXG5UaW1lIHRvIGRpdmUgaW50byBgbmV0L3N1bnJwYy9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYFNVTlJQQ2AgaW50ZXJhY3RzIHdpdGggdGhlc2UgVExTLXJlbGF0ZWQgc3ltYm9scy4gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNzAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDU6MTEuOTE3MjM2Njk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDc5NzA4NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXFxubmV0L3N1bnJwYy9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzo2OmNvbmZpZyBTVU5SUENfR1NTXFxubmV0L3N1bnJwYy9LY29uZmlnLTctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTE6Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cXHRib29sXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMTQtXFxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNi1cXHRib29sXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzozNjpjb25maWcgU1VOUlBDX0RFQlVHXFxubmV0L3N1bnJwYy9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIlJQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTQ5LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzo1MDpjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXFxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlJQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXFxcIlxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTYzLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02NS1cXHR0cmlzdGF0ZSBcXFwiUlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjEzLjc2NTIxNTk1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjI3ODg2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGZvciBSUEMtb3Zlci1UTFMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgU1VOUlBDYCBpcyBmdW5kYW1lbnRhbCB0byBORlMgYW5kIGBORlNEYCBvcGVyYXRpb24uIFRoYXQncyB0aGUgYmFzZWxpbmUuIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHNlY3VyaXR5LiBHaXZlbiB0aGUgbmF0dXJlIG9mIG15IHdvcmssIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBpcyBhIGNvbmZpZyBpbiBwbGFjZSBmb3IgUlBDIG92ZXIgVExTLiBJdCdzIGEga2V5IHNlY3VyaXR5IG1lYXN1cmUgdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSB0aGF0IFRMUyBpcyBwcm9wZXJseSBzZXQgdXAgZm9yIFJQQy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNToxNi40MjgwMDgyNzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzU2NjIzMTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSUENfVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNToxOC4zMDM2OTAzNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNjg0Nzc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6XG5cbioqQ2hlY2tpbmcgZm9yIFRMUyBDb25maWd1cmF0aW9uIGluIFJQQyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBzZWUgaG93IFRMUyBpcyBjb25maWd1cmVkLCBvciBpZiBpdCdzIGV2ZW4gKmNvbnNpZGVyZWQqIGluIHRoZSBjb250ZXh0IG9mIGBuZXQvc3VucnBjYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCdzIHNlZSB3aGF0IGBuZXQvc3VucnBjL0tjb25maWdgIGhhcyB0byBzYXkuIFRoYXQncyB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBtb2R1bGUgY29uZmlndXJhdGlvbnMsIGFuZCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBhbnkgVExTIHN1cHBvcnQsIG9yIHRoZSAqcG90ZW50aWFsKiBmb3IgVExTLCB3aWxsIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBhIEtjb25maWcgb3B0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZmxhZ3MgcmVsYXRpbmcgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIFRMUywgcG90ZW50aWFsbHkgZGVwZW5kZW50IG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIChsaWtlIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgbGlicmFyaWVzKSwgYW5kIG1heWJlIGV2ZW4gb3B0aW9ucyBmb3Igc2VsZWN0aW5nIGJldHdlZW4gZGlmZmVyZW50IFRMUyBpbXBsZW1lbnRhdGlvbnMgaWYgbXVsdGlwbGUgYXJlIHN1cHBvcnRlZCB3aXRoaW4gdGhpcyBSUEMgc3Vic3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gYW55IFRMUyBvcHRpb25zIEkgZmluZCBhbmQgb3RoZXIgUlBDIGZ1bmN0aW9uYWxpdGllcy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM2NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjIxLjQ0MDU0Mjk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU4ODY0NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDU6MjEuNTA0MTQyNTY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Njc4NTkzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgYm90aCBgU1VOUlBDYCBhbmQgYFRMU2AuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudHMgZm9yIHRoaXMgc2V0dXAuIE5vdywgbGV0J3MganVzdCBjbGFyaWZ54oCmIHJpZ2h0LCBgVExTYCBpcyBhY3R1YWxseSBoYW5kbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYGNvbmZpZyBUTFNgLiBHb3QgaXQuIEp1c3QgZG91YmxlLWNoZWNraW5nIHRvIGtlZXAgZXZlcnl0aGluZyBzdHJhaWdodCBpbiBteSBoZWFkLiBObyBzdXJwcmlzZXMsIGp1c3QgdGhlIGV4cGVjdGVkIGJhc2VsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzMCwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjI0LjQ3MjAwNzA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTc2MjcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL0tjb25maWc9ODczPWNvbmZpZyBIQVJERU5fQlJBTkNIX0hJU1RPUllcXG4tLVxcbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxcbmFyY2gvYXJtL21tL0tjb25maWc6ODgzOmNvbmZpZyBUTFNfUkVHX0VNVUxcXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cXHRib29sXFxuLS1cXG5uZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjI2LjM4Mzc3NzU2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTYwMjAwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCdzIFNjb3BlIGFuZCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIFRMUywgYXMgc3VzcGVjdGVkLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0LiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWNzLiBUaGUgbW9kaWZpY2F0aW9ucyBoaXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBhbmQgYG5ldC90bHMvdGxzX3N3LmNgLiBUaGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgc2VlbSB0byBiZSBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLCBhbmQgYF9fdGxzX3N3X3JlYWRfc29ja2AuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBleHBvcnRlZCBhcyBpbnRlbmRlZC4gYHN2Y190Y3BfcmVjdl9hY3RvcmAgaXMgc3RhdGljLCBnb29kLiBTYW1lIGdvZXMgZm9yIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBhbmQgYF9fdGxzX3N3X3JlYWRfc29ja2AuIEFuZCB5ZXMsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgIGlzIGluIGBuZXQvdGxzL3Rsc19zdy5jYCwgY29uZmlybWluZyBpdCdzIGV4cG9ydGVkLlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgYWxzbyBhZGQgYHN2Y190Y3BfcmVjdmZyb21gIHRvIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgc2luY2UgdGhhdCdzIGJlZW4gbW9kaWZpZWQgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgYW5hbHlzaXMuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKndoeSouIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJlYWRfc29ja19yZWN0eXBlYCBjYWxsYmFjayB3aXRoaW4gdGhlIGBwcm90b19vcHNgLCBhbGxvd2luZyB0aGUgcmVhZGluZyBvZiBub24tZGF0YSBUTFMgcmVjb3JkcyBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2UgYWxlcnRzIGFuZCBoYW5kc2hha2UgbWVzc2FnZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGgsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBfX3Rsc19zd19yZWFkX3NvY2tgIGFuZCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYC4gVGhlIHBhdGNoIHRoZW4gdXNlcyB0aGlzIGluIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZSwgd2l0aCBmdW5jdGlvbnMgYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBhbmQgYHN2Y190Y3BfcmVjdmZyb21gLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSXQncyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aG9yb3VnaGx5IGZ1enplZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gd2F0Y2ggZm9yIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnZXQgZGljZXkuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJJ3ZlIGdvdCBgVExTYCBjb25maXJtZWQuIFNVTlJQQyBpcyBhbHNvIHByZXNlbnQuIEFoLCByaWdodCwgYFNVTlJQQ2AgaXMgdHJpc3RhdGUsIHNlbGVjdGVkIGJ5IGBORlNfRlNgIGFuZCBgTkZTRGAuIERpcmVjdCBjb25maWd1cmF0aW9uIGlzbid0IGF2YWlsYWJsZS4gRW5hYmxpbmcgaXQgaW1wbGljaXRseSByZXF1aXJlcyBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2UuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCdzIGxpa2VseSB0aGF0IGBORlNEYCBpcyB0aGUgbW9yZSByZWxldmFudCBvbmUgZm9yIG15IGFuYWx5c2lzLiBJJ2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBmcy9uZnNkL0tjb25maWdgIHRvIGNvbmZpcm0gYW55IGRlcGVuZGVuY2llcyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIuXG5cblNvLCB0byBzdW1tYXJpemUgbXkgZm9jdXNlZCBzeW1ib2xzIGFyZTpcbi0gYHN2Y190Y3BfcmVjdl9hY3RvcmBcbi0gYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmBcbi0gYHN2Y190Y3BfcmVjdmZyb21gXG4tIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgXG4tIGBfX3Rsc19zd19yZWFkX3NvY2tgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjM1LjM0Mzk4MjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE0NDI2NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0zOS1cXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01MC1cXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctOTMtXFxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctOTUtXFx0Ym9vbFxcbmZzL25mc2QvS2NvbmZpZy05Ni1cXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEyMy1cXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE0MC1cXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXFxuZnMvbmZzZC9LY29uZmlnLTE0Mi1cXHRib29sIFxcXCJORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTYzLVxcbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xcbmZzL25mc2QvS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDU6MzcuMjU4NDE5MzM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTk1NDQ1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgRW5oYW5jZWQgU2VjdXJpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHRoaXMgYHJlYWRfc29ja19yZWN0eXBlYCBjYWxsYmFjayBmb3Igbm9uLWRhdGEgVExTIHJlY29yZHMsIGlzIHByb3Blcmx5IGludGVncmF0ZWQgYW5kIHRlc3RlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYWRkIGBORlNEYCB0byB0aGUgY29uZmlndXJhdGlvbnMsIHNpbmNlIHRoYXQncyBhIGtleSBjb21wb25lbnQsIGFuZCB0aGVuIG9mIGNvdXJzZSBJIG5lZWQgYFRMU2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGJ1dCBsZXQncyBqdXN0IG1ha2Ugc3VyZS5cblxuSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbmV0L3Rscy9LY29uZmlnYCB0byBjb25maXJtIHRoZSBgY29uZmlnIFRMU2AgcHJvbXB0IGlzIHByZXNlbnQuIFllcywgaXQgaXMuIEV4Y2VsbGVudC4gTm93LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlciwgSSBoYXZlIG15IGVuYWJsZW1lbnQgY29uZmlnIGxpc3Qgd2hpY2ggaXM6IGBbXCJORlNEXCIsIFwiVExTXCJdYC5cblxuSSBhbHNvIGhhdmUgaWRlbnRpZmllZCB0aGVzZSB2ZXJ5IHJlbGV2YW50IHN5bWJvbHMgd2hpY2ggSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uOiBgW1wic3ZjX3RjcF9yZWN2X2FjdG9yXCIsIFwic3ZjX3RjcF9yZWN0eXBlX2FjdG9yXCIsIFwic3ZjX3RjcF9yZWN2ZnJvbVwiLCBcInRsc19zd19yZWFkX3NvY2tfcmVjdHlwZVwiLCBcIl9fdGxzX3N3X3JlYWRfc29ja1wiXWAuIFRoZXNlIGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgbmV3IGByZWFkX3NvY2tfcmVjdHlwZWAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCBhbmQgdGhlIGludGVncmF0aW9uIGludG8gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlLiBUaGUgYHJlYWRfc29ja19yZWN0eXBlYCBjYWxsYmFjayBhbGxvd3MgZGlyZWN0IHJlYWRpbmcgb2Ygbm9uLWRhdGEgVExTIHJlY29yZHMgZGlyZWN0bHkgZnJvbSB0aGUgc29ja2V0IGFuZCB0aGlzIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgb24gY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZS5cblxuR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIGludHJvZHVjaW5nIGEgbmV3IHByb3RvX29wcyBjYWxsYmFjaywgSSBiZWxpZXZlIHRoYXQgdGhpcyBhYnNvbHV0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBnb2FsIGhlcmUgaXMgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgaW4gdGhlIFRMUyByZWNvcmQgcGFyc2luZyBhbmQgUlBDIG1lc3NhZ2UgYXNzZW1ibHkgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy5cblxuSSdtIHJlYWR5IHRvIGNvbW1pdCB0byBmdXp6aW5nIHRoaXMuIExldCdzIGNhbGwgdGhlIHNldC1yZXN1bHRzIGZ1bmN0aW9uIGFuZCBnZXQgdGhlIGJhbGwgcm9sbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNDgsIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjQzLjcxNzk2OTAxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTgzMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCIsXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfdGNwX3JlY3ZfYWN0b3JcIixcbiAgICBcInN2Y190Y3BfcmVjdHlwZV9hY3RvclwiLFxuICAgIFwic3ZjX3RjcF9yZWN2ZnJvbVwiLFxuICAgIFwidGxzX3N3X3JlYWRfc29ja19yZWN0eXBlXCIsXG4gICAgXCJfX3Rsc19zd19yZWFkX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHByb3RvX29wcyBjYWxsYmFjayBgcmVhZF9zb2NrX3JlY3R5cGVgIHRvIGFsbG93IHJlYWRpbmcgbm9uLWRhdGEgVExTIHJlY29yZHMgKGxpa2UgYWxlcnRzIGFuZCBoYW5kc2hha2UgbWVzc2FnZXMpIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4gSXQgaW1wbGVtZW50cyB0aGlzIGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCAoYF9fdGxzX3N3X3JlYWRfc29ja2AsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgKSBhbmQgdXNlcyBpdCBpbiB0aGUgU1VOUlBDIHNlcnZlciBUQ1Agc29ja2V0IGNvZGUgKGBzdmNfdGNwX3JlY3ZfYWN0b3JgLCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCwgYHN2Y190Y3BfcmVjdmZyb21gKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgUlBDIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgaW4gdGhlIFRMUyByZWNvcmQgcGFyc2luZyBhbmQgUlBDIG1lc3NhZ2UgYXNzZW1ibHkgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX3RjcF9yZWN2X2FjdG9yXCIsXG4gICAgXCJzdmNfdGNwX3JlY3R5cGVfYWN0b3JcIixcbiAgICBcInN2Y190Y3BfcmVjdmZyb21cIixcbiAgICBcInRsc19zd19yZWFkX3NvY2tfcmVjdHlwZVwiLFxuICAgIFwiX190bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 21:42:50 +0000 UTC FinishedAt: 2026-07-20 22:05:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD", "TLS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD", "TLS" ], "series_id": "33a8b962-17d1-41ff-bdc9-8a5ea1c08524" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_tcp_recv_actor", "svc_tcp_rectype_actor", "svc_tcp_recvfrom", "tls_sw_read_sock_rectype", "__tls_sw_read_sock" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3RjcF9yZWN2X2FjdG9yJiMzNDssCiAgICAmIzM0O3N2Y190Y3BfcmVjdHlwZV9hY3RvciYjMzQ7LAogICAgJiMzNDtzdmNfdGNwX3JlY3Zmcm9tJiMzNDssCiAgICAmIzM0O3Rsc19zd19yZWFkX3NvY2tfcmVjdHlwZSYjMzQ7LAogICAgJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmM0NGIwMjM5YjMxN2ZmNDg4MTgxZDc5MjVjNGVjYjA1YWQxODZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDIyOjA0OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5pbmRleCAyNzcxODhhNDBjNzJlMy4uN2ExOWE3NDNhNjE3NzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5AQCAtMTk4LDYgJiM0MzsxOTgsMTMgQEAgc3RydWN0IHNrX2J1ZmY7XG4gc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7XG4gdHlwZWRlZiBpbnQgKCpza19yZWFkX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosIHN0cnVjdCBza19idWZmICosXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCwgc2l6ZV90KTtcbiYjNDM7LyogcmVjdHlwZSBjYXJyaWVzIHRoZSB0cmFuc3BvcnQgcmVjb3JkIHR5cGUsIGZvciBleGFtcGxlIGFcbiYjNDM7ICogVExTX1JFQ09SRF9UWVBFXyogdmFsdWUuXG4mIzQzOyAqL1xuJiM0Mzt0eXBlZGVmIGludCAoKnNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQsIHNpemVfdCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdTggcmVjdHlwZSk7XG4gdHlwZWRlZiBpbnQgKCpza2JfcmVhZF9hY3Rvcl90KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcbiBcbkBAIC0yNjQsNiAmIzQzOzI3MSwyNyBAQCBzdHJ1Y3QgcHJvdG9fb3BzIHtcbiBcdCAqL1xuIFx0aW50XHRcdCgqcmVhZF9zb2NrKShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHRcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiByZWFkX3NvY2tfcmVjdHlwZSBzcGxpdHMgZGVsaXZlcnkgYWNyb3NzIHR3byBjYWxsYmFja3M6XG4mIzQzO1x0ICogcmVjdl9hY3RvciBmb3IgZGF0YSByZWNvcmRzLCBwZXIgdGhlIHNrX3JlYWRfYWN0b3JfdFxuJiM0MztcdCAqIGNvbnZlbnRpb24sIGFuZCByZWN0eXBlX2FjdG9yIGZvciBhbGwgb3RoZXIgcmVjb3JkcyxcbiYjNDM7XHQgKiB3aXRoIHJlY3R5cGUgaWRlbnRpZnlpbmcgZWFjaC4gQSBOVUxMIHJlY3R5cGVfYWN0b3JcbiYjNDM7XHQgKiBsZWF2ZXMgbm9uLWRhdGEgcmVjb3JkcyBwZW5kaW5nLiByZWN0eXBlX2FjdG9yIHJldHVybnMgMFxuJiM0MztcdCAqIHRvIGNvbnN1bWUgYSByZWNvcmQgb3IgbmVnYXRpdmUgdG8gbGVhdmUgaXQgcGVuZGluZyBmb3JcbiYjNDM7XHQgKiByZWRlbGl2ZXJ5IGFuZCBzdG9wIGRlbGl2ZXJ5OyB0aGUgbmVnYXRpdmUgcmV0dXJuIGlzIGFcbiYjNDM7XHQgKiBiYWNrcHJlc3N1cmUgc2lnbmFsLCBub3QgYSBmYXRhbCBlcnJvci4gQm90aCBjYWxsYmFja3NcbiYjNDM7XHQgKiByZXBvcnQgZXJyb3JzIGFuZCBlYXJseSBzdG9wIHRoZSB3YXkgcmVjdl9hY3RvciBkb2VzOlxuJiM0MztcdCAqIGJ5IHNldHRpbmcgZGVzYy1cdTAwM2Vjb3VudCB0byAwIGFuZCByZWNvcmRpbmcgdGhlIHJlYXNvbiBpblxuJiM0MztcdCAqIGRlc2MtXHUwMDNlZXJyb3IsIHBlciB0aGUgcmVhZF9kZXNjcmlwdG9yX3QgY29udmVudGlvbiBhbmRcbiYjNDM7XHQgKiBpbmRlcGVuZGVudCBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIHJlcG9ydHNcbiYjNDM7XHQgKiBvbmx5IGRhdGEgYnl0ZXMgY29uc3VtZWQgYnkgcmVjdl9hY3RvcjsgdGhlIGNhbGxlclxuJiM0MztcdCAqIGRldGVjdHMgYW4gZXJyb3Igb3IgZWFybHkgc3RvcCB2aWEgZGVzYy1cdTAwM2Vjb3VudCBhbmRcbiYjNDM7XHQgKiBkZXNjLVx1MDAzZWVycm9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGludFx0XHQoKnJlYWRfc29ja19yZWN0eXBlKShzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuJiM0MztcdFx0XHRcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3RvcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7XG4gXHQvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHJlYWRfc29jaygpLCBpdCByZWFkcyBhbiBlbnRpcmUgc2tiIGF0IGEgdGltZS4gKi9cbiBcdGludFx0XHQoKnJlYWRfc2tiKShzdHJ1Y3Qgc29jayAqc2ssIHNrYl9yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7XG4gXHRpbnRcdFx0KCpzZW5kbXNnX2xvY2tlZCkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZGUuLjliOWUwZGE5ZTczY2Q2IDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXG5AQCAtOCwxNSAmIzQzOzgsNiBAQFxuICAqIGV2ZW5seSB3aGVuIHNlcnZpY2luZyBhIHNpbmdsZSBjbGllbnQuIE1heSBuZWVkIHRvIG1vZGlmeSB0aGVcbiAgKiBzdmNfeHBydF9lbnF1ZXVlIHByb2NlZHVyZS4uLlxuICAqXG4tICogVENQIHN1cHBvcnQgaXMgbGFyZ2VseSB1bnRlc3RlZCBhbmQgbWF5IGJlIGEgbGl0dGxlIHNsb3cuIFRoZSBwcm9ibGVtXG4tICogaXMgdGhhdCB3ZSBjdXJyZW50bHkgZG8gdHdvIHNlcGFyYXRlIHJlY3Zmcm9tJiMzOTtzLCBvbmUgZm9yIHRoZSA0LWJ5dGVcbi0gKiByZWNvcmQgbGVuZ3RoLCBhbmQgdGhlIHNlY29uZCBmb3IgdGhlIGFjdHVhbCByZWNvcmQuIFRoaXMgY291bGQgcG9zc2libHlcbi0gKiBiZSBpbXByb3ZlZCBieSBhbHdheXMgcmVhZGluZyBhIG1pbmltdW0gc2l6ZSBvZiBhcm91bmQgMTAwIGJ5dGVzIGFuZFxuLSAqIHR1Y2tpbmcgYW55IHN1cGVyZmx1b3VzIGJ5dGVzIGF3YXkgaW4gYSB0ZW1wb3Jhcnkgc3RvcmUuIFN0aWxsLCB0aGF0XG4tICogbGVhdmVzIHdyaXRlIHJlcXVlc3RzIG91dCBpbiB0aGUgcmFpbi4gQW4gYWx0ZXJuYXRpdmUgbWF5IGJlIHRvIHBlZWsgYXRcbi0gKiB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSwgYW5kIGlmIGl0IG1hdGNoZXMgdGhlIG5leHQgVENQIHNlcXVlbmNlXG4tICogbnVtYmVyLCB0byBleHRyYWN0IHRoZSByZWNvcmQgbWFya2VyLiBZdWNrLlxuLSAqXG4gICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggXHUwMDNjb2tpckBtb25hZC5zd2IuZGVcdTAwM2VcbiAgKi9cbiBcbkBAIC0yMzgsMTM4ICYjNDM7MjI5LDYgQEAgc3RhdGljIGludCBzdmNfb25lX3NvY2tfbmFtZShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIGNoYXIgKmJ1ZiwgaW50IHJlbWFpbmluZylcbiBcdHJldHVybiBsZW47XG4gfVxuIFxuLXN0YXRpYyBpbnRcbi1zdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnLCBpbnQgcmV0KVxuLXtcbi1cdHU4IGNvbnRlbnRfdHlwZSA9IHRsc19nZXRfcmVjb3JkX3R5cGUoc29jay1cdTAwM2VzaywgY21zZyk7XG4tXHR1OCBsZXZlbCwgZGVzY3JpcHRpb247XG4tXG4tXHRzd2l0Y2ggKGNvbnRlbnRfdHlwZSkge1xuLVx0Y2FzZSAwOlxuLVx0XHRicmVhaztcbi1cdGNhc2UgVExTX1JFQ09SRF9UWVBFX0RBVEE6XG4tXHRcdC8qIFRMUyBzZXRzIEVPUiBhdCB0aGUgZW5kIG9mIGVhY2ggYXBwbGljYXRpb24gZGF0YVxuLVx0XHQgKiByZWNvcmQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIG1vcmUgZnJhbWVzXG4tXHRcdCAqIHdhaXRpbmcgdG8gYmUgZGVjcnlwdGVkLlxuLVx0XHQgKi9cbi1cdFx0bXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjY9IH5NU0dfRU9SO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVExTX1JFQ09SRF9UWVBFX0FMRVJUOlxuLVx0XHR0bHNfYWxlcnRfcmVjdihzb2NrLVx1MDAzZXNrLCBtc2csIFx1MDAyNmxldmVsLCBcdTAwMjZkZXNjcmlwdGlvbik7XG4tXHRcdHJldCA9IChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpID9cbi1cdFx0XHQtRU5PVENPTk4gOiAtRUFHQUlOO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdC8qIGRpc2NhcmQgdGhpcyByZWNvcmQgdHlwZSAqL1xuLVx0XHRyZXQgPSAtRUFHQUlOO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGludFxuLXN2Y190Y3Bfc29ja19yZWN2X2Ntc2coc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50ICptc2dfZmxhZ3MpXG4te1xuLVx0dW5pb24ge1xuLVx0XHRzdHJ1Y3QgY21zZ2hkclx0Y21zZztcbi1cdFx0dThcdFx0YnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHU4KSldO1xuLVx0fSB1O1xuLVx0dTggYWxlcnRbMl07XG4tXHRzdHJ1Y3Qga3ZlYyBhbGVydF9rdmVjID0ge1xuLVx0XHQuaW92X2Jhc2UgPSBhbGVydCxcbi1cdFx0Lmlvdl9sZW4gPSBzaXplb2YoYWxlcnQpLFxuLVx0fTtcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuLVx0XHQubXNnX2ZsYWdzID0gKm1zZ19mbGFncyxcbi1cdFx0Lm1zZ19jb250cm9sID0gXHUwMDI2dSxcbi1cdFx0Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKHUpLFxuLVx0fTtcbi1cdGludCByZXQ7XG4tXG4tXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBcdTAwMjZhbGVydF9rdmVjLCAxLFxuLVx0XHQgICAgICBhbGVydF9rdmVjLmlvdl9sZW4pO1xuLVx0cmV0ID0gc29ja19yZWN2bXNnKHNvY2ssIFx1MDAyNm1zZywgTVNHX0RPTlRXQUlUKTtcbi1cdGlmIChyZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLVx1MDAzZXNrLCBcdTAwMjZ1LmNtc2cpID09IFRMU19SRUNPUkRfVFlQRV9BTEVSVCkge1xuLVx0XHRpb3ZfaXRlcl9yZXZlcnQoXHUwMDI2bXNnLm1zZ19pdGVyLCByZXQpO1xuLVx0XHRyZXQgPSBzdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHNvY2ssIFx1MDAyNm1zZywgXHUwMDI2dS5jbXNnLCAtRUFHQUlOKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi1zdmNfdGNwX3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRpbnQgcmV0O1xuLVx0c3RydWN0IHNvY2tldCAqc29jayA9IHN2c2stXHUwMDNlc2tfc29jaztcbi1cbi1cdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBtc2csIE1TR19ET05UV0FJVCk7XG4tXHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0NUUlVOQykge1xuLVx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNj0gfihNU0dfQ1RSVU5DIHwgTVNHX0VPUik7XG4tXHRcdGlmIChyZXQgPT0gMCB8fCByZXQgPT0gLUVJTylcbi1cdFx0XHRyZXQgPSBzdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHNvY2ssIFx1MDAyNm1zZy1cdTAwM2Vtc2dfZmxhZ3MpO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tI2lmIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRVxuLXN0YXRpYyB2b2lkIHN2Y19mbHVzaF9idmVjKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHNlZWspXG4te1xuLVx0c3RydWN0IGJ2ZWNfaXRlciBiaSA9IHtcbi1cdFx0LmJpX3NpemVcdD0gc2l6ZSAmIzQzOyBzZWVrLFxuLVx0fTtcbi1cdHN0cnVjdCBiaW9fdmVjIGJ2O1xuLVxuLVx0YnZlY19pdGVyX2FkdmFuY2UoYnZlYywgXHUwMDI2YmksIHNlZWsgXHUwMDI2IFBBR0VfTUFTSyk7XG4tXHRmb3JfZWFjaF9idmVjKGJ2LCBidmVjLCBiaSwgYmkpXG4tXHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJ2LmJ2X3BhZ2UpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsXG4tXHRcdFx0XHQgIHNpemVfdCBzZWVrKVxuLXtcbi19XG4tI2VuZGlmXG4tXG4tLypcbi0gKiBSZWFkIGZyb20gQHJxc3RwJiMzOTtzIHRyYW5zcG9ydCBzb2NrZXQuIFRoZSBpbmNvbWluZyBtZXNzYWdlIGZpbGxzIHdob2xlXG4tICogcGFnZXMgaW4gQHJxc3RwJiMzOTtzIHJxX3BhZ2VzIGFycmF5IHVudGlsIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIG1lc3NhZ2Vcbi0gKiBoYXMgYmVlbiByZWNlaXZlZCBpbnRvIGEgcGFydGlhbCBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tc2coc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc2l6ZV90IGJ1Zmxlbixcbi1cdFx0XHRcdHNpemVfdCBzZWVrKVxuLXtcbi1cdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9XG4tXHRcdGNvbnRhaW5lcl9vZihycXN0cC1cdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xuLVx0c3RydWN0IGJpb192ZWMgKmJ2ZWMgPSBycXN0cC1cdTAwM2VycV9idmVjO1xuLVx0c3RydWN0IG1zZ2hkciBtc2cgPSB7IE5VTEwgfTtcbi1cdHVuc2lnbmVkIGludCBpO1xuLVx0c3NpemVfdCBsZW47XG4tXHRzaXplX3QgdDtcbi1cbi1cdGNsZWFyX2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4tXG4tXHRmb3IgKGkgPSAwLCB0ID0gMDsgdCBcdTAwM2MgYnVmbGVuOyBpJiM0MzsmIzQzOywgdCAmIzQzOz0gUEFHRV9TSVpFKVxuLVx0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWNbaV0sIHJxc3RwLVx1MDAzZXJxX3BhZ2VzW2ldLCBQQUdFX1NJWkUsIDApO1xuLVxuLVx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYnZlYywgaSwgYnVmbGVuKTtcbi1cdGlmIChzZWVrKSB7XG4tXHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2bXNnLm1zZ19pdGVyLCBzZWVrKTtcbi1cdFx0YnVmbGVuIC09IHNlZWs7XG4tXHR9XG4tXHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcdTAwMjZtc2cpO1xuLVx0aWYgKGxlbiBcdTAwM2UgMClcbi1cdFx0c3ZjX2ZsdXNoX2J2ZWMoYnZlYywgbGVuLCBzZWVrKTtcbi1cbi1cdC8qIElmIHdlIHJlYWQgYSBmdWxsIHJlY29yZCwgdGhlbiBhc3N1bWUgdGhlcmUgbWF5IGJlIG1vcmVcbi1cdCAqIGRhdGEgdG8gcmVhZCAoc3RyZWFtIGJhc2VkIHNvY2tldHMgb25seSEpXG4tXHQgKi9cbi1cdGlmIChsZW4gPT0gYnVmbGVuKVxuLVx0XHRzZXRfYml0KFhQVF9EQVRBLCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2ZsYWdzKTtcbi1cbi1cdHJldHVybiBsZW47XG4tfVxuLVxuIC8qXG4gICogU2V0IHNvY2tldCBzbmQgYW5kIHJjdiBidWZmZXIgbGVuZ3Roc1xuICAqL1xuQEAgLTEwNDgsNTAgJiM0Mzs5MDcsNiBAQCBzdGF0aWMgdm9pZCBzdmNfdGNwX2NsZWFyX3BhZ2VzKHN0cnVjdCBzdmNfc29jayAqc3ZzaylcbiBcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiA9IDA7XG4gfVxuIFxuLS8qXG4tICogUmVjZWl2ZSBmcmFnbWVudCByZWNvcmQgaGVhZGVyIGludG8gc2tfbWFya2VyLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3RydWN0IHN2Y19zb2NrICpzdnNrLFxuLVx0XHRcdFx0ICAgc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi17XG4tXHRzc2l6ZV90IHdhbnQsIGxlbjtcbi1cbi1cdC8qIElmIHdlIGhhdmVuJiMzOTt0IGdvdHRlbiB0aGUgcmVjb3JkIGxlbmd0aCB5ZXQsXG4tXHQgKiBnZXQgdGhlIG5leHQgZm91ciBieXRlcy5cbi1cdCAqL1xuLVx0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIFx1MDAzYyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7XG4tXHRcdHN0cnVjdCBtc2doZHJcdG1zZyA9IHsgTlVMTCB9O1xuLVx0XHRzdHJ1Y3Qga3ZlY1x0aW92O1xuLVxuLVx0XHR3YW50ID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAtIHN2c2stXHUwMDNlc2tfdGNwbGVuO1xuLVx0XHRpb3YuaW92X2Jhc2UgPSAoKGNoYXIgKilcdTAwMjZzdnNrLVx1MDAzZXNrX21hcmtlcikgJiM0Mzsgc3Zzay1cdTAwM2Vza190Y3BsZW47XG4tXHRcdGlvdi5pb3ZfbGVuICA9IHdhbnQ7XG4tXHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmlvdiwgMSwgd2FudCk7XG4tXHRcdGxlbiA9IHN2Y190Y3Bfc29ja19yZWN2bXNnKHN2c2ssIFx1MDAyNm1zZyk7XG4tXHRcdGlmIChsZW4gXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGxlbjtcbi1cdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gJiM0Mzs9IGxlbjtcbi1cdFx0aWYgKGxlbiBcdTAwM2Mgd2FudCkge1xuLVx0XHRcdC8qIGNhbGwgYWdhaW4gdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzICovXG4tXHRcdFx0Z290byBlcnJfc2hvcnQ7XG4tXHRcdH1cbi1cdFx0dHJhY2Vfc3Zjc29ja19tYXJrZXIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzdnNrLVx1MDAzZXNrX21hcmtlcik7XG4tXHRcdGlmIChzdmNfc29ja19yZWNsZW4oc3ZzaykgJiM0Mzsgc3Zzay1cdTAwM2Vza19kYXRhbGVuIFx1MDAzZVxuLVx0XHQgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbWF4X21lc2cpXG4tXHRcdFx0Z290byBlcnJfdG9vX2xhcmdlO1xuLVx0fVxuLVx0cmV0dXJuIHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcbi1cbi1lcnJfdG9vX2xhcmdlOlxuLVx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcJiMzNDtzdmM6ICVzIG92ZXJzaXplZCBSUEMgZnJhZ21lbnQgKCV1IG9jdGV0cykgZnJvbSAlcElTcGNcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIHN2c2stXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVx1MDAzZXN2X25hbWUsXG4tXHRcdFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbi1cdFx0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcbi1cdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4tZXJyX3Nob3J0OlxuLVx0cmV0dXJuIC1FQUdBSU47XG4tfVxuLVxuIHN0YXRpYyBpbnQgcmVjZWl2ZV9jYl9yZXBseShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4ge1xuIFx0c3RydWN0IHJwY194cHJ0ICpiY194cHJ0ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9iY194cHJ0O1xuQEAgLTExMzQsMTYgJiM0Mzs5NDksMTQ0IEBAIHN0YXRpYyB2b2lkIHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3RydWN0IHN2Y19zb2NrICpzdnNrKVxuIFx0c3Zzay1cdTAwM2Vza19tYXJrZXIgPSB4ZHJfemVybztcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHJlYWRfc29jayBkYXRhIGFjdG9yOiByZWNlaXZlcyBhcHBsaWNhdGlvbiBkYXRhIGZyb20gdGhlXG4mIzQzOyAqIHRyYW5zcG9ydCBzb2NrZXQsIHBhcnNpbmcgdGhlIFJQQyByZWNvcmQgc3RyZWFtIChmcmFnbWVudFxuJiM0MzsgKiBoZWFkZXJzIGFuZCBtZXNzYWdlIGJvZGllcykgYW5kIGFzc2VtYmxpbmcgY29tcGxldGUgUlBDXG4mIzQzOyAqIG1lc3NhZ2VzIGludG8gcnFzdHAtXHUwMDNlcnFfcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLVx1MDAzZWFyZy5kYXRhO1xuJiM0MztcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YocnFzdHAtXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcbiYjNDM7XHRzaXplX3QgcmVjbGVuLCByZWNlaXZlZCwgd2FudCwgdGFrZSwgZG9uZSwgbjtcbiYjNDM7XHRzaXplX3QgY29uc3VtZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRlc2MtXHUwMDNlY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIFx1MDAzYyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7XG4mIzQzO1x0XHR3YW50ID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAtIHN2c2stXHUwMDNlc2tfdGNwbGVuO1xuJiM0MztcdFx0biA9IG1pbih3YW50LCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdCAgKGNoYXIgKilcdTAwMjZzdnNrLVx1MDAzZXNrX21hcmtlciAmIzQzO1xuJiM0MztcdFx0XHRcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4sIG4pKVxuJiM0MztcdFx0XHRnb3RvIGZhdWx0O1xuJiM0MztcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gJiM0Mzs9IG47XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IG47XG4mIzQzO1x0XHRsZW4gLT0gbjtcbiYjNDM7XHRcdGNvbnN1bWVkICYjNDM7PSBuO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdnNrLVx1MDAzZXNrX3RjcGxlbiBcdTAwM2Mgc2l6ZW9mKHJwY19mcmFnaGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGNvbnN1bWVkO1xuJiM0MztcbiYjNDM7XHRcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc3Zzay1cdTAwM2Vza19tYXJrZXIpO1xuJiM0MztcdFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSAmIzQzOyBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXG4mIzQzO1x0XHQgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbWF4X21lc2cpIHtcbiYjNDM7XHRcdFx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcJiMzNDtzdmM6ICVzIG92ZXJzaXplZCBSUEMgZnJhZ21lbnQgKCV1IG9jdGV0cykgZnJvbSAlcElTcGNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdmNfc29ja19yZWNsZW4oc3ZzayksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2VlcnJvciA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4mIzQzO1x0XHRcdHJldHVybiBjb25zdW1lZDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlY2xlbiA9IHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcbiYjNDM7XHRyZWNlaXZlZCA9IHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKTtcbiYjNDM7XHR3YW50ID0gcmVjbGVuIC0gcmVjZWl2ZWQ7XG4mIzQzO1x0dGFrZSA9IG1pbih3YW50LCBsZW4pO1xuJiM0MztcdGRvbmUgPSAwO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoZG9uZSBcdTAwM2MgdGFrZSkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBnID0gc3Zzay1cdTAwM2Vza19kYXRhbGVuIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBnX29mZiA9IHN2c2stXHUwMDNlc2tfZGF0YWxlbiBcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xuJiM0MztcdFx0c2l6ZV90IGNodW5rID0gbWluKHRha2UgLSBkb25lLFxuJiM0MztcdFx0XHRcdCAgIFBBR0VfU0laRSAtIChzaXplX3QpcGdfb2ZmKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCxcbiYjNDM7XHRcdFx0XHQgIHBhZ2VfYWRkcmVzcyhycXN0cC1cdTAwM2VycV9wYWdlc1twZ10pICYjNDM7IHBnX29mZixcbiYjNDM7XHRcdFx0XHQgIGNodW5rKSlcbiYjNDM7XHRcdFx0Z290byBmYXVsdDtcbiYjNDM7XHRcdGZsdXNoX2RjYWNoZV9wYWdlKHJxc3RwLVx1MDAzZXJxX3BhZ2VzW3BnXSk7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IGNodW5rO1xuJiM0MztcdFx0ZG9uZSAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRzdnNrLVx1MDAzZXNrX2RhdGFsZW4gJiM0Mzs9IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7XHRzdnNrLVx1MDAzZXNrX3RjcGxlbiAmIzQzOz0gdGFrZTtcbiYjNDM7XHRjb25zdW1lZCAmIzQzOz0gdGFrZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSBcdTAwM2U9IHJlY2xlbikge1xuJiM0MztcdFx0aWYgKHN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSlcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3Zzayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29uc3VtZWQ7XG4mIzQzO1xuJiM0MztmYXVsdDpcbiYjNDM7XHRkZXNjLVx1MDAzZWVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbiYjNDM7XHRyZXR1cm4gY29uc3VtZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHJlYWRfc29ja19yZWN0eXBlIG5vbi1kYXRhIHJlY29yZCBhY3RvcjogcmVjZWl2ZXMgbm9uLWRhdGEgVExTXG4mIzQzOyAqIHJlY29yZHMgKGFsZXJ0cywgaGFuZHNoYWtlIG1lc3NhZ2VzKSBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG9cbiYjNDM7ICogdHJhbnNwb3J0LWxldmVsIGFjdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCB0byBjb25zdW1lIHRoZSByZWNvcmQgYW5kIGFsbG93IHRoZSBUTFMgbGF5ZXIgdG9cbiYjNDM7ICogY29udGludWUgZGVsaXZlcmluZyBzdWJzZXF1ZW50IHJlY29yZHMuIEEgbmVnYXRpdmUgcmV0dXJuXG4mIzQzOyAqIGNhdXNlcyB0aGUgVExTIGxheWVyIHRvIHJlcXVldWUgdGhlIHNrYiBvbiBpdHMgcnhfbGlzdCxcbiYjNDM7ICogYmxvY2tpbmcgYWxsIGZ1cnRoZXIgcmVjb3JkIGRlbGl2ZXJ5IG9uIHRoaXMgY29ubmVjdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLFxuJiM0MztcdFx0XHRcdCB1OCByZWN0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN2Y19ycXN0ICpycXN0cCA9IGRlc2MtXHUwMDNlYXJnLmRhdGE7XG4mIzQzO1x0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihycXN0cC1cdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHJlY3R5cGUpIHtcbiYjNDM7XHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDoge1xuJiM0MztcdFx0dTggYWxlcnRbMl0gPSB7fSwgbGV2ZWwsIGRlc2NyaXB0aW9uO1xuJiM0MztcdFx0c3RydWN0IGt2ZWMga3ZlYyA9IHtcbiYjNDM7XHRcdFx0Lmlvdl9iYXNlID0gYWxlcnQsXG4mIzQzO1x0XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSxcbiYjNDM7XHRcdH07XG4mIzQzO1x0XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9O1xuJiM0MztcbiYjNDM7XHRcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LCBhbGVydCwgbWluKGxlbiwgc2l6ZW9mKGFsZXJ0KSkpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmt2ZWMsIDEsIHNpemVvZihhbGVydCkpO1xuJiM0MztcdFx0dGxzX2FsZXJ0X3JlY3Yoc3Zzay1cdTAwM2Vza19zaywgXHUwMDI2bXNnLCBcdTAwMjZsZXZlbCwgXHUwMDI2ZGVzY3JpcHRpb24pO1xuJiM0MztcdFx0aWYgKGxldmVsID09IFRMU19BTEVSVF9MRVZFTF9GQVRBTCkge1xuJiM0MztcdFx0XHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuJiM0MztcdFx0XHRkZXNjLVx1MDAzZWVycm9yID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHN2Y190Y3BfcmVjdmZyb20gLSBSZWNlaXZlIGRhdGEgZnJvbSBhIFRDUCBzb2NrZXRcbiAgKiBAcnFzdHA6IHJlcXVlc3Qgc3RydWN0dXJlIGludG8gd2hpY2ggdG8gcmVjZWl2ZSBhbiBSUEMgQ2FsbFxuICAqXG4gICogQ2FsbGVkIGluIGEgbG9vcCB3aGVuIFhQVF9EQVRBIGhhcyBiZWVuIHNldC5cbiAgKlxuLSAqIFJlYWQgdGhlIDQtYnl0ZSBzdHJlYW0gcmVjb3JkIG1hcmtlciwgdGhlbiB1c2UgdGhlIHJlY29yZCBsZW5ndGhcbi0gKiBpbiB0aGF0IG1hcmtlciB0byBzZXQgdXAgZXhhY3RseSB0aGUgcmVzb3VyY2VzIG5lZWRlZCB0byByZWNlaXZlXG4tICogdGhlIG5leHQgUlBDIG1lc3NhZ2UgaW50byBAcnFzdHAuXG4tICpcbiAgKiBSZXR1cm5zOlxuICAqICAgT24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHJlY2VpdmVkIFJQQyBDYWxsLCBvclxuICAqICAgJTAgaWYgYSBjb21wbGV0ZSBSUEMgQ2FsbCBtZXNzYWdlIHdhcyBub3QgcmVhZHkgdG8gcmV0dXJuXG5AQCAtMTE1NywyNiAmIzQzOzExMDAsNDAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4gXHRzdHJ1Y3Qgc3ZjX3NvY2tcdCpzdnNrID1cbiBcdFx0Y29udGFpbmVyX29mKHJxc3RwLVx1MDAzZXJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7XG4gXHRzdHJ1Y3Qgc3ZjX3NlcnZcdCpzZXJ2ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXI7XG4tXHRzaXplX3Qgd2FudCwgYmFzZTtcbiYjNDM7XHRzdHJ1Y3Qgc29ja1x0KnNrID0gc3Zzay1cdTAwM2Vza19zaztcbiYjNDM7XHRyZWFkX2Rlc2NyaXB0b3JfdCBkZXNjID0ge1xuJiM0MztcdFx0LmFyZy5kYXRhID0gcnFzdHAsXG4mIzQzO1x0fTtcbiBcdHNzaXplX3QgbGVuO1xuIFx0X19iZTMyICpwO1xuIFx0X19iZTMyIGNhbGxkaXI7XG4gXG4gXHRjbGVhcl9iaXQoWFBUX0RBVEEsIFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpO1xuLVx0bGVuID0gc3ZjX3RjcF9yZWFkX21hcmtlcihzdnNrLCBycXN0cCk7XG4tXHRpZiAobGVuIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yO1xuIFxuLVx0YmFzZSA9IHN2Y190Y3BfcmVzdG9yZV9wYWdlcyhzdnNrLCBycXN0cCk7XG4tXHR3YW50ID0gbGVuIC0gKHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7XG4tXHRsZW4gPSBzdmNfdGNwX3JlYWRfbXNnKHJxc3RwLCBiYXNlICYjNDM7IHdhbnQsIGJhc2UpO1xuLVx0aWYgKGxlbiBcdTAwM2U9IDApIHtcbi1cdFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIGxlbik7XG4tXHRcdHN2c2stXHUwMDNlc2tfdGNwbGVuICYjNDM7PSBsZW47XG4tXHRcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiAmIzQzOz0gbGVuO1xuJiM0MztcdHN2Y190Y3BfcmVzdG9yZV9wYWdlcyhzdnNrLCBycXN0cCk7XG4mIzQzO1x0cnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAtXHUwMDNlcnFfcGFnZXNbMF0pO1xuJiM0MztcbiYjNDM7XHRkZXNjLmNvdW50ID0gc2Vydi1cdTAwM2Vzdl9tYXhfbWVzZztcbiYjNDM7XHRsb2NrX3NvY2soc2spO1xuJiM0MztcdGlmIChzdnNrLVx1MDAzZXNrX3NvY2stXHUwMDNlb3BzLVx1MDAzZXJlYWRfc29ja19yZWN0eXBlKVxuJiM0MztcdFx0bGVuID0gc3Zzay1cdTAwM2Vza19zb2NrLVx1MDAzZW9wcy1cdTAwM2VyZWFkX3NvY2tfcmVjdHlwZShzaywgXHUwMDI2ZGVzYyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgc3ZjX3RjcF9yZWN2X2FjdG9yLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBzdmNfdGNwX3JlY3R5cGVfYWN0b3IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlbiA9IHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrKHNrLCBcdTAwMjZkZXNjLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHN2Y190Y3BfcmVjdl9hY3Rvcik7XG4mIzQzO1x0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MuZXJyb3IgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGxlbiA9IGRlc2MuZXJyb3I7XG4mIzQzO1x0XHRnb3RvIGVycl9kaXNjYXJkO1xuIFx0fVxuLVx0aWYgKGxlbiAhPSB3YW50IHx8ICFzdmNfc29ja19maW5hbF9yZWMoc3ZzaykpXG4mIzQzO1x0aWYgKGRlc2MuY291bnQgIT0gMCkge1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRcdGdvdG8gZXJyX2luY29tcGxldGU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNjIDgpXG4gXHRcdGdvdG8gZXJyX251dHM7XG4gXG5AQCAtMTE4NSw4ICYjNDM7MTE0MiwxMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGlmIChycXN0cC1cdTAwM2VycV9hcmcubGVuIFx1MDAzYz0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbikge1xuIFx0XHRycXN0cC1cdTAwM2VycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gcnFzdHAtXHUwMDNlcnFfYXJnLmxlbjtcbiBcdFx0cnFzdHAtXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gMDtcbi1cdH0gZWxzZVxuLVx0XHRycXN0cC1cdTAwM2VycV9hcmcucGFnZV9sZW4gPSBycXN0cC1cdTAwM2VycV9hcmcubGVuIC0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cnFzdHAtXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gcnFzdHAtXHUwMDNlcnFfYXJnLmxlbiAtXG4mIzQzO1x0XHRcdHJxc3RwLVx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW47XG4mIzQzO1x0fVxuIFxuIFx0cnFzdHAtXHUwMDNlcnFfeHBydF9jdHh0ICAgPSBOVUxMO1xuIFx0cnFzdHAtXHUwMDNlcnFfcHJvdFx0ICAgICAgPSBJUFBST1RPX1RDUDtcbkBAIC0xMjA3LDExICYjNDM7MTE2NiwxMyBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGlmIChsZW4gXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHJxc3RwLVx1MDAzZXJxX2FyZy5sZW4pO1xuIFx0c3ZjX3hwcnRfY29weV9hZGRycyhycXN0cCwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbiBcdGlmIChzZXJ2LVx1MDAzZXN2X3N0YXRzKVxuIFx0XHRzZXJ2LVx1MDAzZXN2X3N0YXRzLVx1MDAzZW5ldHRjcGNudCYjNDM7JiM0Mzs7XG4gXG4gXHRzdmNfc29ja19zZWN1cmVfcG9ydChycXN0cCk7XG4mIzQzO1x0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cdTAwM2VycV94cHJ0KTtcbiBcdHJldHVybiBycXN0cC1cdTAwM2VycV9hcmcubGVuO1xuIFxuQEAgLTEyMTksOSAmIzQzOzExODAsNyBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdHN2Y190Y3Bfc2F2ZV9wYWdlcyhzdnNrLCBycXN0cCk7XG4gXHRpZiAobGVuIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBsZW4gIT0gLUVBR0FJTilcbiBcdFx0Z290byBlcnJfZGVsZXRlO1xuLVx0aWYgKGxlbiA9PSB3YW50KVxuLVx0XHRzdmNfdGNwX2ZyYWdtZW50X3JlY2VpdmVkKHN2c2spO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChzdnNrLVx1MDAzZXNrX3RjcGxlbiBcdTAwM2U9IHNpemVvZihycGNfZnJhZ2hkcikpXG4gXHRcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3Zfc2hvcnQoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LFxuIFx0XHRcdFx0c3ZjX3NvY2tfcmVjbGVuKHN2c2spLFxuIFx0XHRcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gLSBzaXplb2YocnBjX2ZyYWdoZHIpKTtcbkBAIC0xMjMzLDEyICYjNDM7MTE5MiwyMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGdvdG8gZXJyX25vY2xvc2U7XG4gZXJyX251dHM6XG4gXHRzdnNrLVx1MDAzZXNrX2RhdGFsZW4gPSAwO1xuJiM0MztcdGdvdG8gZXJyX2RlbGV0ZTtcbiYjNDM7ZXJyX2Rpc2NhcmQ6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDbGVhciBza19kYXRhbGVuIHNvIHRoZSB0ZWFyZG93bi10aW1lXG4mIzQzO1x0ICogc3ZjX3RjcF9jbGVhcl9wYWdlcygpIGRvZXMgbm90IHdhbGsgdGhlIGVtcHRpZWRcbiYjNDM7XHQgKiBzdnNrLVx1MDAzZXNrX3BhZ2VzW10uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Zzay1cdTAwM2Vza19kYXRhbGVuID0gMDtcbiBlcnJfZGVsZXRlOlxuIFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9lcnIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBsZW4pO1xuIFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbiBlcnJfbm9jbG9zZTpcbiBcdHN2Y194cHJ0X3JlY2VpdmVkKHJxc3RwLVx1MDAzZXJxX3hwcnQpO1xuLVx0cmV0dXJuIDA7XHQvKiByZWNvcmQgbm90IGNvbXBsZXRlICovXG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHMuaCBiL25ldC90bHMvdGxzLmhcbmluZGV4IDYwYTM3YmRhYWEyNTA2Li5jMjFkMmE5ODVlMTM3MyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzLmhcbkBAIC0xNjgsNiAmIzQzOzE2OCw5IEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHQgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpO1xuJiM0MztpbnQgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4mIzQzO1x0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4mIzQzO1x0XHRcdCAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7XG4gXG4gaW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xuIHZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggOGM1ODhjZGFiNzMzZGEuLjQ5NjNlMGNhZjZkNTNhIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC05NDksMTIgJiM0Mzs5NDksMTcgQEAgc3RhdGljIHZvaWQgYnVpbGRfcHJvdG9fb3BzKHN0cnVjdCBwcm90b19vcHMgb3BzW1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR11cbiBcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnNwbGljZV9yZWFkXHQ9IHRsc19zd19zcGxpY2VfcmVhZDtcbiBcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnBvbGxcdFx0PSB0bHNfc2tfcG9sbDtcbiBcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja1x0PSB0bHNfc3dfcmVhZF9zb2NrO1xuJiM0MztcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbiBcbiBcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbiYjNDM7XHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZVx0PSB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGU7XG4gXG4mIzQzO1x0LyogVExTX0hXIChkZXZpY2Ugb2ZmbG9hZCkgUlggZW50cmllcyBpbmhlcml0XG4mIzQzO1x0ICogcmVhZF9zb2NreyxfcmVjdHlwZX0gZnJvbSBTVyB2aWEgdGhlIHN0cnVjdCBjb3BpZXMgYmVsb3cuXG4mIzQzO1x0ICovXG4gI2lmZGVmIENPTkZJR19UTFNfREVWSUNFXG4gXHRvcHNbVExTX0hXICBdW1RMU19CQVNFXSA9IG9wc1tUTFNfQkFTRV1bVExTX0JBU0VdO1xuIFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N3LmMgYi9uZXQvdGxzL3Rsc19zdy5jXG5pbmRleCBkNGFmYzkwZmQ3OTY2ZS4uYWYzNDdiNWIxN2ZhOGMgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19zdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19zdy5jXG5AQCAtMjA0OSwxNCAmIzQzOzIwNDksMjEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbiBcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xuIH1cbiBcbi1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLVx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuJiM0MzsvKiBDb25zZWN1dGl2ZSBlbXB0eSBkYXRhIHJlY29yZHMgZGVsaXZlciBubyBieXRlczsgY2FwIHRoZW0gcGVyXG4mIzQzOyAqIGNhbGwgc28gYSBwZWVyIHN0cmVhbWluZyB0aGVtIGNhbm5vdCBob2xkIHRoZSBzb2NrZXQgbG9jayBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBUTFNfUlhfTk9EQVRBX0xJTUlUIDE2XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuJiM0MztcdFx0XHQgICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcbiYjNDM7XHRcdFx0ICAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3RvcilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCA9IHRsc19zd19jdHhfcngodGxzX2N0eCk7XG4gXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xuIFx0c3RydWN0IHN0cnBfbXNnICpyeG0gPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5vZGF0YV9jb3VudCA9IDA7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0c2l6ZV90IGZsdXNoZWRfYXQgPSAwO1xuIFx0Ym9vbCByZWxlYXNlZCA9IHRydWU7XG5AQCAtMjEwOSwxMCAmIzQzOzIxMTYsMjcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcbiBcdFx0fVxuIFxuLVx0XHQvKiByZWFkX3NvY2sgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGNvbnRyb2wgbWVzc2FnZXMgKi9cbiYjNDM7XHRcdC8qIENvbnRyb2wgcmVjb3JkcyAoYWxlcnRzLCBoYW5kc2hha2UpIHJlYWNoIGEgY29uc3VtZXJcbiYjNDM7XHRcdCAqIG9ubHkgdGhyb3VnaCByZWN0eXBlX2FjdG9yOyB3aXRob3V0IG9uZSwgcmVhZF9zb2NrXG4mIzQzO1x0XHQgKiByZWplY3RzIHRoZW0uXG4mIzQzO1x0XHQgKi9cbiBcdFx0aWYgKHRsbS1cdTAwM2Vjb250cm9sICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuJiM0MztcdFx0XHRpZiAoIXJlY3R5cGVfYWN0b3IpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0ZXJyID0gcmVjdHlwZV9hY3RvcihkZXNjLCBza2IsIHJ4bS1cdTAwM2VvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHQgcnhtLVx1MDAzZWZ1bGxfbGVuLFxuJiM0MztcdFx0XHRcdFx0IHRsbS1cdTAwM2Vjb250cm9sKTtcbiYjNDM7XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0XHQvKiByZWN0eXBlX2FjdG9yIGNvbnN1bWVzIHRoZSB3aG9sZSByZWNvcmQ7IG5vIHBhcnRpYWwgcGF0aCAqL1xuJiM0MztcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0XHRza2IgPSBOVUxMO1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO25vZGF0YV9jb3VudCBcdTAwM2U9IFRMU19SWF9OT0RBVEFfTElNSVQpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4gXHRcdC8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIChsZWdhbCBpbiBUTFMgMS4zKSBnaXZlcyBhIHplcm9cbkBAIC0yMTIyLDcgJiM0MzsyMTQ2LDEzIEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdCAqIGhlcmUgaW5zdGVhZC5cbiBcdFx0ICovXG4gXHRcdGlmIChyeG0tXHUwMDNlZnVsbF9sZW4gPT0gMCkge1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdC8qIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBhbnkgcGFyc2VkIHJlY29yZFxuJiM0MztcdFx0XHQgKiBvbiBleGl0LCBzbyByZXR1cm5pbmcgMCBoZXJlIGNhbm5vdCBzdHJhbmQgaXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO25vZGF0YV9jb3VudCBcdTAwM2U9IFRMU19SWF9OT0RBVEFfTElNSVQpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0yMTMzLDYgJiM0MzsyMTYzLDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuIFx0XHR9XG4gXHRcdGNvcGllZCAmIzQzOz0gdXNlZDtcbiYjNDM7XHRcdG5vZGF0YV9jb3VudCA9IDA7XG4gXHRcdGlmICh1c2VkIFx1MDAzYyByeG0tXHUwMDNlZnVsbF9sZW4pIHtcbiBcdFx0XHRyeG0tXHUwMDNlb2Zmc2V0ICYjNDM7PSB1c2VkO1xuIFx0XHRcdHJ4bS1cdTAwM2VmdWxsX2xlbiAtPSB1c2VkO1xuQEAgLTIxNTEsNiAmIzQzOzIxODIsMTkgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdGdvdG8gcmVhZF9zb2NrX2VuZDtcbiB9XG4gXG4mIzQzO2ludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4mIzQzO1x0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiYjNDM7XHRcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcbiYjNDM7XHRcdFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgcmVjdHlwZV9hY3Rvcik7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuaW5kZXggY2JkZDNlYTI4Yjk5OGYuLjgxMzYzMDZiNWNhYTc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbkBAIC00MjcsNyAmIzQzOzQyNyw4IEBAIEZJWFRVUkVfU0VUVVAodGxzKVxuIFxuIEZJWFRVUkVfVEVBUkRPV04odGxzKVxuIHtcbi1cdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuIFx0Y2xvc2Uoc2VsZi1cdTAwM2VjZmQpO1xuIH1cbiBcbkBAIC04OTcsNiAmIzQzOzg5OCwxMTQgQEAgVEVTVF9GKHRscywgc3BsaWNlX2RlY19jbXNnX3RvX3BpcGUpXG4gXHRFWFBFQ1RfRVEobWVtY21wKHRlc3Rfc3RyLCBidWYsIHNlbmRfbGVuKSwgMCk7XG4gfVxuIFxuJiM0MzsvKiBWZXJpZnkgc3BsaWNlIGhhbmRsZXMgZGF0YS1jb250cm9sLWRhdGE6IHNwbGljZSByZWFkcyB0aGUgZGF0YVxuJiM0MzsgKiByZWNvcmRzIHN1Y2Nlc3NmdWxseSB3aGlsZSB0aGUgaW50ZXJ2ZW5pbmcgY29udHJvbCByZWNvcmQgbXVzdFxuJiM0MzsgKiBiZSBkcmFpbmVkIHZpYSByZWN2bXNnIGJlZm9yZSBzcGxpY2UgY2FuIGNvbnRpbnVlLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgc3BsaWNlX2RhdGFfY21zZ19kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbiYjNDM7XHRjaGFyIG1lbV9yZWN2W1RMU19QQVlMT0FEX01BWF9MRU5dO1xuJiM0MztcdGludCBzZW5kX2xlbiA9IDQwOTY7XG4mIzQzO1x0Y2hhciAqY3RybF9zdHIgPSBcJiMzNDtjb250cm9sXCYjMzQ7O1xuJiM0MztcdGludCBjdHJsX2xlbiA9IHN0cmxlbihjdHJsX3N0cikgJiM0MzsgMTtcbiYjNDM7XHRjaGFyIGN0cmxfYnVmWzhdO1xuJiM0MztcdGludCBwWzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2VuZDogZGF0YSwgY29udHJvbCwgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmxfc3RyLCBjdHJsX2xlbiwgMCksXG4mIzQzO1x0XHQgIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpY2UgZmlyc3QgZGF0YSByZWNvcmQgKi9cbiYjNDM7XHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGljZSBoaXRzIGNvbnRyb2wgcmVjb3JkLCBmYWlscyAqL1xuJiM0MztcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gdGhlIGNvbnRyb2wgcmVjb3JkIHZpYSByZWN2bXNnICovXG4mIzQzO1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuJiM0MztcdFx0XHRcdGN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksXG4mIzQzO1x0XHQgIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGN0cmxfc3RyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaWNlIHNlY29uZCBkYXRhIHJlY29yZCAqL1xuJiM0MztcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFZlcmlmeSB0aGF0IG11bHRpcGxlIGNvbnNlY3V0aXZlIGNvbnRyb2wgcmVjb3JkcyBiZXR3ZWVuIGRhdGFcbiYjNDM7ICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzXG4mIzQzOyAqIGFmdGVyd2FyZC4gIFRoZSB0d28gY29udHJvbCByZWNvcmRzIHVzZSBkaWZmZXJlbnQgY29udGVudCB0eXBlc1xuJiM0MzsgKiB0byB2ZXJpZnkgdHlwZSBwcmVzZXJ2YXRpb24gYWNyb3NzIHRoZSBzcGxpY2UgYm91bmRhcnkuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCBzcGxpY2VfbXVsdGlfY21zZ19kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbiYjNDM7XHRjaGFyIG1lbV9yZWN2W1RMU19QQVlMT0FEX01BWF9MRU5dO1xuJiM0MztcdGludCBzZW5kX2xlbiA9IDQwOTY7XG4mIzQzO1x0Y2hhciAqY3RybDEgPSBcJiMzNDthbGVydDFcJiMzNDs7XG4mIzQzO1x0Y2hhciAqY3RybDIgPSBcJiMzNDthbGVydDJcJiMzNDs7XG4mIzQzO1x0aW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmwxKSAmIzQzOyAxO1xuJiM0MztcdGNoYXIgY3RybF9idWZbN107XG4mIzQzO1x0aW50IHBbMl07XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bWVtcm5kKG1lbV9zZW5kLCBzaXplb2YobWVtX3NlbmQpKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBTZW5kOiBkYXRhLCBjb250cm9sKDEwMCksIGNvbnRyb2woMjAwKSwgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjdHJsX2xlbiwgMCksIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAyMDAsIGN0cmwyLCBjdHJsX2xlbiwgMCksIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpY2UgZmlyc3QgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKG1lbV9zZW5kLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaWNlIGZhaWxzIG9uIGZpcnN0IGNvbnRyb2wgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcbiYjNDM7XHQvKiBEcmFpbiBmaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4mIzQzO1x0XHRcdFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcbiYjNDM7XHRcdCAgY3RybF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoY3RybDEsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpY2UgZmFpbHMgb24gc2Vjb25kIGNvbnRyb2wgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcbiYjNDM7XHQvKiBEcmFpbiBzZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovXG4mIzQzO1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMjAwLFxuJiM0MztcdFx0XHRcdGN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksXG4mIzQzO1x0XHQgIGN0cmxfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGN0cmwyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU3BsaWNlIHNlY29uZCBkYXRhICovXG4mIzQzO1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoXHUwMDI2bWVtX3NlbmRbc2VuZF9sZW5dLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0YodGxzLCByZWN2X2FuZF9zcGxpY2UpXG4ge1xuIFx0aW50IHNlbmRfbGVuID0gVExTX1BBWUxPQURfTUFYX0xFTjtcbkBAIC0xNjgyLDYgJiM0MzsxNzkxLDE5MyBAQCBURVNUX0YodGxzLCBkYXRhX2NvbnRyb2xfZGF0YSlcbiBcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTtcbiB9XG4gXG4mIzQzOy8qIEZ1bGx5IGNvbnN1bWUgYSBkYXRhLWNvbnRyb2wtZGF0YSBzZXF1ZW5jZS4gIFRoZSBleGlzdGluZ1xuJiM0MzsgKiBkYXRhX2NvbnRyb2xfZGF0YSB0ZXN0IG9ubHkgcGVla3M7IHRoaXMgZXhlcmNpc2VzIGNvbXBsZXRlXG4mIzQzOyAqIHJlY29yZCBkZWxpdmVyeSB0aHJvdWdoIHJlY3YgYW5kIHJlY3Ztc2cuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCByZWN2X2RhdGFfY21zZ19kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqZGF0YTEgPSBcJiMzNDtmaXJzdF9kYXRhXCYjMzQ7O1xuJiM0MztcdGNoYXIgKmN0cmwgPSBcJiMzNDtjdHJsX21zZ1wmIzM0OztcbiYjNDM7XHRjaGFyICpkYXRhMiA9IFwmIzM0O3NlY29uZF9kYXRhXCYjMzQ7O1xuJiM0MztcdGludCBkMV9sZW4gPSBzdHJsZW4oZGF0YTEpICYjNDM7IDE7XG4mIzQzO1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7XG4mIzQzO1x0aW50IGQyX2xlbiA9IHN0cmxlbihkYXRhMikgJiM0MzsgMTtcbiYjNDM7XHRjaGFyIGJ1ZlsyMF07XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YTEsIGQxX2xlbiwgMCksIGQxX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTtcbiYjNDM7XG4mIzQzO1x0LyogRmlyc3QgZGF0YSByZWNvcmQgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIHJlY3Ygd2l0aG91dCBjbXNnIGJ1ZmZlciBmYWlscyBvbiBjb250cm9sIHJlY29yZCAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUlPKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybCwgY19sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2Vjb25kIGRhdGEgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgZDJfbGVuLCBNU0dfV0FJVEFMTCksIGQyX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEyLCBkMl9sZW4pLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUGVlayBhdCBhbiBpbnRlcmxlYXZlZCBjb250cm9sIHJlY29yZCBhZnRlciB0aGUgcHJlY2VkaW5nIGRhdGFcbiYjNDM7ICogcmVjb3JkIGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGNvbnN1bWUgaXQuICBNU0dfUEVFSyBleHBvc2VzIHRoZVxuJiM0MzsgKiBjb250cm9sIHJlY29yZCYjMzk7cyB0eXBlIHdpdGhvdXQgY29uc3VtaW5nIGl0LlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgcGVla19jbXNnX2FmdGVyX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkYXRhID0gXCYjMzQ7bGVhZGluZ1wmIzM0OztcbiYjNDM7XHRjaGFyICpjdHJsID0gXCYjMzQ7bWlkZGxlXCYjMzQ7O1xuJiM0MztcdGNoYXIgKnRhaWwgPSBcJiMzNDt0cmFpbGluZ1wmIzM0OztcbiYjNDM7XHRpbnQgZF9sZW4gPSBzdHJsZW4oZGF0YSkgJiM0MzsgMTtcbiYjNDM7XHRpbnQgY19sZW4gPSBzdHJsZW4oY3RybCkgJiM0MzsgMTtcbiYjNDM7XHRpbnQgdF9sZW4gPSBzdHJsZW4odGFpbCkgJiM0MzsgMTtcbiYjNDM7XHRjaGFyIGJ1ZlsyMF07XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCB0YWlsLCB0X2xlbiwgMCksIHRfbGVuKTtcbiYjNDM7XG4mIzQzO1x0LyogQ29uc3VtZSBsZWFkaW5nIGRhdGEgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIFBlZWsgYXQgdGhlIGNvbnRyb2wgcmVjb3JkICovXG4mIzQzO1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuJiM0MztcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19QRUVLKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBDb25zdW1lIHRoZSBjb250cm9sIHJlY29yZCAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBUcmFpbGluZyBkYXRhICovXG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgdF9sZW4sIE1TR19XQUlUQUxMKSwgdF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCB0YWlsLCB0X2xlbiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDb250cm9sIHJlY29yZCBhcyB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBzdHJlYW0sIGZvbGxvd2VkIGJ5XG4mIzQzOyAqIGRhdGEuICBUaGUgY29udHJvbCByZWNvcmQgbXVzdCBiZSBkcmFpbmVkIGJlZm9yZSB0aGUgZGF0YSByZWNvcmRcbiYjNDM7ICogYmVjb21lcyBhdmFpbGFibGUuXG4mIzQzOyAqL1xuJiM0MztURVNUX0YodGxzLCBjbXNnX2JlZm9yZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqY3RybCA9IFwmIzM0O2FsZXJ0XCYjMzQ7O1xuJiM0MztcdGNoYXIgKmRhdGEgPSBcJiMzNDtwYXlsb2FkXCYjMzQ7O1xuJiM0MztcdGludCBjX2xlbiA9IHN0cmxlbihjdHJsKSAmIzQzOyAxO1xuJiM0MztcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSAmIzQzOyAxO1xuJiM0MztcdGNoYXIgYnVmWzIwXTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gVExTIHN1cHBvcnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xuJiM0MztcbiYjNDM7XHQvKiByZWN2IHdpdGhvdXQgY21zZyBmYWlscyAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUlPKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybCwgY19sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRGF0YSBmb2xsb3dzICovXG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgZF9sZW4sIE1TR19XQUlUQUxMKSwgZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUd28gZGlmZmVyZW50IGNvbnRyb2wgcmVjb3JkIHR5cGVzIGludGVybGVhdmVkIHdpdGggZGF0YS5cbiYjNDM7ICogRWFjaCBjb250cm9sIHJlY29yZCBpcyBkZWxpdmVyZWQgd2l0aCBpdHMgb3duIHR5cGUgcHJlc2VydmVkO1xuJiM0MzsgKiB2ZXJpZnkgYm90aCB0eXBlcyBhcnJpdmUgaW50YWN0LlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHRscywgbWl4ZWRfY29udHJvbF90eXBlcylcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmRhdGExID0gXCYjMzQ7ZGF0YTFcJiMzNDs7XG4mIzQzO1x0Y2hhciAqY3RybDEgPSBcJiMzNDtoYW5kc2hha2VcJiMzNDs7XG4mIzQzO1x0Y2hhciAqY3RybDIgPSBcJiMzNDthbGVydF9tc2dcJiMzNDs7XG4mIzQzO1x0Y2hhciAqZGF0YTIgPSBcJiMzNDtkYXRhMlwmIzM0OztcbiYjNDM7XHRpbnQgZDFfbGVuID0gc3RybGVuKGRhdGExKSAmIzQzOyAxO1xuJiM0MztcdGludCBjMV9sZW4gPSBzdHJsZW4oY3RybDEpICYjNDM7IDE7XG4mIzQzO1x0aW50IGMyX2xlbiA9IHN0cmxlbihjdHJsMikgJiM0MzsgMTtcbiYjNDM7XHRpbnQgZDJfbGVuID0gc3RybGVuKGRhdGEyKSAmIzQzOyAxO1xuJiM0MztcdGNoYXIgYnVmWzIwXTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gVExTIHN1cHBvcnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBkYXRhMSwgZDFfbGVuLCAwKSwgZDFfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjMV9sZW4sIDApLCBjMV9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDIwMCwgY3RybDIsIGMyX2xlbiwgMCksIGMyX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YTIsIGQyX2xlbiwgMCksIGQyX2xlbik7XG4mIzQzO1xuJiM0MztcdC8qIEZpcnN0IGRhdGEgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIEZpcnN0IGNvbnRyb2wgKHR5cGUgMTAwKSAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMxX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwxLCBjMV9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2Vjb25kIGNvbnRyb2wgKHR5cGUgMjAwKSAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDIwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMyX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwyLCBjMl9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2Vjb25kIGRhdGEgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBkMl9sZW4sIE1TR19XQUlUQUxMKSwgZDJfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTIsIGQyX2xlbiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUcmFpbGluZyBjb250cm9sIHJlY29yZCB3aXRoIG5vIGRhdGEgZm9sbG93aW5nIGl0LiAgVGhlIHNlbmRlclxuJiM0MzsgKiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlIGNvbnRyb2wgcmVjb3JkOyB0aGUgcmVjZWl2ZXJcbiYjNDM7ICogZHJhaW5zIHRoZSBjb250cm9sIGFuZCB0aGVuIG9ic2VydmVzIEVPRi5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih0bHMsIGRhdGFfY21zZ19lb2YpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkYXRhID0gXCYjMzQ7cGF5bG9hZFwmIzM0OztcbiYjNDM7XHRjaGFyICpjdHJsID0gXCYjMzQ7ZmluYWxcJiMzNDs7XG4mIzQzO1x0aW50IGRfbGVuID0gc3RybGVuKGRhdGEpICYjNDM7IDE7XG4mIzQzO1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7XG4mIzQzO1x0Y2hhciBidWZbMjBdO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKHNlbGYtXHUwMDNlZmQpLCAwKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qIENvbnN1bWUgZGF0YSAqL1xuJiM0MztcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YSwgZF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJhaW4gdHJhaWxpbmcgY29udHJvbCAqL1xuJiM0MztcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbiYjNDM7XHRcdFx0XHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xuJiM0MztcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi9cbiYjNDM7XHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfRih0bHMsIHNodXRkb3duKVxuIHtcbiBcdGNoYXIgY29uc3QgKnRlc3Rfc3RyID0gXCYjMzQ7dGVzdF9yZWFkXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y190Y3BfcmVjdl9hY3RvciYjMzQ7LAogICAgJiMzNDtzdmNfdGNwX3JlY3R5cGVfYWN0b3ImIzM0OywKICAgICYjMzQ7c3ZjX3RjcF9yZWN2ZnJvbSYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUmIzM0OywKICAgICYjMzQ7X190bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcHJvdG9fb3BzIGNhbGxiYWNrIGByZWFkX3NvY2tfcmVjdHlwZWAgdG8gYWxsb3cgcmVhZGluZyBub24tZGF0YSBUTFMgcmVjb3JkcyAobGlrZSBhbGVydHMgYW5kIGhhbmRzaGFrZSBtZXNzYWdlcykgZGlyZWN0bHkgZnJvbSB0aGUgc29ja2V0LiBJdCBpbXBsZW1lbnRzIHRoaXMgaW4gdGhlIFRMUyBzb2Z0d2FyZSBwYXRoIChgX190bHNfc3dfcmVhZF9zb2NrYCwgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWApIGFuZCB1c2VzIGl0IGluIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZSAoYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgc3ZjX3RjcF9yZWN2ZnJvbWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBpbiB0aGUgVExTIHJlY29yZCBwYXJzaW5nIGFuZCBSUEMgbWVzc2FnZSBhc3NlbWJseSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmM0NGIwMjM5YjMxN2ZmNDg4MTgxZDc5MjVjNGVjYjA1YWQxODZiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDIyOjA0OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggMjc3MTg4YTQwYzcyZTMuLjdhMTlhNzQzYTYxNzc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTE5OCw2ICYjNDM7MTk4LDEzIEBAIHN0cnVjdCBza19idWZmOwogc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7CiB0eXBlZGVmIGludCAoKnNrX3JlYWRfYWN0b3JfdCkocmVhZF9kZXNjcmlwdG9yX3QgKiwgc3RydWN0IHNrX2J1ZmYgKiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQsIHNpemVfdCk7CiYjNDM7LyogcmVjdHlwZSBjYXJyaWVzIHRoZSB0cmFuc3BvcnQgcmVjb3JkIHR5cGUsIGZvciBleGFtcGxlIGEKJiM0MzsgKiBUTFNfUkVDT1JEX1RZUEVfKiB2YWx1ZS4KJiM0MzsgKi8KJiM0Mzt0eXBlZGVmIGludCAoKnNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKiwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGludCwgc2l6ZV90LAomIzQzOwkJCQkgICAgICAgdTggcmVjdHlwZSk7CiB0eXBlZGVmIGludCAoKnNrYl9yZWFkX2FjdG9yX3QpKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopOwogCiAKQEAgLTI2NCw2ICYjNDM7MjcxLDI3IEBAIHN0cnVjdCBwcm90b19vcHMgewogCSAqLwogCWludAkJKCpyZWFkX3NvY2spKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCQkJICAgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7CiYjNDM7CS8qCiYjNDM7CSAqIHJlYWRfc29ja19yZWN0eXBlIHNwbGl0cyBkZWxpdmVyeSBhY3Jvc3MgdHdvIGNhbGxiYWNrczoKJiM0MzsJICogcmVjdl9hY3RvciBmb3IgZGF0YSByZWNvcmRzLCBwZXIgdGhlIHNrX3JlYWRfYWN0b3JfdAomIzQzOwkgKiBjb252ZW50aW9uLCBhbmQgcmVjdHlwZV9hY3RvciBmb3IgYWxsIG90aGVyIHJlY29yZHMsCiYjNDM7CSAqIHdpdGggcmVjdHlwZSBpZGVudGlmeWluZyBlYWNoLiBBIE5VTEwgcmVjdHlwZV9hY3RvcgomIzQzOwkgKiBsZWF2ZXMgbm9uLWRhdGEgcmVjb3JkcyBwZW5kaW5nLiByZWN0eXBlX2FjdG9yIHJldHVybnMgMAomIzQzOwkgKiB0byBjb25zdW1lIGEgcmVjb3JkIG9yIG5lZ2F0aXZlIHRvIGxlYXZlIGl0IHBlbmRpbmcgZm9yCiYjNDM7CSAqIHJlZGVsaXZlcnkgYW5kIHN0b3AgZGVsaXZlcnk7IHRoZSBuZWdhdGl2ZSByZXR1cm4gaXMgYQomIzQzOwkgKiBiYWNrcHJlc3N1cmUgc2lnbmFsLCBub3QgYSBmYXRhbCBlcnJvci4gQm90aCBjYWxsYmFja3MKJiM0MzsJICogcmVwb3J0IGVycm9ycyBhbmQgZWFybHkgc3RvcCB0aGUgd2F5IHJlY3ZfYWN0b3IgZG9lczoKJiM0MzsJICogYnkgc2V0dGluZyBkZXNjLSZndDtjb3VudCB0byAwIGFuZCByZWNvcmRpbmcgdGhlIHJlYXNvbiBpbgomIzQzOwkgKiBkZXNjLSZndDtlcnJvciwgcGVyIHRoZSByZWFkX2Rlc2NyaXB0b3JfdCBjb252ZW50aW9uIGFuZAomIzQzOwkgKiBpbmRlcGVuZGVudCBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIHJlcG9ydHMKJiM0MzsJICogb25seSBkYXRhIGJ5dGVzIGNvbnN1bWVkIGJ5IHJlY3ZfYWN0b3I7IHRoZSBjYWxsZXIKJiM0MzsJICogZGV0ZWN0cyBhbiBlcnJvciBvciBlYXJseSBzdG9wIHZpYSBkZXNjLSZndDtjb3VudCBhbmQKJiM0MzsJICogZGVzYy0mZ3Q7ZXJyb3IuCiYjNDM7CSAqLwomIzQzOwlpbnQJCSgqcmVhZF9zb2NrX3JlY3R5cGUpKHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJCSAgICAgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiYjNDM7CQkJCQkgICAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yLAomIzQzOwkJCQkJICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKTsKIAkvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHJlYWRfc29jaygpLCBpdCByZWFkcyBhbiBlbnRpcmUgc2tiIGF0IGEgdGltZS4gKi8KIAlpbnQJCSgqcmVhZF9za2IpKHN0cnVjdCBzb2NrICpzaywgc2tiX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKTsKIAlpbnQJCSgqc2VuZG1zZ19sb2NrZWQpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1MGU1ZTdmNWI3NjJkZS4uOWI5ZTBkYTllNzNjZDYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC04LDE1ICYjNDM7OCw2IEBACiAgKiBldmVubHkgd2hlbiBzZXJ2aWNpbmcgYSBzaW5nbGUgY2xpZW50LiBNYXkgbmVlZCB0byBtb2RpZnkgdGhlCiAgKiBzdmNfeHBydF9lbnF1ZXVlIHByb2NlZHVyZS4uLgogICoKLSAqIFRDUCBzdXBwb3J0IGlzIGxhcmdlbHkgdW50ZXN0ZWQgYW5kIG1heSBiZSBhIGxpdHRsZSBzbG93LiBUaGUgcHJvYmxlbQotICogaXMgdGhhdCB3ZSBjdXJyZW50bHkgZG8gdHdvIHNlcGFyYXRlIHJlY3Zmcm9tJiMzOTtzLCBvbmUgZm9yIHRoZSA0LWJ5dGUKLSAqIHJlY29yZCBsZW5ndGgsIGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgYWN0dWFsIHJlY29yZC4gVGhpcyBjb3VsZCBwb3NzaWJseQotICogYmUgaW1wcm92ZWQgYnkgYWx3YXlzIHJlYWRpbmcgYSBtaW5pbXVtIHNpemUgb2YgYXJvdW5kIDEwMCBieXRlcyBhbmQKLSAqIHR1Y2tpbmcgYW55IHN1cGVyZmx1b3VzIGJ5dGVzIGF3YXkgaW4gYSB0ZW1wb3Jhcnkgc3RvcmUuIFN0aWxsLCB0aGF0Ci0gKiBsZWF2ZXMgd3JpdGUgcmVxdWVzdHMgb3V0IGluIHRoZSByYWluLiBBbiBhbHRlcm5hdGl2ZSBtYXkgYmUgdG8gcGVlayBhdAotICogdGhlIGZpcnN0IHNrYiBpbiB0aGUgcXVldWUsIGFuZCBpZiBpdCBtYXRjaGVzIHRoZSBuZXh0IFRDUCBzZXF1ZW5jZQotICogbnVtYmVyLCB0byBleHRyYWN0IHRoZSByZWNvcmQgbWFya2VyLiBZdWNrLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoICZsdDtva2lyQG1vbmFkLnN3Yi5kZSZndDsKICAqLwogCkBAIC0yMzgsMTM4ICYjNDM7MjI5LDYgQEAgc3RhdGljIGludCBzdmNfb25lX3NvY2tfbmFtZShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIGNoYXIgKmJ1ZiwgaW50IHJlbWFpbmluZykKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50Ci1zdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2csIGludCByZXQpCi17Ci0JdTggY29udGVudF90eXBlID0gdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLSZndDtzaywgY21zZyk7Ci0JdTggbGV2ZWwsIGRlc2NyaXB0aW9uOwotCi0Jc3dpdGNoIChjb250ZW50X3R5cGUpIHsKLQljYXNlIDA6Ci0JCWJyZWFrOwotCWNhc2UgVExTX1JFQ09SRF9UWVBFX0RBVEE6Ci0JCS8qIFRMUyBzZXRzIEVPUiBhdCB0aGUgZW5kIG9mIGVhY2ggYXBwbGljYXRpb24gZGF0YQotCQkgKiByZWNvcmQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIG1vcmUgZnJhbWVzCi0JCSAqIHdhaXRpbmcgdG8gYmUgZGVjcnlwdGVkLgotCQkgKi8KLQkJbXNnLSZndDttc2dfZmxhZ3MgJmFtcDs9IH5NU0dfRU9SOwotCQlicmVhazsKLQljYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDoKLQkJdGxzX2FsZXJ0X3JlY3Yoc29jay0mZ3Q7c2ssIG1zZywgJmFtcDtsZXZlbCwgJmFtcDtkZXNjcmlwdGlvbik7Ci0JCXJldCA9IChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpID8KLQkJCS1FTk9UQ09OTiA6IC1FQUdBSU47Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIGRpc2NhcmQgdGhpcyByZWNvcmQgdHlwZSAqLwotCQlyZXQgPSAtRUFHQUlOOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1zdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCAqbXNnX2ZsYWdzKQotewotCXVuaW9uIHsKLQkJc3RydWN0IGNtc2doZHIJY21zZzsKLQkJdTgJCWJ1ZltDTVNHX1NQQUNFKHNpemVvZih1OCkpXTsKLQl9IHU7Ci0JdTggYWxlcnRbMl07Ci0Jc3RydWN0IGt2ZWMgYWxlcnRfa3ZlYyA9IHsKLQkJLmlvdl9iYXNlID0gYWxlcnQsCi0JCS5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSwKLQl9OwotCXN0cnVjdCBtc2doZHIgbXNnID0gewotCQkubXNnX2ZsYWdzID0gKm1zZ19mbGFncywKLQkJLm1zZ19jb250cm9sID0gJmFtcDt1LAotCQkubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YodSksCi0JfTsKLQlpbnQgcmV0OwotCi0JaW92X2l0ZXJfa3ZlYygmYW1wO21zZy5tc2dfaXRlciwgSVRFUl9ERVNULCAmYW1wO2FsZXJ0X2t2ZWMsIDEsCi0JCSAgICAgIGFsZXJ0X2t2ZWMuaW92X2xlbik7Ci0JcmV0ID0gc29ja19yZWN2bXNnKHNvY2ssICZhbXA7bXNnLCBNU0dfRE9OVFdBSVQpOwotCWlmIChyZXQgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLSZndDtzaywgJmFtcDt1LmNtc2cpID09IFRMU19SRUNPUkRfVFlQRV9BTEVSVCkgewotCQlpb3ZfaXRlcl9yZXZlcnQoJmFtcDttc2cubXNnX2l0ZXIsIHJldCk7Ci0JCXJldCA9IHN2Y190Y3Bfc29ja19wcm9jZXNzX2Ntc2coc29jaywgJmFtcDttc2csICZhbXA7dS5jbXNnLCAtRUFHQUlOKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gc3Zzay0mZ3Q7c2tfc29jazsKLQotCXJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBtc2csIE1TR19ET05UV0FJVCk7Ci0JaWYgKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19DVFJVTkMpIHsKLQkJbXNnLSZndDttc2dfZmxhZ3MgJmFtcDs9IH4oTVNHX0NUUlVOQyB8IE1TR19FT1IpOwotCQlpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU8pCi0JCQlyZXQgPSBzdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHNvY2ssICZhbXA7bXNnLSZndDttc2dfZmxhZ3MpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0jaWYgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFCi1zdGF0aWMgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsIHNpemVfdCBzZWVrKQotewotCXN0cnVjdCBidmVjX2l0ZXIgYmkgPSB7Ci0JCS5iaV9zaXplCT0gc2l6ZSAmIzQzOyBzZWVrLAotCX07Ci0Jc3RydWN0IGJpb192ZWMgYnY7Ci0KLQlidmVjX2l0ZXJfYWR2YW5jZShidmVjLCAmYW1wO2JpLCBzZWVrICZhbXA7IFBBR0VfTUFTSyk7Ci0JZm9yX2VhY2hfYnZlYyhidiwgYnZlYywgYmksIGJpKQotCQlmbHVzaF9kY2FjaGVfcGFnZShidi5idl9wYWdlKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3ZjX2ZsdXNoX2J2ZWMoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWMsIHNpemVfdCBzaXplLAotCQkJCSAgc2l6ZV90IHNlZWspCi17Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFJlYWQgZnJvbSBAcnFzdHAmIzM5O3MgdHJhbnNwb3J0IHNvY2tldC4gVGhlIGluY29taW5nIG1lc3NhZ2UgZmlsbHMgd2hvbGUKLSAqIHBhZ2VzIGluIEBycXN0cCYjMzk7cyBycV9wYWdlcyBhcnJheSB1bnRpbCB0aGUgbGFzdCBwYWdlIG9mIHRoZSBtZXNzYWdlCi0gKiBoYXMgYmVlbiByZWNlaXZlZCBpbnRvIGEgcGFydGlhbCBwYWdlLgotICovCi1zdGF0aWMgc3NpemVfdCBzdmNfdGNwX3JlYWRfbXNnKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHNpemVfdCBidWZsZW4sCi0JCQkJc2l6ZV90IHNlZWspCi17Ci0Jc3RydWN0IHN2Y19zb2NrICpzdnNrID0KLQkJY29udGFpbmVyX29mKHJxc3RwLSZndDtycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOwotCXN0cnVjdCBiaW9fdmVjICpidmVjID0gcnFzdHAtJmd0O3JxX2J2ZWM7Ci0Jc3RydWN0IG1zZ2hkciBtc2cgPSB7IE5VTEwgfTsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzc2l6ZV90IGxlbjsKLQlzaXplX3QgdDsKLQotCWNsZWFyX2JpdChYUFRfREFUQSwgJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9mbGFncyk7Ci0KLQlmb3IgKGkgPSAwLCB0ID0gMDsgdCAmbHQ7IGJ1ZmxlbjsgaSYjNDM7JiM0MzssIHQgJiM0Mzs9IFBBR0VfU0laRSkKLQkJYnZlY19zZXRfcGFnZSgmYW1wO2J2ZWNbaV0sIHJxc3RwLSZndDtycV9wYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTsKLQotCWlvdl9pdGVyX2J2ZWMoJmFtcDttc2cubXNnX2l0ZXIsIElURVJfREVTVCwgYnZlYywgaSwgYnVmbGVuKTsKLQlpZiAoc2VlaykgewotCQlpb3ZfaXRlcl9hZHZhbmNlKCZhbXA7bXNnLm1zZ19pdGVyLCBzZWVrKTsKLQkJYnVmbGVuIC09IHNlZWs7Ci0JfQotCWxlbiA9IHN2Y190Y3Bfc29ja19yZWN2bXNnKHN2c2ssICZhbXA7bXNnKTsKLQlpZiAobGVuICZndDsgMCkKLQkJc3ZjX2ZsdXNoX2J2ZWMoYnZlYywgbGVuLCBzZWVrKTsKLQotCS8qIElmIHdlIHJlYWQgYSBmdWxsIHJlY29yZCwgdGhlbiBhc3N1bWUgdGhlcmUgbWF5IGJlIG1vcmUKLQkgKiBkYXRhIHRvIHJlYWQgKHN0cmVhbSBiYXNlZCBzb2NrZXRzIG9ubHkhKQotCSAqLwotCWlmIChsZW4gPT0gYnVmbGVuKQotCQlzZXRfYml0KFhQVF9EQVRBLCAmYW1wO3N2c2stJmd0O3NrX3hwcnQueHB0X2ZsYWdzKTsKLQotCXJldHVybiBsZW47Ci19Ci0KIC8qCiAgKiBTZXQgc29ja2V0IHNuZCBhbmQgcmN2IGJ1ZmZlciBsZW5ndGhzCiAgKi8KQEAgLTEwNDgsNTAgJiM0Mzs5MDcsNiBAQCBzdGF0aWMgdm9pZCBzdmNfdGNwX2NsZWFyX3BhZ2VzKHN0cnVjdCBzdmNfc29jayAqc3ZzaykKIAlzdnNrLSZndDtza19kYXRhbGVuID0gMDsKIH0KIAotLyoKLSAqIFJlY2VpdmUgZnJhZ21lbnQgcmVjb3JkIGhlYWRlciBpbnRvIHNrX21hcmtlci4KLSAqLwotc3RhdGljIHNzaXplX3Qgc3ZjX3RjcF9yZWFkX21hcmtlcihzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssCi0JCQkJICAgc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlzc2l6ZV90IHdhbnQsIGxlbjsKLQotCS8qIElmIHdlIGhhdmVuJiMzOTt0IGdvdHRlbiB0aGUgcmVjb3JkIGxlbmd0aCB5ZXQsCi0JICogZ2V0IHRoZSBuZXh0IGZvdXIgYnl0ZXMuCi0JICovCi0JaWYgKHN2c2stJmd0O3NrX3RjcGxlbiAmbHQ7IHNpemVvZihycGNfZnJhZ2hkcikpIHsKLQkJc3RydWN0IG1zZ2hkcgltc2cgPSB7IE5VTEwgfTsKLQkJc3RydWN0IGt2ZWMJaW92OwotCi0JCXdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay0mZ3Q7c2tfdGNwbGVuOwotCQlpb3YuaW92X2Jhc2UgPSAoKGNoYXIgKikmYW1wO3N2c2stJmd0O3NrX21hcmtlcikgJiM0Mzsgc3Zzay0mZ3Q7c2tfdGNwbGVuOwotCQlpb3YuaW92X2xlbiAgPSB3YW50OwotCQlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsICZhbXA7aW92LCAxLCB3YW50KTsKLQkJbGVuID0gc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3ZzaywgJmFtcDttc2cpOwotCQlpZiAobGVuICZsdDsgMCkKLQkJCXJldHVybiBsZW47Ci0JCXN2c2stJmd0O3NrX3RjcGxlbiAmIzQzOz0gbGVuOwotCQlpZiAobGVuICZsdDsgd2FudCkgewotCQkJLyogY2FsbCBhZ2FpbiB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgKi8KLQkJCWdvdG8gZXJyX3Nob3J0OwotCQl9Ci0JCXRyYWNlX3N2Y3NvY2tfbWFya2VyKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCwgc3Zzay0mZ3Q7c2tfbWFya2VyKTsKLQkJaWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSAmIzQzOyBzdnNrLSZndDtza19kYXRhbGVuICZndDsKLQkJICAgIHN2c2stJmd0O3NrX3hwcnQueHB0X3NlcnZlci0mZ3Q7c3ZfbWF4X21lc2cpCi0JCQlnb3RvIGVycl90b29fbGFyZ2U7Ci0JfQotCXJldHVybiBzdmNfc29ja19yZWNsZW4oc3Zzayk7Ci0KLWVycl90b29fbGFyZ2U6Ci0JbmV0X25vdGljZV9yYXRlbGltaXRlZCgmIzM0O3N2YzogJXMgb3ZlcnNpemVkIFJQQyBmcmFnbWVudCAoJXUgb2N0ZXRzKSBmcm9tICVwSVNwY1xuJiMzNDssCi0JCQkgICAgICAgc3Zzay0mZ3Q7c2tfeHBydC54cHRfc2VydmVyLSZndDtzdl9uYW1lLAotCQkJICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSwKLQkJCSAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9yZW1vdGUpOwotCXN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCk7Ci1lcnJfc2hvcnQ6Ci0JcmV0dXJuIC1FQUdBSU47Ci19Ci0KIHN0YXRpYyBpbnQgcmVjZWl2ZV9jYl9yZXBseShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7CiAJc3RydWN0IHJwY194cHJ0ICpiY194cHJ0ID0gc3Zzay0mZ3Q7c2tfeHBydC54cHRfYmNfeHBydDsKQEAgLTExMzQsMTYgJiM0Mzs5NDksMTQ0IEBAIHN0YXRpYyB2b2lkIHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3RydWN0IHN2Y19zb2NrICpzdnNrKQogCXN2c2stJmd0O3NrX21hcmtlciA9IHhkcl96ZXJvOwogfQogCiYjNDM7LyoKJiM0MzsgKiByZWFkX3NvY2sgZGF0YSBhY3RvcjogcmVjZWl2ZXMgYXBwbGljYXRpb24gZGF0YSBmcm9tIHRoZQomIzQzOyAqIHRyYW5zcG9ydCBzb2NrZXQsIHBhcnNpbmcgdGhlIFJQQyByZWNvcmQgc3RyZWFtIChmcmFnbWVudAomIzQzOyAqIGhlYWRlcnMgYW5kIG1lc3NhZ2UgYm9kaWVzKSBhbmQgYXNzZW1ibGluZyBjb21wbGV0ZSBSUEMKJiM0MzsgKiBtZXNzYWdlcyBpbnRvIHJxc3RwLSZndDtycV9wYWdlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwID0gZGVzYy0mZ3Q7YXJnLmRhdGE7CiYjNDM7CXN0cnVjdCBzdmNfc29jayAqc3ZzayA9CiYjNDM7CQljb250YWluZXJfb2YocnFzdHAtJmd0O3JxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7CiYjNDM7CXNpemVfdCByZWNsZW4sIHJlY2VpdmVkLCB3YW50LCB0YWtlLCBkb25lLCBuOwomIzQzOwlzaXplX3QgY29uc3VtZWQgPSAwOwomIzQzOwomIzQzOwlpZiAoIWRlc2MtJmd0O2NvdW50KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChzdnNrLSZndDtza190Y3BsZW4gJmx0OyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7CiYjNDM7CQl3YW50ID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAtIHN2c2stJmd0O3NrX3RjcGxlbjsKJiM0MzsJCW4gPSBtaW4od2FudCwgbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LAomIzQzOwkJCQkgIChjaGFyICopJmFtcDtzdnNrLSZndDtza19tYXJrZXIgJiM0MzsKJiM0MzsJCQkJCXN2c2stJmd0O3NrX3RjcGxlbiwgbikpCiYjNDM7CQkJZ290byBmYXVsdDsKJiM0MzsJCXN2c2stJmd0O3NrX3RjcGxlbiAmIzQzOz0gbjsKJiM0MzsJCW9mZnNldCAmIzQzOz0gbjsKJiM0MzsJCWxlbiAtPSBuOwomIzQzOwkJY29uc3VtZWQgJiM0Mzs9IG47CiYjNDM7CiYjNDM7CQlpZiAoc3Zzay0mZ3Q7c2tfdGNwbGVuICZsdDsgc2l6ZW9mKHJwY19mcmFnaGRyKSkKJiM0MzsJCQlyZXR1cm4gY29uc3VtZWQ7CiYjNDM7CiYjNDM7CQl0cmFjZV9zdmNzb2NrX21hcmtlcigmYW1wO3N2c2stJmd0O3NrX3hwcnQsIHN2c2stJmd0O3NrX21hcmtlcik7CiYjNDM7CQlpZiAoc3ZjX3NvY2tfcmVjbGVuKHN2c2spICYjNDM7IHN2c2stJmd0O3NrX2RhdGFsZW4gJmd0OwomIzQzOwkJICAgIHN2c2stJmd0O3NrX3hwcnQueHB0X3NlcnZlci0mZ3Q7c3ZfbWF4X21lc2cpIHsKJiM0MzsJCQluZXRfbm90aWNlX3JhdGVsaW1pdGVkKCYjMzQ7c3ZjOiAlcyBvdmVyc2l6ZWQgUlBDIGZyYWdtZW50ICgldSBvY3RldHMpIGZyb20gJXBJU3BjXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgICBzdnNrLSZndDtza194cHJ0LnhwdF9zZXJ2ZXItJmd0O3N2X25hbWUsCiYjNDM7CQkJCQkgICAgICAgc3ZjX3NvY2tfcmVjbGVuKHN2c2spLAomIzQzOwkJCQkJICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3N2c2stJmd0O3NrX3hwcnQueHB0X3JlbW90ZSk7CiYjNDM7CQkJZGVzYy0mZ3Q7ZXJyb3IgPSAtRU1TR1NJWkU7CiYjNDM7CQkJZGVzYy0mZ3Q7Y291bnQgPSAwOwomIzQzOwkJCXJldHVybiBjb25zdW1lZDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZWNsZW4gPSBzdmNfc29ja19yZWNsZW4oc3Zzayk7CiYjNDM7CXJlY2VpdmVkID0gc3Zzay0mZ3Q7c2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKTsKJiM0MzsJd2FudCA9IHJlY2xlbiAtIHJlY2VpdmVkOwomIzQzOwl0YWtlID0gbWluKHdhbnQsIGxlbik7CiYjNDM7CWRvbmUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IHRha2UpIHsKJiM0MzsJCXVuc2lnbmVkIGludCBwZyA9IHN2c2stJmd0O3NrX2RhdGFsZW4gJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCXVuc2lnbmVkIGludCBwZ19vZmYgPSBzdnNrLSZndDtza19kYXRhbGVuICZhbXA7IChQQUdFX1NJWkUgLSAxKTsKJiM0MzsJCXNpemVfdCBjaHVuayA9IG1pbih0YWtlIC0gZG9uZSwKJiM0MzsJCQkJICAgUEFHRV9TSVpFIC0gKHNpemVfdClwZ19vZmYpOwomIzQzOwomIzQzOwkJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsCiYjNDM7CQkJCSAgcGFnZV9hZGRyZXNzKHJxc3RwLSZndDtycV9wYWdlc1twZ10pICYjNDM7IHBnX29mZiwKJiM0MzsJCQkJICBjaHVuaykpCiYjNDM7CQkJZ290byBmYXVsdDsKJiM0MzsJCWZsdXNoX2RjYWNoZV9wYWdlKHJxc3RwLSZndDtycV9wYWdlc1twZ10pOwomIzQzOwkJb2Zmc2V0ICYjNDM7PSBjaHVuazsKJiM0MzsJCWRvbmUgJiM0Mzs9IGNodW5rOwomIzQzOwkJc3Zzay0mZ3Q7c2tfZGF0YWxlbiAmIzQzOz0gY2h1bms7CiYjNDM7CX0KJiM0MzsJc3Zzay0mZ3Q7c2tfdGNwbGVuICYjNDM7PSB0YWtlOwomIzQzOwljb25zdW1lZCAmIzQzOz0gdGFrZTsKJiM0MzsKJiM0MzsJaWYgKHN2c2stJmd0O3NrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcikgJmd0Oz0gcmVjbGVuKSB7CiYjNDM7CQlpZiAoc3ZjX3NvY2tfZmluYWxfcmVjKHN2c2spKQomIzQzOwkJCWRlc2MtJmd0O2NvdW50ID0gMDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzdmNfdGNwX2ZyYWdtZW50X3JlY2VpdmVkKHN2c2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb25zdW1lZDsKJiM0MzsKJiM0MztmYXVsdDoKJiM0MzsJZGVzYy0mZ3Q7ZXJyb3IgPSAtRUZBVUxUOwomIzQzOwlkZXNjLSZndDtjb3VudCA9IDA7CiYjNDM7CXJldHVybiBjb25zdW1lZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiByZWFkX3NvY2tfcmVjdHlwZSBub24tZGF0YSByZWNvcmQgYWN0b3I6IHJlY2VpdmVzIG5vbi1kYXRhIFRMUwomIzQzOyAqIHJlY29yZHMgKGFsZXJ0cywgaGFuZHNoYWtlIG1lc3NhZ2VzKSBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG8KJiM0MzsgKiB0cmFuc3BvcnQtbGV2ZWwgYWN0aW9ucy4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgMCB0byBjb25zdW1lIHRoZSByZWNvcmQgYW5kIGFsbG93IHRoZSBUTFMgbGF5ZXIgdG8KJiM0MzsgKiBjb250aW51ZSBkZWxpdmVyaW5nIHN1YnNlcXVlbnQgcmVjb3Jkcy4gQSBuZWdhdGl2ZSByZXR1cm4KJiM0MzsgKiBjYXVzZXMgdGhlIFRMUyBsYXllciB0byByZXF1ZXVlIHRoZSBza2Igb24gaXRzIHJ4X2xpc3QsCiYjNDM7ICogYmxvY2tpbmcgYWxsIGZ1cnRoZXIgcmVjb3JkIGRlbGl2ZXJ5IG9uIHRoaXMgY29ubmVjdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHN2Y190Y3BfcmVjdHlwZV9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLAomIzQzOwkJCQkgdTggcmVjdHlwZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLSZndDthcmcuZGF0YTsKJiM0MzsJc3RydWN0IHN2Y19zb2NrICpzdnNrID0KJiM0MzsJCWNvbnRhaW5lcl9vZihycXN0cC0mZ3Q7cnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChyZWN0eXBlKSB7CiYjNDM7CWNhc2UgVExTX1JFQ09SRF9UWVBFX0FMRVJUOiB7CiYjNDM7CQl1OCBhbGVydFsyXSA9IHt9LCBsZXZlbCwgZGVzY3JpcHRpb247CiYjNDM7CQlzdHJ1Y3Qga3ZlYyBrdmVjID0gewomIzQzOwkJCS5pb3ZfYmFzZSA9IGFsZXJ0LAomIzQzOwkJCS5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSwKJiM0MzsJCX07CiYjNDM7CQlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9OwomIzQzOwomIzQzOwkJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsIGFsZXJ0LCBtaW4obGVuLCBzaXplb2YoYWxlcnQpKSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsICZhbXA7a3ZlYywgMSwgc2l6ZW9mKGFsZXJ0KSk7CiYjNDM7CQl0bHNfYWxlcnRfcmVjdihzdnNrLSZndDtza19zaywgJmFtcDttc2csICZhbXA7bGV2ZWwsICZhbXA7ZGVzY3JpcHRpb24pOwomIzQzOwkJaWYgKGxldmVsID09IFRMU19BTEVSVF9MRVZFTF9GQVRBTCkgewomIzQzOwkJCXN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCk7CiYjNDM7CQkJZGVzYy0mZ3Q7ZXJyb3IgPSAtRU5PVENPTk47CiYjNDM7CQkJZGVzYy0mZ3Q7Y291bnQgPSAwOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogc3ZjX3RjcF9yZWN2ZnJvbSAtIFJlY2VpdmUgZGF0YSBmcm9tIGEgVENQIHNvY2tldAogICogQHJxc3RwOiByZXF1ZXN0IHN0cnVjdHVyZSBpbnRvIHdoaWNoIHRvIHJlY2VpdmUgYW4gUlBDIENhbGwKICAqCiAgKiBDYWxsZWQgaW4gYSBsb29wIHdoZW4gWFBUX0RBVEEgaGFzIGJlZW4gc2V0LgogICoKLSAqIFJlYWQgdGhlIDQtYnl0ZSBzdHJlYW0gcmVjb3JkIG1hcmtlciwgdGhlbiB1c2UgdGhlIHJlY29yZCBsZW5ndGgKLSAqIGluIHRoYXQgbWFya2VyIHRvIHNldCB1cCBleGFjdGx5IHRoZSByZXNvdXJjZXMgbmVlZGVkIHRvIHJlY2VpdmUKLSAqIHRoZSBuZXh0IFJQQyBtZXNzYWdlIGludG8gQHJxc3RwLgotICoKICAqIFJldHVybnM6CiAgKiAgIE9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSByZWNlaXZlZCBSUEMgQ2FsbCwgb3IKICAqICAgJTAgaWYgYSBjb21wbGV0ZSBSUEMgQ2FsbCBtZXNzYWdlIHdhcyBub3QgcmVhZHkgdG8gcmV0dXJuCkBAIC0xMTU3LDI2ICYjNDM7MTEwMCw0MCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIAlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2sgPQogCQljb250YWluZXJfb2YocnFzdHAtJmd0O3JxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7CiAJc3RydWN0IHN2Y19zZXJ2CSpzZXJ2ID0gc3Zzay0mZ3Q7c2tfeHBydC54cHRfc2VydmVyOwotCXNpemVfdCB3YW50LCBiYXNlOwomIzQzOwlzdHJ1Y3Qgc29jawkqc2sgPSBzdnNrLSZndDtza19zazsKJiM0MzsJcmVhZF9kZXNjcmlwdG9yX3QgZGVzYyA9IHsKJiM0MzsJCS5hcmcuZGF0YSA9IHJxc3RwLAomIzQzOwl9OwogCXNzaXplX3QgbGVuOwogCV9fYmUzMiAqcDsKIAlfX2JlMzIgY2FsbGRpcjsKIAogCWNsZWFyX2JpdChYUFRfREFUQSwgJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9mbGFncyk7Ci0JbGVuID0gc3ZjX3RjcF9yZWFkX21hcmtlcihzdnNrLCBycXN0cCk7Ci0JaWYgKGxlbiAmbHQ7IDApCi0JCWdvdG8gZXJyb3I7CiAKLQliYXNlID0gc3ZjX3RjcF9yZXN0b3JlX3BhZ2VzKHN2c2ssIHJxc3RwKTsKLQl3YW50ID0gbGVuIC0gKHN2c2stJmd0O3NrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcikpOwotCWxlbiA9IHN2Y190Y3BfcmVhZF9tc2cocnFzdHAsIGJhc2UgJiM0Mzsgd2FudCwgYmFzZSk7Ci0JaWYgKGxlbiAmZ3Q7PSAwKSB7Ci0JCXRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoJmFtcDtzdnNrLSZndDtza194cHJ0LCBsZW4pOwotCQlzdnNrLSZndDtza190Y3BsZW4gJiM0Mzs9IGxlbjsKLQkJc3Zzay0mZ3Q7c2tfZGF0YWxlbiAmIzQzOz0gbGVuOwomIzQzOwlzdmNfdGNwX3Jlc3RvcmVfcGFnZXMoc3ZzaywgcnFzdHApOwomIzQzOwlycXN0cC0mZ3Q7cnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAtJmd0O3JxX3BhZ2VzWzBdKTsKJiM0MzsKJiM0MzsJZGVzYy5jb3VudCA9IHNlcnYtJmd0O3N2X21heF9tZXNnOwomIzQzOwlsb2NrX3NvY2soc2spOwomIzQzOwlpZiAoc3Zzay0mZ3Q7c2tfc29jay0mZ3Q7b3BzLSZndDtyZWFkX3NvY2tfcmVjdHlwZSkKJiM0MzsJCWxlbiA9IHN2c2stJmd0O3NrX3NvY2stJmd0O29wcy0mZ3Q7cmVhZF9zb2NrX3JlY3R5cGUoc2ssICZhbXA7ZGVzYywKJiM0MzsJCQkJCQkJICAgIHN2Y190Y3BfcmVjdl9hY3RvciwKJiM0MzsJCQkJCQkJICAgIHN2Y190Y3BfcmVjdHlwZV9hY3Rvcik7CiYjNDM7CWVsc2UKJiM0MzsJCWxlbiA9IHN2c2stJmd0O3NrX3NvY2stJmd0O29wcy0mZ3Q7cmVhZF9zb2NrKHNrLCAmYW1wO2Rlc2MsCiYjNDM7CQkJCQkJICAgICBzdmNfdGNwX3JlY3ZfYWN0b3IpOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwomIzQzOwlpZiAoZGVzYy5lcnJvciAmbHQ7IDApIHsKJiM0MzsJCWxlbiA9IGRlc2MuZXJyb3I7CiYjNDM7CQlnb3RvIGVycl9kaXNjYXJkOwogCX0KLQlpZiAobGVuICE9IHdhbnQgfHwgIXN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSkKJiM0MzsJaWYgKGRlc2MuY291bnQgIT0gMCkgewomIzQzOwkJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQkJc2V0X2JpdChYUFRfREFUQSwgJmFtcDtzdnNrLSZndDtza194cHJ0LnhwdF9mbGFncyk7CiAJCWdvdG8gZXJyX2luY29tcGxldGU7CiYjNDM7CX0KJiM0MzsKIAlpZiAoc3Zzay0mZ3Q7c2tfZGF0YWxlbiAmbHQ7IDgpCiAJCWdvdG8gZXJyX251dHM7CiAKQEAgLTExODUsOCAmIzQzOzExNDIsMTAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiAJaWYgKHJxc3RwLSZndDtycV9hcmcubGVuICZsdDs9IHJxc3RwLSZndDtycV9hcmcuaGVhZFswXS5pb3ZfbGVuKSB7CiAJCXJxc3RwLSZndDtycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gcnFzdHAtJmd0O3JxX2FyZy5sZW47CiAJCXJxc3RwLSZndDtycV9hcmcucGFnZV9sZW4gPSAwOwotCX0gZWxzZQotCQlycXN0cC0mZ3Q7cnFfYXJnLnBhZ2VfbGVuID0gcnFzdHAtJmd0O3JxX2FyZy5sZW4gLSBycXN0cC0mZ3Q7cnFfYXJnLmhlYWRbMF0uaW92X2xlbjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJxc3RwLSZndDtycV9hcmcucGFnZV9sZW4gPSBycXN0cC0mZ3Q7cnFfYXJnLmxlbiAtCiYjNDM7CQkJcnFzdHAtJmd0O3JxX2FyZy5oZWFkWzBdLmlvdl9sZW47CiYjNDM7CX0KIAogCXJxc3RwLSZndDtycV94cHJ0X2N0eHQgICA9IE5VTEw7CiAJcnFzdHAtJmd0O3JxX3Byb3QJICAgICAgPSBJUFBST1RPX1RDUDsKQEAgLTEyMDcsMTEgJiM0MzsxMTY2LDEzIEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogCWlmIChsZW4gJmx0OyAwKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CXRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoJmFtcDtzdnNrLSZndDtza194cHJ0LCBycXN0cC0mZ3Q7cnFfYXJnLmxlbik7CiAJc3ZjX3hwcnRfY29weV9hZGRycyhycXN0cCwgJmFtcDtzdnNrLSZndDtza194cHJ0KTsKIAlpZiAoc2Vydi0mZ3Q7c3Zfc3RhdHMpCiAJCXNlcnYtJmd0O3N2X3N0YXRzLSZndDtuZXR0Y3BjbnQmIzQzOyYjNDM7OwogCiAJc3ZjX3NvY2tfc2VjdXJlX3BvcnQocnFzdHApOwomIzQzOwlzZXRfYml0KFhQVF9EQVRBLCAmYW1wO3N2c2stJmd0O3NrX3hwcnQueHB0X2ZsYWdzKTsKIAlzdmNfeHBydF9yZWNlaXZlZChycXN0cC0mZ3Q7cnFfeHBydCk7CiAJcmV0dXJuIHJxc3RwLSZndDtycV9hcmcubGVuOwogCkBAIC0xMjE5LDkgJiM0MzsxMTgwLDcgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiAJc3ZjX3RjcF9zYXZlX3BhZ2VzKHN2c2ssIHJxc3RwKTsKIAlpZiAobGVuICZsdDsgMCAmYW1wOyZhbXA7IGxlbiAhPSAtRUFHQUlOKQogCQlnb3RvIGVycl9kZWxldGU7Ci0JaWYgKGxlbiA9PSB3YW50KQotCQlzdmNfdGNwX2ZyYWdtZW50X3JlY2VpdmVkKHN2c2spOwotCWVsc2UKJiM0MzsJaWYgKHN2c2stJmd0O3NrX3RjcGxlbiAmZ3Q7PSBzaXplb2YocnBjX2ZyYWdoZHIpKQogCQl0cmFjZV9zdmNzb2NrX3RjcF9yZWN2X3Nob3J0KCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCwKIAkJCQlzdmNfc29ja19yZWNsZW4oc3ZzayksCiAJCQkJc3Zzay0mZ3Q7c2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7CkBAIC0xMjMzLDEyICYjNDM7MTE5MiwyMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIAlnb3RvIGVycl9ub2Nsb3NlOwogZXJyX251dHM6CiAJc3Zzay0mZ3Q7c2tfZGF0YWxlbiA9IDA7CiYjNDM7CWdvdG8gZXJyX2RlbGV0ZTsKJiM0MztlcnJfZGlzY2FyZDoKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgc2tfZGF0YWxlbiBzbyB0aGUgdGVhcmRvd24tdGltZQomIzQzOwkgKiBzdmNfdGNwX2NsZWFyX3BhZ2VzKCkgZG9lcyBub3Qgd2FsayB0aGUgZW1wdGllZAomIzQzOwkgKiBzdnNrLSZndDtza19wYWdlc1tdLgomIzQzOwkgKi8KJiM0MzsJc3Zzay0mZ3Q7c2tfZGF0YWxlbiA9IDA7CiBlcnJfZGVsZXRlOgogCXRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKCZhbXA7c3Zzay0mZ3Q7c2tfeHBydCwgbGVuKTsKIAlzdmNfeHBydF9kZWZlcnJlZF9jbG9zZSgmYW1wO3N2c2stJmd0O3NrX3hwcnQpOwogZXJyX25vY2xvc2U6CiAJc3ZjX3hwcnRfcmVjZWl2ZWQocnFzdHAtJmd0O3JxX3hwcnQpOwotCXJldHVybiAwOwkvKiByZWNvcmQgbm90IGNvbXBsZXRlICovCiYjNDM7CXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHMuaCBiL25ldC90bHMvdGxzLmgKaW5kZXggNjBhMzdiZGFhYTI1MDYuLmMyMWQyYTk4NWUxMzczIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rscy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzLmgKQEAgLTE2OCw2ICYjNDM7MTY4LDkgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLAogCQkJICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpOwomIzQzO2ludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCQkgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLAomIzQzOwkJCSAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7CiAKIGludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTsKIHZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IDhjNTg4Y2RhYjczM2RhLi40OTYzZTBjYWY2ZDUzYSAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uYwpAQCAtOTQ5LDEyICYjNDM7OTQ5LDE3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddCiAJb3BzW1RMU19CQVNFXVtUTFNfU1cgIF0uc3BsaWNlX3JlYWQJPSB0bHNfc3dfc3BsaWNlX3JlYWQ7CiAJb3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucG9sbAkJPSB0bHNfc2tfcG9sbDsKIAlvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2sJPSB0bHNfc3dfcmVhZF9zb2NrOwomIzQzOwlvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZQk9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTsKIAogCW9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07CiAJb3BzW1RMU19TVyAgXVtUTFNfU1cgIF0uc3BsaWNlX3JlYWQJPSB0bHNfc3dfc3BsaWNlX3JlYWQ7CiAJb3BzW1RMU19TVyAgXVtUTFNfU1cgIF0ucG9sbAkJPSB0bHNfc2tfcG9sbDsKIAlvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2sJPSB0bHNfc3dfcmVhZF9zb2NrOwomIzQzOwlvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZQk9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTsKIAomIzQzOwkvKiBUTFNfSFcgKGRldmljZSBvZmZsb2FkKSBSWCBlbnRyaWVzIGluaGVyaXQKJiM0MzsJICogcmVhZF9zb2NreyxfcmVjdHlwZX0gZnJvbSBTVyB2aWEgdGhlIHN0cnVjdCBjb3BpZXMgYmVsb3cuCiYjNDM7CSAqLwogI2lmZGVmIENPTkZJR19UTFNfREVWSUNFCiAJb3BzW1RMU19IVyAgXVtUTFNfQkFTRV0gPSBvcHNbVExTX0JBU0VdW1RMU19CQVNFXTsKIApkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfc3cuYyBiL25ldC90bHMvdGxzX3N3LmMKaW5kZXggZDRhZmM5MGZkNzk2NmUuLmFmMzQ3YjViMTdmYThjIDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19zdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX3N3LmMKQEAgLTIwNDksMTQgJiM0MzsyMDQ5LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsCiAJZ290byBzcGxpY2VfcmVhZF9lbmQ7CiB9CiAKLWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCi0JCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpCiYjNDM7LyogQ29uc2VjdXRpdmUgZW1wdHkgZGF0YSByZWNvcmRzIGRlbGl2ZXIgbm8gYnl0ZXM7IGNhcCB0aGVtIHBlcgomIzQzOyAqIGNhbGwgc28gYSBwZWVyIHN0cmVhbWluZyB0aGVtIGNhbm5vdCBob2xkIHRoZSBzb2NrZXQgbG9jayBoZXJlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVExTX1JYX05PREFUQV9MSU1JVCAxNgomIzQzOwomIzQzO3N0YXRpYyBpbnQgX190bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiYjNDM7CQkJICAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsCiYjNDM7CQkJICAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3RvcikKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7CiAJc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHggPSB0bHNfc3dfY3R4X3J4KHRsc19jdHgpOwogCXN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gJmFtcDt0bHNfY3R4LSZndDtwcm90X2luZm87CiAJc3RydWN0IHN0cnBfbXNnICpyeG0gPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBpbnQgbm9kYXRhX2NvdW50ID0gMDsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCXNpemVfdCBmbHVzaGVkX2F0ID0gMDsKIAlib29sIHJlbGVhc2VkID0gdHJ1ZTsKQEAgLTIxMDksMTAgJiM0MzsyMTE2LDI3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCQl0bHNfcnhfcmVjX2RvbmUoY3R4KTsKIAkJfQogCi0JCS8qIHJlYWRfc29jayBkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgY29udHJvbCBtZXNzYWdlcyAqLwomIzQzOwkJLyogQ29udHJvbCByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSkgcmVhY2ggYSBjb25zdW1lcgomIzQzOwkJICogb25seSB0aHJvdWdoIHJlY3R5cGVfYWN0b3I7IHdpdGhvdXQgb25lLCByZWFkX3NvY2sKJiM0MzsJCSAqIHJlamVjdHMgdGhlbS4KJiM0MzsJCSAqLwogCQlpZiAodGxtLSZndDtjb250cm9sICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKJiM0MzsJCQlpZiAoIXJlY3R5cGVfYWN0b3IpIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZXJyID0gcmVjdHlwZV9hY3RvcihkZXNjLCBza2IsIHJ4bS0mZ3Q7b2Zmc2V0LAomIzQzOwkJCQkJIHJ4bS0mZ3Q7ZnVsbF9sZW4sCiYjNDM7CQkJCQkgdGxtLSZndDtjb250cm9sKTsKJiM0MzsJCQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCS8qIHJlY3R5cGVfYWN0b3IgY29uc3VtZXMgdGhlIHdob2xlIHJlY29yZDsgbm8gcGFydGlhbCBwYXRoICovCiYjNDM7CQkJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJCQlza2IgPSBOVUxMOwomIzQzOwkJCWlmICgmIzQzOyYjNDM7bm9kYXRhX2NvdW50ICZndDs9IFRMU19SWF9OT0RBVEFfTElNSVQpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVybwpAQCAtMjEyMiw3ICYjNDM7MjE0NiwxMyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkgKiBoZXJlIGluc3RlYWQuCiAJCSAqLwogCQlpZiAocnhtLSZndDtmdWxsX2xlbiA9PSAwKSB7CiYjNDM7CQkJZXJyID0gMDsKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQkJLyogdGxzX3J4X3JlYWRlcl9yZWxlYXNlKCkgYW5ub3VuY2VzIGFueSBwYXJzZWQgcmVjb3JkCiYjNDM7CQkJICogb24gZXhpdCwgc28gcmV0dXJuaW5nIDAgaGVyZSBjYW5ub3Qgc3RyYW5kIGl0LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgmIzQzOyYjNDM7bm9kYXRhX2NvdW50ICZndDs9IFRMU19SWF9OT0RBVEFfTElNSVQpCiYjNDM7CQkJCWJyZWFrOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMjEzMyw2ICYjNDM7MjE2Myw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJCQlnb3RvIHJlYWRfc29ja19yZXF1ZXVlOwogCQl9CiAJCWNvcGllZCAmIzQzOz0gdXNlZDsKJiM0MzsJCW5vZGF0YV9jb3VudCA9IDA7CiAJCWlmICh1c2VkICZsdDsgcnhtLSZndDtmdWxsX2xlbikgewogCQkJcnhtLSZndDtvZmZzZXQgJiM0Mzs9IHVzZWQ7CiAJCQlyeG0tJmd0O2Z1bGxfbGVuIC09IHVzZWQ7CkBAIC0yMTUxLDYgJiM0MzsyMTgyLDE5IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJZ290byByZWFkX3NvY2tfZW5kOwogfQogCiYjNDM7aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKJiM0MzsJCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpCiYjNDM7ewomIzQzOwlyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAomIzQzOwkJCSAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsCiYjNDM7CQkJICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgcmVjdHlwZV9hY3Rvcik7CiYjNDM7fQomIzQzOwogYm9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCmluZGV4IGNiZGQzZWEyOGI5OThmLi44MTM2MzA2YjVjYWE3NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYwpAQCAtNDI3LDcgJiM0Mzs0MjcsOCBAQCBGSVhUVVJFX1NFVFVQKHRscykKIAogRklYVFVSRV9URUFSRE9XTih0bHMpCiB7Ci0JY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O2ZkKTsKIAljbG9zZShzZWxmLSZndDtjZmQpOwogfQogCkBAIC04OTcsNiAmIzQzOzg5OCwxMTQgQEAgVEVTVF9GKHRscywgc3BsaWNlX2RlY19jbXNnX3RvX3BpcGUpCiAJRVhQRUNUX0VRKG1lbWNtcCh0ZXN0X3N0ciwgYnVmLCBzZW5kX2xlbiksIDApOwogfQogCiYjNDM7LyogVmVyaWZ5IHNwbGljZSBoYW5kbGVzIGRhdGEtY29udHJvbC1kYXRhOiBzcGxpY2UgcmVhZHMgdGhlIGRhdGEKJiM0MzsgKiByZWNvcmRzIHN1Y2Nlc3NmdWxseSB3aGlsZSB0aGUgaW50ZXJ2ZW5pbmcgY29udHJvbCByZWNvcmQgbXVzdAomIzQzOyAqIGJlIGRyYWluZWQgdmlhIHJlY3Ztc2cgYmVmb3JlIHNwbGljZSBjYW4gY29udGludWUuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgc3BsaWNlX2RhdGFfY21zZ19kYXRhKQomIzQzO3sKJiM0MzsJY2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTsKJiM0MzsJY2hhciBtZW1fcmVjdltUTFNfUEFZTE9BRF9NQVhfTEVOXTsKJiM0MzsJaW50IHNlbmRfbGVuID0gNDA5NjsKJiM0MzsJY2hhciAqY3RybF9zdHIgPSAmIzM0O2NvbnRyb2wmIzM0OzsKJiM0MzsJaW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmxfc3RyKSAmIzQzOyAxOwomIzQzOwljaGFyIGN0cmxfYnVmWzhdOwomIzQzOwlpbnQgcFsyXTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CW1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7CiYjNDM7CiYjNDM7CUFTU0VSVF9HRShwaXBlKHApLCAwKTsKJiM0MzsKJiM0MzsJLyogU2VuZDogZGF0YSwgY29udHJvbCwgZGF0YSAqLwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgbWVtX3NlbmQsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLSZndDtmZCwgMTAwLCBjdHJsX3N0ciwgY3RybF9sZW4sIDApLAomIzQzOwkJICBjdHJsX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCAmYW1wO21lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBmaXJzdCBkYXRhIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7CiYjNDM7CUVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBoaXRzIGNvbnRyb2wgcmVjb3JkLCBmYWlscyAqLwomIzQzOwlFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlOVkFMKTsKJiM0MzsKJiM0MzsJLyogRHJhaW4gdGhlIGNvbnRyb2wgcmVjb3JkIHZpYSByZWN2bXNnICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAxMDAsCiYjNDM7CQkJCWN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksCiYjNDM7CQkgIGN0cmxfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChjdHJsX3N0ciwgY3RybF9idWYsIGN0cmxfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBzZWNvbmQgZGF0YSByZWNvcmQgKi8KJiM0MzsJRVhQRUNUX0VRKHNwbGljZShzZWxmLSZndDtjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoJmFtcDttZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBWZXJpZnkgdGhhdCBtdWx0aXBsZSBjb25zZWN1dGl2ZSBjb250cm9sIHJlY29yZHMgYmV0d2VlbiBkYXRhCiYjNDM7ICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzCiYjNDM7ICogYWZ0ZXJ3YXJkLiAgVGhlIHR3byBjb250cm9sIHJlY29yZHMgdXNlIGRpZmZlcmVudCBjb250ZW50IHR5cGVzCiYjNDM7ICogdG8gdmVyaWZ5IHR5cGUgcHJlc2VydmF0aW9uIGFjcm9zcyB0aGUgc3BsaWNlIGJvdW5kYXJ5LgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIHNwbGljZV9tdWx0aV9jbXNnX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyIG1lbV9zZW5kW1RMU19QQVlMT0FEX01BWF9MRU5dOwomIzQzOwljaGFyIG1lbV9yZWN2W1RMU19QQVlMT0FEX01BWF9MRU5dOwomIzQzOwlpbnQgc2VuZF9sZW4gPSA0MDk2OwomIzQzOwljaGFyICpjdHJsMSA9ICYjMzQ7YWxlcnQxJiMzNDs7CiYjNDM7CWNoYXIgKmN0cmwyID0gJiMzNDthbGVydDImIzM0OzsKJiM0MzsJaW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmwxKSAmIzQzOyAxOwomIzQzOwljaGFyIGN0cmxfYnVmWzddOwomIzQzOwlpbnQgcFsyXTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CW1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7CiYjNDM7CiYjNDM7CUFTU0VSVF9HRShwaXBlKHApLCAwKTsKJiM0MzsKJiM0MzsJLyogU2VuZDogZGF0YSwgY29udHJvbCgxMDApLCBjb250cm9sKDIwMCksIGRhdGEgKi8KJiM0MzsJRVhQRUNUX0VRKHNlbmQoc2VsZi0mZ3Q7ZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi0mZ3Q7ZmQsIDEwMCwgY3RybDEsIGN0cmxfbGVuLCAwKSwgY3RybF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLSZndDtmZCwgMjAwLCBjdHJsMiwgY3RybF9sZW4sIDApLCBjdHJsX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCAmYW1wO21lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7CiYjNDM7CiYjNDM7CS8qIFNwbGljZSBmaXJzdCBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShzcGxpY2Uoc2VsZi0mZ3Q7Y2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKG1lbV9zZW5kLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJLyogU3BsaWNlIGZhaWxzIG9uIGZpcnN0IGNvbnRyb2wgcmVjb3JkICovCiYjNDM7CUVYUEVDVF9FUShzcGxpY2Uoc2VsZi0mZ3Q7Y2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwomIzQzOwkvKiBEcmFpbiBmaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi8KJiM0MzsJRVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLSZndDtjZmQsIDEwMCwKJiM0MzsJCQkJY3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSwKJiM0MzsJCSAgY3RybF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGN0cmwxLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJLyogU3BsaWNlIGZhaWxzIG9uIHNlY29uZCBjb250cm9sIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlOVkFMKTsKJiM0MzsKJiM0MzsJLyogRHJhaW4gc2Vjb25kIGNvbnRyb2wgKHR5cGUgMjAwKSAqLwomIzQzOwlFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtJmd0O2NmZCwgMjAwLAomIzQzOwkJCQljdHJsX2J1Ziwgc2l6ZW9mKGN0cmxfYnVmKSwgTVNHX1dBSVRBTEwpLAomIzQzOwkJICBjdHJsX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoY3RybDIsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBTcGxpY2Ugc2Vjb25kIGRhdGEgKi8KJiM0MzsJRVhQRUNUX0VRKHNwbGljZShzZWxmLSZndDtjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pOwomIzQzOwlFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoJmFtcDttZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApOwomIzQzO30KJiM0MzsKIFRFU1RfRih0bHMsIHJlY3ZfYW5kX3NwbGljZSkKIHsKIAlpbnQgc2VuZF9sZW4gPSBUTFNfUEFZTE9BRF9NQVhfTEVOOwpAQCAtMTY4Miw2ICYjNDM7MTc5MSwxOTMgQEAgVEVTVF9GKHRscywgZGF0YV9jb250cm9sX2RhdGEpCiAJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTsKIH0KIAomIzQzOy8qIEZ1bGx5IGNvbnN1bWUgYSBkYXRhLWNvbnRyb2wtZGF0YSBzZXF1ZW5jZS4gIFRoZSBleGlzdGluZwomIzQzOyAqIGRhdGFfY29udHJvbF9kYXRhIHRlc3Qgb25seSBwZWVrczsgdGhpcyBleGVyY2lzZXMgY29tcGxldGUKJiM0MzsgKiByZWNvcmQgZGVsaXZlcnkgdGhyb3VnaCByZWN2IGFuZCByZWN2bXNnLgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIHJlY3ZfZGF0YV9jbXNnX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyICpkYXRhMSA9ICYjMzQ7Zmlyc3RfZGF0YSYjMzQ7OwomIzQzOwljaGFyICpjdHJsID0gJiMzNDtjdHJsX21zZyYjMzQ7OwomIzQzOwljaGFyICpkYXRhMiA9ICYjMzQ7c2Vjb25kX2RhdGEmIzM0OzsKJiM0MzsJaW50IGQxX2xlbiA9IHN0cmxlbihkYXRhMSkgJiM0MzsgMTsKJiM0MzsJaW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7CiYjNDM7CWludCBkMl9sZW4gPSBzdHJsZW4oZGF0YTIpICYjNDM7IDE7CiYjNDM7CWNoYXIgYnVmWzIwXTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBkYXRhMSwgZDFfbGVuLCAwKSwgZDFfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi0mZ3Q7ZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTsKJiM0MzsKJiM0MzsJLyogRmlyc3QgZGF0YSByZWNvcmQgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGQxX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIHJlY3Ygd2l0aG91dCBjbXNnIGJ1ZmZlciBmYWlscyBvbiBjb250cm9sIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlPKTsKJiM0MzsKJiM0MzsJLyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqLwomIzQzOwlFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtJmd0O2NmZCwgMTAwLAomIzQzOwkJCQlidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIFNlY29uZCBkYXRhIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQsIGJ1ZiwgZDJfbGVuLCBNU0dfV0FJVEFMTCksIGQyX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMiwgZDJfbGVuKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFBlZWsgYXQgYW4gaW50ZXJsZWF2ZWQgY29udHJvbCByZWNvcmQgYWZ0ZXIgdGhlIHByZWNlZGluZyBkYXRhCiYjNDM7ICogcmVjb3JkIGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGNvbnN1bWUgaXQuICBNU0dfUEVFSyBleHBvc2VzIHRoZQomIzQzOyAqIGNvbnRyb2wgcmVjb3JkJiMzOTtzIHR5cGUgd2l0aG91dCBjb25zdW1pbmcgaXQuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgcGVla19jbXNnX2FmdGVyX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyICpkYXRhID0gJiMzNDtsZWFkaW5nJiMzNDs7CiYjNDM7CWNoYXIgKmN0cmwgPSAmIzM0O21pZGRsZSYjMzQ7OwomIzQzOwljaGFyICp0YWlsID0gJiMzNDt0cmFpbGluZyYjMzQ7OwomIzQzOwlpbnQgZF9sZW4gPSBzdHJsZW4oZGF0YSkgJiM0MzsgMTsKJiM0MzsJaW50IGNfbGVuID0gc3RybGVuKGN0cmwpICYjNDM7IDE7CiYjNDM7CWludCB0X2xlbiA9IHN0cmxlbih0YWlsKSAmIzQzOyAxOwomIzQzOwljaGFyIGJ1ZlsyMF07CiYjNDM7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtJmd0O2ZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgdGFpbCwgdF9sZW4sIDApLCB0X2xlbik7CiYjNDM7CiYjNDM7CS8qIENvbnN1bWUgbGVhZGluZyBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBQZWVrIGF0IHRoZSBjb250cm9sIHJlY29yZCAqLwomIzQzOwlFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtJmd0O2NmZCwgMTAwLAomIzQzOwkJCQlidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIGNfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CS8qIENvbnN1bWUgdGhlIGNvbnRyb2wgcmVjb3JkICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAxMDAsCiYjNDM7CQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBUcmFpbGluZyBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCB0X2xlbiwgTVNHX1dBSVRBTEwpLCB0X2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCB0YWlsLCB0X2xlbiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBDb250cm9sIHJlY29yZCBhcyB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBzdHJlYW0sIGZvbGxvd2VkIGJ5CiYjNDM7ICogZGF0YS4gIFRoZSBjb250cm9sIHJlY29yZCBtdXN0IGJlIGRyYWluZWQgYmVmb3JlIHRoZSBkYXRhIHJlY29yZAomIzQzOyAqIGJlY29tZXMgYXZhaWxhYmxlLgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIGNtc2dfYmVmb3JlX2RhdGEpCiYjNDM7ewomIzQzOwljaGFyICpjdHJsID0gJiMzNDthbGVydCYjMzQ7OwomIzQzOwljaGFyICpkYXRhID0gJiMzNDtwYXlsb2FkJiMzNDs7CiYjNDM7CWludCBjX2xlbiA9IHN0cmxlbihjdHJsKSAmIzQzOyAxOwomIzQzOwlpbnQgZF9sZW4gPSBzdHJsZW4oZGF0YSkgJiM0MzsgMTsKJiM0MzsJY2hhciBidWZbMjBdOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bm90bHMpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBUTFMgc3VwcG9ydCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi0mZ3Q7ZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBkYXRhLCBkX2xlbiwgMCksIGRfbGVuKTsKJiM0MzsKJiM0MzsJLyogcmVjdiB3aXRob3V0IGNtc2cgZmFpbHMgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJTyk7CiYjNDM7CiYjNDM7CS8qIERyYWluIGNvbnRyb2wgdmlhIHJlY3Ztc2cgKi8KJiM0MzsJRVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLSZndDtjZmQsIDEwMCwKJiM0MzsJCQkJYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBEYXRhIGZvbGxvd3MgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIGRfbGVuLCBNU0dfV0FJVEFMTCksIGRfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFR3byBkaWZmZXJlbnQgY29udHJvbCByZWNvcmQgdHlwZXMgaW50ZXJsZWF2ZWQgd2l0aCBkYXRhLgomIzQzOyAqIEVhY2ggY29udHJvbCByZWNvcmQgaXMgZGVsaXZlcmVkIHdpdGggaXRzIG93biB0eXBlIHByZXNlcnZlZDsKJiM0MzsgKiB2ZXJpZnkgYm90aCB0eXBlcyBhcnJpdmUgaW50YWN0LgomIzQzOyAqLwomIzQzO1RFU1RfRih0bHMsIG1peGVkX2NvbnRyb2xfdHlwZXMpCiYjNDM7ewomIzQzOwljaGFyICpkYXRhMSA9ICYjMzQ7ZGF0YTEmIzM0OzsKJiM0MzsJY2hhciAqY3RybDEgPSAmIzM0O2hhbmRzaGFrZSYjMzQ7OwomIzQzOwljaGFyICpjdHJsMiA9ICYjMzQ7YWxlcnRfbXNnJiMzNDs7CiYjNDM7CWNoYXIgKmRhdGEyID0gJiMzNDtkYXRhMiYjMzQ7OwomIzQzOwlpbnQgZDFfbGVuID0gc3RybGVuKGRhdGExKSAmIzQzOyAxOwomIzQzOwlpbnQgYzFfbGVuID0gc3RybGVuKGN0cmwxKSAmIzQzOyAxOwomIzQzOwlpbnQgYzJfbGVuID0gc3RybGVuKGN0cmwyKSAmIzQzOyAxOwomIzQzOwlpbnQgZDJfbGVuID0gc3RybGVuKGRhdGEyKSAmIzQzOyAxOwomIzQzOwljaGFyIGJ1ZlsyMF07CiYjNDM7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgZGF0YTEsIGQxX2xlbiwgMCksIGQxX2xlbik7CiYjNDM7CUVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtJmd0O2ZkLCAxMDAsIGN0cmwxLCBjMV9sZW4sIDApLCBjMV9sZW4pOwomIzQzOwlFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLSZndDtmZCwgMjAwLCBjdHJsMiwgYzJfbGVuLCAwKSwgYzJfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKHNlbmQoc2VsZi0mZ3Q7ZmQsIGRhdGEyLCBkMl9sZW4sIDApLCBkMl9sZW4pOwomIzQzOwomIzQzOwkvKiBGaXJzdCBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTEsIGQxX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBGaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi8KJiM0MzsJRVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLSZndDtjZmQsIDEwMCwKJiM0MzsJCQkJYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBjMV9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybDEsIGMxX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBTZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAyMDAsCiYjNDM7CQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgYzJfbGVuKTsKJiM0MzsJRVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwyLCBjMl9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJLyogU2Vjb25kIGRhdGEgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pOwomIzQzOwlFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTIsIGQyX2xlbiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUcmFpbGluZyBjb250cm9sIHJlY29yZCB3aXRoIG5vIGRhdGEgZm9sbG93aW5nIGl0LiAgVGhlIHNlbmRlcgomIzQzOyAqIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBhZnRlciB0aGUgY29udHJvbCByZWNvcmQ7IHRoZSByZWNlaXZlcgomIzQzOyAqIGRyYWlucyB0aGUgY29udHJvbCBhbmQgdGhlbiBvYnNlcnZlcyBFT0YuCiYjNDM7ICovCiYjNDM7VEVTVF9GKHRscywgZGF0YV9jbXNnX2VvZikKJiM0Mzt7CiYjNDM7CWNoYXIgKmRhdGEgPSAmIzM0O3BheWxvYWQmIzM0OzsKJiM0MzsJY2hhciAqY3RybCA9ICYjMzQ7ZmluYWwmIzM0OzsKJiM0MzsJaW50IGRfbGVuID0gc3RybGVuKGRhdGEpICYjNDM7IDE7CiYjNDM7CWludCBjX2xlbiA9IHN0cmxlbihjdHJsKSAmIzQzOyAxOwomIzQzOwljaGFyIGJ1ZlsyMF07CiYjNDM7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtJmd0O2ZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2Uoc2VsZi0mZ3Q7ZmQpLCAwKTsKJiM0MzsJc2VsZi0mZ3Q7ZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyogQ29uc3VtZSBkYXRhICovCiYjNDM7CUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBEcmFpbiB0cmFpbGluZyBjb250cm9sICovCiYjNDM7CUVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi0mZ3Q7Y2ZkLCAxMDAsCiYjNDM7CQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCBjX2xlbik7CiYjNDM7CUVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApOwomIzQzOwomIzQzOwkvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi8KJiM0MzsJRVhQRUNUX0VRKHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgMCk7CiYjNDM7fQomIzQzOwogVEVTVF9GKHRscywgc2h1dGRvd24pCiB7CiAJY2hhciBjb25zdCAqdGVzdF9zdHIgPSAmIzM0O3Rlc3RfcmVhZCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcwNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2tldCBSZWNvcmQgVHlwZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBwcmV0dHkgY2xlYW4gcmVmYWN0b3IgZm9yIGhvdyB3ZSBoYW5kbGUgcmVjb3JkIHR5cGVzIGF0IHRoZSBzb2NrZXQgbGV2ZWwuICBUaGUgY29yZSBpZGVhIGlzIHRvIGludHJvZHVjZSBhIG5ldyBjYWxsYmFjaywgYHJlYWRfc29ja19yZWN0eXBlYCwgdG8gdGhlIGBzdHJ1Y3QgcHJvdG9fb3BzYC4gIFRoaXMgbG9va3MgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoIGZvciBhZGRpbmcgbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgaG93IHdlIHJlYWQgZGF0YSBiYXNlZCBvbiByZWNvcmQgdHlwZXMsIHdoaWNoIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBwcm90b2NvbHMgbGlrZSBUTFMgdGhhdCBoYXZlIGNvbXBsZXggZnJhbWluZy4KClRoZSBtZWF0IG9mIGl0IGlzIHRoYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMgbmV3IGNhbGxiYWNrLiAgSXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgZXhpc3RpbmcgZnVuY3Rpb25zLCBgc3ZjX3RjcF9zb2NrX3JlY3Ztc2dgIGFuZCBgc3ZjX3RjcF9yZWFkX21zZ2AsIHdpdGggdGhlIG5ldyBgc3ZjX3RjcF9yZWN2X2FjdG9yYCBhbmQgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAgd2hpY2ggc2VlbXMgdG8gc3VnZ2VzdCBhIG1vdmUgdG93YXJkIGEgbW9yZSBhY3Rvci1iYXNlZCBtb2RlbCBmb3IgaGFuZGxpbmcgdGhlIFRDUCByZWFkIGxvb3AuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBJ4oCZbGwgd2FudCB0byBzZWUgaG93IHRoZXNlIGFjdG9ycyBpbnRlcmFjdCBpbiBtb3JlIGRldGFpbC4KClRoZSBUTFMgc2lkZSBpcyBhbHNvIHRvdWNoZWQsIHdpdGggYG5ldC90bHMvdGxzX3N3LmNgIGdldHRpbmcgYSBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgVExTIGlzIGEga2V5IGJlbmVmaWNpYXJ5IGhlcmUuIFRoaXMgc2VlbXMgbG9naWNhbCBnaXZlbiB0aGUgcmVsaWFuY2Ugb24gcmVjb3JkIGZyYW1pbmcgd2l0aGluIFRMUy4gVGhlIGNoYW5nZSBpcyBmdW5jdGlvbmFsLCBtb2RpZnlpbmcgaG93IFJQQyBvdmVyIFRDUCBoYW5kbGVzIFRMUyByZWNvcmRzLgoKVGhlIGRlZmluaXRpb25zIG9mIGBza19yZWFkX3JlY3R5cGVfYWN0b3JfdGAgYW5kIGByZWFkX3NvY2tfcmVjdHlwZWAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgIGFyZSBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuIEkgYW0gY3VyaW91cyB0byBleGFtaW5lIGhvdyB0aGUgYHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90YCBpbnRlcmFjdHMgd2l0aCB0aGUgYHJlYWRfc29ja2AgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuICBXZSBuZWVkIGBDT05GSUdfU1VOUlBDYCBmb3IgdGhlIFJQQyBzaWRlIGFuZCBgQ09ORklHX1RMU2AgZm9yIHRoZSBUTFMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmNvbmZpZyBtb3JlIGNsb3NlbHkuIEl0IG1lbnRpb25zIGBDT05GSUdfVExTX0RFVklDRWAgaW4gYG5ldC90bHMvdGxzX21haW4uY2AgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGB0bHNfc3cuY2AuIFRoaXMgYWxzbyBuZWVkcyBjb25zaWRlcmF0aW9uLgoKT2theSwgbGV0IG1lIHF1aWNrbHkgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlcyB0byB2ZXJpZnkgaG93IHRoaXMgaXMgdXNlZCBvdXRzaWRlIG9mIHRoZXNlIGltbWVkaWF0ZSBjaGFuZ2VzLiBJIHdhbnQgdG8gc2VlIGhvdyBicm9hZGx5IGByZWFkX3NvY2tfcmVjdHlwZWAgYW5kIGBza19yZWFkX3JlY3R5cGVfYWN0b3JfdGAgYXJlIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgZXhpc3RpbmcgbmV0d29ya2luZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfc29ja19yZWN0eXBlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0Lmg9MjExPXN0cnVjdCBwcm90b19vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0LmgtMjc0LVx0LypcbmluY2x1ZGUvbGludXgvbmV0Lmg6Mjc1Olx0ICogcmVhZF9zb2NrX3JlY3R5cGUgc3BsaXRzIGRlbGl2ZXJ5IGFjcm9zcyB0d28gY2FsbGJhY2tzOlxuaW5jbHVkZS9saW51eC9uZXQuaC0yNzYtXHQgKiByZWN2X2FjdG9yIGZvciBkYXRhIHJlY29yZHMsIHBlciB0aGUgc2tfcmVhZF9hY3Rvcl90XG4tLVxuaW5jbHVkZS9saW51eC9uZXQuaC0yOTAtXHQgKi9cbmluY2x1ZGUvbGludXgvbmV0Lmg6MjkxOlx0aW50XHRcdCgqcmVhZF9zb2NrX3JlY3R5cGUpKHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvbmV0LmgtMjkyLVx0XHRcdFx0XHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTk1OD1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMDM5LS8qXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMDQwOiAqIHJlYWRfc29ja19yZWN0eXBlIG5vbi1kYXRhIHJlY29yZCBhY3RvcjogcmVjZWl2ZXMgbm9uLWRhdGEgVExTXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMDQxLSAqIHJlY29yZHMgKGFsZXJ0cywgaGFuZHNoYWtlIG1lc3NhZ2VzKSBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG9cbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xMDk4PXN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExMTctXHRsb2NrX3NvY2soc2spO1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTExODpcdGlmIChzdnNrLVx1MDAzZXNrX3NvY2stXHUwMDNlb3BzLVx1MDAzZXJlYWRfc29ja19yZWN0eXBlKVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTExOTpcdFx0bGVuID0gc3Zzay1cdTAwM2Vza19zb2NrLVx1MDAzZW9wcy1cdTAwM2VyZWFkX3NvY2tfcmVjdHlwZShzaywgXHUwMDI2ZGVzYyxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExMjAtXHRcdFx0XHRcdFx0XHQgICAgc3ZjX3RjcF9yZWN2X2FjdG9yLFxuLS1cbm5ldC90bHMvdGxzLmg9MTY5PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rscy5oLTE3MC1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XG5uZXQvdGxzL3Rscy5oOjE3MTppbnQgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rscy5oLTE3Mi1cdFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYz05NDA9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9fb3BzKHN0cnVjdCBwcm90b19vcHMgb3BzW1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTk1MS1cdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja1x0PSB0bHNfc3dfcmVhZF9zb2NrO1xubmV0L3Rscy90bHNfbWFpbi5jOjk1MjpcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbm5ldC90bHMvdGxzX21haW4uYy05NTMtXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTk1Ny1cdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnJlYWRfc29ja1x0PSB0bHNfc3dfcmVhZF9zb2NrO1xubmV0L3Rscy90bHNfbWFpbi5jOjk1ODpcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbm5ldC90bHMvdGxzX21haW4uYy05NTktXG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMTg1PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTkwLVxubmV0L3Rscy90bHNfc3cuYzoyMTkxOmludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC90bHMvdGxzX3N3LmMtMjE5Mi1cdFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU29ja2V0IFJlY2VpdmUgVHlwZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHJlYWRfc29ja19yZWN0eXBlYCBpbnRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3QsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGxlbWVudGVkIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC90bHMvdGxzX3N3LmNgIGFzIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLiBUaGF0IG1ha2VzIHNlbnNlIC0gVExTIHByb2JhYmx5IG5lZWRzIHRvIGtub3cgdGhlIHJlY29yZCB0eXBlIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4KCkkgc2VlIGl0JiMzOTtzIGFsc28gYmVpbmcgdXNlZCBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHdpdGhpbiBgc3ZjX3RjcF9yZWN2ZnJvbWAuIFRoYXQmIzM5O3MgYSBiaXQgdW5leHBlY3RlZCwgYnV0IHByb2JhYmx5IG1lYW5zIFN1blJQQyBjYW4gYWxzbyBiZW5lZml0IGZyb20gdGhpcyBzb2NrZXQtbGV2ZWwgdHlwZSByZXRyaWV2YWwgZm9yIFRDUCBjb25uZWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gaG93IHRoYXQmIzM5O3MgYmVpbmcgdXNlZCB0aGVyZS4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcyBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBzdmNfdGNwX3JlY3ZfYWN0b3JgLCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCwgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWAgYW5kIGBfX3Rsc19zd19yZWFkX3NvY2tgLgoKR2l2ZW4gdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBzZWVtcyBjZW50cmFsLCBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fdGxzX3N3X3JlYWRfc29ja2AgaW4gYG5ldC90bHMvdGxzX3N3LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgcHVsbGluZyB0aGlzIHJlY29yZCB0eXBlIGluZm9ybWF0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgYmFzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfc3cuYz0xOTgzPXNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMDU2LVxubmV0L3Rscy90bHNfc3cuYzoyMDU3OnN0YXRpYyBpbnQgX190bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rsc19zdy5jLTIwNTgtXHRcdFx0ICAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMTg1PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTg3LXtcbm5ldC90bHMvdGxzX3N3LmM6MjE4ODpcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIE5VTEwpO1xubmV0L3Rscy90bHNfc3cuYy0yMTg5LX1cbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTIxOTE9aW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjE5NC17XG5uZXQvdGxzL3Rsc19zdy5jOjIxOTU6XHRyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCByZWN0eXBlX2FjdG9yKTtcbm5ldC90bHMvdGxzX3N3LmMtMjE5Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoZXNlIHN5bWJvbHMgcmVsYXRlOiBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLCBhbmQgYF9fdGxzX3N3X3JlYWRfc29ja2AuIFRoZXNlIHNlZW0gdG8gYmUgY29yZSB0byBzb21lIHNvcnQgb2YgbmV0d29yayBwcm90b2NvbCBoYW5kbGluZywgcHJvYmFibHkgVENQIGFuZCBsaWtlbHkgaW52b2x2aW5nIFRMUy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGVuYWJsaW5nIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgU1VOUlBDYCBhbmQgYFRMU2AuIElzIGBTVU5SUENgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgYW0gSSBnb2luZyB0byBuZWVkIHNvbWV0aGluZyBtb3JlLCBwZXJoYXBzIGEgZGVidWcgb3B0aW9uIGxpa2UgYFNVTlJQQ19ERUJVR2A/IFVzdWFsbHksIHBsYWluIGBTVU5SUENgIGlzIGVub3VnaCB0byBlbmFibGUgc3RhbmRhcmQgUlBDIGZ1bmN0aW9uYWxpdHksIGJ1dCBJIGNhbiYjMzk7dCBhc3N1bWUgdGhhdCB3aXRob3V0IGNoZWNraW5nLiBBaCwgdGhlIHBsb3QgdGhpY2tlbnMuLi4gYFNVTlJQQ2AgaXMgYSAqdHJpc3RhdGUqIGNvbmZpZywgc28gSSBuZWVkIHRvIGJlIG1vcmUgY2FyZWZ1bC4KClRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc3VucnBjL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgU1VOUlBDYCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBUTFMtcmVsYXRlZCBzeW1ib2xzLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVU5SUEMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXG5uZXQvc3VucnBjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTUtXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNDktXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclwmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7UlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgUlBDLW92ZXItVExTIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBTVU5SUENgIGlzIGZ1bmRhbWVudGFsIHRvIE5GUyBhbmQgYE5GU0RgIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBzZWN1cml0eS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBteSB3b3JrLCBJIHNob3VsZCBzZWUgaWYgdGhlcmUgaXMgYSBjb25maWcgaW4gcGxhY2UgZm9yIFJQQyBvdmVyIFRMUy4gSXQmIzM5O3MgYSBrZXkgc2VjdXJpdHkgbWVhc3VyZSB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSB0aGF0IFRMUyBpcyBwcm9wZXJseSBzZXQgdXAgZm9yIFJQQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlBDX1RMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzY2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgZm9yIFRMUyBDb25maWd1cmF0aW9uIGluIFJQQyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gc2VlIGhvdyBUTFMgaXMgY29uZmlndXJlZCwgb3IgaWYgaXQmIzM5O3MgZXZlbiAqY29uc2lkZXJlZCogaW4gdGhlIGNvbnRleHQgb2YgYG5ldC9zdW5ycGNgLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBuZXQvc3VucnBjL0tjb25maWdgIGhhcyB0byBzYXkuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgbW9kdWxlIGNvbmZpZ3VyYXRpb25zLCBhbmQgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IGFueSBUTFMgc3VwcG9ydCwgb3IgdGhlICpwb3RlbnRpYWwqIGZvciBUTFMsIHdpbGwgYmUgY29udHJvbGxlZCB0aHJvdWdoIGEgS2NvbmZpZyBvcHRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZmxhZ3MgcmVsYXRpbmcgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIFRMUywgcG90ZW50aWFsbHkgZGVwZW5kZW50IG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIChsaWtlIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgbGlicmFyaWVzKSwgYW5kIG1heWJlIGV2ZW4gb3B0aW9ucyBmb3Igc2VsZWN0aW5nIGJldHdlZW4gZGlmZmVyZW50IFRMUyBpbXBsZW1lbnRhdGlvbnMgaWYgbXVsdGlwbGUgYXJlIHN1cHBvcnRlZCB3aXRoaW4gdGhpcyBSUEMgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGFueSBUTFMgb3B0aW9ucyBJIGZpbmQgYW5kIG90aGVyIFJQQyBmdW5jdGlvbmFsaXRpZXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzAKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHN5c3RlbSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGZvciBib3RoIGBTVU5SUENgIGFuZCBgVExTYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudHMgZm9yIHRoaXMgc2V0dXAuIE5vdywgbGV0JiMzOTtzIGp1c3QgY2xhcmlmeeKApiByaWdodCwgYFRMU2AgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24sIGBjb25maWcgVExTYC4gR290IGl0LiBKdXN0IGRvdWJsZS1jaGVja2luZyB0byBrZWVwIGV2ZXJ5dGhpbmcgc3RyYWlnaHQgaW4gbXkgaGVhZC4gTm8gc3VycHJpc2VzLCBqdXN0IHRoZSBleHBlY3RlZCBiYXNlbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9tbS9LY29uZmlnPTg3Mz1jb25maWcgSEFSREVOX0JSQU5DSF9ISVNUT1JZXG4tLVxuYXJjaC9hcm0vbW0vS2NvbmZpZy04ODItXG5hcmNoL2FybS9tbS9LY29uZmlnOjg4Mzpjb25maWcgVExTX1JFR19FTVVMXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cdGJvb2xcbi0tXG5uZXQvdGxzL0tjb25maWctNC0jXG5uZXQvdGxzL0tjb25maWc6NTpjb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTYzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBTY29wZSBhbmQgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggVExTLCBhcyBzdXNwZWN0ZWQuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0LiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljcy4gVGhlIG1vZGlmaWNhdGlvbnMgaGl0IGBuZXQvc3VucnBjL3N2Y3NvY2suY2AgYW5kIGBuZXQvdGxzL3Rsc19zdy5jYC4gVGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIHNlZW0gdG8gYmUgYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCwgYW5kIGBfX3Rsc19zd19yZWFkX3NvY2tgLgoKTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIGV4cG9ydGVkIGFzIGludGVuZGVkLiBgc3ZjX3RjcF9yZWN2X2FjdG9yYCBpcyBzdGF0aWMsIGdvb2QuIFNhbWUgZ29lcyBmb3IgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGFuZCBgX190bHNfc3dfcmVhZF9zb2NrYC4gQW5kIHllcywgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWAgaXMgaW4gYG5ldC90bHMvdGxzX3N3LmNgLCBjb25maXJtaW5nIGl0JiMzOTtzIGV4cG9ydGVkLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBhbHNvIGFkZCBgc3ZjX3RjcF9yZWN2ZnJvbWAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLCBzaW5jZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSAqd2h5Ki4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgcmVhZF9zb2NrX3JlY3R5cGVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHByb3RvX29wc2AsIGFsbG93aW5nIHRoZSByZWFkaW5nIG9mIG5vbi1kYXRhIFRMUyByZWNvcmRzIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZSBhbGVydHMgYW5kIGhhbmRzaGFrZSBtZXNzYWdlcy4gVGhlIGltcGxlbWVudGF0aW9uIGlzIGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYF9fdGxzX3N3X3JlYWRfc29ja2AgYW5kIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLiBUaGUgcGF0Y2ggdGhlbiB1c2VzIHRoaXMgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlLCB3aXRoIGZ1bmN0aW9ucyBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGFuZCBgc3ZjX3RjcF9yZWN2ZnJvbWAuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZS4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgZnV6emVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gd2F0Y2ggZm9yIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnZXQgZGljZXkuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgSSYjMzk7dmUgZ290IGBUTFNgIGNvbmZpcm1lZC4gU1VOUlBDIGlzIGFsc28gcHJlc2VudC4gQWgsIHJpZ2h0LCBgU1VOUlBDYCBpcyB0cmlzdGF0ZSwgc2VsZWN0ZWQgYnkgYE5GU19GU2AgYW5kIGBORlNEYC4gRGlyZWN0IGNvbmZpZ3VyYXRpb24gaXNuJiMzOTt0IGF2YWlsYWJsZS4gRW5hYmxpbmcgaXQgaW1wbGljaXRseSByZXF1aXJlcyBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYE5GU0RgIGlzIHRoZSBtb3JlIHJlbGV2YW50IG9uZSBmb3IgbXkgYW5hbHlzaXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBmcy9uZnNkL0tjb25maWdgIHRvIGNvbmZpcm0gYW55IGRlcGVuZGVuY2llcyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIuCgpTbywgdG8gc3VtbWFyaXplIG15IGZvY3VzZWQgc3ltYm9scyBhcmU6Ci0gYHN2Y190Y3BfcmVjdl9hY3RvcmAKLSBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYAotIGBzdmNfdGNwX3JlY3Zmcm9tYAotIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgCi0gYF9fdGxzX3N3X3JlYWRfc29ja2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU0QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9uZnNkL0tjb25maWc6Mjpjb25maWcgTkZTRFxuZnMvbmZzZC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMzktXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy01MC1cbmZzL25mc2QvS2NvbmZpZzo1MTpjb25maWcgTkZTRF9WMl9BQ0xcbmZzL25mc2QvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjIgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy01NC1cbmZzL25mc2QvS2NvbmZpZzo1NTpjb25maWcgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy03Ni1cbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctOTMtXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xuZnMvbmZzZC9LY29uZmlnLTk1LVx0Ym9vbFxuZnMvbmZzZC9LY29uZmlnLTk2LVxuZnMvbmZzZC9LY29uZmlnOjk3OmNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xMDktXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEyMy1cbmZzL25mc2QvS2NvbmZpZzoxMjQ6Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMjUtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTQwLVxuZnMvbmZzZC9LY29uZmlnOjE0MTpjb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xuZnMvbmZzZC9LY29uZmlnLTE0Mi1cdGJvb2wgXCYjMzQ7TkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTUwLVxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTYzLVxuZnMvbmZzZC9LY29uZmlnOjE2NDpjb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXG5mcy9uZnNkL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTc5LVxuZnMvbmZzZC9LY29uZmlnOjE4MDpjb25maWcgTkZTRF9WNF9QT1NJWF9BQ0xTXG5mcy9uZnNkL0tjb25maWctMTgxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IE5GU3Y0IFBPU0lYIGRyYWZ0IEFDTHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNDgKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIEVuaGFuY2VkIFNlY3VyaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgdGhpcyBgcmVhZF9zb2NrX3JlY3R5cGVgIGNhbGxiYWNrIGZvciBub24tZGF0YSBUTFMgcmVjb3JkcywgaXMgcHJvcGVybHkgaW50ZWdyYXRlZCBhbmQgdGVzdGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhZGQgYE5GU0RgIHRvIHRoZSBjb25maWd1cmF0aW9ucywgc2luY2UgdGhhdCYjMzk7cyBhIGtleSBjb21wb25lbnQsIGFuZCB0aGVuIG9mIGNvdXJzZSBJIG5lZWQgYFRMU2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuCgpJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbmV0L3Rscy9LY29uZmlnYCB0byBjb25maXJtIHRoZSBgY29uZmlnIFRMU2AgcHJvbXB0IGlzIHByZXNlbnQuIFllcywgaXQgaXMuIEV4Y2VsbGVudC4gTm93LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlciwgSSBoYXZlIG15IGVuYWJsZW1lbnQgY29uZmlnIGxpc3Qgd2hpY2ggaXM6IGBbJiMzNDtORlNEJiMzNDssICYjMzQ7VExTJiMzNDtdYC4KCkkgYWxzbyBoYXZlIGlkZW50aWZpZWQgdGhlc2UgdmVyeSByZWxldmFudCBzeW1ib2xzIHdoaWNoIEkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbjogYFsmIzM0O3N2Y190Y3BfcmVjdl9hY3RvciYjMzQ7LCAmIzM0O3N2Y190Y3BfcmVjdHlwZV9hY3RvciYjMzQ7LCAmIzM0O3N2Y190Y3BfcmVjdmZyb20mIzM0OywgJiMzNDt0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUmIzM0OywgJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0O11gLiBUaGVzZSBkaXJlY3RseSByZWxhdGUgdG8gdGhlIG5ldyBgcmVhZF9zb2NrX3JlY3R5cGVgIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggYW5kIHRoZSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZS4gVGhlIGByZWFkX3NvY2tfcmVjdHlwZWAgY2FsbGJhY2sgYWxsb3dzIGRpcmVjdCByZWFkaW5nIG9mIG5vbi1kYXRhIFRMUyByZWNvcmRzIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldCBhbmQgdGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zIG9uIGNvcmUgbmV0d29ya2luZyBhbmQgUlBDIGNvZGUuCgpHaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJvdG9fb3BzIGNhbGxiYWNrLCBJIGJlbGlldmUgdGhhdCB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGdvYWwgaGVyZSBpcyB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBpbiB0aGUgVExTIHJlY29yZCBwYXJzaW5nIGFuZCBSUEMgbWVzc2FnZSBhc3NlbWJseSBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHB1cnN1aW5nLgoKSSYjMzk7bSByZWFkeSB0byBjb21taXQgdG8gZnV6emluZyB0aGlzLiBMZXQmIzM5O3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gYW5kIGdldCB0aGUgYmFsbCByb2xsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZTRCYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfdGNwX3JlY3ZfYWN0b3ImIzM0OywKICAgICYjMzQ7c3ZjX3RjcF9yZWN0eXBlX2FjdG9yJiMzNDssCiAgICAmIzM0O3N2Y190Y3BfcmVjdmZyb20mIzM0OywKICAgICYjMzQ7dGxzX3N3X3JlYWRfc29ja19yZWN0eXBlJiMzNDssCiAgICAmIzM0O19fdGxzX3N3X3JlYWRfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHByb3RvX29wcyBjYWxsYmFjayBgcmVhZF9zb2NrX3JlY3R5cGVgIHRvIGFsbG93IHJlYWRpbmcgbm9uLWRhdGEgVExTIHJlY29yZHMgKGxpa2UgYWxlcnRzIGFuZCBoYW5kc2hha2UgbWVzc2FnZXMpIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4gSXQgaW1wbGVtZW50cyB0aGlzIGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCAoYF9fdGxzX3N3X3JlYWRfc29ja2AsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgKSBhbmQgdXNlcyBpdCBpbiB0aGUgU1VOUlBDIHNlcnZlciBUQ1Agc29ja2V0IGNvZGUgKGBzdmNfdGNwX3JlY3ZfYWN0b3JgLCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCwgYHN2Y190Y3BfcmVjdmZyb21gKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgUlBDIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgaW4gdGhlIFRMUyByZWNvcmQgcGFyc2luZyBhbmQgUlBDIG1lc3NhZ2UgYXNzZW1ibHkgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OywKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3RjcF9yZWN2X2FjdG9yJiMzNDssCiAgICAmIzM0O3N2Y190Y3BfcmVjdHlwZV9hY3RvciYjMzQ7LAogICAgJiMzNDtzdmNfdGNwX3JlY3Zmcm9tJiMzNDssCiAgICAmIzM0O3Rsc19zd19yZWFkX3NvY2tfcmVjdHlwZSYjMzQ7LAogICAgJiMzNDtfX3Rsc19zd19yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDQ6NTEuNjY4MzY1MjI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxMjcyMDg0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX3RjcF9yZWN2X2FjdG9yXCIsXG4gICAgXCJzdmNfdGNwX3JlY3R5cGVfYWN0b3JcIixcbiAgICBcInN2Y190Y3BfcmVjdmZyb21cIixcbiAgICBcInRsc19zd19yZWFkX3NvY2tfcmVjdHlwZVwiLFxuICAgIFwiX190bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNDo1MS42NjgzNzQ4OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzE5MzE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJjNDRiMDIzOWIzMTdmZjQ4ODE4MWQ3OTI1YzRlY2IwNWFkMTg2YjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMjI6MDQ6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcXG5pbmRleCAyNzcxODhhNDBjNzJlMy4uN2ExOWE3NDNhNjE3NzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmhcXG5AQCAtMTk4LDYgKzE5OCwxMyBAQCBzdHJ1Y3Qgc2tfYnVmZjtcXG4gc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7XFxuIHR5cGVkZWYgaW50ICgqc2tfcmVhZF9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50LCBzaXplX3QpO1xcbisvKiByZWN0eXBlIGNhcnJpZXMgdGhlIHRyYW5zcG9ydCByZWNvcmQgdHlwZSwgZm9yIGV4YW1wbGUgYVxcbisgKiBUTFNfUkVDT1JEX1RZUEVfKiB2YWx1ZS5cXG4rICovXFxuK3R5cGVkZWYgaW50ICgqc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50LCBzaXplX3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1OCByZWN0eXBlKTtcXG4gdHlwZWRlZiBpbnQgKCpza2JfcmVhZF9hY3Rvcl90KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG4gXFxuIFxcbkBAIC0yNjQsNiArMjcxLDI3IEBAIHN0cnVjdCBwcm90b19vcHMge1xcbiBcXHQgKi9cXG4gXFx0aW50XFx0XFx0KCpyZWFkX3NvY2spKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdFxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xcbitcXHQvKlxcbitcXHQgKiByZWFkX3NvY2tfcmVjdHlwZSBzcGxpdHMgZGVsaXZlcnkgYWNyb3NzIHR3byBjYWxsYmFja3M6XFxuK1xcdCAqIHJlY3ZfYWN0b3IgZm9yIGRhdGEgcmVjb3JkcywgcGVyIHRoZSBza19yZWFkX2FjdG9yX3RcXG4rXFx0ICogY29udmVudGlvbiwgYW5kIHJlY3R5cGVfYWN0b3IgZm9yIGFsbCBvdGhlciByZWNvcmRzLFxcbitcXHQgKiB3aXRoIHJlY3R5cGUgaWRlbnRpZnlpbmcgZWFjaC4gQSBOVUxMIHJlY3R5cGVfYWN0b3JcXG4rXFx0ICogbGVhdmVzIG5vbi1kYXRhIHJlY29yZHMgcGVuZGluZy4gcmVjdHlwZV9hY3RvciByZXR1cm5zIDBcXG4rXFx0ICogdG8gY29uc3VtZSBhIHJlY29yZCBvciBuZWdhdGl2ZSB0byBsZWF2ZSBpdCBwZW5kaW5nIGZvclxcbitcXHQgKiByZWRlbGl2ZXJ5IGFuZCBzdG9wIGRlbGl2ZXJ5OyB0aGUgbmVnYXRpdmUgcmV0dXJuIGlzIGFcXG4rXFx0ICogYmFja3ByZXNzdXJlIHNpZ25hbCwgbm90IGEgZmF0YWwgZXJyb3IuIEJvdGggY2FsbGJhY2tzXFxuK1xcdCAqIHJlcG9ydCBlcnJvcnMgYW5kIGVhcmx5IHN0b3AgdGhlIHdheSByZWN2X2FjdG9yIGRvZXM6XFxuK1xcdCAqIGJ5IHNldHRpbmcgZGVzYy1cXHUwMDNlY291bnQgdG8gMCBhbmQgcmVjb3JkaW5nIHRoZSByZWFzb24gaW5cXG4rXFx0ICogZGVzYy1cXHUwMDNlZXJyb3IsIHBlciB0aGUgcmVhZF9kZXNjcmlwdG9yX3QgY29udmVudGlvbiBhbmRcXG4rXFx0ICogaW5kZXBlbmRlbnQgb2YgdGhlIHJldHVybiB2YWx1ZS4gVGhlIHJldHVybiB2YWx1ZSByZXBvcnRzXFxuK1xcdCAqIG9ubHkgZGF0YSBieXRlcyBjb25zdW1lZCBieSByZWN2X2FjdG9yOyB0aGUgY2FsbGVyXFxuK1xcdCAqIGRldGVjdHMgYW4gZXJyb3Igb3IgZWFybHkgc3RvcCB2aWEgZGVzYy1cXHUwMDNlY291bnQgYW5kXFxuK1xcdCAqIGRlc2MtXFx1MDAzZWVycm9yLlxcbitcXHQgKi9cXG4rXFx0aW50XFx0XFx0KCpyZWFkX3NvY2tfcmVjdHlwZSkoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90IHJlY3R5cGVfYWN0b3IpO1xcbiBcXHQvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHJlYWRfc29jaygpLCBpdCByZWFkcyBhbiBlbnRpcmUgc2tiIGF0IGEgdGltZS4gKi9cXG4gXFx0aW50XFx0XFx0KCpyZWFkX3NrYikoc3RydWN0IHNvY2sgKnNrLCBza2JfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xcbiBcXHRpbnRcXHRcXHQoKnNlbmRtc2dfbG9ja2VkKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbmluZGV4IDUwZTVlN2Y1Yjc2MmRlLi45YjllMGRhOWU3M2NkNiAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuQEAgLTgsMTUgKzgsNiBAQFxcbiAgKiBldmVubHkgd2hlbiBzZXJ2aWNpbmcgYSBzaW5nbGUgY2xpZW50LiBNYXkgbmVlZCB0byBtb2RpZnkgdGhlXFxuICAqIHN2Y194cHJ0X2VucXVldWUgcHJvY2VkdXJlLi4uXFxuICAqXFxuLSAqIFRDUCBzdXBwb3J0IGlzIGxhcmdlbHkgdW50ZXN0ZWQgYW5kIG1heSBiZSBhIGxpdHRsZSBzbG93LiBUaGUgcHJvYmxlbVxcbi0gKiBpcyB0aGF0IHdlIGN1cnJlbnRseSBkbyB0d28gc2VwYXJhdGUgcmVjdmZyb20ncywgb25lIGZvciB0aGUgNC1ieXRlXFxuLSAqIHJlY29yZCBsZW5ndGgsIGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgYWN0dWFsIHJlY29yZC4gVGhpcyBjb3VsZCBwb3NzaWJseVxcbi0gKiBiZSBpbXByb3ZlZCBieSBhbHdheXMgcmVhZGluZyBhIG1pbmltdW0gc2l6ZSBvZiBhcm91bmQgMTAwIGJ5dGVzIGFuZFxcbi0gKiB0dWNraW5nIGFueSBzdXBlcmZsdW91cyBieXRlcyBhd2F5IGluIGEgdGVtcG9yYXJ5IHN0b3JlLiBTdGlsbCwgdGhhdFxcbi0gKiBsZWF2ZXMgd3JpdGUgcmVxdWVzdHMgb3V0IGluIHRoZSByYWluLiBBbiBhbHRlcm5hdGl2ZSBtYXkgYmUgdG8gcGVlayBhdFxcbi0gKiB0aGUgZmlyc3Qgc2tiIGluIHRoZSBxdWV1ZSwgYW5kIGlmIGl0IG1hdGNoZXMgdGhlIG5leHQgVENQIHNlcXVlbmNlXFxuLSAqIG51bWJlciwgdG8gZXh0cmFjdCB0aGUgcmVjb3JkIG1hcmtlci4gWXVjay5cXG4tICpcXG4gICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggXFx1MDAzY29raXJAbW9uYWQuc3diLmRlXFx1MDAzZVxcbiAgKi9cXG4gXFxuQEAgLTIzOCwxMzggKzIyOSw2IEBAIHN0YXRpYyBpbnQgc3ZjX29uZV9zb2NrX25hbWUoc3RydWN0IHN2Y19zb2NrICpzdnNrLCBjaGFyICpidWYsIGludCByZW1haW5pbmcpXFxuIFxcdHJldHVybiBsZW47XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnRcXG4tc3ZjX3RjcF9zb2NrX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLVxcdFxcdFxcdCAgc3RydWN0IGNtc2doZHIgKmNtc2csIGludCByZXQpXFxuLXtcXG4tXFx0dTggY29udGVudF90eXBlID0gdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLVxcdTAwM2VzaywgY21zZyk7XFxuLVxcdHU4IGxldmVsLCBkZXNjcmlwdGlvbjtcXG4tXFxuLVxcdHN3aXRjaCAoY29udGVudF90eXBlKSB7XFxuLVxcdGNhc2UgMDpcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgVExTX1JFQ09SRF9UWVBFX0RBVEE6XFxuLVxcdFxcdC8qIFRMUyBzZXRzIEVPUiBhdCB0aGUgZW5kIG9mIGVhY2ggYXBwbGljYXRpb24gZGF0YVxcbi1cXHRcXHQgKiByZWNvcmQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIG1vcmUgZnJhbWVzXFxuLVxcdFxcdCAqIHdhaXRpbmcgdG8gYmUgZGVjcnlwdGVkLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNj0gfk1TR19FT1I7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDpcXG4tXFx0XFx0dGxzX2FsZXJ0X3JlY3Yoc29jay1cXHUwMDNlc2ssIG1zZywgXFx1MDAyNmxldmVsLCBcXHUwMDI2ZGVzY3JpcHRpb24pO1xcbi1cXHRcXHRyZXQgPSAobGV2ZWwgPT0gVExTX0FMRVJUX0xFVkVMX0ZBVEFMKSA/XFxuLVxcdFxcdFxcdC1FTk9UQ09OTiA6IC1FQUdBSU47XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBkaXNjYXJkIHRoaXMgcmVjb3JkIHR5cGUgKi9cXG4tXFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXN2Y190Y3Bfc29ja19yZWN2X2Ntc2coc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50ICptc2dfZmxhZ3MpXFxuLXtcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHRzdHJ1Y3QgY21zZ2hkclxcdGNtc2c7XFxuLVxcdFxcdHU4XFx0XFx0YnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHU4KSldO1xcbi1cXHR9IHU7XFxuLVxcdHU4IGFsZXJ0WzJdO1xcbi1cXHRzdHJ1Y3Qga3ZlYyBhbGVydF9rdmVjID0ge1xcbi1cXHRcXHQuaW92X2Jhc2UgPSBhbGVydCxcXG4tXFx0XFx0Lmlvdl9sZW4gPSBzaXplb2YoYWxlcnQpLFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcXG4tXFx0XFx0Lm1zZ19mbGFncyA9ICptc2dfZmxhZ3MsXFxuLVxcdFxcdC5tc2dfY29udHJvbCA9IFxcdTAwMjZ1LFxcbi1cXHRcXHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YodSksXFxuLVxcdH07XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgXFx1MDAyNmFsZXJ0X2t2ZWMsIDEsXFxuLVxcdFxcdCAgICAgIGFsZXJ0X2t2ZWMuaW92X2xlbik7XFxuLVxcdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBcXHUwMDI2bXNnLCBNU0dfRE9OVFdBSVQpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdGxzX2dldF9yZWNvcmRfdHlwZShzb2NrLVxcdTAwM2VzaywgXFx1MDAyNnUuY21zZykgPT0gVExTX1JFQ09SRF9UWVBFX0FMRVJUKSB7XFxuLVxcdFxcdGlvdl9pdGVyX3JldmVydChcXHUwMDI2bXNnLm1zZ19pdGVyLCByZXQpO1xcbi1cXHRcXHRyZXQgPSBzdmNfdGNwX3NvY2tfcHJvY2Vzc19jbXNnKHNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZ1LmNtc2csIC1FQUdBSU4pO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4tc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0c3RydWN0IHNvY2tldCAqc29jayA9IHN2c2stXFx1MDAzZXNrX3NvY2s7XFxuLVxcbi1cXHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgbXNnLCBNU0dfRE9OVFdBSVQpO1xcbi1cXHRpZiAobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfQ1RSVU5DKSB7XFxuLVxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjY9IH4oTVNHX0NUUlVOQyB8IE1TR19FT1IpO1xcbi1cXHRcXHRpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU8pXFxuLVxcdFxcdFxcdHJldCA9IHN2Y190Y3Bfc29ja19yZWN2X2Ntc2coc29jaywgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2ZsYWdzKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0jaWYgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFXFxuLXN0YXRpYyB2b2lkIHN2Y19mbHVzaF9idmVjKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHNlZWspXFxuLXtcXG4tXFx0c3RydWN0IGJ2ZWNfaXRlciBiaSA9IHtcXG4tXFx0XFx0LmJpX3NpemVcXHQ9IHNpemUgKyBzZWVrLFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4tXFxuLVxcdGJ2ZWNfaXRlcl9hZHZhbmNlKGJ2ZWMsIFxcdTAwMjZiaSwgc2VlayBcXHUwMDI2IFBBR0VfTUFTSyk7XFxuLVxcdGZvcl9lYWNoX2J2ZWMoYnYsIGJ2ZWMsIGJpLCBiaSlcXG4tXFx0XFx0Zmx1c2hfZGNhY2hlX3BhZ2UoYnYuYnZfcGFnZSk7XFxuLX1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIHN2Y19mbHVzaF9idmVjKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICBzaXplX3Qgc2VlaylcXG4te1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tLypcXG4tICogUmVhZCBmcm9tIEBycXN0cCdzIHRyYW5zcG9ydCBzb2NrZXQuIFRoZSBpbmNvbWluZyBtZXNzYWdlIGZpbGxzIHdob2xlXFxuLSAqIHBhZ2VzIGluIEBycXN0cCdzIHJxX3BhZ2VzIGFycmF5IHVudGlsIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIG1lc3NhZ2VcXG4tICogaGFzIGJlZW4gcmVjZWl2ZWQgaW50byBhIHBhcnRpYWwgcGFnZS5cXG4tICovXFxuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tc2coc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc2l6ZV90IGJ1ZmxlbixcXG4tXFx0XFx0XFx0XFx0c2l6ZV90IHNlZWspXFxuLXtcXG4tXFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHJxc3RwLVxcdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xcbi1cXHRzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyA9IHJxc3RwLVxcdTAwM2VycV9idmVjO1xcbi1cXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgTlVMTCB9O1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tXFx0c3NpemVfdCBsZW47XFxuLVxcdHNpemVfdCB0O1xcbi1cXG4tXFx0Y2xlYXJfYml0KFhQVF9EQVRBLCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpO1xcbi1cXG4tXFx0Zm9yIChpID0gMCwgdCA9IDA7IHQgXFx1MDAzYyBidWZsZW47IGkrKywgdCArPSBQQUdFX1NJWkUpXFxuLVxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWNbaV0sIHJxc3RwLVxcdTAwM2VycV9wYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTtcXG4tXFxuLVxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBidmVjLCBpLCBidWZsZW4pO1xcbi1cXHRpZiAoc2Vlaykge1xcbi1cXHRcXHRpb3ZfaXRlcl9hZHZhbmNlKFxcdTAwMjZtc2cubXNnX2l0ZXIsIHNlZWspO1xcbi1cXHRcXHRidWZsZW4gLT0gc2VlaztcXG4tXFx0fVxcbi1cXHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcXHUwMDI2bXNnKTtcXG4tXFx0aWYgKGxlbiBcXHUwMDNlIDApXFxuLVxcdFxcdHN2Y19mbHVzaF9idmVjKGJ2ZWMsIGxlbiwgc2Vlayk7XFxuLVxcbi1cXHQvKiBJZiB3ZSByZWFkIGEgZnVsbCByZWNvcmQsIHRoZW4gYXNzdW1lIHRoZXJlIG1heSBiZSBtb3JlXFxuLVxcdCAqIGRhdGEgdG8gcmVhZCAoc3RyZWFtIGJhc2VkIHNvY2tldHMgb25seSEpXFxuLVxcdCAqL1xcbi1cXHRpZiAobGVuID09IGJ1ZmxlbilcXG4tXFx0XFx0c2V0X2JpdChYUFRfREFUQSwgXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2ZsYWdzKTtcXG4tXFxuLVxcdHJldHVybiBsZW47XFxuLX1cXG4tXFxuIC8qXFxuICAqIFNldCBzb2NrZXQgc25kIGFuZCByY3YgYnVmZmVyIGxlbmd0aHNcXG4gICovXFxuQEAgLTEwNDgsNTAgKzkwNyw2IEBAIHN0YXRpYyB2b2lkIHN2Y190Y3BfY2xlYXJfcGFnZXMoc3RydWN0IHN2Y19zb2NrICpzdnNrKVxcbiBcXHRzdnNrLVxcdTAwM2Vza19kYXRhbGVuID0gMDtcXG4gfVxcbiBcXG4tLypcXG4tICogUmVjZWl2ZSBmcmFnbWVudCByZWNvcmQgaGVhZGVyIGludG8gc2tfbWFya2VyLlxcbi0gKi9cXG4tc3RhdGljIHNzaXplX3Qgc3ZjX3RjcF9yZWFkX21hcmtlcihzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLXtcXG4tXFx0c3NpemVfdCB3YW50LCBsZW47XFxuLVxcbi1cXHQvKiBJZiB3ZSBoYXZlbid0IGdvdHRlbiB0aGUgcmVjb3JkIGxlbmd0aCB5ZXQsXFxuLVxcdCAqIGdldCB0aGUgbmV4dCBmb3VyIGJ5dGVzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHN2c2stXFx1MDAzZXNrX3RjcGxlbiBcXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpIHtcXG4tXFx0XFx0c3RydWN0IG1zZ2hkclxcdG1zZyA9IHsgTlVMTCB9O1xcbi1cXHRcXHRzdHJ1Y3Qga3ZlY1xcdGlvdjtcXG4tXFxuLVxcdFxcdHdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay1cXHUwMDNlc2tfdGNwbGVuO1xcbi1cXHRcXHRpb3YuaW92X2Jhc2UgPSAoKGNoYXIgKilcXHUwMDI2c3Zzay1cXHUwMDNlc2tfbWFya2VyKSArIHN2c2stXFx1MDAzZXNrX3RjcGxlbjtcXG4tXFx0XFx0aW92Lmlvdl9sZW4gID0gd2FudDtcXG4tXFx0XFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFxcdTAwMjZpb3YsIDEsIHdhbnQpO1xcbi1cXHRcXHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcXHUwMDI2bXNnKTtcXG4tXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBsZW47XFxuLVxcdFxcdHN2c2stXFx1MDAzZXNrX3RjcGxlbiArPSBsZW47XFxuLVxcdFxcdGlmIChsZW4gXFx1MDAzYyB3YW50KSB7XFxuLVxcdFxcdFxcdC8qIGNhbGwgYWdhaW4gdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzICovXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3Nob3J0O1xcbi1cXHRcXHR9XFxuLVxcdFxcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzdnNrLVxcdTAwM2Vza19tYXJrZXIpO1xcbi1cXHRcXHRpZiAoc3ZjX3NvY2tfcmVjbGVuKHN2c2spICsgc3Zzay1cXHUwMDNlc2tfZGF0YWxlbiBcXHUwMDNlXFxuLVxcdFxcdCAgICBzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXFx1MDAzZXN2X21heF9tZXNnKVxcbi1cXHRcXHRcXHRnb3RvIGVycl90b29fbGFyZ2U7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcXG4tXFxuLWVycl90b29fbGFyZ2U6XFxuLVxcdG5ldF9ub3RpY2VfcmF0ZWxpbWl0ZWQoXFxcInN2YzogJXMgb3ZlcnNpemVkIFJQQyBmcmFnbWVudCAoJXUgb2N0ZXRzKSBmcm9tICVwSVNwY1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X3NlcnZlci1cXHUwMDNlc3ZfbmFtZSxcXG4tXFx0XFx0XFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcXG4tXFx0XFx0XFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcXG4tXFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQpO1xcbi1lcnJfc2hvcnQ6XFxuLVxcdHJldHVybiAtRUFHQUlOO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IHJlY2VpdmVfY2JfcmVwbHkoc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbiB7XFxuIFxcdHN0cnVjdCBycGNfeHBydCAqYmNfeHBydCA9IHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2JjX3hwcnQ7XFxuQEAgLTExMzQsMTYgKzk0OSwxNDQgQEAgc3RhdGljIHZvaWQgc3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2spXFxuIFxcdHN2c2stXFx1MDAzZXNrX21hcmtlciA9IHhkcl96ZXJvO1xcbiB9XFxuIFxcbisvKlxcbisgKiByZWFkX3NvY2sgZGF0YSBhY3RvcjogcmVjZWl2ZXMgYXBwbGljYXRpb24gZGF0YSBmcm9tIHRoZVxcbisgKiB0cmFuc3BvcnQgc29ja2V0LCBwYXJzaW5nIHRoZSBSUEMgcmVjb3JkIHN0cmVhbSAoZnJhZ21lbnRcXG4rICogaGVhZGVycyBhbmQgbWVzc2FnZSBib2RpZXMpIGFuZCBhc3NlbWJsaW5nIGNvbXBsZXRlIFJQQ1xcbisgKiBtZXNzYWdlcyBpbnRvIHJxc3RwLVxcdTAwM2VycV9wYWdlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2X2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLVxcdTAwM2VhcmcuZGF0YTtcXG4rXFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHJxc3RwLVxcdTAwM2VycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpO1xcbitcXHRzaXplX3QgcmVjbGVuLCByZWNlaXZlZCwgd2FudCwgdGFrZSwgZG9uZSwgbjtcXG4rXFx0c2l6ZV90IGNvbnN1bWVkID0gMDtcXG4rXFxuK1xcdGlmICghZGVzYy1cXHUwMDNlY291bnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHN2c2stXFx1MDAzZXNrX3RjcGxlbiBcXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpIHtcXG4rXFx0XFx0d2FudCA9IHNpemVvZihycGNfZnJhZ2hkcikgLSBzdnNrLVxcdTAwM2Vza190Y3BsZW47XFxuK1xcdFxcdG4gPSBtaW4od2FudCwgbGVuKTtcXG4rXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgIChjaGFyICopXFx1MDAyNnN2c2stXFx1MDAzZXNrX21hcmtlciArXFxuK1xcdFxcdFxcdFxcdFxcdHN2c2stXFx1MDAzZXNrX3RjcGxlbiwgbikpXFxuK1xcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuK1xcdFxcdHN2c2stXFx1MDAzZXNrX3RjcGxlbiArPSBuO1xcbitcXHRcXHRvZmZzZXQgKz0gbjtcXG4rXFx0XFx0bGVuIC09IG47XFxuK1xcdFxcdGNvbnN1bWVkICs9IG47XFxuK1xcbitcXHRcXHRpZiAoc3Zzay1cXHUwMDNlc2tfdGNwbGVuIFxcdTAwM2Mgc2l6ZW9mKHJwY19mcmFnaGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGNvbnN1bWVkO1xcbitcXG4rXFx0XFx0dHJhY2Vfc3Zjc29ja19tYXJrZXIoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHN2c2stXFx1MDAzZXNrX21hcmtlcik7XFxuK1xcdFxcdGlmIChzdmNfc29ja19yZWNsZW4oc3ZzaykgKyBzdnNrLVxcdTAwM2Vza19kYXRhbGVuIFxcdTAwM2VcXG4rXFx0XFx0ICAgIHN2c2stXFx1MDAzZXNrX3hwcnQueHB0X3NlcnZlci1cXHUwMDNlc3ZfbWF4X21lc2cpIHtcXG4rXFx0XFx0XFx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcXFwic3ZjOiAlcyBvdmVyc2l6ZWQgUlBDIGZyYWdtZW50ICgldSBvY3RldHMpIGZyb20gJXBJU3BjXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3Zzay1cXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVxcdTAwM2Vzdl9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3ZjX3NvY2tfcmVjbGVuKHN2c2spLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9yZW1vdGUpO1xcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2VlcnJvciA9IC1FTVNHU0laRTtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHRcXHRyZXR1cm4gY29uc3VtZWQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmVjbGVuID0gc3ZjX3NvY2tfcmVjbGVuKHN2c2spO1xcbitcXHRyZWNlaXZlZCA9IHN2c2stXFx1MDAzZXNrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcik7XFxuK1xcdHdhbnQgPSByZWNsZW4gLSByZWNlaXZlZDtcXG4rXFx0dGFrZSA9IG1pbih3YW50LCBsZW4pO1xcbitcXHRkb25lID0gMDtcXG4rXFxuK1xcdHdoaWxlIChkb25lIFxcdTAwM2MgdGFrZSkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcGcgPSBzdnNrLVxcdTAwM2Vza19kYXRhbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwZ19vZmYgPSBzdnNrLVxcdTAwM2Vza19kYXRhbGVuIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbitcXHRcXHRzaXplX3QgY2h1bmsgPSBtaW4odGFrZSAtIGRvbmUsXFxuK1xcdFxcdFxcdFxcdCAgIFBBR0VfU0laRSAtIChzaXplX3QpcGdfb2ZmKTtcXG4rXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgIHBhZ2VfYWRkcmVzcyhycXN0cC1cXHUwMDNlcnFfcGFnZXNbcGddKSArIHBnX29mZixcXG4rXFx0XFx0XFx0XFx0ICBjaHVuaykpXFxuK1xcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuK1xcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKHJxc3RwLVxcdTAwM2VycV9wYWdlc1twZ10pO1xcbitcXHRcXHRvZmZzZXQgKz0gY2h1bms7XFxuK1xcdFxcdGRvbmUgKz0gY2h1bms7XFxuK1xcdFxcdHN2c2stXFx1MDAzZXNrX2RhdGFsZW4gKz0gY2h1bms7XFxuK1xcdH1cXG4rXFx0c3Zzay1cXHUwMDNlc2tfdGNwbGVuICs9IHRha2U7XFxuK1xcdGNvbnN1bWVkICs9IHRha2U7XFxuK1xcbitcXHRpZiAoc3Zzay1cXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSBcXHUwMDNlPSByZWNsZW4pIHtcXG4rXFx0XFx0aWYgKHN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSlcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3Zzayk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBjb25zdW1lZDtcXG4rXFxuK2ZhdWx0OlxcbitcXHRkZXNjLVxcdTAwM2VlcnJvciA9IC1FRkFVTFQ7XFxuK1xcdGRlc2MtXFx1MDAzZWNvdW50ID0gMDtcXG4rXFx0cmV0dXJuIGNvbnN1bWVkO1xcbit9XFxuK1xcbisvKlxcbisgKiByZWFkX3NvY2tfcmVjdHlwZSBub24tZGF0YSByZWNvcmQgYWN0b3I6IHJlY2VpdmVzIG5vbi1kYXRhIFRMU1xcbisgKiByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSBtZXNzYWdlcykgYW5kIHRyYW5zbGF0ZXMgdGhlbSBpbnRvXFxuKyAqIHRyYW5zcG9ydC1sZXZlbCBhY3Rpb25zLlxcbisgKlxcbisgKiBSZXR1cm5zIDAgdG8gY29uc3VtZSB0aGUgcmVjb3JkIGFuZCBhbGxvdyB0aGUgVExTIGxheWVyIHRvXFxuKyAqIGNvbnRpbnVlIGRlbGl2ZXJpbmcgc3Vic2VxdWVudCByZWNvcmRzLiBBIG5lZ2F0aXZlIHJldHVyblxcbisgKiBjYXVzZXMgdGhlIFRMUyBsYXllciB0byByZXF1ZXVlIHRoZSBza2Igb24gaXRzIHJ4X2xpc3QsXFxuKyAqIGJsb2NraW5nIGFsbCBmdXJ0aGVyIHJlY29yZCBkZWxpdmVyeSBvbiB0aGlzIGNvbm5lY3Rpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHN2Y190Y3BfcmVjdHlwZV9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLFxcbitcXHRcXHRcXHRcXHQgdTggcmVjdHlwZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwID0gZGVzYy1cXHUwMDNlYXJnLmRhdGE7XFxuK1xcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihycXN0cC1cXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcXG4rXFxuK1xcdHN3aXRjaCAocmVjdHlwZSkge1xcbitcXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDoge1xcbitcXHRcXHR1OCBhbGVydFsyXSA9IHt9LCBsZXZlbCwgZGVzY3JpcHRpb247XFxuK1xcdFxcdHN0cnVjdCBrdmVjIGt2ZWMgPSB7XFxuK1xcdFxcdFxcdC5pb3ZfYmFzZSA9IGFsZXJ0LFxcbitcXHRcXHRcXHQuaW92X2xlbiA9IHNpemVvZihhbGVydCksXFxuK1xcdFxcdH07XFxuK1xcdFxcdHN0cnVjdCBtc2doZHIgbXNnID0ge307XFxuK1xcbitcXHRcXHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCwgYWxlcnQsIG1pbihsZW4sIHNpemVvZihhbGVydCkpKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlvdl9pdGVyX2t2ZWMoXFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBcXHUwMDI2a3ZlYywgMSwgc2l6ZW9mKGFsZXJ0KSk7XFxuK1xcdFxcdHRsc19hbGVydF9yZWN2KHN2c2stXFx1MDAzZXNrX3NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZkZXNjcmlwdGlvbik7XFxuK1xcdFxcdGlmIChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpIHtcXG4rXFx0XFx0XFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQpO1xcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2VlcnJvciA9IC1FTk9UQ09OTjtcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlY291bnQgPSAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogc3ZjX3RjcF9yZWN2ZnJvbSAtIFJlY2VpdmUgZGF0YSBmcm9tIGEgVENQIHNvY2tldFxcbiAgKiBAcnFzdHA6IHJlcXVlc3Qgc3RydWN0dXJlIGludG8gd2hpY2ggdG8gcmVjZWl2ZSBhbiBSUEMgQ2FsbFxcbiAgKlxcbiAgKiBDYWxsZWQgaW4gYSBsb29wIHdoZW4gWFBUX0RBVEEgaGFzIGJlZW4gc2V0LlxcbiAgKlxcbi0gKiBSZWFkIHRoZSA0LWJ5dGUgc3RyZWFtIHJlY29yZCBtYXJrZXIsIHRoZW4gdXNlIHRoZSByZWNvcmQgbGVuZ3RoXFxuLSAqIGluIHRoYXQgbWFya2VyIHRvIHNldCB1cCBleGFjdGx5IHRoZSByZXNvdXJjZXMgbmVlZGVkIHRvIHJlY2VpdmVcXG4tICogdGhlIG5leHQgUlBDIG1lc3NhZ2UgaW50byBAcnFzdHAuXFxuLSAqXFxuICAqIFJldHVybnM6XFxuICAqICAgT24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHJlY2VpdmVkIFJQQyBDYWxsLCBvclxcbiAgKiAgICUwIGlmIGEgY29tcGxldGUgUlBDIENhbGwgbWVzc2FnZSB3YXMgbm90IHJlYWR5IHRvIHJldHVyblxcbkBAIC0xMTU3LDI2ICsxMTAwLDQwIEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbiBcXHRzdHJ1Y3Qgc3ZjX3NvY2tcXHQqc3ZzayA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZihycXN0cC1cXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcXG4gXFx0c3RydWN0IHN2Y19zZXJ2XFx0KnNlcnYgPSBzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXI7XFxuLVxcdHNpemVfdCB3YW50LCBiYXNlO1xcbitcXHRzdHJ1Y3Qgc29ja1xcdCpzayA9IHN2c2stXFx1MDAzZXNrX3NrO1xcbitcXHRyZWFkX2Rlc2NyaXB0b3JfdCBkZXNjID0ge1xcbitcXHRcXHQuYXJnLmRhdGEgPSBycXN0cCxcXG4rXFx0fTtcXG4gXFx0c3NpemVfdCBsZW47XFxuIFxcdF9fYmUzMiAqcDtcXG4gXFx0X19iZTMyIGNhbGxkaXI7XFxuIFxcbiBcXHRjbGVhcl9iaXQoWFBUX0RBVEEsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XFxuLVxcdGxlbiA9IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3ZzaywgcnFzdHApO1xcbi1cXHRpZiAobGVuIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuLVxcdGJhc2UgPSBzdmNfdGNwX3Jlc3RvcmVfcGFnZXMoc3ZzaywgcnFzdHApO1xcbi1cXHR3YW50ID0gbGVuIC0gKHN2c2stXFx1MDAzZXNrX3RjcGxlbiAtIHNpemVvZihycGNfZnJhZ2hkcikpO1xcbi1cXHRsZW4gPSBzdmNfdGNwX3JlYWRfbXNnKHJxc3RwLCBiYXNlICsgd2FudCwgYmFzZSk7XFxuLVxcdGlmIChsZW4gXFx1MDAzZT0gMCkge1xcbi1cXHRcXHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2KFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbi1cXHRcXHRzdnNrLVxcdTAwM2Vza190Y3BsZW4gKz0gbGVuO1xcbi1cXHRcXHRzdnNrLVxcdTAwM2Vza19kYXRhbGVuICs9IGxlbjtcXG4rXFx0c3ZjX3RjcF9yZXN0b3JlX3BhZ2VzKHN2c2ssIHJxc3RwKTtcXG4rXFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9iYXNlID0gcGFnZV9hZGRyZXNzKHJxc3RwLVxcdTAwM2VycV9wYWdlc1swXSk7XFxuK1xcbitcXHRkZXNjLmNvdW50ID0gc2Vydi1cXHUwMDNlc3ZfbWF4X21lc2c7XFxuK1xcdGxvY2tfc29jayhzayk7XFxuK1xcdGlmIChzdnNrLVxcdTAwM2Vza19zb2NrLVxcdTAwM2VvcHMtXFx1MDAzZXJlYWRfc29ja19yZWN0eXBlKVxcbitcXHRcXHRsZW4gPSBzdnNrLVxcdTAwM2Vza19zb2NrLVxcdTAwM2VvcHMtXFx1MDAzZXJlYWRfc29ja19yZWN0eXBlKHNrLCBcXHUwMDI2ZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN2Y190Y3BfcmVjdl9hY3RvcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN2Y190Y3BfcmVjdHlwZV9hY3Rvcik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGVuID0gc3Zzay1cXHUwMDNlc2tfc29jay1cXHUwMDNlb3BzLVxcdTAwM2VyZWFkX3NvY2soc2ssIFxcdTAwMjZkZXNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN2Y190Y3BfcmVjdl9hY3Rvcik7XFxuK1xcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcbitcXHRpZiAoZGVzYy5lcnJvciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0bGVuID0gZGVzYy5lcnJvcjtcXG4rXFx0XFx0Z290byBlcnJfZGlzY2FyZDtcXG4gXFx0fVxcbi1cXHRpZiAobGVuICE9IHdhbnQgfHwgIXN2Y19zb2NrX2ZpbmFsX3JlYyhzdnNrKSlcXG4rXFx0aWYgKGRlc2MuY291bnQgIT0gMCkge1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0c2V0X2JpdChYUFRfREFUQSwgXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQueHB0X2ZsYWdzKTtcXG4gXFx0XFx0Z290byBlcnJfaW5jb21wbGV0ZTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHN2c2stXFx1MDAzZXNrX2RhdGFsZW4gXFx1MDAzYyA4KVxcbiBcXHRcXHRnb3RvIGVycl9udXRzO1xcbiBcXG5AQCAtMTE4NSw4ICsxMTQyLDEwIEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbiBcXHRpZiAocnFzdHAtXFx1MDAzZXJxX2FyZy5sZW4gXFx1MDAzYz0gcnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW4pIHtcXG4gXFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW4gPSBycXN0cC1cXHUwMDNlcnFfYXJnLmxlbjtcXG4gXFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5wYWdlX2xlbiA9IDA7XFxuLVxcdH0gZWxzZVxcbi1cXHRcXHRycXN0cC1cXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gcnFzdHAtXFx1MDAzZXJxX2FyZy5sZW4gLSBycXN0cC1cXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5wYWdlX2xlbiA9IHJxc3RwLVxcdTAwM2VycV9hcmcubGVuIC1cXG4rXFx0XFx0XFx0cnFzdHAtXFx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW47XFxuK1xcdH1cXG4gXFxuIFxcdHJxc3RwLVxcdTAwM2VycV94cHJ0X2N0eHQgICA9IE5VTEw7XFxuIFxcdHJxc3RwLVxcdTAwM2VycV9wcm90XFx0ICAgICAgPSBJUFBST1RPX1RDUDtcXG5AQCAtMTIwNywxMSArMTE2NiwxMyBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbitcXHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2KFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBycXN0cC1cXHUwMDNlcnFfYXJnLmxlbik7XFxuIFxcdHN2Y194cHJ0X2NvcHlfYWRkcnMocnFzdHAsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4gXFx0aWYgKHNlcnYtXFx1MDAzZXN2X3N0YXRzKVxcbiBcXHRcXHRzZXJ2LVxcdTAwM2Vzdl9zdGF0cy1cXHUwMDNlbmV0dGNwY250Kys7XFxuIFxcbiBcXHRzdmNfc29ja19zZWN1cmVfcG9ydChycXN0cCk7XFxuK1xcdHNldF9iaXQoWFBUX0RBVEEsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XFxuIFxcdHN2Y194cHJ0X3JlY2VpdmVkKHJxc3RwLVxcdTAwM2VycV94cHJ0KTtcXG4gXFx0cmV0dXJuIHJxc3RwLVxcdTAwM2VycV9hcmcubGVuO1xcbiBcXG5AQCAtMTIxOSw5ICsxMTgwLDcgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuIFxcdHN2Y190Y3Bfc2F2ZV9wYWdlcyhzdnNrLCBycXN0cCk7XFxuIFxcdGlmIChsZW4gXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGxlbiAhPSAtRUFHQUlOKVxcbiBcXHRcXHRnb3RvIGVycl9kZWxldGU7XFxuLVxcdGlmIChsZW4gPT0gd2FudClcXG4tXFx0XFx0c3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdnNrKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAoc3Zzay1cXHUwMDNlc2tfdGNwbGVuIFxcdTAwM2U9IHNpemVvZihycGNfZnJhZ2hkcikpXFxuIFxcdFxcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3Zfc2hvcnQoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsXFxuIFxcdFxcdFxcdFxcdHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcXG4gXFx0XFx0XFx0XFx0c3Zzay1cXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7XFxuQEAgLTEyMzMsMTIgKzExOTIsMjAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuIFxcdGdvdG8gZXJyX25vY2xvc2U7XFxuIGVycl9udXRzOlxcbiBcXHRzdnNrLVxcdTAwM2Vza19kYXRhbGVuID0gMDtcXG4rXFx0Z290byBlcnJfZGVsZXRlO1xcbitlcnJfZGlzY2FyZDpcXG4rXFx0LypcXG4rXFx0ICogQ2xlYXIgc2tfZGF0YWxlbiBzbyB0aGUgdGVhcmRvd24tdGltZVxcbitcXHQgKiBzdmNfdGNwX2NsZWFyX3BhZ2VzKCkgZG9lcyBub3Qgd2FsayB0aGUgZW1wdGllZFxcbitcXHQgKiBzdnNrLVxcdTAwM2Vza19wYWdlc1tdLlxcbitcXHQgKi9cXG4rXFx0c3Zzay1cXHUwMDNlc2tfZGF0YWxlbiA9IDA7XFxuIGVycl9kZWxldGU6XFxuIFxcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbiBcXHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCk7XFxuIGVycl9ub2Nsb3NlOlxcbiBcXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cXHUwMDNlcnFfeHBydCk7XFxuLVxcdHJldHVybiAwO1xcdC8qIHJlY29yZCBub3QgY29tcGxldGUgKi9cXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzLmggYi9uZXQvdGxzL3Rscy5oXFxuaW5kZXggNjBhMzdiZGFhYTI1MDYuLmMyMWQyYTk4NWUxMzczIDEwMDY0NFxcbi0tLSBhL25ldC90bHMvdGxzLmhcXG4rKysgYi9uZXQvdGxzL3Rscy5oXFxuQEAgLTE2OCw2ICsxNjgsOSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuIFxcdFxcdFxcdCAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpO1xcbitpbnQgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuK1xcdFxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXFxuK1xcdFxcdFxcdCAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3Rvcik7XFxuIFxcbiBpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XFxuIHZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uNDk2M2UwY2FmNmQ1M2EgMTAwNjQ0XFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXFxuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXFxuQEAgLTk0OSwxMiArOTQ5LDE3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddXFxuIFxcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnNwbGljZV9yZWFkXFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XFxuIFxcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnBvbGxcXHRcXHQ9IHRsc19za19wb2xsO1xcbiBcXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxuK1xcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXFx0PSB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGU7XFxuIFxcbiBcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXSA9IG9wc1tUTFNfU1cgIF1bVExTX0JBU0VdO1xcbiBcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFxcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xcbiBcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5wb2xsXFx0XFx0PSB0bHNfc2tfcG9sbDtcXG4gXFx0b3BzW1RMU19TVyAgXVtUTFNfU1cgIF0ucmVhZF9zb2NrXFx0PSB0bHNfc3dfcmVhZF9zb2NrO1xcbitcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZVxcdD0gdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlO1xcbiBcXG4rXFx0LyogVExTX0hXIChkZXZpY2Ugb2ZmbG9hZCkgUlggZW50cmllcyBpbmhlcml0XFxuK1xcdCAqIHJlYWRfc29ja3ssX3JlY3R5cGV9IGZyb20gU1cgdmlhIHRoZSBzdHJ1Y3QgY29waWVzIGJlbG93LlxcbitcXHQgKi9cXG4gI2lmZGVmIENPTkZJR19UTFNfREVWSUNFXFxuIFxcdG9wc1tUTFNfSFcgIF1bVExTX0JBU0VdID0gb3BzW1RMU19CQVNFXVtUTFNfQkFTRV07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdy5jIGIvbmV0L3Rscy90bHNfc3cuY1xcbmluZGV4IGQ0YWZjOTBmZDc5NjZlLi5hZjM0N2I1YjE3ZmE4YyAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19zdy5jXFxuKysrIGIvbmV0L3Rscy90bHNfc3cuY1xcbkBAIC0yMDQ5LDE0ICsyMDQ5LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuIFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbiB9XFxuIFxcbi1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi1cXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxcbisvKiBDb25zZWN1dGl2ZSBlbXB0eSBkYXRhIHJlY29yZHMgZGVsaXZlciBubyBieXRlczsgY2FwIHRoZW0gcGVyXFxuKyAqIGNhbGwgc28gYSBwZWVyIHN0cmVhbWluZyB0aGVtIGNhbm5vdCBob2xkIHRoZSBzb2NrZXQgbG9jayBoZXJlLlxcbisgKi9cXG4rI2RlZmluZSBUTFNfUlhfTk9EQVRBX0xJTUlUIDE2XFxuK1xcbitzdGF0aWMgaW50IF9fdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbitcXHRcXHRcXHQgICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcXG4rXFx0XFx0XFx0ICAgICAgc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QgcmVjdHlwZV9hY3RvcilcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIFxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4ID0gdGxzX3N3X2N0eF9yeCh0bHNfY3R4KTtcXG4gXFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbiBcXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBpbnQgbm9kYXRhX2NvdW50ID0gMDtcXG4gXFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4gXFx0c2l6ZV90IGZsdXNoZWRfYXQgPSAwO1xcbiBcXHRib29sIHJlbGVhc2VkID0gdHJ1ZTtcXG5AQCAtMjEwOSwxMCArMjExNiwyNyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRcXHRcXHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0LyogcmVhZF9zb2NrIGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBjb250cm9sIG1lc3NhZ2VzICovXFxuK1xcdFxcdC8qIENvbnRyb2wgcmVjb3JkcyAoYWxlcnRzLCBoYW5kc2hha2UpIHJlYWNoIGEgY29uc3VtZXJcXG4rXFx0XFx0ICogb25seSB0aHJvdWdoIHJlY3R5cGVfYWN0b3I7IHdpdGhvdXQgb25lLCByZWFkX3NvY2tcXG4rXFx0XFx0ICogcmVqZWN0cyB0aGVtLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHRsbS1cXHUwMDNlY29udHJvbCAhPSBUTFNfUkVDT1JEX1RZUEVfREFUQSkge1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xcbitcXHRcXHRcXHRpZiAoIXJlY3R5cGVfYWN0b3IpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRlcnIgPSByZWN0eXBlX2FjdG9yKGRlc2MsIHNrYiwgcnhtLVxcdTAwM2VvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCByeG0tXFx1MDAzZWZ1bGxfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgdGxtLVxcdTAwM2Vjb250cm9sKTtcXG4rXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XFxuK1xcdFxcdFxcdGVyciA9IDA7XFxuK1xcdFxcdFxcdC8qIHJlY3R5cGVfYWN0b3IgY29uc3VtZXMgdGhlIHdob2xlIHJlY29yZDsgbm8gcGFydGlhbCBwYXRoICovXFxuK1xcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdFxcdFxcdGlmICgrK25vZGF0YV9jb3VudCBcXHUwMDNlPSBUTFNfUlhfTk9EQVRBX0xJTUlUKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIChsZWdhbCBpbiBUTFMgMS4zKSBnaXZlcyBhIHplcm9cXG5AQCAtMjEyMiw3ICsyMTQ2LDEzIEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdCAqIGhlcmUgaW5zdGVhZC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChyeG0tXFx1MDAzZWZ1bGxfbGVuID09IDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0LyogdGxzX3J4X3JlYWRlcl9yZWxlYXNlKCkgYW5ub3VuY2VzIGFueSBwYXJzZWQgcmVjb3JkXFxuK1xcdFxcdFxcdCAqIG9uIGV4aXQsIHNvIHJldHVybmluZyAwIGhlcmUgY2Fubm90IHN0cmFuZCBpdC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICgrK25vZGF0YV9jb3VudCBcXHUwMDNlPSBUTFNfUlhfTk9EQVRBX0xJTUlUKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIxMzMsNiArMjE2Myw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdFxcdFxcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y29waWVkICs9IHVzZWQ7XFxuK1xcdFxcdG5vZGF0YV9jb3VudCA9IDA7XFxuIFxcdFxcdGlmICh1c2VkIFxcdTAwM2MgcnhtLVxcdTAwM2VmdWxsX2xlbikge1xcbiBcXHRcXHRcXHRyeG0tXFx1MDAzZW9mZnNldCArPSB1c2VkO1xcbiBcXHRcXHRcXHRyeG0tXFx1MDAzZWZ1bGxfbGVuIC09IHVzZWQ7XFxuQEAgLTIxNTEsNiArMjE4MiwxOSBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRnb3RvIHJlYWRfc29ja19lbmQ7XFxuIH1cXG4gXFxuK2ludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuK1xcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpXFxuK3tcXG4rXFx0cmV0dXJuIF9fdGxzX3N3X3JlYWRfc29jayhzaywgZGVzYywgcmVhZF9hY3RvciwgTlVMTCk7XFxuK31cXG4rXFxuK2ludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4rXFx0XFx0XFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcXG4rXFx0XFx0XFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxcbit7XFxuK1xcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIHJlY3R5cGVfYWN0b3IpO1xcbit9XFxuK1xcbiBib29sIHRsc19zd19zb2NrX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xcbmluZGV4IGNiZGQzZWEyOGI5OThmLi44MTM2MzA2YjVjYWE3NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcXG5AQCAtNDI3LDcgKzQyNyw4IEBAIEZJWFRVUkVfU0VUVVAodGxzKVxcbiBcXG4gRklYVFVSRV9URUFSRE9XTih0bHMpXFxuIHtcXG4tXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZmQpO1xcbiBcXHRjbG9zZShzZWxmLVxcdTAwM2VjZmQpO1xcbiB9XFxuIFxcbkBAIC04OTcsNiArODk4LDExNCBAQCBURVNUX0YodGxzLCBzcGxpY2VfZGVjX2Ntc2dfdG9fcGlwZSlcXG4gXFx0RVhQRUNUX0VRKG1lbWNtcCh0ZXN0X3N0ciwgYnVmLCBzZW5kX2xlbiksIDApO1xcbiB9XFxuIFxcbisvKiBWZXJpZnkgc3BsaWNlIGhhbmRsZXMgZGF0YS1jb250cm9sLWRhdGE6IHNwbGljZSByZWFkcyB0aGUgZGF0YVxcbisgKiByZWNvcmRzIHN1Y2Nlc3NmdWxseSB3aGlsZSB0aGUgaW50ZXJ2ZW5pbmcgY29udHJvbCByZWNvcmQgbXVzdFxcbisgKiBiZSBkcmFpbmVkIHZpYSByZWN2bXNnIGJlZm9yZSBzcGxpY2UgY2FuIGNvbnRpbnVlLlxcbisgKi9cXG4rVEVTVF9GKHRscywgc3BsaWNlX2RhdGFfY21zZ19kYXRhKVxcbit7XFxuK1xcdGNoYXIgbWVtX3NlbmRbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGludCBzZW5kX2xlbiA9IDQwOTY7XFxuK1xcdGNoYXIgKmN0cmxfc3RyID0gXFxcImNvbnRyb2xcXFwiO1xcbitcXHRpbnQgY3RybF9sZW4gPSBzdHJsZW4oY3RybF9zdHIpICsgMTtcXG4rXFx0Y2hhciBjdHJsX2J1Zls4XTtcXG4rXFx0aW50IHBbMl07XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbm90bHMpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibm8gVExTIHN1cHBvcnRcXFwiKTtcXG4rXFxuK1xcdG1lbXJuZChtZW1fc2VuZCwgc2l6ZW9mKG1lbV9zZW5kKSk7XFxuK1xcbitcXHRBU1NFUlRfR0UocGlwZShwKSwgMCk7XFxuK1xcbitcXHQvKiBTZW5kOiBkYXRhLCBjb250cm9sLCBkYXRhICovXFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBtZW1fc2VuZCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXFx1MDAzZWZkLCAxMDAsIGN0cmxfc3RyLCBjdHJsX2xlbiwgMCksXFxuK1xcdFxcdCAgY3RybF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgXFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcbitcXHQvKiBTcGxpY2UgZmlyc3QgZGF0YSByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHNwbGljZShzZWxmLVxcdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAobWVtX3NlbmQsIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xcbitcXG4rXFx0LyogU3BsaWNlIGhpdHMgY29udHJvbCByZWNvcmQsIGZhaWxzICovXFxuK1xcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xcbitcXG4rXFx0LyogRHJhaW4gdGhlIGNvbnRyb2wgcmVjb3JkIHZpYSByZWN2bXNnICovXFxuK1xcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cXHUwMDNlY2ZkLCAxMDAsXFxuK1xcdFxcdFxcdFxcdGN0cmxfYnVmLCBzaXplb2YoY3RybF9idWYpLCBNU0dfV0FJVEFMTCksXFxuK1xcdFxcdCAgY3RybF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGN0cmxfc3RyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcXG4rXFxuK1xcdC8qIFNwbGljZSBzZWNvbmQgZGF0YSByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHNwbGljZShzZWxmLVxcdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEocmVhZChwWzBdLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoXFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIFZlcmlmeSB0aGF0IG11bHRpcGxlIGNvbnNlY3V0aXZlIGNvbnRyb2wgcmVjb3JkcyBiZXR3ZWVuIGRhdGFcXG4rICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzXFxuKyAqIGFmdGVyd2FyZC4gIFRoZSB0d28gY29udHJvbCByZWNvcmRzIHVzZSBkaWZmZXJlbnQgY29udGVudCB0eXBlc1xcbisgKiB0byB2ZXJpZnkgdHlwZSBwcmVzZXJ2YXRpb24gYWNyb3NzIHRoZSBzcGxpY2UgYm91bmRhcnkuXFxuKyAqL1xcbitURVNUX0YodGxzLCBzcGxpY2VfbXVsdGlfY21zZ19kYXRhKVxcbit7XFxuK1xcdGNoYXIgbWVtX3NlbmRbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XFxuK1xcdGludCBzZW5kX2xlbiA9IDQwOTY7XFxuK1xcdGNoYXIgKmN0cmwxID0gXFxcImFsZXJ0MVxcXCI7XFxuK1xcdGNoYXIgKmN0cmwyID0gXFxcImFsZXJ0MlxcXCI7XFxuK1xcdGludCBjdHJsX2xlbiA9IHN0cmxlbihjdHJsMSkgKyAxO1xcbitcXHRjaGFyIGN0cmxfYnVmWzddO1xcbitcXHRpbnQgcFsyXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0bWVtcm5kKG1lbV9zZW5kLCBzaXplb2YobWVtX3NlbmQpKTtcXG4rXFxuK1xcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcXG4rXFxuK1xcdC8qIFNlbmQ6IGRhdGEsIGNvbnRyb2woMTAwKSwgY29udHJvbCgyMDApLCBkYXRhICovXFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBtZW1fc2VuZCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXFx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjdHJsX2xlbiwgMCksIGN0cmxfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDIwMCwgY3RybDIsIGN0cmxfbGVuLCAwKSwgY3RybF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgXFx1MDAyNm1lbV9zZW5kW3NlbmRfbGVuXSwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcbitcXHQvKiBTcGxpY2UgZmlyc3QgZGF0YSAqL1xcbitcXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXFx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCBzZW5kX2xlbik7XFxuK1xcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBTcGxpY2UgZmFpbHMgb24gZmlyc3QgY29udHJvbCByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHNwbGljZShzZWxmLVxcdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XFxuK1xcbitcXHQvKiBEcmFpbiBmaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDEwMCxcXG4rXFx0XFx0XFx0XFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcXG4rXFx0XFx0ICBjdHJsX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoY3RybDEsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xcbitcXG4rXFx0LyogU3BsaWNlIGZhaWxzIG9uIHNlY29uZCBjb250cm9sIHJlY29yZCAqL1xcbitcXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXFx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFxuK1xcdC8qIERyYWluIHNlY29uZCBjb250cm9sICh0eXBlIDIwMCkgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDIwMCxcXG4rXFx0XFx0XFx0XFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcXG4rXFx0XFx0ICBjdHJsX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoY3RybDIsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xcbitcXG4rXFx0LyogU3BsaWNlIHNlY29uZCBkYXRhICovXFxuK1xcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKFxcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xcbit9XFxuK1xcbiBURVNUX0YodGxzLCByZWN2X2FuZF9zcGxpY2UpXFxuIHtcXG4gXFx0aW50IHNlbmRfbGVuID0gVExTX1BBWUxPQURfTUFYX0xFTjtcXG5AQCAtMTY4Miw2ICsxNzkxLDE5MyBAQCBURVNUX0YodGxzLCBkYXRhX2NvbnRyb2xfZGF0YSlcXG4gXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTtcXG4gfVxcbiBcXG4rLyogRnVsbHkgY29uc3VtZSBhIGRhdGEtY29udHJvbC1kYXRhIHNlcXVlbmNlLiAgVGhlIGV4aXN0aW5nXFxuKyAqIGRhdGFfY29udHJvbF9kYXRhIHRlc3Qgb25seSBwZWVrczsgdGhpcyBleGVyY2lzZXMgY29tcGxldGVcXG4rICogcmVjb3JkIGRlbGl2ZXJ5IHRocm91Z2ggcmVjdiBhbmQgcmVjdm1zZy5cXG4rICovXFxuK1RFU1RfRih0bHMsIHJlY3ZfZGF0YV9jbXNnX2RhdGEpXFxuK3tcXG4rXFx0Y2hhciAqZGF0YTEgPSBcXFwiZmlyc3RfZGF0YVxcXCI7XFxuK1xcdGNoYXIgKmN0cmwgPSBcXFwiY3RybF9tc2dcXFwiO1xcbitcXHRjaGFyICpkYXRhMiA9IFxcXCJzZWNvbmRfZGF0YVxcXCI7XFxuK1xcdGludCBkMV9sZW4gPSBzdHJsZW4oZGF0YTEpICsgMTtcXG4rXFx0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcXG4rXFx0aW50IGQyX2xlbiA9IHN0cmxlbihkYXRhMikgKyAxO1xcbitcXHRjaGFyIGJ1ZlsyMF07XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbm90bHMpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibm8gVExTIHN1cHBvcnRcXFwiKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhMSwgZDFfbGVuLCAwKSwgZDFfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7XFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTtcXG4rXFxuK1xcdC8qIEZpcnN0IGRhdGEgcmVjb3JkICovXFxuK1xcdEVYUEVDVF9FUShyZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBkMV9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTEsIGQxX2xlbiksIDApO1xcbitcXG4rXFx0LyogcmVjdiB3aXRob3V0IGNtc2cgYnVmZmVyIGZhaWxzIG9uIGNvbnRyb2wgcmVjb3JkICovXFxuK1xcdEVYUEVDVF9FUShyZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSU8pO1xcbitcXG4rXFx0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBTZWNvbmQgZGF0YSByZWNvcmQgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTIsIGQyX2xlbiksIDApO1xcbit9XFxuK1xcbisvKiBQZWVrIGF0IGFuIGludGVybGVhdmVkIGNvbnRyb2wgcmVjb3JkIGFmdGVyIHRoZSBwcmVjZWRpbmcgZGF0YVxcbisgKiByZWNvcmQgaGFzIGJlZW4gY29uc3VtZWQsIHRoZW4gY29uc3VtZSBpdC4gIE1TR19QRUVLIGV4cG9zZXMgdGhlXFxuKyAqIGNvbnRyb2wgcmVjb3JkJ3MgdHlwZSB3aXRob3V0IGNvbnN1bWluZyBpdC5cXG4rICovXFxuK1RFU1RfRih0bHMsIHBlZWtfY21zZ19hZnRlcl9kYXRhKVxcbit7XFxuK1xcdGNoYXIgKmRhdGEgPSBcXFwibGVhZGluZ1xcXCI7XFxuK1xcdGNoYXIgKmN0cmwgPSBcXFwibWlkZGxlXFxcIjtcXG4rXFx0Y2hhciAqdGFpbCA9IFxcXCJ0cmFpbGluZ1xcXCI7XFxuK1xcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XFxuK1xcdGludCBjX2xlbiA9IHN0cmxlbihjdHJsKSArIDE7XFxuK1xcdGludCB0X2xlbiA9IHN0cmxlbih0YWlsKSArIDE7XFxuK1xcdGNoYXIgYnVmWzIwXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVxcdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQsIHRhaWwsIHRfbGVuLCAwKSwgdF9sZW4pO1xcbitcXG4rXFx0LyogQ29uc3VtZSBsZWFkaW5nIGRhdGEgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBQZWVrIGF0IHRoZSBjb250cm9sIHJlY29yZCAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBDb25zdW1lIHRoZSBjb250cm9sIHJlY29yZCAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybCwgY19sZW4pLCAwKTtcXG4rXFxuK1xcdC8qIFRyYWlsaW5nIGRhdGEgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHRfbGVuLCBNU0dfV0FJVEFMTCksIHRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIHRhaWwsIHRfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIENvbnRyb2wgcmVjb3JkIGFzIHRoZSBmaXJzdCByZWNvcmQgaW4gdGhlIHN0cmVhbSwgZm9sbG93ZWQgYnlcXG4rICogZGF0YS4gIFRoZSBjb250cm9sIHJlY29yZCBtdXN0IGJlIGRyYWluZWQgYmVmb3JlIHRoZSBkYXRhIHJlY29yZFxcbisgKiBiZWNvbWVzIGF2YWlsYWJsZS5cXG4rICovXFxuK1RFU1RfRih0bHMsIGNtc2dfYmVmb3JlX2RhdGEpXFxuK3tcXG4rXFx0Y2hhciAqY3RybCA9IFxcXCJhbGVydFxcXCI7XFxuK1xcdGNoYXIgKmRhdGEgPSBcXFwicGF5bG9hZFxcXCI7XFxuK1xcdGludCBjX2xlbiA9IHN0cmxlbihjdHJsKSArIDE7XFxuK1xcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XFxuK1xcdGNoYXIgYnVmWzIwXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDEwMCwgY3RybCwgY19sZW4sIDApLCBjX2xlbik7XFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhLCBkX2xlbiwgMCksIGRfbGVuKTtcXG4rXFxuK1xcdC8qIHJlY3Ygd2l0aG91dCBjbXNnIGZhaWxzICovXFxuK1xcdEVYUEVDVF9FUShyZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSU8pO1xcbitcXG4rXFx0LyogRHJhaW4gY29udHJvbCB2aWEgcmVjdm1zZyAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMTAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBEYXRhIGZvbGxvd3MgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIGRfbGVuLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIFR3byBkaWZmZXJlbnQgY29udHJvbCByZWNvcmQgdHlwZXMgaW50ZXJsZWF2ZWQgd2l0aCBkYXRhLlxcbisgKiBFYWNoIGNvbnRyb2wgcmVjb3JkIGlzIGRlbGl2ZXJlZCB3aXRoIGl0cyBvd24gdHlwZSBwcmVzZXJ2ZWQ7XFxuKyAqIHZlcmlmeSBib3RoIHR5cGVzIGFycml2ZSBpbnRhY3QuXFxuKyAqL1xcbitURVNUX0YodGxzLCBtaXhlZF9jb250cm9sX3R5cGVzKVxcbit7XFxuK1xcdGNoYXIgKmRhdGExID0gXFxcImRhdGExXFxcIjtcXG4rXFx0Y2hhciAqY3RybDEgPSBcXFwiaGFuZHNoYWtlXFxcIjtcXG4rXFx0Y2hhciAqY3RybDIgPSBcXFwiYWxlcnRfbXNnXFxcIjtcXG4rXFx0Y2hhciAqZGF0YTIgPSBcXFwiZGF0YTJcXFwiO1xcbitcXHRpbnQgZDFfbGVuID0gc3RybGVuKGRhdGExKSArIDE7XFxuK1xcdGludCBjMV9sZW4gPSBzdHJsZW4oY3RybDEpICsgMTtcXG4rXFx0aW50IGMyX2xlbiA9IHN0cmxlbihjdHJsMikgKyAxO1xcbitcXHRpbnQgZDJfbGVuID0gc3RybGVuKGRhdGEyKSArIDE7XFxuK1xcdGNoYXIgYnVmWzIwXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQsIGRhdGExLCBkMV9sZW4sIDApLCBkMV9sZW4pO1xcbitcXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVxcdTAwM2VmZCwgMTAwLCBjdHJsMSwgYzFfbGVuLCAwKSwgYzFfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cXHUwMDNlZmQsIDIwMCwgY3RybDIsIGMyX2xlbiwgMCksIGMyX2xlbik7XFxuK1xcdEVYUEVDVF9FUShzZW5kKHNlbGYtXFx1MDAzZWZkLCBkYXRhMiwgZDJfbGVuLCAwKSwgZDJfbGVuKTtcXG4rXFxuK1xcdC8qIEZpcnN0IGRhdGEgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGQxX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBGaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDEwMCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBzaXplb2YoYnVmKSwgTVNHX1dBSVRBTEwpLCBjMV9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybDEsIGMxX2xlbiksIDApO1xcbitcXG4rXFx0LyogU2Vjb25kIGNvbnRyb2wgKHR5cGUgMjAwKSAqL1xcbitcXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWNmZCwgMjAwLFxcbitcXHRcXHRcXHRcXHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMyX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsMiwgYzJfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBTZWNvbmQgZGF0YSAqL1xcbitcXHRFWFBFQ1RfRVEocmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1ZiwgZDJfbGVuLCBNU0dfV0FJVEFMTCksIGQyX2xlbik7XFxuK1xcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMiwgZDJfbGVuKSwgMCk7XFxuK31cXG4rXFxuKy8qIFRyYWlsaW5nIGNvbnRyb2wgcmVjb3JkIHdpdGggbm8gZGF0YSBmb2xsb3dpbmcgaXQuICBUaGUgc2VuZGVyXFxuKyAqIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBhZnRlciB0aGUgY29udHJvbCByZWNvcmQ7IHRoZSByZWNlaXZlclxcbisgKiBkcmFpbnMgdGhlIGNvbnRyb2wgYW5kIHRoZW4gb2JzZXJ2ZXMgRU9GLlxcbisgKi9cXG4rVEVTVF9GKHRscywgZGF0YV9jbXNnX2VvZilcXG4re1xcbitcXHRjaGFyICpkYXRhID0gXFxcInBheWxvYWRcXFwiO1xcbitcXHRjaGFyICpjdHJsID0gXFxcImZpbmFsXFxcIjtcXG4rXFx0aW50IGRfbGVuID0gc3RybGVuKGRhdGEpICsgMTtcXG4rXFx0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcXG4rXFx0Y2hhciBidWZbMjBdO1xcbitcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XFxuK1xcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXFx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xcbitcXHRFWFBFQ1RfRVEoY2xvc2Uoc2VsZi1cXHUwMDNlZmQpLCAwKTtcXG4rXFx0c2VsZi1cXHUwMDNlZmQgPSAtMTtcXG4rXFxuK1xcdC8qIENvbnN1bWUgZGF0YSAqL1xcbitcXHRFWFBFQ1RfRVEocmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgZF9sZW4pO1xcbitcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YSwgZF9sZW4pLCAwKTtcXG4rXFxuK1xcdC8qIERyYWluIHRyYWlsaW5nIGNvbnRyb2wgKi9cXG4rXFx0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VjZmQsIDEwMCxcXG4rXFx0XFx0XFx0XFx0YnVmLCBzaXplb2YoYnVmKSwgMCksIGNfbGVuKTtcXG4rXFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XFxuK1xcbitcXHQvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi9cXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgMCk7XFxuK31cXG4rXFxuIFRFU1RfRih0bHMsIHNodXRkb3duKVxcbiB7XFxuIFxcdGNoYXIgY29uc3QgKnRlc3Rfc3RyID0gXFxcInRlc3RfcmVhZFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA0OjUyLjI1NjM3MDM0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxNTM5MTg4NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GU0RcIixcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y190Y3BfcmVjdl9hY3RvclwiLFxuICAgIFwic3ZjX3RjcF9yZWN0eXBlX2FjdG9yXCIsXG4gICAgXCJzdmNfdGNwX3JlY3Zmcm9tXCIsXG4gICAgXCJ0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVcIixcbiAgICBcIl9fdGxzX3N3X3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcHJvdG9fb3BzIGNhbGxiYWNrIGByZWFkX3NvY2tfcmVjdHlwZWAgdG8gYWxsb3cgcmVhZGluZyBub24tZGF0YSBUTFMgcmVjb3JkcyAobGlrZSBhbGVydHMgYW5kIGhhbmRzaGFrZSBtZXNzYWdlcykgZGlyZWN0bHkgZnJvbSB0aGUgc29ja2V0LiBJdCBpbXBsZW1lbnRzIHRoaXMgaW4gdGhlIFRMUyBzb2Z0d2FyZSBwYXRoIChgX190bHNfc3dfcmVhZF9zb2NrYCwgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWApIGFuZCB1c2VzIGl0IGluIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZSAoYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgc3ZjX3RjcF9yZWN2ZnJvbWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCBpbiB0aGUgVExTIHJlY29yZCBwYXJzaW5nIGFuZCBSUEMgbWVzc2FnZSBhc3NlbWJseSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYzQ0YjAyMzliMzE3ZmY0ODgxODFkNzkyNWM0ZWNiMDVhZDE4NmIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMjI6MDQ6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaFxuaW5kZXggMjc3MTg4YTQwYzcyZTMuLjdhMTlhNzQzYTYxNzc2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaFxuQEAgLTE5OCw2ICsxOTgsMTMgQEAgc3RydWN0IHNrX2J1ZmY7XG4gc3RydWN0IHByb3RvX2FjY2VwdF9hcmc7XG4gdHlwZWRlZiBpbnQgKCpza19yZWFkX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosIHN0cnVjdCBza19idWZmICosXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCwgc2l6ZV90KTtcbisvKiByZWN0eXBlIGNhcnJpZXMgdGhlIHRyYW5zcG9ydCByZWNvcmQgdHlwZSwgZm9yIGV4YW1wbGUgYVxuKyAqIFRMU19SRUNPUkRfVFlQRV8qIHZhbHVlLlxuKyAqL1xuK3R5cGVkZWYgaW50ICgqc2tfcmVhZF9yZWN0eXBlX2FjdG9yX3QpKHJlYWRfZGVzY3JpcHRvcl90ICosXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKixcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQsIHNpemVfdCxcbitcdFx0XHRcdCAgICAgICB1OCByZWN0eXBlKTtcbiB0eXBlZGVmIGludCAoKnNrYl9yZWFkX2FjdG9yX3QpKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopO1xuIFxuIFxuQEAgLTI2NCw2ICsyNzEsMjcgQEAgc3RydWN0IHByb3RvX29wcyB7XG4gXHQgKi9cbiBcdGludFx0XHQoKnJlYWRfc29jaykoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xuK1x0LypcbitcdCAqIHJlYWRfc29ja19yZWN0eXBlIHNwbGl0cyBkZWxpdmVyeSBhY3Jvc3MgdHdvIGNhbGxiYWNrczpcbitcdCAqIHJlY3ZfYWN0b3IgZm9yIGRhdGEgcmVjb3JkcywgcGVyIHRoZSBza19yZWFkX2FjdG9yX3RcbitcdCAqIGNvbnZlbnRpb24sIGFuZCByZWN0eXBlX2FjdG9yIGZvciBhbGwgb3RoZXIgcmVjb3JkcyxcbitcdCAqIHdpdGggcmVjdHlwZSBpZGVudGlmeWluZyBlYWNoLiBBIE5VTEwgcmVjdHlwZV9hY3RvclxuK1x0ICogbGVhdmVzIG5vbi1kYXRhIHJlY29yZHMgcGVuZGluZy4gcmVjdHlwZV9hY3RvciByZXR1cm5zIDBcbitcdCAqIHRvIGNvbnN1bWUgYSByZWNvcmQgb3IgbmVnYXRpdmUgdG8gbGVhdmUgaXQgcGVuZGluZyBmb3JcbitcdCAqIHJlZGVsaXZlcnkgYW5kIHN0b3AgZGVsaXZlcnk7IHRoZSBuZWdhdGl2ZSByZXR1cm4gaXMgYVxuK1x0ICogYmFja3ByZXNzdXJlIHNpZ25hbCwgbm90IGEgZmF0YWwgZXJyb3IuIEJvdGggY2FsbGJhY2tzXG4rXHQgKiByZXBvcnQgZXJyb3JzIGFuZCBlYXJseSBzdG9wIHRoZSB3YXkgcmVjdl9hY3RvciBkb2VzOlxuK1x0ICogYnkgc2V0dGluZyBkZXNjLVx1MDAzZWNvdW50IHRvIDAgYW5kIHJlY29yZGluZyB0aGUgcmVhc29uIGluXG4rXHQgKiBkZXNjLVx1MDAzZWVycm9yLCBwZXIgdGhlIHJlYWRfZGVzY3JpcHRvcl90IGNvbnZlbnRpb24gYW5kXG4rXHQgKiBpbmRlcGVuZGVudCBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIHJlcG9ydHNcbitcdCAqIG9ubHkgZGF0YSBieXRlcyBjb25zdW1lZCBieSByZWN2X2FjdG9yOyB0aGUgY2FsbGVyXG4rXHQgKiBkZXRlY3RzIGFuIGVycm9yIG9yIGVhcmx5IHN0b3AgdmlhIGRlc2MtXHUwMDNlY291bnQgYW5kXG4rXHQgKiBkZXNjLVx1MDAzZWVycm9yLlxuK1x0ICovXG4rXHRpbnRcdFx0KCpyZWFkX3NvY2tfcmVjdHlwZSkoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHQgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuK1x0XHRcdFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yLFxuK1x0XHRcdFx0XHQgICAgIHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90IHJlY3R5cGVfYWN0b3IpO1xuIFx0LyogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSByZWFkX3NvY2soKSwgaXQgcmVhZHMgYW4gZW50aXJlIHNrYiBhdCBhIHRpbWUuICovXG4gXHRpbnRcdFx0KCpyZWFkX3NrYikoc3RydWN0IHNvY2sgKnNrLCBza2JfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpO1xuIFx0aW50XHRcdCgqc2VuZG1zZ19sb2NrZWQpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmRlLi45YjllMGRhOWU3M2NkNiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTgsMTUgKzgsNiBAQFxuICAqIGV2ZW5seSB3aGVuIHNlcnZpY2luZyBhIHNpbmdsZSBjbGllbnQuIE1heSBuZWVkIHRvIG1vZGlmeSB0aGVcbiAgKiBzdmNfeHBydF9lbnF1ZXVlIHByb2NlZHVyZS4uLlxuICAqXG4tICogVENQIHN1cHBvcnQgaXMgbGFyZ2VseSB1bnRlc3RlZCBhbmQgbWF5IGJlIGEgbGl0dGxlIHNsb3cuIFRoZSBwcm9ibGVtXG4tICogaXMgdGhhdCB3ZSBjdXJyZW50bHkgZG8gdHdvIHNlcGFyYXRlIHJlY3Zmcm9tJ3MsIG9uZSBmb3IgdGhlIDQtYnl0ZVxuLSAqIHJlY29yZCBsZW5ndGgsIGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgYWN0dWFsIHJlY29yZC4gVGhpcyBjb3VsZCBwb3NzaWJseVxuLSAqIGJlIGltcHJvdmVkIGJ5IGFsd2F5cyByZWFkaW5nIGEgbWluaW11bSBzaXplIG9mIGFyb3VuZCAxMDAgYnl0ZXMgYW5kXG4tICogdHVja2luZyBhbnkgc3VwZXJmbHVvdXMgYnl0ZXMgYXdheSBpbiBhIHRlbXBvcmFyeSBzdG9yZS4gU3RpbGwsIHRoYXRcbi0gKiBsZWF2ZXMgd3JpdGUgcmVxdWVzdHMgb3V0IGluIHRoZSByYWluLiBBbiBhbHRlcm5hdGl2ZSBtYXkgYmUgdG8gcGVlayBhdFxuLSAqIHRoZSBmaXJzdCBza2IgaW4gdGhlIHF1ZXVlLCBhbmQgaWYgaXQgbWF0Y2hlcyB0aGUgbmV4dCBUQ1Agc2VxdWVuY2Vcbi0gKiBudW1iZXIsIHRvIGV4dHJhY3QgdGhlIHJlY29yZCBtYXJrZXIuIFl1Y2suXG4tICpcbiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCBcdTAwM2Nva2lyQG1vbmFkLnN3Yi5kZVx1MDAzZVxuICAqL1xuIFxuQEAgLTIzOCwxMzggKzIyOSw2IEBAIHN0YXRpYyBpbnQgc3ZjX29uZV9zb2NrX25hbWUoc3RydWN0IHN2Y19zb2NrICpzdnNrLCBjaGFyICpidWYsIGludCByZW1haW5pbmcpXG4gXHRyZXR1cm4gbGVuO1xuIH1cbiBcbi1zdGF0aWMgaW50XG4tc3ZjX3RjcF9zb2NrX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZywgaW50IHJldClcbi17XG4tXHR1OCBjb250ZW50X3R5cGUgPSB0bHNfZ2V0X3JlY29yZF90eXBlKHNvY2stXHUwMDNlc2ssIGNtc2cpO1xuLVx0dTggbGV2ZWwsIGRlc2NyaXB0aW9uO1xuLVxuLVx0c3dpdGNoIChjb250ZW50X3R5cGUpIHtcbi1cdGNhc2UgMDpcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9EQVRBOlxuLVx0XHQvKiBUTFMgc2V0cyBFT1IgYXQgdGhlIGVuZCBvZiBlYWNoIGFwcGxpY2F0aW9uIGRhdGFcbi1cdFx0ICogcmVjb3JkLCBldmVuIHRob3VnaCB0aGVyZSBtaWdodCBiZSBtb3JlIGZyYW1lc1xuLVx0XHQgKiB3YWl0aW5nIHRvIGJlIGRlY3J5cHRlZC5cbi1cdFx0ICovXG4tXHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX0VPUjtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFRMU19SRUNPUkRfVFlQRV9BTEVSVDpcbi1cdFx0dGxzX2FsZXJ0X3JlY3Yoc29jay1cdTAwM2VzaywgbXNnLCBcdTAwMjZsZXZlbCwgXHUwMDI2ZGVzY3JpcHRpb24pO1xuLVx0XHRyZXQgPSAobGV2ZWwgPT0gVExTX0FMRVJUX0xFVkVMX0ZBVEFMKSA/XG4tXHRcdFx0LUVOT1RDT05OIDogLUVBR0FJTjtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBkaXNjYXJkIHRoaXMgcmVjb3JkIHR5cGUgKi9cbi1cdFx0cmV0ID0gLUVBR0FJTjtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi1zdmNfdGNwX3NvY2tfcmVjdl9jbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCAqbXNnX2ZsYWdzKVxuLXtcbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IGNtc2doZHJcdGNtc2c7XG4tXHRcdHU4XHRcdGJ1ZltDTVNHX1NQQUNFKHNpemVvZih1OCkpXTtcbi1cdH0gdTtcbi1cdHU4IGFsZXJ0WzJdO1xuLVx0c3RydWN0IGt2ZWMgYWxlcnRfa3ZlYyA9IHtcbi1cdFx0Lmlvdl9iYXNlID0gYWxlcnQsXG4tXHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSxcbi1cdH07XG4tXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbi1cdFx0Lm1zZ19mbGFncyA9ICptc2dfZmxhZ3MsXG4tXHRcdC5tc2dfY29udHJvbCA9IFx1MDAyNnUsXG4tXHRcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZih1KSxcbi1cdH07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfREVTVCwgXHUwMDI2YWxlcnRfa3ZlYywgMSxcbi1cdFx0ICAgICAgYWxlcnRfa3ZlYy5pb3ZfbGVuKTtcbi1cdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBcdTAwMjZtc2csIE1TR19ET05UV0FJVCk7XG4tXHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHRsc19nZXRfcmVjb3JkX3R5cGUoc29jay1cdTAwM2VzaywgXHUwMDI2dS5jbXNnKSA9PSBUTFNfUkVDT1JEX1RZUEVfQUxFUlQpIHtcbi1cdFx0aW92X2l0ZXJfcmV2ZXJ0KFx1MDAyNm1zZy5tc2dfaXRlciwgcmV0KTtcbi1cdFx0cmV0ID0gc3ZjX3RjcF9zb2NrX3Byb2Nlc3NfY21zZyhzb2NrLCBcdTAwMjZtc2csIFx1MDAyNnUuY21zZywgLUVBR0FJTik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW50XG4tc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHN2Y19zb2NrICpzdnNrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0aW50IHJldDtcbi1cdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBzdnNrLVx1MDAzZXNrX3NvY2s7XG4tXG4tXHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgbXNnLCBNU0dfRE9OVFdBSVQpO1xuLVx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19DVFJVTkMpIHtcbi1cdFx0bXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjY9IH4oTVNHX0NUUlVOQyB8IE1TR19FT1IpO1xuLVx0XHRpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU8pXG4tXHRcdFx0cmV0ID0gc3ZjX3RjcF9zb2NrX3JlY3ZfY21zZyhzb2NrLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2ZsYWdzKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLSNpZiBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0Vcbi1zdGF0aWMgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsIHNpemVfdCBzZWVrKVxuLXtcbi1cdHN0cnVjdCBidmVjX2l0ZXIgYmkgPSB7XG4tXHRcdC5iaV9zaXplXHQ9IHNpemUgKyBzZWVrLFxuLVx0fTtcbi1cdHN0cnVjdCBiaW9fdmVjIGJ2O1xuLVxuLVx0YnZlY19pdGVyX2FkdmFuY2UoYnZlYywgXHUwMDI2YmksIHNlZWsgXHUwMDI2IFBBR0VfTUFTSyk7XG4tXHRmb3JfZWFjaF9idmVjKGJ2LCBidmVjLCBiaSwgYmkpXG4tXHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJ2LmJ2X3BhZ2UpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfZmx1c2hfYnZlYyhjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgc2l6ZV90IHNpemUsXG4tXHRcdFx0XHQgIHNpemVfdCBzZWVrKVxuLXtcbi19XG4tI2VuZGlmXG4tXG4tLypcbi0gKiBSZWFkIGZyb20gQHJxc3RwJ3MgdHJhbnNwb3J0IHNvY2tldC4gVGhlIGluY29taW5nIG1lc3NhZ2UgZmlsbHMgd2hvbGVcbi0gKiBwYWdlcyBpbiBAcnFzdHAncyBycV9wYWdlcyBhcnJheSB1bnRpbCB0aGUgbGFzdCBwYWdlIG9mIHRoZSBtZXNzYWdlXG4tICogaGFzIGJlZW4gcmVjZWl2ZWQgaW50byBhIHBhcnRpYWwgcGFnZS5cbi0gKi9cbi1zdGF0aWMgc3NpemVfdCBzdmNfdGNwX3JlYWRfbXNnKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHNpemVfdCBidWZsZW4sXG4tXHRcdFx0XHRzaXplX3Qgc2Vlaylcbi17XG4tXHRzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPVxuLVx0XHRjb250YWluZXJfb2YocnFzdHAtXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcbi1cdHN0cnVjdCBiaW9fdmVjICpidmVjID0gcnFzdHAtXHUwMDNlcnFfYnZlYztcbi1cdHN0cnVjdCBtc2doZHIgbXNnID0geyBOVUxMIH07XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHNzaXplX3QgbGVuO1xuLVx0c2l6ZV90IHQ7XG4tXG4tXHRjbGVhcl9iaXQoWFBUX0RBVEEsIFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpO1xuLVxuLVx0Zm9yIChpID0gMCwgdCA9IDA7IHQgXHUwMDNjIGJ1ZmxlbjsgaSsrLCB0ICs9IFBBR0VfU0laRSlcbi1cdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjW2ldLCBycXN0cC1cdTAwM2VycV9wYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTtcbi1cbi1cdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIGJ2ZWMsIGksIGJ1Zmxlbik7XG4tXHRpZiAoc2Vlaykge1xuLVx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNm1zZy5tc2dfaXRlciwgc2Vlayk7XG4tXHRcdGJ1ZmxlbiAtPSBzZWVrO1xuLVx0fVxuLVx0bGVuID0gc3ZjX3RjcF9zb2NrX3JlY3Ztc2coc3ZzaywgXHUwMDI2bXNnKTtcbi1cdGlmIChsZW4gXHUwMDNlIDApXG4tXHRcdHN2Y19mbHVzaF9idmVjKGJ2ZWMsIGxlbiwgc2Vlayk7XG4tXG4tXHQvKiBJZiB3ZSByZWFkIGEgZnVsbCByZWNvcmQsIHRoZW4gYXNzdW1lIHRoZXJlIG1heSBiZSBtb3JlXG4tXHQgKiBkYXRhIHRvIHJlYWQgKHN0cmVhbSBiYXNlZCBzb2NrZXRzIG9ubHkhKVxuLVx0ICovXG4tXHRpZiAobGVuID09IGJ1Zmxlbilcbi1cdFx0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4tXG4tXHRyZXR1cm4gbGVuO1xuLX1cbi1cbiAvKlxuICAqIFNldCBzb2NrZXQgc25kIGFuZCByY3YgYnVmZmVyIGxlbmd0aHNcbiAgKi9cbkBAIC0xMDQ4LDUwICs5MDcsNiBAQCBzdGF0aWMgdm9pZCBzdmNfdGNwX2NsZWFyX3BhZ2VzKHN0cnVjdCBzdmNfc29jayAqc3ZzaylcbiBcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiA9IDA7XG4gfVxuIFxuLS8qXG4tICogUmVjZWl2ZSBmcmFnbWVudCByZWNvcmQgaGVhZGVyIGludG8gc2tfbWFya2VyLlxuLSAqL1xuLXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3RydWN0IHN2Y19zb2NrICpzdnNrLFxuLVx0XHRcdFx0ICAgc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi17XG4tXHRzc2l6ZV90IHdhbnQsIGxlbjtcbi1cbi1cdC8qIElmIHdlIGhhdmVuJ3QgZ290dGVuIHRoZSByZWNvcmQgbGVuZ3RoIHlldCxcbi1cdCAqIGdldCB0aGUgbmV4dCBmb3VyIGJ5dGVzLlxuLVx0ICovXG4tXHRpZiAoc3Zzay1cdTAwM2Vza190Y3BsZW4gXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpIHtcbi1cdFx0c3RydWN0IG1zZ2hkclx0bXNnID0geyBOVUxMIH07XG4tXHRcdHN0cnVjdCBrdmVjXHRpb3Y7XG4tXG4tXHRcdHdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay1cdTAwM2Vza190Y3BsZW47XG4tXHRcdGlvdi5pb3ZfYmFzZSA9ICgoY2hhciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfbWFya2VyKSArIHN2c2stXHUwMDNlc2tfdGNwbGVuO1xuLVx0XHRpb3YuaW92X2xlbiAgPSB3YW50O1xuLVx0XHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9ERVNULCBcdTAwMjZpb3YsIDEsIHdhbnQpO1xuLVx0XHRsZW4gPSBzdmNfdGNwX3NvY2tfcmVjdm1zZyhzdnNrLCBcdTAwMjZtc2cpO1xuLVx0XHRpZiAobGVuIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBsZW47XG4tXHRcdHN2c2stXHUwMDNlc2tfdGNwbGVuICs9IGxlbjtcbi1cdFx0aWYgKGxlbiBcdTAwM2Mgd2FudCkge1xuLVx0XHRcdC8qIGNhbGwgYWdhaW4gdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzICovXG4tXHRcdFx0Z290byBlcnJfc2hvcnQ7XG4tXHRcdH1cbi1cdFx0dHJhY2Vfc3Zjc29ja19tYXJrZXIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzdnNrLVx1MDAzZXNrX21hcmtlcik7XG4tXHRcdGlmIChzdmNfc29ja19yZWNsZW4oc3ZzaykgKyBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXG4tXHRcdCAgICBzdnNrLVx1MDAzZXNrX3hwcnQueHB0X3NlcnZlci1cdTAwM2Vzdl9tYXhfbWVzZylcbi1cdFx0XHRnb3RvIGVycl90b29fbGFyZ2U7XG4tXHR9XG4tXHRyZXR1cm4gc3ZjX3NvY2tfcmVjbGVuKHN2c2spO1xuLVxuLWVycl90b29fbGFyZ2U6XG4tXHRuZXRfbm90aWNlX3JhdGVsaW1pdGVkKFwic3ZjOiAlcyBvdmVyc2l6ZWQgUlBDIGZyYWdtZW50ICgldSBvY3RldHMpIGZyb20gJXBJU3BjXFxuXCIsXG4tXHRcdFx0ICAgICAgIHN2c2stXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVx1MDAzZXN2X25hbWUsXG4tXHRcdFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbi1cdFx0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnN2c2stXHUwMDNlc2tfeHBydC54cHRfcmVtb3RlKTtcbi1cdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4tZXJyX3Nob3J0OlxuLVx0cmV0dXJuIC1FQUdBSU47XG4tfVxuLVxuIHN0YXRpYyBpbnQgcmVjZWl2ZV9jYl9yZXBseShzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4ge1xuIFx0c3RydWN0IHJwY194cHJ0ICpiY194cHJ0ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9iY194cHJ0O1xuQEAgLTExMzQsMTYgKzk0OSwxNDQgQEAgc3RhdGljIHZvaWQgc3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2spXG4gXHRzdnNrLVx1MDAzZXNrX21hcmtlciA9IHhkcl96ZXJvO1xuIH1cbiBcbisvKlxuKyAqIHJlYWRfc29jayBkYXRhIGFjdG9yOiByZWNlaXZlcyBhcHBsaWNhdGlvbiBkYXRhIGZyb20gdGhlXG4rICogdHJhbnNwb3J0IHNvY2tldCwgcGFyc2luZyB0aGUgUlBDIHJlY29yZCBzdHJlYW0gKGZyYWdtZW50XG4rICogaGVhZGVycyBhbmQgbWVzc2FnZSBib2RpZXMpIGFuZCBhc3NlbWJsaW5nIGNvbXBsZXRlIFJQQ1xuKyAqIG1lc3NhZ2VzIGludG8gcnFzdHAtXHUwMDNlcnFfcGFnZXMuXG4rICovXG4rc3RhdGljIGludCBzdmNfdGNwX3JlY3ZfYWN0b3IocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4rXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBkZXNjLVx1MDAzZWFyZy5kYXRhO1xuK1x0c3RydWN0IHN2Y19zb2NrICpzdnNrID1cbitcdFx0Y29udGFpbmVyX29mKHJxc3RwLVx1MDAzZXJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7XG4rXHRzaXplX3QgcmVjbGVuLCByZWNlaXZlZCwgd2FudCwgdGFrZSwgZG9uZSwgbjtcbitcdHNpemVfdCBjb25zdW1lZCA9IDA7XG4rXG4rXHRpZiAoIWRlc2MtXHUwMDNlY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIFx1MDAzYyBzaXplb2YocnBjX2ZyYWdoZHIpKSB7XG4rXHRcdHdhbnQgPSBzaXplb2YocnBjX2ZyYWdoZHIpIC0gc3Zzay1cdTAwM2Vza190Y3BsZW47XG4rXHRcdG4gPSBtaW4od2FudCwgbGVuKTtcbitcbitcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsXG4rXHRcdFx0XHQgIChjaGFyICopXHUwMDI2c3Zzay1cdTAwM2Vza19tYXJrZXIgK1xuK1x0XHRcdFx0XHRzdnNrLVx1MDAzZXNrX3RjcGxlbiwgbikpXG4rXHRcdFx0Z290byBmYXVsdDtcbitcdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gKz0gbjtcbitcdFx0b2Zmc2V0ICs9IG47XG4rXHRcdGxlbiAtPSBuO1xuK1x0XHRjb25zdW1lZCArPSBuO1xuK1xuK1x0XHRpZiAoc3Zzay1cdTAwM2Vza190Y3BsZW4gXHUwMDNjIHNpemVvZihycGNfZnJhZ2hkcikpXG4rXHRcdFx0cmV0dXJuIGNvbnN1bWVkO1xuK1xuK1x0XHR0cmFjZV9zdmNzb2NrX21hcmtlcihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHN2c2stXHUwMDNlc2tfbWFya2VyKTtcbitcdFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSArIHN2c2stXHUwMDNlc2tfZGF0YWxlbiBcdTAwM2VcbitcdFx0ICAgIHN2c2stXHUwMDNlc2tfeHBydC54cHRfc2VydmVyLVx1MDAzZXN2X21heF9tZXNnKSB7XG4rXHRcdFx0bmV0X25vdGljZV9yYXRlbGltaXRlZChcInN2YzogJXMgb3ZlcnNpemVkIFJQQyBmcmFnbWVudCAoJXUgb2N0ZXRzKSBmcm9tICVwSVNwY1xcblwiLFxuK1x0XHRcdFx0XHQgICAgICAgc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXItXHUwMDNlc3ZfbmFtZSxcbitcdFx0XHRcdFx0ICAgICAgIHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbitcdFx0XHRcdFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQueHB0X3JlbW90ZSk7XG4rXHRcdFx0ZGVzYy1cdTAwM2VlcnJvciA9IC1FTVNHU0laRTtcbitcdFx0XHRkZXNjLVx1MDAzZWNvdW50ID0gMDtcbitcdFx0XHRyZXR1cm4gY29uc3VtZWQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJlY2xlbiA9IHN2Y19zb2NrX3JlY2xlbihzdnNrKTtcbitcdHJlY2VpdmVkID0gc3Zzay1cdTAwM2Vza190Y3BsZW4gLSBzaXplb2YocnBjX2ZyYWdoZHIpO1xuK1x0d2FudCA9IHJlY2xlbiAtIHJlY2VpdmVkO1xuK1x0dGFrZSA9IG1pbih3YW50LCBsZW4pO1xuK1x0ZG9uZSA9IDA7XG4rXG4rXHR3aGlsZSAoZG9uZSBcdTAwM2MgdGFrZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGcgPSBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdHVuc2lnbmVkIGludCBwZ19vZmYgPSBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDI2IChQQUdFX1NJWkUgLSAxKTtcbitcdFx0c2l6ZV90IGNodW5rID0gbWluKHRha2UgLSBkb25lLFxuK1x0XHRcdFx0ICAgUEFHRV9TSVpFIC0gKHNpemVfdClwZ19vZmYpO1xuK1xuK1x0XHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZnNldCxcbitcdFx0XHRcdCAgcGFnZV9hZGRyZXNzKHJxc3RwLVx1MDAzZXJxX3BhZ2VzW3BnXSkgKyBwZ19vZmYsXG4rXHRcdFx0XHQgIGNodW5rKSlcbitcdFx0XHRnb3RvIGZhdWx0O1xuK1x0XHRmbHVzaF9kY2FjaGVfcGFnZShycXN0cC1cdTAwM2VycV9wYWdlc1twZ10pO1xuK1x0XHRvZmZzZXQgKz0gY2h1bms7XG4rXHRcdGRvbmUgKz0gY2h1bms7XG4rXHRcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiArPSBjaHVuaztcbitcdH1cbitcdHN2c2stXHUwMDNlc2tfdGNwbGVuICs9IHRha2U7XG4rXHRjb25zdW1lZCArPSB0YWtlO1xuK1xuK1x0aWYgKHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSBcdTAwM2U9IHJlY2xlbikge1xuK1x0XHRpZiAoc3ZjX3NvY2tfZmluYWxfcmVjKHN2c2spKVxuK1x0XHRcdGRlc2MtXHUwMDNlY291bnQgPSAwO1xuK1x0XHRlbHNlXG4rXHRcdFx0c3ZjX3RjcF9mcmFnbWVudF9yZWNlaXZlZChzdnNrKTtcbitcdH1cbitcbitcdHJldHVybiBjb25zdW1lZDtcbitcbitmYXVsdDpcbitcdGRlc2MtXHUwMDNlZXJyb3IgPSAtRUZBVUxUO1xuK1x0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4rXHRyZXR1cm4gY29uc3VtZWQ7XG4rfVxuK1xuKy8qXG4rICogcmVhZF9zb2NrX3JlY3R5cGUgbm9uLWRhdGEgcmVjb3JkIGFjdG9yOiByZWNlaXZlcyBub24tZGF0YSBUTFNcbisgKiByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSBtZXNzYWdlcykgYW5kIHRyYW5zbGF0ZXMgdGhlbSBpbnRvXG4rICogdHJhbnNwb3J0LWxldmVsIGFjdGlvbnMuXG4rICpcbisgKiBSZXR1cm5zIDAgdG8gY29uc3VtZSB0aGUgcmVjb3JkIGFuZCBhbGxvdyB0aGUgVExTIGxheWVyIHRvXG4rICogY29udGludWUgZGVsaXZlcmluZyBzdWJzZXF1ZW50IHJlY29yZHMuIEEgbmVnYXRpdmUgcmV0dXJuXG4rICogY2F1c2VzIHRoZSBUTFMgbGF5ZXIgdG8gcmVxdWV1ZSB0aGUgc2tiIG9uIGl0cyByeF9saXN0LFxuKyAqIGJsb2NraW5nIGFsbCBmdXJ0aGVyIHJlY29yZCBkZWxpdmVyeSBvbiB0aGlzIGNvbm5lY3Rpb24uXG4rICovXG4rc3RhdGljIGludCBzdmNfdGNwX3JlY3R5cGVfYWN0b3IocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0IHU4IHJlY3R5cGUpXG4re1xuK1x0c3RydWN0IHN2Y19ycXN0ICpycXN0cCA9IGRlc2MtXHUwMDNlYXJnLmRhdGE7XG4rXHRzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPVxuK1x0XHRjb250YWluZXJfb2YocnFzdHAtXHUwMDNlcnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTtcbitcbitcdHN3aXRjaCAocmVjdHlwZSkge1xuK1x0Y2FzZSBUTFNfUkVDT1JEX1RZUEVfQUxFUlQ6IHtcbitcdFx0dTggYWxlcnRbMl0gPSB7fSwgbGV2ZWwsIGRlc2NyaXB0aW9uO1xuK1x0XHRzdHJ1Y3Qga3ZlYyBrdmVjID0ge1xuK1x0XHRcdC5pb3ZfYmFzZSA9IGFsZXJ0LFxuK1x0XHRcdC5pb3ZfbGVuID0gc2l6ZW9mKGFsZXJ0KSxcbitcdFx0fTtcbitcdFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7fTtcbitcbitcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsIGFsZXJ0LCBtaW4obGVuLCBzaXplb2YoYWxlcnQpKSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmt2ZWMsIDEsIHNpemVvZihhbGVydCkpO1xuK1x0XHR0bHNfYWxlcnRfcmVjdihzdnNrLVx1MDAzZXNrX3NrLCBcdTAwMjZtc2csIFx1MDAyNmxldmVsLCBcdTAwMjZkZXNjcmlwdGlvbik7XG4rXHRcdGlmIChsZXZlbCA9PSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwpIHtcbitcdFx0XHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuK1x0XHRcdGRlc2MtXHUwMDNlZXJyb3IgPSAtRU5PVENPTk47XG4rXHRcdFx0ZGVzYy1cdTAwM2Vjb3VudCA9IDA7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBzdmNfdGNwX3JlY3Zmcm9tIC0gUmVjZWl2ZSBkYXRhIGZyb20gYSBUQ1Agc29ja2V0XG4gICogQHJxc3RwOiByZXF1ZXN0IHN0cnVjdHVyZSBpbnRvIHdoaWNoIHRvIHJlY2VpdmUgYW4gUlBDIENhbGxcbiAgKlxuICAqIENhbGxlZCBpbiBhIGxvb3Agd2hlbiBYUFRfREFUQSBoYXMgYmVlbiBzZXQuXG4gICpcbi0gKiBSZWFkIHRoZSA0LWJ5dGUgc3RyZWFtIHJlY29yZCBtYXJrZXIsIHRoZW4gdXNlIHRoZSByZWNvcmQgbGVuZ3RoXG4tICogaW4gdGhhdCBtYXJrZXIgdG8gc2V0IHVwIGV4YWN0bHkgdGhlIHJlc291cmNlcyBuZWVkZWQgdG8gcmVjZWl2ZVxuLSAqIHRoZSBuZXh0IFJQQyBtZXNzYWdlIGludG8gQHJxc3RwLlxuLSAqXG4gICogUmV0dXJuczpcbiAgKiAgIE9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSByZWNlaXZlZCBSUEMgQ2FsbCwgb3JcbiAgKiAgICUwIGlmIGEgY29tcGxldGUgUlBDIENhbGwgbWVzc2FnZSB3YXMgbm90IHJlYWR5IHRvIHJldHVyblxuQEAgLTExNTcsMjYgKzExMDAsNDAgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4gXHRzdHJ1Y3Qgc3ZjX3NvY2tcdCpzdnNrID1cbiBcdFx0Y29udGFpbmVyX29mKHJxc3RwLVx1MDAzZXJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7XG4gXHRzdHJ1Y3Qgc3ZjX3NlcnZcdCpzZXJ2ID0gc3Zzay1cdTAwM2Vza194cHJ0LnhwdF9zZXJ2ZXI7XG4tXHRzaXplX3Qgd2FudCwgYmFzZTtcbitcdHN0cnVjdCBzb2NrXHQqc2sgPSBzdnNrLVx1MDAzZXNrX3NrO1xuK1x0cmVhZF9kZXNjcmlwdG9yX3QgZGVzYyA9IHtcbitcdFx0LmFyZy5kYXRhID0gcnFzdHAsXG4rXHR9O1xuIFx0c3NpemVfdCBsZW47XG4gXHRfX2JlMzIgKnA7XG4gXHRfX2JlMzIgY2FsbGRpcjtcbiBcbiBcdGNsZWFyX2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4tXHRsZW4gPSBzdmNfdGNwX3JlYWRfbWFya2VyKHN2c2ssIHJxc3RwKTtcbi1cdGlmIChsZW4gXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3I7XG4gXG4tXHRiYXNlID0gc3ZjX3RjcF9yZXN0b3JlX3BhZ2VzKHN2c2ssIHJxc3RwKTtcbi1cdHdhbnQgPSBsZW4gLSAoc3Zzay1cdTAwM2Vza190Y3BsZW4gLSBzaXplb2YocnBjX2ZyYWdoZHIpKTtcbi1cdGxlbiA9IHN2Y190Y3BfcmVhZF9tc2cocnFzdHAsIGJhc2UgKyB3YW50LCBiYXNlKTtcbi1cdGlmIChsZW4gXHUwMDNlPSAwKSB7XG4tXHRcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBsZW4pO1xuLVx0XHRzdnNrLVx1MDAzZXNrX3RjcGxlbiArPSBsZW47XG4tXHRcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiArPSBsZW47XG4rXHRzdmNfdGNwX3Jlc3RvcmVfcGFnZXMoc3ZzaywgcnFzdHApO1xuK1x0cnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAtXHUwMDNlcnFfcGFnZXNbMF0pO1xuK1xuK1x0ZGVzYy5jb3VudCA9IHNlcnYtXHUwMDNlc3ZfbWF4X21lc2c7XG4rXHRsb2NrX3NvY2soc2spO1xuK1x0aWYgKHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrX3JlY3R5cGUpXG4rXHRcdGxlbiA9IHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrX3JlY3R5cGUoc2ssIFx1MDAyNmRlc2MsXG4rXHRcdFx0XHRcdFx0XHQgICAgc3ZjX3RjcF9yZWN2X2FjdG9yLFxuK1x0XHRcdFx0XHRcdFx0ICAgIHN2Y190Y3BfcmVjdHlwZV9hY3Rvcik7XG4rXHRlbHNlXG4rXHRcdGxlbiA9IHN2c2stXHUwMDNlc2tfc29jay1cdTAwM2VvcHMtXHUwMDNlcmVhZF9zb2NrKHNrLCBcdTAwMjZkZXNjLFxuK1x0XHRcdFx0XHRcdCAgICAgc3ZjX3RjcF9yZWN2X2FjdG9yKTtcbitcdHJlbGVhc2Vfc29jayhzayk7XG4rXG4rXHRpZiAoZGVzYy5lcnJvciBcdTAwM2MgMCkge1xuK1x0XHRsZW4gPSBkZXNjLmVycm9yO1xuK1x0XHRnb3RvIGVycl9kaXNjYXJkO1xuIFx0fVxuLVx0aWYgKGxlbiAhPSB3YW50IHx8ICFzdmNfc29ja19maW5hbF9yZWMoc3ZzaykpXG4rXHRpZiAoZGVzYy5jb3VudCAhPSAwKSB7XG4rXHRcdGlmIChsZW4gXHUwMDNlIDApXG4rXHRcdFx0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRcdGdvdG8gZXJyX2luY29tcGxldGU7XG4rXHR9XG4rXG4gXHRpZiAoc3Zzay1cdTAwM2Vza19kYXRhbGVuIFx1MDAzYyA4KVxuIFx0XHRnb3RvIGVycl9udXRzO1xuIFxuQEAgLTExODUsOCArMTE0MiwxMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGlmIChycXN0cC1cdTAwM2VycV9hcmcubGVuIFx1MDAzYz0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbikge1xuIFx0XHRycXN0cC1cdTAwM2VycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gcnFzdHAtXHUwMDNlcnFfYXJnLmxlbjtcbiBcdFx0cnFzdHAtXHUwMDNlcnFfYXJnLnBhZ2VfbGVuID0gMDtcbi1cdH0gZWxzZVxuLVx0XHRycXN0cC1cdTAwM2VycV9hcmcucGFnZV9sZW4gPSBycXN0cC1cdTAwM2VycV9hcmcubGVuIC0gcnFzdHAtXHUwMDNlcnFfYXJnLmhlYWRbMF0uaW92X2xlbjtcbitcdH0gZWxzZSB7XG4rXHRcdHJxc3RwLVx1MDAzZXJxX2FyZy5wYWdlX2xlbiA9IHJxc3RwLVx1MDAzZXJxX2FyZy5sZW4gLVxuK1x0XHRcdHJxc3RwLVx1MDAzZXJxX2FyZy5oZWFkWzBdLmlvdl9sZW47XG4rXHR9XG4gXG4gXHRycXN0cC1cdTAwM2VycV94cHJ0X2N0eHQgICA9IE5VTEw7XG4gXHRycXN0cC1cdTAwM2VycV9wcm90XHQgICAgICA9IElQUFJPVE9fVENQO1xuQEAgLTEyMDcsMTEgKzExNjYsMTMgQEAgc3RhdGljIGludCBzdmNfdGNwX3JlY3Zmcm9tKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4gXHRpZiAobGVuIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm9yO1xuIFxuK1x0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIHJxc3RwLVx1MDAzZXJxX2FyZy5sZW4pO1xuIFx0c3ZjX3hwcnRfY29weV9hZGRycyhycXN0cCwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0KTtcbiBcdGlmIChzZXJ2LVx1MDAzZXN2X3N0YXRzKVxuIFx0XHRzZXJ2LVx1MDAzZXN2X3N0YXRzLVx1MDAzZW5ldHRjcGNudCsrO1xuIFxuIFx0c3ZjX3NvY2tfc2VjdXJlX3BvcnQocnFzdHApO1xuK1x0c2V0X2JpdChYUFRfREFUQSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncyk7XG4gXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cdTAwM2VycV94cHJ0KTtcbiBcdHJldHVybiBycXN0cC1cdTAwM2VycV9hcmcubGVuO1xuIFxuQEAgLTEyMTksOSArMTE4MCw3IEBAIHN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuIFx0c3ZjX3RjcF9zYXZlX3BhZ2VzKHN2c2ssIHJxc3RwKTtcbiBcdGlmIChsZW4gXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGxlbiAhPSAtRUFHQUlOKVxuIFx0XHRnb3RvIGVycl9kZWxldGU7XG4tXHRpZiAobGVuID09IHdhbnQpXG4tXHRcdHN2Y190Y3BfZnJhZ21lbnRfcmVjZWl2ZWQoc3Zzayk7XG4tXHRlbHNlXG4rXHRpZiAoc3Zzay1cdTAwM2Vza190Y3BsZW4gXHUwMDNlPSBzaXplb2YocnBjX2ZyYWdoZHIpKVxuIFx0XHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2X3Nob3J0KFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCxcbiBcdFx0XHRcdHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcbiBcdFx0XHRcdHN2c2stXHUwMDNlc2tfdGNwbGVuIC0gc2l6ZW9mKHJwY19mcmFnaGRyKSk7XG5AQCAtMTIzMywxMiArMTE5MiwyMCBAQCBzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbiBcdGdvdG8gZXJyX25vY2xvc2U7XG4gZXJyX251dHM6XG4gXHRzdnNrLVx1MDAzZXNrX2RhdGFsZW4gPSAwO1xuK1x0Z290byBlcnJfZGVsZXRlO1xuK2Vycl9kaXNjYXJkOlxuK1x0LypcbitcdCAqIENsZWFyIHNrX2RhdGFsZW4gc28gdGhlIHRlYXJkb3duLXRpbWVcbitcdCAqIHN2Y190Y3BfY2xlYXJfcGFnZXMoKSBkb2VzIG5vdCB3YWxrIHRoZSBlbXB0aWVkXG4rXHQgKiBzdnNrLVx1MDAzZXNrX3BhZ2VzW10uXG4rXHQgKi9cbitcdHN2c2stXHUwMDNlc2tfZGF0YWxlbiA9IDA7XG4gZXJyX2RlbGV0ZTpcbiBcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgbGVuKTtcbiBcdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4gZXJyX25vY2xvc2U6XG4gXHRzdmNfeHBydF9yZWNlaXZlZChycXN0cC1cdTAwM2VycV94cHJ0KTtcbi1cdHJldHVybiAwO1x0LyogcmVjb3JkIG5vdCBjb21wbGV0ZSAqL1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHMuaCBiL25ldC90bHMvdGxzLmhcbmluZGV4IDYwYTM3YmRhYWEyNTA2Li5jMjFkMmE5ODVlMTM3MyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzLmhcbisrKyBiL25ldC90bHMvdGxzLmhcbkBAIC0xNjgsNiArMTY4LDkgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxuIFx0XHRcdCAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XG4raW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuK1x0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4rXHRcdFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKTtcbiBcbiBpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCA4YzU4OGNkYWI3MzNkYS4uNDk2M2UwY2FmNmQ1M2EgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbisrKyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTk0OSwxMiArOTQ5LDE3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddXG4gXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XG4gXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG4gXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbitcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbiBcbiBcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFx0PSB0bHNfc3dfc3BsaWNlX3JlYWQ7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG4gXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbitcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnJlYWRfc29ja19yZWN0eXBlXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcbiBcbitcdC8qIFRMU19IVyAoZGV2aWNlIG9mZmxvYWQpIFJYIGVudHJpZXMgaW5oZXJpdFxuK1x0ICogcmVhZF9zb2NreyxfcmVjdHlwZX0gZnJvbSBTVyB2aWEgdGhlIHN0cnVjdCBjb3BpZXMgYmVsb3cuXG4rXHQgKi9cbiAjaWZkZWYgQ09ORklHX1RMU19ERVZJQ0VcbiBcdG9wc1tUTFNfSFcgIF1bVExTX0JBU0VdID0gb3BzW1RMU19CQVNFXVtUTFNfQkFTRV07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfc3cuYyBiL25ldC90bHMvdGxzX3N3LmNcbmluZGV4IGQ0YWZjOTBmZDc5NjZlLi5hZjM0N2I1YjE3ZmE4YyAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX3N3LmNcbisrKyBiL25ldC90bHMvdGxzX3N3LmNcbkBAIC0yMDQ5LDE0ICsyMDQ5LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXG4gXHRnb3RvIHNwbGljZV9yZWFkX2VuZDtcbiB9XG4gXG4taW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcilcbisvKiBDb25zZWN1dGl2ZSBlbXB0eSBkYXRhIHJlY29yZHMgZGVsaXZlciBubyBieXRlczsgY2FwIHRoZW0gcGVyXG4rICogY2FsbCBzbyBhIHBlZXIgc3RyZWFtaW5nIHRoZW0gY2Fubm90IGhvbGQgdGhlIHNvY2tldCBsb2NrIGhlcmUuXG4rICovXG4rI2RlZmluZSBUTFNfUlhfTk9EQVRBX0xJTUlUIDE2XG4rXG4rc3RhdGljIGludCBfX3Rsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbitcdFx0XHQgICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcixcbitcdFx0XHQgICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiBcdHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4ID0gdGxzX3N3X2N0eF9yeCh0bHNfY3R4KTtcbiBcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4gXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdHVuc2lnbmVkIGludCBub2RhdGFfY291bnQgPSAwO1xuIFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbiBcdHNpemVfdCBmbHVzaGVkX2F0ID0gMDtcbiBcdGJvb2wgcmVsZWFzZWQgPSB0cnVlO1xuQEAgLTIxMDksMTAgKzIxMTYsMjcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcbiBcdFx0fVxuIFxuLVx0XHQvKiByZWFkX3NvY2sgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGNvbnRyb2wgbWVzc2FnZXMgKi9cbitcdFx0LyogQ29udHJvbCByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSkgcmVhY2ggYSBjb25zdW1lclxuK1x0XHQgKiBvbmx5IHRocm91Z2ggcmVjdHlwZV9hY3Rvcjsgd2l0aG91dCBvbmUsIHJlYWRfc29ja1xuK1x0XHQgKiByZWplY3RzIHRoZW0uXG4rXHRcdCAqL1xuIFx0XHRpZiAodGxtLVx1MDAzZWNvbnRyb2wgIT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpIHtcbi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4rXHRcdFx0aWYgKCFyZWN0eXBlX2FjdG9yKSB7XG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcbitcdFx0XHR9XG4rXHRcdFx0ZXJyID0gcmVjdHlwZV9hY3RvcihkZXNjLCBza2IsIHJ4bS1cdTAwM2VvZmZzZXQsXG4rXHRcdFx0XHRcdCByeG0tXHUwMDNlZnVsbF9sZW4sXG4rXHRcdFx0XHRcdCB0bG0tXHUwMDNlY29udHJvbCk7XG4rXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4rXHRcdFx0ZXJyID0gMDtcbitcdFx0XHQvKiByZWN0eXBlX2FjdG9yIGNvbnN1bWVzIHRoZSB3aG9sZSByZWNvcmQ7IG5vIHBhcnRpYWwgcGF0aCAqL1xuK1x0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdFx0c2tiID0gTlVMTDtcbitcdFx0XHRpZiAoKytub2RhdGFfY291bnQgXHUwMDNlPSBUTFNfUlhfTk9EQVRBX0xJTUlUKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVyb1xuQEAgLTIxMjIsNyArMjE0NiwxMyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHQgKiBoZXJlIGluc3RlYWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAocnhtLVx1MDAzZWZ1bGxfbGVuID09IDApIHtcbitcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdFx0LyogdGxzX3J4X3JlYWRlcl9yZWxlYXNlKCkgYW5ub3VuY2VzIGFueSBwYXJzZWQgcmVjb3JkXG4rXHRcdFx0ICogb24gZXhpdCwgc28gcmV0dXJuaW5nIDAgaGVyZSBjYW5ub3Qgc3RyYW5kIGl0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICgrK25vZGF0YV9jb3VudCBcdTAwM2U9IFRMU19SWF9OT0RBVEFfTElNSVQpXG4rXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTIxMzMsNiArMjE2Myw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcbiBcdFx0fVxuIFx0XHRjb3BpZWQgKz0gdXNlZDtcbitcdFx0bm9kYXRhX2NvdW50ID0gMDtcbiBcdFx0aWYgKHVzZWQgXHUwMDNjIHJ4bS1cdTAwM2VmdWxsX2xlbikge1xuIFx0XHRcdHJ4bS1cdTAwM2VvZmZzZXQgKz0gdXNlZDtcbiBcdFx0XHRyeG0tXHUwMDNlZnVsbF9sZW4gLT0gdXNlZDtcbkBAIC0yMTUxLDYgKzIxODIsMTkgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdGdvdG8gcmVhZF9zb2NrX2VuZDtcbiB9XG4gXG4raW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbitcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcilcbit7XG4rXHRyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCBOVUxMKTtcbit9XG4rXG4raW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuK1x0XHRcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IsXG4rXHRcdFx0ICAgICBza19yZWFkX3JlY3R5cGVfYWN0b3JfdCByZWN0eXBlX2FjdG9yKVxuK3tcbitcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIHJlY3R5cGVfYWN0b3IpO1xuK31cbitcbiBib29sIHRsc19zd19zb2NrX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG5pbmRleCBjYmRkM2VhMjhiOTk4Zi4uODEzNjMwNmI1Y2FhNzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuQEAgLTQyNyw3ICs0MjcsOCBAQCBGSVhUVVJFX1NFVFVQKHRscylcbiBcbiBGSVhUVVJFX1RFQVJET1dOKHRscylcbiB7XG4tXHRjbG9zZShzZWxmLVx1MDAzZWZkKTtcbitcdGlmIChzZWxmLVx1MDAzZWZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4gXHRjbG9zZShzZWxmLVx1MDAzZWNmZCk7XG4gfVxuIFxuQEAgLTg5Nyw2ICs4OTgsMTE0IEBAIFRFU1RfRih0bHMsIHNwbGljZV9kZWNfY21zZ190b19waXBlKVxuIFx0RVhQRUNUX0VRKG1lbWNtcCh0ZXN0X3N0ciwgYnVmLCBzZW5kX2xlbiksIDApO1xuIH1cbiBcbisvKiBWZXJpZnkgc3BsaWNlIGhhbmRsZXMgZGF0YS1jb250cm9sLWRhdGE6IHNwbGljZSByZWFkcyB0aGUgZGF0YVxuKyAqIHJlY29yZHMgc3VjY2Vzc2Z1bGx5IHdoaWxlIHRoZSBpbnRlcnZlbmluZyBjb250cm9sIHJlY29yZCBtdXN0XG4rICogYmUgZHJhaW5lZCB2aWEgcmVjdm1zZyBiZWZvcmUgc3BsaWNlIGNhbiBjb250aW51ZS5cbisgKi9cbitURVNUX0YodGxzLCBzcGxpY2VfZGF0YV9jbXNnX2RhdGEpXG4re1xuK1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbitcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XG4rXHRpbnQgc2VuZF9sZW4gPSA0MDk2O1xuK1x0Y2hhciAqY3RybF9zdHIgPSBcImNvbnRyb2xcIjtcbitcdGludCBjdHJsX2xlbiA9IHN0cmxlbihjdHJsX3N0cikgKyAxO1xuK1x0Y2hhciBjdHJsX2J1Zls4XTtcbitcdGludCBwWzJdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0bWVtcm5kKG1lbV9zZW5kLCBzaXplb2YobWVtX3NlbmQpKTtcbitcbitcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbitcbitcdC8qIFNlbmQ6IGRhdGEsIGNvbnRyb2wsIGRhdGEgKi9cbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDEwMCwgY3RybF9zdHIsIGN0cmxfbGVuLCAwKSxcbitcdFx0ICBjdHJsX2xlbik7XG4rXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1xuK1x0LyogU3BsaWNlIGZpcnN0IGRhdGEgcmVjb3JkICovXG4rXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAobWVtX3NlbmQsIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xuK1xuK1x0LyogU3BsaWNlIGhpdHMgY29udHJvbCByZWNvcmQsIGZhaWxzICovXG4rXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcbitcbitcdC8qIERyYWluIHRoZSBjb250cm9sIHJlY29yZCB2aWEgcmVjdm1zZyAqL1xuK1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuK1x0XHRcdFx0Y3RybF9idWYsIHNpemVvZihjdHJsX2J1ZiksIE1TR19XQUlUQUxMKSxcbitcdFx0ICBjdHJsX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGN0cmxfc3RyLCBjdHJsX2J1ZiwgY3RybF9sZW4pLCAwKTtcbitcbitcdC8qIFNwbGljZSBzZWNvbmQgZGF0YSByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIDApO1xuK31cbitcbisvKiBWZXJpZnkgdGhhdCBtdWx0aXBsZSBjb25zZWN1dGl2ZSBjb250cm9sIHJlY29yZHMgYmV0d2VlbiBkYXRhXG4rICogcmVjb3JkcyBjYW4gZWFjaCBiZSBkcmFpbmVkIGluZGl2aWR1YWxseSwgYW5kIHNwbGljZSByZXN1bWVzXG4rICogYWZ0ZXJ3YXJkLiAgVGhlIHR3byBjb250cm9sIHJlY29yZHMgdXNlIGRpZmZlcmVudCBjb250ZW50IHR5cGVzXG4rICogdG8gdmVyaWZ5IHR5cGUgcHJlc2VydmF0aW9uIGFjcm9zcyB0aGUgc3BsaWNlIGJvdW5kYXJ5LlxuKyAqL1xuK1RFU1RfRih0bHMsIHNwbGljZV9tdWx0aV9jbXNnX2RhdGEpXG4re1xuK1x0Y2hhciBtZW1fc2VuZFtUTFNfUEFZTE9BRF9NQVhfTEVOXTtcbitcdGNoYXIgbWVtX3JlY3ZbVExTX1BBWUxPQURfTUFYX0xFTl07XG4rXHRpbnQgc2VuZF9sZW4gPSA0MDk2O1xuK1x0Y2hhciAqY3RybDEgPSBcImFsZXJ0MVwiO1xuK1x0Y2hhciAqY3RybDIgPSBcImFsZXJ0MlwiO1xuK1x0aW50IGN0cmxfbGVuID0gc3RybGVuKGN0cmwxKSArIDE7XG4rXHRjaGFyIGN0cmxfYnVmWzddO1xuK1x0aW50IHBbMl07XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4rXG4rXHRtZW1ybmQobWVtX3NlbmQsIHNpemVvZihtZW1fc2VuZCkpO1xuK1xuK1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuK1xuK1x0LyogU2VuZDogZGF0YSwgY29udHJvbCgxMDApLCBjb250cm9sKDIwMCksIGRhdGEgKi9cbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIG1lbV9zZW5kLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUSh0bHNfc2VuZF9jbXNnKHNlbGYtXHUwMDNlZmQsIDEwMCwgY3RybDEsIGN0cmxfbGVuLCAwKSwgY3RybF9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMjAwLCBjdHJsMiwgY3RybF9sZW4sIDApLCBjdHJsX2xlbik7XG4rXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBcdTAwMjZtZW1fc2VuZFtzZW5kX2xlbl0sIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1xuK1x0LyogU3BsaWNlIGZpcnN0IGRhdGEgKi9cbitcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKHJlYWQocFswXSwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgc2VuZF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChtZW1fc2VuZCwgbWVtX3JlY3YsIHNlbmRfbGVuKSwgMCk7XG4rXG4rXHQvKiBTcGxpY2UgZmFpbHMgb24gZmlyc3QgY29udHJvbCByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShzcGxpY2Uoc2VsZi1cdTAwM2VjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNlbmRfbGVuLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuK1xuK1x0LyogRHJhaW4gZmlyc3QgY29udHJvbCAodHlwZSAxMDApICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4rXHRcdFx0XHRjdHJsX2J1Ziwgc2l6ZW9mKGN0cmxfYnVmKSwgTVNHX1dBSVRBTEwpLFxuK1x0XHQgIGN0cmxfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoY3RybDEsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xuK1xuK1x0LyogU3BsaWNlIGZhaWxzIG9uIHNlY29uZCBjb250cm9sIHJlY29yZCAqL1xuK1x0RVhQRUNUX0VRKHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2VuZF9sZW4sIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XG4rXG4rXHQvKiBEcmFpbiBzZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAyMDAsXG4rXHRcdFx0XHRjdHJsX2J1Ziwgc2l6ZW9mKGN0cmxfYnVmKSwgTVNHX1dBSVRBTEwpLFxuK1x0XHQgIGN0cmxfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoY3RybDIsIGN0cmxfYnVmLCBjdHJsX2xlbiksIDApO1xuK1xuK1x0LyogU3BsaWNlIHNlY29uZCBkYXRhICovXG4rXHRFWFBFQ1RfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzZW5kX2xlbiwgMCksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShyZWFkKHBbMF0sIG1lbV9yZWN2LCBzZW5kX2xlbiksIHNlbmRfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoXHUwMDI2bWVtX3NlbmRbc2VuZF9sZW5dLCBtZW1fcmVjdiwgc2VuZF9sZW4pLCAwKTtcbit9XG4rXG4gVEVTVF9GKHRscywgcmVjdl9hbmRfc3BsaWNlKVxuIHtcbiBcdGludCBzZW5kX2xlbiA9IFRMU19QQVlMT0FEX01BWF9MRU47XG5AQCAtMTY4Miw2ICsxNzkxLDE5MyBAQCBURVNUX0YodGxzLCBkYXRhX2NvbnRyb2xfZGF0YSlcbiBcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfUEVFSyksIHNlbmRfbGVuKTtcbiB9XG4gXG4rLyogRnVsbHkgY29uc3VtZSBhIGRhdGEtY29udHJvbC1kYXRhIHNlcXVlbmNlLiAgVGhlIGV4aXN0aW5nXG4rICogZGF0YV9jb250cm9sX2RhdGEgdGVzdCBvbmx5IHBlZWtzOyB0aGlzIGV4ZXJjaXNlcyBjb21wbGV0ZVxuKyAqIHJlY29yZCBkZWxpdmVyeSB0aHJvdWdoIHJlY3YgYW5kIHJlY3Ztc2cuXG4rICovXG4rVEVTVF9GKHRscywgcmVjdl9kYXRhX2Ntc2dfZGF0YSlcbit7XG4rXHRjaGFyICpkYXRhMSA9IFwiZmlyc3RfZGF0YVwiO1xuK1x0Y2hhciAqY3RybCA9IFwiY3RybF9tc2dcIjtcbitcdGNoYXIgKmRhdGEyID0gXCJzZWNvbmRfZGF0YVwiO1xuK1x0aW50IGQxX2xlbiA9IHN0cmxlbihkYXRhMSkgKyAxO1xuK1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcbitcdGludCBkMl9sZW4gPSBzdHJsZW4oZGF0YTIpICsgMTtcbitcdGNoYXIgYnVmWzIwXTtcbitcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGExLCBkMV9sZW4sIDApLCBkMV9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEyLCBkMl9sZW4sIDApLCBkMl9sZW4pO1xuK1xuK1x0LyogRmlyc3QgZGF0YSByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGQxX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YTEsIGQxX2xlbiksIDApO1xuK1xuK1x0LyogcmVjdiB3aXRob3V0IGNtc2cgYnVmZmVyIGZhaWxzIG9uIGNvbnRyb2wgcmVjb3JkICovXG4rXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlPKTtcbitcbitcdC8qIERyYWluIGNvbnRyb2wgdmlhIHJlY3Ztc2cgKi9cbitcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbitcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XG4rXG4rXHQvKiBTZWNvbmQgZGF0YSByZWNvcmQgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEyLCBkMl9sZW4pLCAwKTtcbit9XG4rXG4rLyogUGVlayBhdCBhbiBpbnRlcmxlYXZlZCBjb250cm9sIHJlY29yZCBhZnRlciB0aGUgcHJlY2VkaW5nIGRhdGFcbisgKiByZWNvcmQgaGFzIGJlZW4gY29uc3VtZWQsIHRoZW4gY29uc3VtZSBpdC4gIE1TR19QRUVLIGV4cG9zZXMgdGhlXG4rICogY29udHJvbCByZWNvcmQncyB0eXBlIHdpdGhvdXQgY29uc3VtaW5nIGl0LlxuKyAqL1xuK1RFU1RfRih0bHMsIHBlZWtfY21zZ19hZnRlcl9kYXRhKVxuK3tcbitcdGNoYXIgKmRhdGEgPSBcImxlYWRpbmdcIjtcbitcdGNoYXIgKmN0cmwgPSBcIm1pZGRsZVwiO1xuK1x0Y2hhciAqdGFpbCA9IFwidHJhaWxpbmdcIjtcbitcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XG4rXHRpbnQgY19sZW4gPSBzdHJsZW4oY3RybCkgKyAxO1xuK1x0aW50IHRfbGVuID0gc3RybGVuKHRhaWwpICsgMTtcbitcdGNoYXIgYnVmWzIwXTtcbitcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEsIGRfbGVuLCAwKSwgZF9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMTAwLCBjdHJsLCBjX2xlbiwgMCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIHRhaWwsIHRfbGVuLCAwKSwgdF9sZW4pO1xuK1xuK1x0LyogQ29uc3VtZSBsZWFkaW5nIGRhdGEgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGRfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhLCBkX2xlbiksIDApO1xuK1xuK1x0LyogUGVlayBhdCB0aGUgY29udHJvbCByZWNvcmQgKi9cbitcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbitcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19QRUVLKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XG4rXG4rXHQvKiBDb25zdW1lIHRoZSBjb250cm9sIHJlY29yZCAqL1xuK1x0RVhQRUNUX0VRKHRsc19yZWN2X2Ntc2coX21ldGFkYXRhLCBzZWxmLVx1MDAzZWNmZCwgMTAwLFxuK1x0XHRcdFx0YnVmLCBzaXplb2YoYnVmKSwgMCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuK1xuK1x0LyogVHJhaWxpbmcgZGF0YSAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1ZiwgdF9sZW4sIE1TR19XQUlUQUxMKSwgdF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIHRhaWwsIHRfbGVuKSwgMCk7XG4rfVxuK1xuKy8qIENvbnRyb2wgcmVjb3JkIGFzIHRoZSBmaXJzdCByZWNvcmQgaW4gdGhlIHN0cmVhbSwgZm9sbG93ZWQgYnlcbisgKiBkYXRhLiAgVGhlIGNvbnRyb2wgcmVjb3JkIG11c3QgYmUgZHJhaW5lZCBiZWZvcmUgdGhlIGRhdGEgcmVjb3JkXG4rICogYmVjb21lcyBhdmFpbGFibGUuXG4rICovXG4rVEVTVF9GKHRscywgY21zZ19iZWZvcmVfZGF0YSlcbit7XG4rXHRjaGFyICpjdHJsID0gXCJhbGVydFwiO1xuK1x0Y2hhciAqZGF0YSA9IFwicGF5bG9hZFwiO1xuK1x0aW50IGNfbGVuID0gc3RybGVuKGN0cmwpICsgMTtcbitcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XG4rXHRjaGFyIGJ1ZlsyMF07XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4rXG4rXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XG4rXG4rXHQvKiByZWN2IHdpdGhvdXQgY21zZyBmYWlscyAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJTyk7XG4rXG4rXHQvKiBEcmFpbiBjb250cm9sIHZpYSByZWN2bXNnICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4rXHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGNfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsLCBjX2xlbiksIDApO1xuK1xuK1x0LyogRGF0YSBmb2xsb3dzICovXG4rXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBkX2xlbiwgTVNHX1dBSVRBTEwpLCBkX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgZGF0YSwgZF9sZW4pLCAwKTtcbit9XG4rXG4rLyogVHdvIGRpZmZlcmVudCBjb250cm9sIHJlY29yZCB0eXBlcyBpbnRlcmxlYXZlZCB3aXRoIGRhdGEuXG4rICogRWFjaCBjb250cm9sIHJlY29yZCBpcyBkZWxpdmVyZWQgd2l0aCBpdHMgb3duIHR5cGUgcHJlc2VydmVkO1xuKyAqIHZlcmlmeSBib3RoIHR5cGVzIGFycml2ZSBpbnRhY3QuXG4rICovXG4rVEVTVF9GKHRscywgbWl4ZWRfY29udHJvbF90eXBlcylcbit7XG4rXHRjaGFyICpkYXRhMSA9IFwiZGF0YTFcIjtcbitcdGNoYXIgKmN0cmwxID0gXCJoYW5kc2hha2VcIjtcbitcdGNoYXIgKmN0cmwyID0gXCJhbGVydF9tc2dcIjtcbitcdGNoYXIgKmRhdGEyID0gXCJkYXRhMlwiO1xuK1x0aW50IGQxX2xlbiA9IHN0cmxlbihkYXRhMSkgKyAxO1xuK1x0aW50IGMxX2xlbiA9IHN0cmxlbihjdHJsMSkgKyAxO1xuK1x0aW50IGMyX2xlbiA9IHN0cmxlbihjdHJsMikgKyAxO1xuK1x0aW50IGQyX2xlbiA9IHN0cmxlbihkYXRhMikgKyAxO1xuK1x0Y2hhciBidWZbMjBdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YTEsIGQxX2xlbiwgMCksIGQxX2xlbik7XG4rXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwxLCBjMV9sZW4sIDApLCBjMV9sZW4pO1xuK1x0RVhQRUNUX0VRKHRsc19zZW5kX2Ntc2coc2VsZi1cdTAwM2VmZCwgMjAwLCBjdHJsMiwgYzJfbGVuLCAwKSwgYzJfbGVuKTtcbitcdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQsIGRhdGEyLCBkMl9sZW4sIDApLCBkMl9sZW4pO1xuK1xuK1x0LyogRmlyc3QgZGF0YSAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgZDFfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBkYXRhMSwgZDFfbGVuKSwgMCk7XG4rXG4rXHQvKiBGaXJzdCBjb250cm9sICh0eXBlIDEwMCkgKi9cbitcdEVYUEVDVF9FUSh0bHNfcmVjdl9jbXNnKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VjZmQsIDEwMCxcbitcdFx0XHRcdGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgYzFfbGVuKTtcbitcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBjdHJsMSwgYzFfbGVuKSwgMCk7XG4rXG4rXHQvKiBTZWNvbmQgY29udHJvbCAodHlwZSAyMDApICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAyMDAsXG4rXHRcdFx0XHRidWYsIHNpemVvZihidWYpLCBNU0dfV0FJVEFMTCksIGMyX2xlbik7XG4rXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgY3RybDIsIGMyX2xlbiksIDApO1xuK1xuK1x0LyogU2Vjb25kIGRhdGEgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIGQyX2xlbiwgTVNHX1dBSVRBTEwpLCBkMl9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEyLCBkMl9sZW4pLCAwKTtcbit9XG4rXG4rLyogVHJhaWxpbmcgY29udHJvbCByZWNvcmQgd2l0aCBubyBkYXRhIGZvbGxvd2luZyBpdC4gIFRoZSBzZW5kZXJcbisgKiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlIGNvbnRyb2wgcmVjb3JkOyB0aGUgcmVjZWl2ZXJcbisgKiBkcmFpbnMgdGhlIGNvbnRyb2wgYW5kIHRoZW4gb2JzZXJ2ZXMgRU9GLlxuKyAqL1xuK1RFU1RfRih0bHMsIGRhdGFfY21zZ19lb2YpXG4re1xuK1x0Y2hhciAqZGF0YSA9IFwicGF5bG9hZFwiO1xuK1x0Y2hhciAqY3RybCA9IFwiZmluYWxcIjtcbitcdGludCBkX2xlbiA9IHN0cmxlbihkYXRhKSArIDE7XG4rXHRpbnQgY19sZW4gPSBzdHJsZW4oY3RybCkgKyAxO1xuK1x0Y2hhciBidWZbMjBdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgZGF0YSwgZF9sZW4sIDApLCBkX2xlbik7XG4rXHRFWFBFQ1RfRVEodGxzX3NlbmRfY21zZyhzZWxmLVx1MDAzZWZkLCAxMDAsIGN0cmwsIGNfbGVuLCAwKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKGNsb3NlKHNlbGYtXHUwMDNlZmQpLCAwKTtcbitcdHNlbGYtXHUwMDNlZmQgPSAtMTtcbitcbitcdC8qIENvbnN1bWUgZGF0YSAqL1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19XQUlUQUxMKSwgZF9sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGRhdGEsIGRfbGVuKSwgMCk7XG4rXG4rXHQvKiBEcmFpbiB0cmFpbGluZyBjb250cm9sICovXG4rXHRFWFBFQ1RfRVEodGxzX3JlY3ZfY21zZyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlY2ZkLCAxMDAsXG4rXHRcdFx0XHRidWYsIHNpemVvZihidWYpLCAwKSwgY19sZW4pO1xuK1x0RVhQRUNUX0VRKG1lbWNtcChidWYsIGN0cmwsIGNfbGVuKSwgMCk7XG4rXG4rXHQvKiBOZXh0IHJlY3YgcmV0dXJucyBFT0YgKi9cbitcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCAwKSwgMCk7XG4rfVxuK1xuIFRFU1RfRih0bHMsIHNodXRkb3duKVxuIHtcbiBcdGNoYXIgY29uc3QgKnRlc3Rfc3RyID0gXCJ0ZXN0X3JlYWRcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA0OjUyLjI1NjM3MjUxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjkzMDg0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgUmVjb3JkIFR5cGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgcHJldHR5IGNsZWFuIHJlZmFjdG9yIGZvciBob3cgd2UgaGFuZGxlIHJlY29yZCB0eXBlcyBhdCB0aGUgc29ja2V0IGxldmVsLiAgVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgYSBuZXcgY2FsbGJhY2ssIGByZWFkX3NvY2tfcmVjdHlwZWAsIHRvIHRoZSBgc3RydWN0IHByb3RvX29wc2AuICBUaGlzIGxvb2tzIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCBmb3IgYWRkaW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIGhvdyB3ZSByZWFkIGRhdGEgYmFzZWQgb24gcmVjb3JkIHR5cGVzLCB3aGljaCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgcHJvdG9jb2xzIGxpa2UgVExTIHRoYXQgaGF2ZSBjb21wbGV4IGZyYW1pbmcuXG5cblRoZSBtZWF0IG9mIGl0IGlzIHRoYXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMgbmV3IGNhbGxiYWNrLiAgSXQncyByZXBsYWNpbmcgc29tZSBleGlzdGluZyBmdW5jdGlvbnMsIGBzdmNfdGNwX3NvY2tfcmVjdm1zZ2AgYW5kIGBzdmNfdGNwX3JlYWRfbXNnYCwgd2l0aCB0aGUgbmV3IGBzdmNfdGNwX3JlY3ZfYWN0b3JgIGFuZCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCB3aGljaCBzZWVtcyB0byBzdWdnZXN0IGEgbW92ZSB0b3dhcmQgYSBtb3JlIGFjdG9yLWJhc2VkIG1vZGVsIGZvciBoYW5kbGluZyB0aGUgVENQIHJlYWQgbG9vcC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIEnigJlsbCB3YW50IHRvIHNlZSBob3cgdGhlc2UgYWN0b3JzIGludGVyYWN0IGluIG1vcmUgZGV0YWlsLlxuXG5UaGUgVExTIHNpZGUgaXMgYWxzbyB0b3VjaGVkLCB3aXRoIGBuZXQvdGxzL3Rsc19zdy5jYCBnZXR0aW5nIGEgYHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZWAgaW1wbGVtZW50YXRpb24uICBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgaHlwb3RoZXNpcyB0aGF0IFRMUyBpcyBhIGtleSBiZW5lZmljaWFyeSBoZXJlLiBUaGlzIHNlZW1zIGxvZ2ljYWwgZ2l2ZW4gdGhlIHJlbGlhbmNlIG9uIHJlY29yZCBmcmFtaW5nIHdpdGhpbiBUTFMuIFRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCwgbW9kaWZ5aW5nIGhvdyBSUEMgb3ZlciBUQ1AgaGFuZGxlcyBUTFMgcmVjb3Jkcy5cblxuVGhlIGRlZmluaXRpb25zIG9mIGBza19yZWFkX3JlY3R5cGVfYWN0b3JfdGAgYW5kIGByZWFkX3NvY2tfcmVjdHlwZWAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgIGFyZSBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuIEkgYW0gY3VyaW91cyB0byBleGFtaW5lIGhvdyB0aGUgYHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90YCBpbnRlcmFjdHMgd2l0aCB0aGUgYHJlYWRfc29ja2AgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiAgV2UgbmVlZCBgQ09ORklHX1NVTlJQQ2AgZm9yIHRoZSBSUEMgc2lkZSBhbmQgYENPTkZJR19UTFNgIGZvciB0aGUgVExTIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmNvbmZpZyBtb3JlIGNsb3NlbHkuIEl0IG1lbnRpb25zIGBDT05GSUdfVExTX0RFVklDRWAgaW4gYG5ldC90bHMvdGxzX21haW4uY2AgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGB0bHNfc3cuY2AuIFRoaXMgYWxzbyBuZWVkcyBjb25zaWRlcmF0aW9uLlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2VzIHRvIHZlcmlmeSBob3cgdGhpcyBpcyB1c2VkIG91dHNpZGUgb2YgdGhlc2UgaW1tZWRpYXRlIGNoYW5nZXMuIEkgd2FudCB0byBzZWUgaG93IGJyb2FkbHkgYHJlYWRfc29ja19yZWN0eXBlYCBhbmQgYHNrX3JlYWRfcmVjdHlwZV9hY3Rvcl90YCBhcmUgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBleGlzdGluZyBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDQ6NTguNTg1Njg0NTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDg3MDk0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9zb2NrX3JlY3R5cGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXQuaD0yMTE9c3RydWN0IHByb3RvX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTI3NC1cXHQvKlxcbmluY2x1ZGUvbGludXgvbmV0Lmg6Mjc1OlxcdCAqIHJlYWRfc29ja19yZWN0eXBlIHNwbGl0cyBkZWxpdmVyeSBhY3Jvc3MgdHdvIGNhbGxiYWNrczpcXG5pbmNsdWRlL2xpbnV4L25ldC5oLTI3Ni1cXHQgKiByZWN2X2FjdG9yIGZvciBkYXRhIHJlY29yZHMsIHBlciB0aGUgc2tfcmVhZF9hY3Rvcl90XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTI5MC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L25ldC5oOjI5MTpcXHRpbnRcXHRcXHQoKnJlYWRfc29ja19yZWN0eXBlKShzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9uZXQuaC0yOTItXFx0XFx0XFx0XFx0XFx0ICAgICByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTk1OD1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdl9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEwMzktLypcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMDQwOiAqIHJlYWRfc29ja19yZWN0eXBlIG5vbi1kYXRhIHJlY29yZCBhY3RvcjogcmVjZWl2ZXMgbm9uLWRhdGEgVExTXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTA0MS0gKiByZWNvcmRzIChhbGVydHMsIGhhbmRzaGFrZSBtZXNzYWdlcykgYW5kIHRyYW5zbGF0ZXMgdGhlbSBpbnRvXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xMDk4PXN0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2ZnJvbShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTExNy1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjExMTg6XFx0aWYgKHN2c2stXFx1MDAzZXNrX3NvY2stXFx1MDAzZW9wcy1cXHUwMDNlcmVhZF9zb2NrX3JlY3R5cGUpXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTExOTpcXHRcXHRsZW4gPSBzdnNrLVxcdTAwM2Vza19zb2NrLVxcdTAwM2VvcHMtXFx1MDAzZXJlYWRfc29ja19yZWN0eXBlKHNrLCBcXHUwMDI2ZGVzYyxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMTIwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdmNfdGNwX3JlY3ZfYWN0b3IsXFxuLS1cXG5uZXQvdGxzL3Rscy5oPTE2OT1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbm5ldC90bHMvdGxzLmgtMTcwLVxcdFxcdCAgICAgc2tfcmVhZF9hY3Rvcl90IHJlYWRfYWN0b3IpO1xcbm5ldC90bHMvdGxzLmg6MTcxOmludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvdGxzL3Rscy5oLTE3Mi1cXHRcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTk0MD1zdGF0aWMgdm9pZCBidWlsZF9wcm90b19vcHMoc3RydWN0IHByb3RvX29wcyBvcHNbVExTX05VTV9DT05GSUddW1RMU19OVU1fQ09ORklHXSxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy05NTEtXFx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucmVhZF9zb2NrXFx0PSB0bHNfc3dfcmVhZF9zb2NrO1xcbm5ldC90bHMvdGxzX21haW4uYzo5NTI6XFx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucmVhZF9zb2NrX3JlY3R5cGVcXHQ9IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtOTUzLVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTk1Ny1cXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1ODpcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tfcmVjdHlwZVxcdD0gdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlO1xcbm5ldC90bHMvdGxzX21haW4uYy05NTktXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTIxODU9aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjE5MC1cXG5uZXQvdGxzL3Rsc19zdy5jOjIxOTE6aW50IHRsc19zd19yZWFkX3NvY2tfcmVjdHlwZShzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbm5ldC90bHMvdGxzX3N3LmMtMjE5Mi1cXHRcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNTowMC44OTQ0MTgzNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTgyMjYzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29ja2V0IFJlY2VpdmUgVHlwZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgcmVhZF9zb2NrX3JlY3R5cGVgIGludG8gdGhlIGBwcm90b19vcHNgIHN0cnVjdCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBpbXBsZW1lbnRlZCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvdGxzL3Rsc19zdy5jYCBhcyBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYC4gVGhhdCBtYWtlcyBzZW5zZSAtIFRMUyBwcm9iYWJseSBuZWVkcyB0byBrbm93IHRoZSByZWNvcmQgdHlwZSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuXG5cbkkgc2VlIGl0J3MgYWxzbyBiZWluZyB1c2VkIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2Agd2l0aGluIGBzdmNfdGNwX3JlY3Zmcm9tYC4gVGhhdCdzIGEgYml0IHVuZXhwZWN0ZWQsIGJ1dCBwcm9iYWJseSBtZWFucyBTdW5SUEMgY2FuIGFsc28gYmVuZWZpdCBmcm9tIHRoaXMgc29ja2V0LWxldmVsIHR5cGUgcmV0cmlldmFsIGZvciBUQ1AgY29ubmVjdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGludG8gaG93IHRoYXQncyBiZWluZyB1c2VkIHRoZXJlLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgIGFuZCBgX190bHNfc3dfcmVhZF9zb2NrYC5cblxuR2l2ZW4gdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBzZWVtcyBjZW50cmFsLCBJIHNob3VsZCBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fdGxzX3N3X3JlYWRfc29ja2AgaW4gYG5ldC90bHMvdGxzX3N3LmNgIHRvIHNlZSBob3cgaXQncyBhY3R1YWxseSBwdWxsaW5nIHRoaXMgcmVjb3JkIHR5cGUgaW5mb3JtYXRpb24uIFRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBiYXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU1MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNTowNi4wNzY2ODczMDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MjQ5OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Rsc19zd19yZWFkX3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfc3cuYz0xOTgzPXNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIwNTYtXFxubmV0L3Rscy90bHNfc3cuYzoyMDU3OnN0YXRpYyBpbnQgX190bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxubmV0L3Rscy90bHNfc3cuYy0yMDU4LVxcdFxcdFxcdCAgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMTg1PWludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIxODcte1xcbm5ldC90bHMvdGxzX3N3LmM6MjE4ODpcXHRyZXR1cm4gX190bHNfc3dfcmVhZF9zb2NrKHNrLCBkZXNjLCByZWFkX2FjdG9yLCBOVUxMKTtcXG5uZXQvdGxzL3Rsc19zdy5jLTIxODktfVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMTkxPWludCB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGUoc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjE5NC17XFxubmV0L3Rscy90bHNfc3cuYzoyMTk1OlxcdHJldHVybiBfX3Rsc19zd19yZWFkX3NvY2soc2ssIGRlc2MsIHJlYWRfYWN0b3IsIHJlY3R5cGVfYWN0b3IpO1xcbm5ldC90bHMvdGxzX3N3LmMtMjE5Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjA4LjA1OTE5NTQzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTgwMzU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGVzZSBzeW1ib2xzIHJlbGF0ZTogYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCwgYW5kIGBfX3Rsc19zd19yZWFkX3NvY2tgLiBUaGVzZSBzZWVtIHRvIGJlIGNvcmUgdG8gc29tZSBzb3J0IG9mIG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxpbmcsIHByb2JhYmx5IFRDUCBhbmQgbGlrZWx5IGludm9sdmluZyBUTFMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGVuYWJsaW5nIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgU1VOUlBDYCBhbmQgYFRMU2AuIElzIGBTVU5SUENgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgYW0gSSBnb2luZyB0byBuZWVkIHNvbWV0aGluZyBtb3JlLCBwZXJoYXBzIGEgZGVidWcgb3B0aW9uIGxpa2UgYFNVTlJQQ19ERUJVR2A/IFVzdWFsbHksIHBsYWluIGBTVU5SUENgIGlzIGVub3VnaCB0byBlbmFibGUgc3RhbmRhcmQgUlBDIGZ1bmN0aW9uYWxpdHksIGJ1dCBJIGNhbid0IGFzc3VtZSB0aGF0IHdpdGhvdXQgY2hlY2tpbmcuIEFoLCB0aGUgcGxvdCB0aGlja2Vucy4uLiBgU1VOUlBDYCBpcyBhICp0cmlzdGF0ZSogY29uZmlnLCBzbyBJIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsLlxuXG5UaW1lIHRvIGRpdmUgaW50byBgbmV0L3N1bnJwYy9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYFNVTlJQQ2AgaW50ZXJhY3RzIHdpdGggdGhlc2UgVExTLXJlbGF0ZWQgc3ltYm9scy4gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNzAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDU6MTEuOTE3MjM2Njk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDc5NzA4NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXFxubmV0L3N1bnJwYy9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzo2OmNvbmZpZyBTVU5SUENfR1NTXFxubmV0L3N1bnJwYy9LY29uZmlnLTctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTE6Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cXHRib29sXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMTQtXFxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNi1cXHRib29sXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzozNjpjb25maWcgU1VOUlBDX0RFQlVHXFxubmV0L3N1bnJwYy9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIlJQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTQ5LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzo1MDpjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXFxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlJQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXFxcIlxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTYzLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02NS1cXHR0cmlzdGF0ZSBcXFwiUlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjEzLjc2NTIxNTk1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjI3ODg2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGZvciBSUEMtb3Zlci1UTFMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgU1VOUlBDYCBpcyBmdW5kYW1lbnRhbCB0byBORlMgYW5kIGBORlNEYCBvcGVyYXRpb24uIFRoYXQncyB0aGUgYmFzZWxpbmUuIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHNlY3VyaXR5LiBHaXZlbiB0aGUgbmF0dXJlIG9mIG15IHdvcmssIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBpcyBhIGNvbmZpZyBpbiBwbGFjZSBmb3IgUlBDIG92ZXIgVExTLiBJdCdzIGEga2V5IHNlY3VyaXR5IG1lYXN1cmUgdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSB0aGF0IFRMUyBpcyBwcm9wZXJseSBzZXQgdXAgZm9yIFJQQy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNToxNi40MjgwMDgyNzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzU2NjIzMTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSUENfVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMjowNToxOC4zMDM2OTAzNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNjg0Nzc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6XG5cbioqQ2hlY2tpbmcgZm9yIFRMUyBDb25maWd1cmF0aW9uIGluIFJQQyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBzZWUgaG93IFRMUyBpcyBjb25maWd1cmVkLCBvciBpZiBpdCdzIGV2ZW4gKmNvbnNpZGVyZWQqIGluIHRoZSBjb250ZXh0IG9mIGBuZXQvc3VucnBjYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCdzIHNlZSB3aGF0IGBuZXQvc3VucnBjL0tjb25maWdgIGhhcyB0byBzYXkuIFRoYXQncyB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBtb2R1bGUgY29uZmlndXJhdGlvbnMsIGFuZCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBhbnkgVExTIHN1cHBvcnQsIG9yIHRoZSAqcG90ZW50aWFsKiBmb3IgVExTLCB3aWxsIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBhIEtjb25maWcgb3B0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZmxhZ3MgcmVsYXRpbmcgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIFRMUywgcG90ZW50aWFsbHkgZGVwZW5kZW50IG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIChsaWtlIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgbGlicmFyaWVzKSwgYW5kIG1heWJlIGV2ZW4gb3B0aW9ucyBmb3Igc2VsZWN0aW5nIGJldHdlZW4gZGlmZmVyZW50IFRMUyBpbXBsZW1lbnRhdGlvbnMgaWYgbXVsdGlwbGUgYXJlIHN1cHBvcnRlZCB3aXRoaW4gdGhpcyBSUEMgc3Vic3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gYW55IFRMUyBvcHRpb25zIEkgZmluZCBhbmQgb3RoZXIgUlBDIGZ1bmN0aW9uYWxpdGllcy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM2NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjIxLjQ0MDU0Mjk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU4ODY0NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDU6MjEuNTA0MTQyNTY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Njc4NTkzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgYm90aCBgU1VOUlBDYCBhbmQgYFRMU2AuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudHMgZm9yIHRoaXMgc2V0dXAuIE5vdywgbGV0J3MganVzdCBjbGFyaWZ54oCmIHJpZ2h0LCBgVExTYCBpcyBhY3R1YWxseSBoYW5kbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYGNvbmZpZyBUTFNgLiBHb3QgaXQuIEp1c3QgZG91YmxlLWNoZWNraW5nIHRvIGtlZXAgZXZlcnl0aGluZyBzdHJhaWdodCBpbiBteSBoZWFkLiBObyBzdXJwcmlzZXMsIGp1c3QgdGhlIGV4cGVjdGVkIGJhc2VsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzMCwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjI0LjQ3MjAwNzA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTc2MjcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL0tjb25maWc9ODczPWNvbmZpZyBIQVJERU5fQlJBTkNIX0hJU1RPUllcXG4tLVxcbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxcbmFyY2gvYXJtL21tL0tjb25maWc6ODgzOmNvbmZpZyBUTFNfUkVHX0VNVUxcXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cXHRib29sXFxuLS1cXG5uZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjI2LjM4Mzc3NzU2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTYwMjAwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCdzIFNjb3BlIGFuZCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIFRMUywgYXMgc3VzcGVjdGVkLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0LiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWNzLiBUaGUgbW9kaWZpY2F0aW9ucyBoaXQgYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBhbmQgYG5ldC90bHMvdGxzX3N3LmNgLiBUaGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgc2VlbSB0byBiZSBgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgLCBhbmQgYF9fdGxzX3N3X3JlYWRfc29ja2AuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBleHBvcnRlZCBhcyBpbnRlbmRlZC4gYHN2Y190Y3BfcmVjdl9hY3RvcmAgaXMgc3RhdGljLCBnb29kLiBTYW1lIGdvZXMgZm9yIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBhbmQgYF9fdGxzX3N3X3JlYWRfc29ja2AuIEFuZCB5ZXMsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgIGlzIGluIGBuZXQvdGxzL3Rsc19zdy5jYCwgY29uZmlybWluZyBpdCdzIGV4cG9ydGVkLlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgYWxzbyBhZGQgYHN2Y190Y3BfcmVjdmZyb21gIHRvIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgc2luY2UgdGhhdCdzIGJlZW4gbW9kaWZpZWQgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIGltcG9ydGFudCBmb3IgbXkgYW5hbHlzaXMuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKndoeSouIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJlYWRfc29ja19yZWN0eXBlYCBjYWxsYmFjayB3aXRoaW4gdGhlIGBwcm90b19vcHNgLCBhbGxvd2luZyB0aGUgcmVhZGluZyBvZiBub24tZGF0YSBUTFMgcmVjb3JkcyBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2UgYWxlcnRzIGFuZCBoYW5kc2hha2UgbWVzc2FnZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGgsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBfX3Rsc19zd19yZWFkX3NvY2tgIGFuZCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYC4gVGhlIHBhdGNoIHRoZW4gdXNlcyB0aGlzIGluIHRoZSBTVU5SUEMgc2VydmVyIFRDUCBzb2NrZXQgY29kZSwgd2l0aCBmdW5jdGlvbnMgYHN2Y190Y3BfcmVjdl9hY3RvcmAsIGBzdmNfdGNwX3JlY3R5cGVfYWN0b3JgLCBhbmQgYHN2Y190Y3BfcmVjdmZyb21gLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSXQncyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aG9yb3VnaGx5IGZ1enplZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gd2F0Y2ggZm9yIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnZXQgZGljZXkuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJJ3ZlIGdvdCBgVExTYCBjb25maXJtZWQuIFNVTlJQQyBpcyBhbHNvIHByZXNlbnQuIEFoLCByaWdodCwgYFNVTlJQQ2AgaXMgdHJpc3RhdGUsIHNlbGVjdGVkIGJ5IGBORlNfRlNgIGFuZCBgTkZTRGAuIERpcmVjdCBjb25maWd1cmF0aW9uIGlzbid0IGF2YWlsYWJsZS4gRW5hYmxpbmcgaXQgaW1wbGljaXRseSByZXF1aXJlcyBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2UuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCdzIGxpa2VseSB0aGF0IGBORlNEYCBpcyB0aGUgbW9yZSByZWxldmFudCBvbmUgZm9yIG15IGFuYWx5c2lzLiBJJ2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBmcy9uZnNkL0tjb25maWdgIHRvIGNvbmZpcm0gYW55IGRlcGVuZGVuY2llcyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIuXG5cblNvLCB0byBzdW1tYXJpemUgbXkgZm9jdXNlZCBzeW1ib2xzIGFyZTpcbi0gYHN2Y190Y3BfcmVjdl9hY3RvcmBcbi0gYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmBcbi0gYHN2Y190Y3BfcmVjdmZyb21gXG4tIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgXG4tIGBfX3Rsc19zd19yZWFkX3NvY2tgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjM1LjM0Mzk4MjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE0NDI2NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0zOS1cXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01MC1cXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctOTMtXFxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctOTUtXFx0Ym9vbFxcbmZzL25mc2QvS2NvbmZpZy05Ni1cXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEyMy1cXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE0MC1cXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXFxuZnMvbmZzZC9LY29uZmlnLTE0Mi1cXHRib29sIFxcXCJORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTYzLVxcbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xcbmZzL25mc2QvS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjI6MDU6MzcuMjU4NDE5MzM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTk1NDQ1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgRW5oYW5jZWQgU2VjdXJpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHRoaXMgYHJlYWRfc29ja19yZWN0eXBlYCBjYWxsYmFjayBmb3Igbm9uLWRhdGEgVExTIHJlY29yZHMsIGlzIHByb3Blcmx5IGludGVncmF0ZWQgYW5kIHRlc3RlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYWRkIGBORlNEYCB0byB0aGUgY29uZmlndXJhdGlvbnMsIHNpbmNlIHRoYXQncyBhIGtleSBjb21wb25lbnQsIGFuZCB0aGVuIG9mIGNvdXJzZSBJIG5lZWQgYFRMU2AgZW5hYmxlZC4gVGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGJ1dCBsZXQncyBqdXN0IG1ha2Ugc3VyZS5cblxuSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgbmV0L3Rscy9LY29uZmlnYCB0byBjb25maXJtIHRoZSBgY29uZmlnIFRMU2AgcHJvbXB0IGlzIHByZXNlbnQuIFllcywgaXQgaXMuIEV4Y2VsbGVudC4gTm93LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlciwgSSBoYXZlIG15IGVuYWJsZW1lbnQgY29uZmlnIGxpc3Qgd2hpY2ggaXM6IGBbXCJORlNEXCIsIFwiVExTXCJdYC5cblxuSSBhbHNvIGhhdmUgaWRlbnRpZmllZCB0aGVzZSB2ZXJ5IHJlbGV2YW50IHN5bWJvbHMgd2hpY2ggSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uOiBgW1wic3ZjX3RjcF9yZWN2X2FjdG9yXCIsIFwic3ZjX3RjcF9yZWN0eXBlX2FjdG9yXCIsIFwic3ZjX3RjcF9yZWN2ZnJvbVwiLCBcInRsc19zd19yZWFkX3NvY2tfcmVjdHlwZVwiLCBcIl9fdGxzX3N3X3JlYWRfc29ja1wiXWAuIFRoZXNlIGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgbmV3IGByZWFkX3NvY2tfcmVjdHlwZWAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCBhbmQgdGhlIGludGVncmF0aW9uIGludG8gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlLiBUaGUgYHJlYWRfc29ja19yZWN0eXBlYCBjYWxsYmFjayBhbGxvd3MgZGlyZWN0IHJlYWRpbmcgb2Ygbm9uLWRhdGEgVExTIHJlY29yZHMgZGlyZWN0bHkgZnJvbSB0aGUgc29ja2V0IGFuZCB0aGlzIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgb24gY29yZSBuZXR3b3JraW5nIGFuZCBSUEMgY29kZS5cblxuR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIGludHJvZHVjaW5nIGEgbmV3IHByb3RvX29wcyBjYWxsYmFjaywgSSBiZWxpZXZlIHRoYXQgdGhpcyBhYnNvbHV0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBnb2FsIGhlcmUgaXMgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgaW4gdGhlIFRMUyByZWNvcmQgcGFyc2luZyBhbmQgUlBDIG1lc3NhZ2UgYXNzZW1ibHkgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy5cblxuSSdtIHJlYWR5IHRvIGNvbW1pdCB0byBmdXp6aW5nIHRoaXMuIExldCdzIGNhbGwgdGhlIHNldC1yZXN1bHRzIGZ1bmN0aW9uIGFuZCBnZXQgdGhlIGJhbGwgcm9sbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNDgsIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIyOjA1OjQzLjcxNzk2OTAxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTgzMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCIsXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfdGNwX3JlY3ZfYWN0b3JcIixcbiAgICBcInN2Y190Y3BfcmVjdHlwZV9hY3RvclwiLFxuICAgIFwic3ZjX3RjcF9yZWN2ZnJvbVwiLFxuICAgIFwidGxzX3N3X3JlYWRfc29ja19yZWN0eXBlXCIsXG4gICAgXCJfX3Rsc19zd19yZWFkX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHByb3RvX29wcyBjYWxsYmFjayBgcmVhZF9zb2NrX3JlY3R5cGVgIHRvIGFsbG93IHJlYWRpbmcgbm9uLWRhdGEgVExTIHJlY29yZHMgKGxpa2UgYWxlcnRzIGFuZCBoYW5kc2hha2UgbWVzc2FnZXMpIGRpcmVjdGx5IGZyb20gdGhlIHNvY2tldC4gSXQgaW1wbGVtZW50cyB0aGlzIGluIHRoZSBUTFMgc29mdHdhcmUgcGF0aCAoYF9fdGxzX3N3X3JlYWRfc29ja2AsIGB0bHNfc3dfcmVhZF9zb2NrX3JlY3R5cGVgKSBhbmQgdXNlcyBpdCBpbiB0aGUgU1VOUlBDIHNlcnZlciBUQ1Agc29ja2V0IGNvZGUgKGBzdmNfdGNwX3JlY3ZfYWN0b3JgLCBgc3ZjX3RjcF9yZWN0eXBlX2FjdG9yYCwgYHN2Y190Y3BfcmVjdmZyb21gKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgUlBDIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQgaW4gdGhlIFRMUyByZWNvcmQgcGFyc2luZyBhbmQgUlBDIG1lc3NhZ2UgYXNzZW1ibHkgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZTRFwiLFxuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX3RjcF9yZWN2X2FjdG9yXCIsXG4gICAgXCJzdmNfdGNwX3JlY3R5cGVfYWN0b3JcIixcbiAgICBcInN2Y190Y3BfcmVjdmZyb21cIixcbiAgICBcInRsc19zd19yZWFkX3NvY2tfcmVjdHlwZVwiLFxuICAgIFwiX190bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwcm90b19vcHMgY2FsbGJhY2sgYHJlYWRfc29ja19yZWN0eXBlYCB0byBhbGxvdyByZWFkaW5nIG5vbi1kYXRhIFRMUyByZWNvcmRzIChsaWtlIGFsZXJ0cyBhbmQgaGFuZHNoYWtlIG1lc3NhZ2VzKSBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuIEl0IGltcGxlbWVudHMgdGhpcyBpbiB0aGUgVExTIHNvZnR3YXJlIHBhdGggKGBfX3Rsc19zd19yZWFkX3NvY2tgLCBgdGxzX3N3X3JlYWRfc29ja19yZWN0eXBlYCkgYW5kIHVzZXMgaXQgaW4gdGhlIFNVTlJQQyBzZXJ2ZXIgVENQIHNvY2tldCBjb2RlIChgc3ZjX3RjcF9yZWN2X2FjdG9yYCwgYHN2Y190Y3BfcmVjdHlwZV9hY3RvcmAsIGBzdmNfdGNwX3JlY3Zmcm9tYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFJQQyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBUTFMgcmVjb3JkIHBhcnNpbmcgYW5kIFJQQyBtZXNzYWdlIGFzc2VtYmx5IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[1] Phase: Succeeded StartedAt: 2026-07-20 22:05:56 +0000 UTC FinishedAt: 2026-07-20 22:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 22:05:56 +0000 UTC FinishedAt: 2026-07-20 22:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2] Phase: Succeeded StartedAt: 2026-07-20 22:05:56 +0000 UTC FinishedAt: 2026-07-21 02:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 22:05:56 +0000 UTC FinishedAt: 2026-07-21 02:39:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 22:05:56 +0000 UTC FinishedAt: 2026-07-20 22:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 22:05:56 +0000 UTC FinishedAt: 2026-07-20 22:06:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh69cj/series-workflowh69cj-convert-artifact-44143746/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 22:06:06 +0000 UTC FinishedAt: 2026-07-20 22:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 22:06:06 +0000 UTC FinishedAt: 2026-07-20 22:49:12 +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:*dfb59e98-591f-4dc4-8ea4-a8c6330b44e9,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-workflowh69cj/series-workflowh69cj-convert-artifact-44143746/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": "fa34d6c0-4583-4e50-aacc-00633a54eb31", "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-workflowh69cj/series-workflowh69cj-build-action-1719739200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 22:06:06 +0000 UTC FinishedAt: 2026-07-20 22:49:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dfb59e98-591f-4dc4-8ea4-a8c6330b44e9,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-workflowh69cj/series-workflowh69cj-convert-artifact-44143746/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": "fa34d6c0-4583-4e50-aacc-00633a54eb31", "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-workflowh69cj/series-workflowh69cj-build-action-1719739200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 22:49:12 +0000 UTC FinishedAt: 2026-07-20 22:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 22:49:12 +0000 UTC FinishedAt: 2026-07-20 22:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 22:49:12 +0000 UTC FinishedAt: 2026-07-20 22:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 22:49:12 +0000 UTC FinishedAt: 2026-07-20 22:49:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh69cj/series-workflowh69cj-convert-artifact-1688332765/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 22:49:22 +0000 UTC FinishedAt: 2026-07-20 22:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 22:49:22 +0000 UTC FinishedAt: 2026-07-20 22:51:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa34d6c0-4583-4e50-aacc-00633a54eb31,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-workflowh69cj/series-workflowh69cj-build-action-1719739200/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-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 22:51:22 +0000 UTC FinishedAt: 2026-07-20 22:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 22:51:22 +0000 UTC FinishedAt: 2026-07-20 22:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 22:51:22 +0000 UTC FinishedAt: 2026-07-20 23:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 22:51:22 +0000 UTC FinishedAt: 2026-07-20 23:35:50 +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:*dfb59e98-591f-4dc4-8ea4-a8c6330b44e9,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-workflowh69cj/series-workflowh69cj-convert-artifact-1688332765/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": "3beeca38-125f-40af-ba0e-05f627b891a2", "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-workflowh69cj/series-workflowh69cj-build-action-2415340217/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 22:51:22 +0000 UTC FinishedAt: 2026-07-20 23:35:40 +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:*dfb59e98-591f-4dc4-8ea4-a8c6330b44e9,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-workflowh69cj/series-workflowh69cj-convert-artifact-1688332765/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": "3beeca38-125f-40af-ba0e-05f627b891a2", "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-workflowh69cj/series-workflowh69cj-build-action-2415340217/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 23:35:50 +0000 UTC FinishedAt: 2026-07-20 23:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 23:35:50 +0000 UTC FinishedAt: 2026-07-20 23:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 23:35:50 +0000 UTC FinishedAt: 2026-07-20 23:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 23:35:50 +0000 UTC FinishedAt: 2026-07-20 23:37:46 +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:*3beeca38-125f-40af-ba0e-05f627b891a2,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-workflowh69cj/series-workflowh69cj-build-action-2415340217/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-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 23:37:58 +0000 UTC FinishedAt: 2026-07-21 02:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 23:37:58 +0000 UTC FinishedAt: 2026-07-21 02:39:51 +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":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"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:*fa34d6c0-4583-4e50-aacc-00633a54eb31,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3beeca38-125f-40af-ba0e-05f627b891a2,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-workflowh69cj/series-workflowh69cj-build-action-1719739200/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-workflowh69cj/series-workflowh69cj-build-action-2415340217/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 23:37:58 +0000 UTC FinishedAt: 2026-07-20 23:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 23:37:58 +0000 UTC FinishedAt: 2026-07-20 23:38:02 +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":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"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-workflowh69cj/series-workflowh69cj-convert-artifact-4049996642/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 23:37:58 +0000 UTC FinishedAt: 2026-07-20 23:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 23:37:58 +0000 UTC FinishedAt: 2026-07-20 23:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 23:37:58 +0000 UTC FinishedAt: 2026-07-20 23:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 23:38:08 +0000 UTC FinishedAt: 2026-07-21 02:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_tcp_recv_actor","svc_tcp_rectype_actor","svc_tcp_recvfrom","tls_sw_read_sock_rectype","__tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD","TLS"],"series_id":"33a8b962-17d1-41ff-bdc9-8a5ea1c08524","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 23:38:08 +0000 UTC FinishedAt: 2026-07-21 02:39:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa34d6c0-4583-4e50-aacc-00633a54eb31,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3beeca38-125f-40af-ba0e-05f627b891a2,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-workflowh69cj/series-workflowh69cj-build-action-1719739200/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-workflowh69cj/series-workflowh69cj-build-action-2415340217/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-workflowh69cj/series-workflowh69cj-convert-artifact-4049996642/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,}