Name: series-workflow7kmh4 Phase: Succeeded StartedAt: 2026-08-08 10:06:58 +0000 UTC FinishedAt: 2026-08-08 13:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[0] Phase: Succeeded StartedAt: 2026-08-08 10:06:58 +0000 UTC FinishedAt: 2026-08-08 10:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 10:06:58 +0000 UTC FinishedAt: 2026-08-08 10:14:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS" ], "series_id": "4ec30de1-909a-4c42-82a9-71f1db2fccac" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ceph_con_v1_try_read", "ceph_con_v2_try_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjA5OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbmluZGV4IGM5ZTAwMmQ5NjMxOTAuLmRmMjI0OGI3YjAyNjUgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbkBAIC04OTgsOCAmIzQzOzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcbiBcdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLFxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9XG4tXHRcdFx0bGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4mIzQzO1x0XHRpZiAoY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuJiM0MztcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0XHQgICAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxuJiM0MztcdFx0XHQgICAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4mIzQzO1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtjb25uZWN0X3NlcSBtaXNtYXRjaFwmIzM0OztcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoY29uLVx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxuIFx0XHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi45NjZhNWY4MDBjNjBmIDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5AQCAtMjIzNyw5ICYjNDM7MjIzNywxNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaGVsbG8oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4gXHRcdCAgICAgX19mdW5jX18sIGNvbiwgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbiBcdH1cbiBcbi1cdFdBUk5fT04oY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpKTtcbi1cdFdBUk5fT04obXlfYWRkci1cdTAwM2V0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkpO1xuLVx0V0FSTl9PTighbXlfYWRkci1cdTAwM2Vub25jZSk7XG4mIzQzO1x0aWYgKGNlcGhfYWRkcl9pc19ibGFuayhteV9hZGRyKSB8fCBjZXBoX2FkZHJfcG9ydChteV9hZGRyKSB8fFxuJiM0MztcdCAgICBteV9hZGRyLVx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSB8fFxuJiM0MztcdCAgICAhbXlfYWRkci1cdTAwM2Vub25jZSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBiYWQgbXlfYWRkciAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbiYjNDM7XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtiYWQgbXlfYWRkclwmIzM0OztcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdC8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqL1xuIFx0cmV0ID0gcHJlcGFyZV9hdXRoX3JlcXVlc3QoY29uKTtcbkBAIC0yNTI5LDE0ICYjNDM7MjUzNiwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRpZiAocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlciYjMzk7cyByZXF1aXJlZCAweCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDttaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUgPSBjb29raWU7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHtcbiBcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKTtcbiYjNDM7XHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuJiM0MztcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cJiMzNDs7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuJiM0MztcdFx0aWYgKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuJiM0MztcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbiYjNDM7XHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwmIzM0OztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICYjNDM7MjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbiYjNDM7XHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbiYjNDM7XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4mIzQzO1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2hcJiMzNDs7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgJiM0MzsyNjg0LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgZ2xvYmFsX3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwmIzM0OywgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4mIzQzO1x0aWYgKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxLCBnbG9iYWxfc2VxKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtnbG9iYWxfc2VxIG1pc21hdGNoXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjA5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYwppbmRleCBjOWUwMDJkOTYzMTkwLi5kZjIyNDhiN2IwMjY1IDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYwpAQCAtODk4LDggJiM0Mzs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKQogCQkgICAgIGNvbi0mZ3Q7djEucGVlcl9nbG9iYWxfc2VxLAogCQkgICAgIGxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLAogCQkgICAgIGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEpOwotCQlXQVJOX09OKGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEgIT0KLQkJCWxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTsKJiM0MzsJCWlmIChjb24tJmd0O3YxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XG4mIzM0OywKJiM0MzsJCQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkJICAgICAgIGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEsCiYjNDM7CQkJICAgICAgIGxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTsKJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiAKIAkJaWYgKGNvbi0mZ3Q7djEuaW5fcmVwbHkuZmxhZ3MgJmFtcDsgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkKIAkJCWNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTsKZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMKaW5kZXggMDVmNmVlYTI5OWZjMC4uOTY2YTVmODAwYzYwZiAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMKQEAgLTIyMzcsOSAmIzQzOzIyMzcsMTYgQEAgc3RhdGljIGludCBwcm9jZXNzX2hlbGxvKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKQogCQkgICAgIF9fZnVuY19fLCBjb24sIGNlcGhfcHJfYWRkcihteV9hZGRyKSk7CiAJfQogCi0JV0FSTl9PTihjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikpOwotCVdBUk5fT04obXlfYWRkci0mZ3Q7dHlwZSAhPSBDRVBIX0VOVElUWV9BRERSX1RZUEVfQU5ZKTsKLQlXQVJOX09OKCFteV9hZGRyLSZndDtub25jZSk7CiYjNDM7CWlmIChjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikgfHwKJiM0MzsJICAgIG15X2FkZHItJmd0O3R5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSB8fAomIzQzOwkgICAgIW15X2FkZHItJmd0O25vbmNlKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgYmFkIG15X2FkZHIgJXNcbiYjMzQ7LAomIzQzOwkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTsKJiM0MzsJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtiYWQgbXlfYWRkciYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAogCS8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqLwogCXJldCA9IHByZXBhcmVfYXV0aF9yZXF1ZXN0KGNvbik7CkBAIC0yNTI5LDE0ICYjNDM7MjUzNiwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljb24tJmd0O3BlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpOwogCWNvbi0mZ3Q7djIucGVlcl9nbG9iYWxfc2VxID0gZ2xvYmFsX3NlcTsKIAljb24tJmd0O3BlZXJfZmVhdHVyZXMgPSBmZWF0dXJlczsKLQlXQVJOX09OKHJlcXVpcmVkX2ZlYXR1cmVzICZhbXA7IH5jbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcyk7CiYjNDM7CWlmIChyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBteSBzdXBwb3J0ZWQgMHglbGx4LCBzZXJ2ZXImIzM5O3MgcmVxdWlyZWQgMHglbGx4XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7bWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcyYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLnNlcnZlcl9jb29raWUgPSBjb29raWU7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkgewogCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7Ci0JCVdBUk5fT04oY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmIChjb24tJmd0O3YyLnNlcnZlcl9jb29raWUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfSBlbHNlIHsKLQkJV0FSTl9PTighY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmICghY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpKTsKJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCiAJY2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pOwpAQCAtMjYxOCw3ICYjNDM7MjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY2VwaF9kZWNvZGVfNjRfc2FmZSgmYW1wO3AsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7Ci0JV0FSTl9PTihjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKTsKJiM0MzsJaWYgKGNvbm5lY3Rfc2VxICZsdDs9IGNvbi0mZ3Q7djIuY29ubmVjdF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5jb25uZWN0X3NlcSA9IGNvbm5lY3Rfc2VxICYjNDM7IDE7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwpAQCAtMjY1MSw3ICYjNDM7MjY4NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxuJiMzNDssIF9fZnVuY19fLCBjb24sIGdsb2JhbF9zZXEpOwotCVdBUk5fT04oZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpOwomIzQzOwlpZiAoZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAmZ3Q7ICVsbHUsIGdvdCAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNvbi0mZ3Q7djIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Z2xvYmFsX3NlcSBtaXNtYXRjaCYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi0mZ3Q7bXNnciwgZ2xvYmFsX3NlcSk7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENlcGggTWVzc2VuZ2VyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBoaXR0aW5nIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgYSBjcml0aWNhbCBjaGFuZ2U7IHRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCBgV0FSTl9PTmAgZm9yIHByb3BlciBlcnJvciBoYW5kbGluZy4gVGhhdCBtZWFucyBpbnN0ZWFkIG9mIGp1c3QgbG9nZ2luZyBhIHdhcm5pbmcgYW5kIGxldHRpbmcgdGhpbmdzIGtlZXAgZ29pbmcsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm93IHJldHVybmluZyBlcnJvciBjb2RlcyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIGFuZCBzZXR0aW5nIGBjb24tJmd0O2Vycm9yX21zZ2AsIGVmZmVjdGl2ZWx5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgYXQgdGhhdC4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgKndoaWNoKiBmdW5jdGlvbnMgYXJlIGJlaW5nIHRvdWNoZWQuIEkgc2VlIGBwcm9jZXNzX2Nvbm5lY3RgIGluIG1lc3NlbmdlciB2MSwgYW5kIHRoZW4gaW4gdjIsIHdlJiMzOTt2ZSBnb3QgYHByb2Nlc3NfaGVsbG9gLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgY29yZSB0byB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wuIENlcGgsIG9mIGNvdXJzZSwgYmVpbmcgdGhhdCBkaXN0cmlidXRlZCBuZXR3b3JrIGZpbGUgc3lzdGVtIGFuZCBibG9jayBkZXZpY2UgcHJvdG9jb2wuCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gQ2VwaCBjYW4gYmUgbW91bnRlZCBvciBpbnRlcmFjdGVkIHdpdGggb3ZlciB0aGUgbmV0d29yaywgZXZlbiBqdXN0IHVzaW5nIGxvb3BiYWNrLiBUaGlzIG1ha2VzIGl0IHN1cGVyIHJlbGV2YW50IHRvIHRlc3RpbmcuIFdoaWNoIGJyaW5ncyB1cyB0byB0aGUgbmV4dCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBhbmQgZmlsZXN5c3RlbSBwcm90b2NvbCBwYXJzaW5nIGxvZ2ljLCBhIHJlc291bmRpbmcgKnllcyouIEFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zLgoKU28sIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgd2UgbmVlZCB0byBidWlsZCBhbmQgdGVzdCB0aGlzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWdzIGluIGBuZXQvY2VwaC9gLiBJdCYjMzk7cyB1c3VhbGx5IGNvbnRyb2xsZWQgYnkgYENPTkZJR19DRVBIX0xJQmAuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gZWl0aGVyIGBuZXQvY2VwaC9LY29uZmlnYCBvciBwb3NzaWJseSBgZnMvY2VwaC9LY29uZmlnYCB0byBwaW4gZG93biB0aG9zZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENFUEhfTElCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcbm5ldC9jZXBoL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NlcGggY29yZSBsaWJyYXJ5XCYjMzQ7XG4tLVxubmV0L2NlcGgvS2NvbmZpZy0yMi1cbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXG5uZXQvY2VwaC9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9jZXBoL0tjb25maWctMzQtXG5uZXQvY2VwaC9LY29uZmlnOjM1OmNvbmZpZyBDRVBIX0xJQl9VU0VfRE5TX1JFU09MVkVSXG5uZXQvY2VwaC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBzdWJqZWN0OgoKKipDb25zaWRlcmluZyBDRVBIIExpYnJhcnkgT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyB3ZSYjMzk7cmUgZ29pbmcgdG8gYXBwcm9hY2ggdGhpcywgaXQgbG9va3MgbGlrZSBgQ0VQSF9MSUJgIGlzIGFic29sdXRlbHkgdGhlIGNlbnRyYWwgbGlicmFyeSB0byBmb2N1cyBvbi4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7bGwgYmUgYnVpbGRpbmcgb24sIG5vIHF1ZXN0aW9uLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyBpdHMgY2FwYWJpbGl0aWVzIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMuCgpBbmQgdGhpbmtpbmcgYnJvYWRlciwgSSBzaG91bGQgYWxzbyBjb25zaWRlciB3aGV0aGVyIGVuYWJsaW5nIGBDRVBIX0ZTYCBtaWdodCBicmluZyBzb21lIGltbWVkaWF0ZSBhZHZhbnRhZ2VzLCBvciBiZSBhIHVzZWZ1bCBwYXRoIGRvd24gdGhlIHJvYWQsIGlmIHdlJiMzOTtyZSBsb29raW5nIHRvIGVuYWJsZSBhIHBhcnRpY3VsYXIgZmVhdHVyZSBzZXQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpdmUgaW4gZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRVBIX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY2VwaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xuZnMvY2VwaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZzoyMDpjb25maWcgQ0VQSF9GU0NBQ0hFXG5mcy9jZXBoL0tjb25maWctMjEtXHRib29sIFwmIzM0O0VuYWJsZSBDZXBoIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWc9Mjc9ZW5kaWZcbmZzL2NlcGgvS2NvbmZpZy0yOC1cbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcbmZzL2NlcGgvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7Q2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZy0zOC1cbmZzL2NlcGgvS2NvbmZpZzozOTpjb25maWcgQ0VQSF9GU19TRUNVUklUWV9MQUJFTFxuZnMvY2VwaC9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtDZXBoRlMgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENlcGggTWVzc2VuZ2VyIEVycm9yIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhIGdvb2QgbW92ZS4gUmVwbGFjaW5nIGBXQVJOX09OYCB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIG5vdCBqdXN0IGEgY29zbWV0aWMgdGhpbmc7IGl0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3csIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBQcmV2aW91c2x5LCBhIHdhcm5pbmcgbWlnaHQgaGF2ZSBtYXNrZWQgYSBkZWVwZXIgcHJvYmxlbSwgbGVhZGluZyB0byBwb3RlbnRpYWwgaW5zdGFiaWxpdHkgb3IgY3Jhc2hlcyBkb3duIHRoZSBsaW5lLiBSZXR1cm5pbmcgYW4gZXJyb3IgYWxsb3dzIGZvciBtb3JlIHJvYnVzdCBlcnJvciBwcm9wYWdhdGlvbiBhbmQgaGFuZGxpbmcgaGlnaGVyIHVwIHRoZSBjYWxsIHN0YWNrLCB3aGljaCBpcyBjcml0aWNhbCBpbiBhIGRpc3RyaWJ1dGVkIHN5c3RlbSBsaWtlIENlcGguCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBhZmZlY3RzIGBwcm9jZXNzX2Nvbm5lY3RgIGluIHRoZSB2MSBtZXNzZW5nZXIsIGFuZCBgcHJvY2Vzc19oZWxsb2AsIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgIGluIHRoZSB2MiBtZXNzZW5nZXIuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgdGhlIGhlYXJ0IG9mIHRoZSBDZXBoIG5ldHdvcmsgbWVzc2VuZ2VyIHByb3RvY29sIGltcGxlbWVudGF0aW9ucywgaGFuZGxpbmcgaW5jb21pbmcgbWVzc2FnZXMuIEdpdmVuIHRoZWlyIHJvbGUgaW4gcGFyc2luZyBuZXR3b3JrIGlucHV0LCBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbmNyZWRpYmx5IHJlbGV2YW50LiBUaGlzIGNoYW5nZSB3b3VsZCBpbmZsdWVuY2UgdGhlIGZ1enppbmcgc3RyYXRlZ3kgYmVjYXVzZSBwcmV2aW91c2x5LCBhbiBlcnJvciBkdXJpbmcgZnV6emluZyBtYXkgaGF2ZSBjYXVzZWQgYSBgV0FSTl9PTmAgdG8gYmUgZmlyZWQgYW5kIHRoZW4gYWxsb3dlZCB0aGUgY29kZSB0byBjb250aW51ZS4gTm93IHdlIGV4cGVjdCBlcnJvcnMgdG8gY2F1c2UgdGhlIG1lc3NhZ2UgdG8gYmUgZHJvcHBlZCBvciByZWplY3RlZCwgbWFraW5nIHRlc3RpbmcgbGVzcyBmb3JnaXZpbmcuCgpOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBwcm9jZXNzX2Nvbm5lY3RgIGluIHYxIGlzIGNhbGxlZCBmcm9tIGByZWFkX3BhcnRpYWxfY29ubmVjdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHNvIHRoYXQgc2hvdWxkIGJlIGFjY2Vzc2libGUuIFRoZSB2MiBmdW5jdGlvbnPigJRgcHJvY2Vzc19oZWxsb2AsIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxg4oCUYXJlIGNhbGxlZCBmcm9tIHRoZSB2MiBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIHRoZXkmIzM5O3JlIGFjdGl2ZWx5IHVzZWQgaW4gdGhlIHN5c3RlbS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgb3B0aW9ucyBub3cuIGBDRVBIX0xJQmAgaXMgb2J2aW91c2x5IHRoZSBjb3JlIGxpYnJhcnkgd2UgbmVlZC4gVG8gZW5zdXJlIHRoZSBjb2RlIGluIGBuZXQvY2VwaC9gIGlzIGNvbXBpbGVkLCBgQ0VQSF9MSUJgIGlzIHN1ZmZpY2llbnQsIGJ1dCB0byAqdXNlKiB0aGF0IGNvZGUsIHdlIHdvdWxkIG1vc3QgbGlrZWx5IG5lZWQgZWl0aGVyIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgLiBJZiB3ZSYjMzk7cmUgdGVzdGluZyB0aGVzZSBtZXNzZW5nZXIgZnVuY3Rpb25zLCBlbmFibGluZyBgQ0VQSF9MSUJgIGFsb25nIHdpdGggZWl0aGVyIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgIHdvdWxkIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGxpa2VseSB1c2VkIHdpdGhpbiBvdXIgdGVzdCBzZXR1cC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjb2RlLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYCwgdG8gZ2V0IGEgcHJlY2lzZSBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCBob3cgaXQmIzM5O2xsIGFmZmVjdCB0aGUgZnV6emluZyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz02OTc9c3RhdGljIGludCBwcm9jZXNzX2Jhbm5lcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzM5LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6NzQwOnN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTc0MS17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ2LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6NzQ3Olx0ZG91dChcJiMzNDtwcm9jZXNzX2Nvbm5lY3Qgb24gJXAgdGFnICVkXFxuXCYjMzQ7LCBjb24sIGNvbi1cdTAwM2V2MS5pbl90YWcpO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ4LVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgwMi1cdFx0Y29uLVx1MDAzZXYxLmF1dGhfcmV0cnkmIzQzOyYjNDM7O1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODAzOlx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCAlcCBnb3QgQkFEQVVUSE9SSVpFUiBhdHRlbXB0ICVkXFxuXCYjMzQ7LCBjb24sXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MDQtXHRcdCAgICAgY29uLVx1MDAzZXYxLmF1dGhfcmV0cnkpO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgyMy1cdFx0ICovXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4MjQ6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0IGdvdCBSRVNFVCBwZWVyIHNlcSAldVxcblwmIzM0Oyxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgyNS1cdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NDktXHRcdCAqL1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODUwOlx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfU0VTU0lPTiBteSBzZXEgJXUsIHBlZXIgJXVcXG5cJiMzNDssXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NTEtXHRcdCAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLm91dF9jb25uZWN0LmNvbm5lY3Rfc2VxKSxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NjUtXHRcdCAqL1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODY2Olx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfR0xPQkFMIG15ICV1IHBlZXJfZ3NlcSAldVxcblwmIzM0Oyxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg2Ny1cdFx0ICAgICBjb24tXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg5Ni1cdFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBzZXJ2ZXJfZmVhdDtcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjg5NzpcdFx0ZG91dChcJiMzNDtwcm9jZXNzX2Nvbm5lY3QgZ290IFJFQURZIGdzZXEgJWQgY3NlcSAlZCAoJWQpXFxuXCYjMzQ7LFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODk4LVx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMyOT1pbnQgY2VwaF9jb25fdjFfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzNzItXHRcdFx0Z290byBvdXQ7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzoxMzczOlx0XHRyZXQgPSBwcm9jZXNzX2Nvbm5lY3QoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzNzQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBjb25uZWN0aW9uIGJldHdlZW4gYHByb2Nlc3NfY29ubmVjdGAgYW5kIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0cmFjaW5nIHRoZSBmbG93IG9mIGV2ZW50cyB3aXRoaW4gYSBDZXBoIGNvbm5lY3Rpb24uIEkgdW5kZXJzdGFuZCBgcHJvY2Vzc19jb25uZWN0YCBpcyBsaWtlbHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgaW5pdGlhbCBoYW5kc2hha2UgYW5kIGVzdGFibGlzaG1lbnQgb2YgYSBjb25uZWN0aW9uLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgdGhlIGNsaWVudCBhbmQgT1NEIChvciBNb25pdG9yLCBvciB3aGF0ZXZlciBDZXBoIGNvbXBvbmVudCBpcyBpbnZvbHZlZCkgYWdyZWUgb24gcGFyYW1ldGVycyBhbmQgZ2V0IHRoaW5ncyBzZXQgdXAuCgpUaGVuLCB0byBzZWUgdGhhdCBgcHJvY2Vzc19jb25uZWN0YCBpcyBjYWxsZWQgKmZyb20qIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgdHJpZ2dlcnMgc29tZSBhZGRpdGlvbmFsIGFuYWx5c2lzLiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIHN1Z2dlc3RzIHRoaXMgaXMgdGhlICpyZWFkKiBwYXRoLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgb2xkZXIgdjEgY29ubmVjdGlvbiBwcm90b2NvbC4gVGhpcyBwcm9iYWJseSBtZWFucyBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB2aWEgYHByb2Nlc3NfY29ubmVjdGAsIHN1YnNlcXVlbnQgcmVhZHMgYXJlIGF0dGVtcHRpbmcgdG8gYmUgaGFuZGxlZCB1c2luZyB0aGlzIGxlZ2FjeSBwcm90b2NvbC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgYHByb2Nlc3NfY29ubmVjdGAgbWlnaHQgYmUgYmVpbmcgY2FsbGVkIHRvIGVpdGhlciBzZXQgdXAgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBiZWZvcmUgYSByZWFkLCBvciBwb3NzaWJseSBhIHJlLWVzdGFibGlzaG1lbnQgb2YgdGhlIGNvbm5lY3Rpb24gdG8gZmFjaWxpdGF0ZSB0aGUgcmVhZCwgYXMgdGhlIHJlYWQgbWlnaHQgYmUgZmFpbGluZyBvciBzdGFsZS4gVGhlIGV4YWN0IGNvbnRleHQgZGljdGF0ZXMsIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZW5zdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX2hlbGxvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjE0OD1zdGF0aWMgaW50IHByb2Nlc3NfYmFubmVyX3BheWxvYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTIxOTItXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyMTkzOnN0YXRpYyBpbnQgcHJvY2Vzc19oZWxsbyhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTIxOTQte1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI4MDE9c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgwOS1cdGNhc2UgRlJBTUVfVEFHX0hFTExPOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgxMDpcdFx0cmV0ID0gcHJvY2Vzc19oZWxsbyhjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODExLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEludGVyYWN0aW9uIEZsb3cqKgoKQWxyaWdodCwgc28gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB3aGVyZSBgcHJvY2Vzc19oZWxsb2AgaXMgaW52b2tlZCwgYW5kIHRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBpbnZvY2F0aW9uIGhhcHBlbnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBwcm9jZXNzX2NvbnRyb2xgLiBUaGlzIHRlbGxzIG1lIGEgZmV3IGltbWVkaWF0ZSB0aGluZ3MgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3Rpb24gbGlrZWx5IHVuZm9sZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHByb2Nlc3NfY29udHJvbGAgaXMgZG9pbmcgdG8gY2F1c2UgdGhlIGNhbGwgdG8gYHByb2Nlc3NfaGVsbG9gLiBJcyBgcHJvY2Vzc19oZWxsb2AgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCwgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgdmlhIHNvbWUgc29ydCBvZiBtZXNzYWdpbmcgb3IgZXZlbnQgaGFuZGxpbmcgd2l0aGluIGBwcm9jZXNzX2NvbnRyb2xgPyBUaGF0IGRldGFpbCBjaGFuZ2VzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRyYWNpbmcgZXhlY3V0aW9uLiBJIHNob3VsZCBsb29rIGludG8gdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYHByb2Nlc3NfY29udHJvbGAgaXRzZWxmLiBXaGF0IGFyZSBpdHMgaW5wdXRzPyBXaGF0IHN0YXRlIGRvZXMgaXQgbWFpbnRhaW4/IElzIGl0IGEgZmluaXRlIHN0YXRlIG1hY2hpbmUsIGEgbG9vcCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSB0eXBlIG9mIGNvbnRyb2wgZmxvdyB3aWxsIGRyYXN0aWNhbGx5IGluZmx1ZW5jZSBob3cgYHByb2Nlc3NfaGVsbG9gIGdldHMgY2FsbGVkLiBNeSBpbnN0aW5jdCBpcyB0byBkZXRlcm1pbmUgd2hhdCBjb25kaXRpb25zIG11c3QgYmUgbWV0IGZvciBgcHJvY2Vzc19oZWxsb2AgdG8gYmUgY2FsbGVkIGFuZCBob3cgZnJlcXVlbnRseSBpdCBpcyBjYWxsZWQuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBncmFzcCBvbiB0aGUgcHVycG9zZSBvZiB0aGlzIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3Nfc2VydmVyX2lkZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjQzMT1zdGF0aWMgaW50IHByb2Nlc3NfYXV0aF9zaWduYXR1cmUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI0NzgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNDc5OnN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjQ4MC1cdFx0XHRcdHZvaWQgKnAsIHZvaWQgKmVuZClcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yODAxPXN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjQtXHRjYXNlIEZSQU1FX1RBR19TRVJWRVJfSURFTlQ6XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyODI1Olx0XHRyZXQgPSBwcm9jZXNzX3NlcnZlcl9pZGVudChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODI2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZWVwIERpdmUgb24gYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBhbmQgaXRzIENvbnRleHQqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi5zbywgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBwcm9jZXNzX2NvbnRyb2xgLCB3aGljaCBtZWFucyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljLCBjb250cm9sbGVkIGZsb3cgaGFwcGVuaW5nLiBgcHJvY2Vzc19jb250cm9sYCwgaW4gbXkgZXhwZXJpZW5jZSwgbGlrZWx5IG1hbmFnZXMgYSBicm9hZGVyIHNldCBvZiBvcGVyYXRpb25zLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGhhbmRsaW5nIHJlcXVlc3RzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgb3ZlcmFsbCBzeXN0ZW0gb3JjaGVzdHJhdGlvbi4gVGhlcmVmb3JlLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxpbmcgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCB0ZWxscyBtZSBzb21ldGhpbmcgcXVpdGUgc3BlY2lmaWMgaXMgZ29pbmcgb24gd2l0aGluIHRoYXQgY29udHJvbCBmbG93LgoKSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgYSBzZXJ2ZXIgaWRlbnRpZmljYXRpb24gcHJvY2VkdXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSByZWdpc3RyYXRpb24gb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgc2VydmVyIGluc3RhbmNlLiBJdCBtaWdodCBpbnZvbHZlIHZlcmlmeWluZyB0aGUgc2VydmVyJiMzOTtzIGNyZWRlbnRpYWxzLCBmZXRjaGluZyBpdHMgY29uZmlndXJhdGlvbiwgZGV0ZXJtaW5pbmcgaXRzIHJvbGUsIG9yIHNldHRpbmcgdXAgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gVGhlIHBsYWNlbWVudCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpZGVudGlmaWNhdGlvbiBpcyBhIGNyaXRpY2FsIHN0ZXAgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRyb2wgc2NoZW1lLiBJIHdvbmRlciB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgYmVpbmcgcGFzc2VkIGludG8gYHByb2Nlc3Nfc2VydmVyX2lkZW50YC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzZXJ2ZXIgSUQsIGEga2V5LCBuZXR3b3JrIGFkZHJlc3MsIGFsbCBvZiB0aGUgYWJvdmU/CgpJdCYjMzk7cyB0ZW1wdGluZyB0byB0aGluayBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIElzIHRoaXMgYSBzeXN0ZW0gd2l0aCBtdWx0aXBsZSBzZXJ2ZXIgaW5zdGFuY2VzLCBvciBpcyBpdCBhIHNpbmdsZSwgbW9ub2xpdGhpYyBlbnRpdHk/IFRoaXMgZnVuY3Rpb24gY2FsbCBzaGVkcyBsaWdodCBvbiB0aGUgaW50ZXJuYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBhc2NlcnRhaW4gaG93IGl0IGlzIGJlaW5nIHVzZWQgYW5kIGl0cyBpbXBvcnRhbmNlIHdpdGhpbiB0aGUgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX3Nlc3Npb25fcmV0cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNjA0PXN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JlY29ubmVjdF9vayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjYzMi1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI2MzM6c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjYzNC1cdFx0XHRcdCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY3Mi1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI2NzM6c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2NzQtXHRcdFx0XHRcdHZvaWQgKnAsIHZvaWQgKmVuZClcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yODAxPXN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MzMtXHRjYXNlIEZSQU1FX1RBR19TRVNTSU9OX1JFVFJZOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgzNDpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5KGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MzUtXHRcdGJyZWFrO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzNi1cdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgzNzpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODM4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCByZWFjaGFibGUgYW5kIGRpcmVjdGx5IGhhbmRsZSBuZXR3b3JrIGlucHV0LCB0aGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBUaGUgY2hhbmdlcyBoYXZlIGJlZW4gZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LCBub3cgcmV0dXJuaW5nIGVycm9ycyBpbnN0ZWFkIG9mIGp1c3Qgd2FybmluZ3MsIHdoaWNoIG1ha2VzIGl0IGFuIGlkZWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSBtZWFuLCB0aGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBzY2VuYXJpbyB3aGVyZSBmdXp6aW5nIGNhbiBleHBvc2Ugc29tZSByZWFsbHkgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucywgYHByb2Nlc3NfY29ubmVjdGAgaXMgYSB0ZW1wdGluZyB0YXJnZXQsIGJ1dCBpdCYjMzk7cyAqc3RhdGljKi4gV2FpdCBhIG1pbnV0ZSwgaXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiB0b28uIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGlmIGl0JiMzOTtzIGlubGluZWQuIEl0JiMzOTtzIHByb2JhYmx5IG5vdCwgYmVpbmcgdGhhdCBiaWcuIEJ1dCBqdXN0IHRvIGJlIHN1cmUsIEkgd2lsbCBsb29rIGZvciBpdHMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRob3NlIHdpbGwgYmUgdGhlIHJpZ2h0IHBsYWNlcyB0byBzdGFydCB0aGUgZnV6emluZyBwcm9jZXNzIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMxND1zdGF0aWMgaW50IHJlYWRfa2VlcGFsaXZlX2FjayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTMyOC0gKi9cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzMjk6aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzMzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkhtbSwgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBJc24mIzM5O3QgU3RhdGljLi4uKioKClJpZ2h0LCBzbyB0aGF0IGZ1bmN0aW9uLCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgLi4uIEkmIzM5O20gbm90aWNpbmcgaXQmIzM5O3MgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGdvdCBleHRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGlzIG1vZHVsZSwgYW5kIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3BhcmtpbmcgYSBmZXcgY29uc2lkZXJhdGlvbnMuCgpGaXJzdCwgaXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tICpvdXRzaWRlKiBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBjb3VsZCBiZSBkZWxpYmVyYXRlLCBidXQgaXQgd2FycmFudHMgYSBjbG9zZSBsb29rIGF0IHRoZSBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCB3YXMgaW50ZW5kZWQgdG8gYmUgbW9yZSBsb2NhbGl6ZWQsIGJ1dCB3YXMsIGZvciBzb21lIHJlYXNvbiwgbGVmdCBvcGVuPyBPciBpcyB0aGlzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIG1vZHVsZSYjMzk7cyBwdWJsaWMgQVBJPwoKU2Vjb25kLCB0aGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaW1wYWN0cyBzeW1ib2wgdmlzaWJpbGl0eS4gVGhlIGxpbmtlciB3aWxsIGJlIGF3YXJlIG9mIGl0IGFuZCB0aGF0IGNhbiBjaGFuZ2UgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGhvdyB0aGlzIGFmZmVjdHMgcG90ZW50aWFsIG5hbWUgY29sbGlzaW9ucyBpbiBsYXJnZXIgcHJvamVjdHMsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsaWJyYXJpZXMgb3Igc2hhcmVkIG9iamVjdHMuIE1pZ2h0IG5lZWQgdG8gYXVkaXQgZm9yIHBvdGVudGlhbCBuYW1pbmcgY2xhc2hlcy4KClRoaXJkLCBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHksIGl0IHJhaXNlcyB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGdlbnVpbmVseSBtZWFudCB0byBiZSBwYXJ0IG9mIHRoZSBtb2R1bGUmIzM5O3MgcHVibGljIGludGVyZmFjZSwgb3IgaWYgaXQgaGFzIHNpbXBseSBiZWVuIGxlZnQgb3BlbiBpbmFkdmVydGVudGx5LiBJZiB0aGlzIHdhc24mIzM5O3QgaW50ZW50aW9uYWwsIGl0IGNvdWxkIGluZGljYXRlIGNvZGUgdGhhdCYjMzk7cyBhdCByaXNrIG9mIGJlaW5nIGJyb2tlbiBieSByZWZhY3RvcmluZyBpbiB1bnJlbGF0ZWQgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBpbiBhIGRlZXBlciB3YXkuCgpGaW5hbGx5LCBJIHNob3VsZCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGFkZGl0aW9uYWwgY29tcGxleGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgYXJlIHVzaW5nIHRoaXMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSBjYW4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucywgYnV0IHRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBoYXMgZGVmaW5pdGVseSBhZGRlZCBhIGxheWVyIG9mIGlucXVpcnkgdG8gbXkgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX2NvbnRyb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNzgxPXN0YXRpYyBpbnQgcHJvY2Vzc19hY2soc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgwMC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MDE6c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODAyLXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTM1PXN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjk0MS1cdGlmIChjb24tXHUwMDNldjIuaW5fZGVzYy5mZF90YWcgIT0gRlJBTUVfVEFHX01FU1NBR0UpXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTQyOlx0XHRyZXR1cm4gcHJvY2Vzc19jb250cm9sKGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2hhbmRsZV9jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkxNz1zdGF0aWMgaW50IHByb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI5MzU6c3RhdGljIGludCBfX2hhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcClcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzYte1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5ODA9c3RhdGljIGludCBoYW5kbGVfcHJlYW1ibGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTItXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDEzOlx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBDVFJMX0JPRFkoY29uLVx1MDAzZXYyLmluX2J1ZikpO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAxNC19XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzAxNj1zdGF0aWMgaW50IGhhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM1LVx0XHRtZW1jcHkoYnVmLCBjb24tXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UsIGN0cmxfbGVuKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzY6XHRcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgYnVmKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzctXHR9XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM4LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAzOTpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDAtfVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwNDI9c3RhdGljIGludCBoYW5kbGVfY29udHJvbF9yZW1haW5kZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNTQtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDU1Olx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBjb24tXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UgLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1Ni1cdFx0XHRcdCAgICAgQ0VQSF9QUkVBTUJMRV9JTkxJTkVfTEVOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5MTc9c3RhdGljIGludCBwcm9jZXNzX21lc3NhZ2Uoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzQtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTM1OnN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTM2LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTgwPXN0YXRpYyBpbnQgaGFuZGxlX3ByZWFtYmxlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDEyLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAxMzpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgQ1RSTF9CT0RZKGNvbi1cdTAwM2V2Mi5pbl9idWYpKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTQtfVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAxNS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMTY6c3RhdGljIGludCBoYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDE3LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM1LVx0XHRtZW1jcHkoYnVmLCBjb24tXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UsIGN0cmxfbGVuKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzY6XHRcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgYnVmKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzctXHR9XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM4LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAzOTpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDAtfVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA0MS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwNDI6c3RhdGljIGludCBoYW5kbGVfY29udHJvbF9yZW1haW5kZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA0My17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1NC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwNTU6XHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSAtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDU2LVx0XHRcdFx0ICAgICBDRVBIX1BSRUFNQkxFX0lOTElORV9MRU4pO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxMDc9c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTI2LVx0XHRjYXNlIElOX1NfSEFORExFX0NPTlRST0w6XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTI3Olx0XHRcdHJldCA9IGhhbmRsZV9jb250cm9sKGNvbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTI4LVx0XHRcdGJyZWFrO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzEyOS1cdFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MX1JFTUFJTkRFUjpcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxMzA6XHRcdFx0cmV0ID0gaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKGNvbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTMxLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BvcHVsYXRlX2luX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDk3PXN0YXRpYyB2b2lkIGZpbmlzaF9za2lwKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTA2LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzEwNzpzdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzEwOC17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzE3Nj1pbnQgY2VwaF9jb25fdjJfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxODctXHQgKiBXZSBzaG91bGQgYWx3YXlzIGhhdmUgc29tZXRoaW5nIHBlbmRpbmcgaGVyZS4gIElmIG5vdCxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxODg6XHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE4OS1cdCAqIChjZXBoX3RjcF9yZWN2KCkgd291bGQgaW1tZWRpYXRlbHkgcmV0dXJuIDEpLlxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxOTgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTk5Olx0XHRyZXQgPSBwb3B1bGF0ZV9pbl9pdGVyKGNvbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMjAwLVx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBDZXBoIE5ldHdvcmsgUHJvdG9jb2wgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhlIENlcGggbmV0d29yayBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGRhdGEgd2hlbiBpdCBhcnJpdmVzIG9uIHRoZSBzb2NrZXQsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgd29ydGggYSBkZWVwIGRpdmUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHRoZXJlLgoKSSBkb3VibGUgY2hlY2tlZCwgYW5kIHllcywgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub24tc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpJIG1hZGUgc3VyZSB0byBydWxlIG91dCB0aGUgb3RoZXIgb2J2aW91cyBjb250ZW5kZXJzIHRoYXQgYXJlIGNvbW1vbmx5IGludm9sdmVkIGluIHRoZSBjb25uZWN0aW9uIHByb2Nlc3NpbmcsIGp1c3QgdG8gYmUgc3VyZS4gSSBjb25maXJtZWQgdGhhdCBgcHJvY2Vzc19jb25uZWN0YCwgYHByb2Nlc3NfaGVsbG9gLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpTbywgaXQmIzM5O3MgYmFjayB0byBmb2N1c2luZyBvbiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLgoKTm93LCBiZWZvcmUgSSBzdGFydCBjb25zdHJ1Y3RpbmcgZnV6eiBpbnB1dHMsIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENFUEhfTElCYCBpcyBlbmFibGVkLiBJdCBpcyB1bmxpa2VseSB0aGF0IGFueSBtb3JlIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQsIGJ1dCBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdG8gYmUgc3VyZSwgaW4gdGhlIGBuZXQvY2VwaC9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcbm5ldC9jZXBoL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NlcGggY29yZSBsaWJyYXJ5XCYjMzQ7XG4tLVxubmV0L2NlcGgvS2NvbmZpZy0yMi1cbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXG5uZXQvY2VwaC9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9jZXBoL0tjb25maWctMzQtXG5uZXQvY2VwaC9LY29uZmlnOjM1OmNvbmZpZyBDRVBIX0xJQl9VU0VfRE5TX1JFU09MVkVSXG5uZXQvY2VwaC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjQKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0VQSF9MSUImIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkJiMzNDssCiAgICAmIzM0O2NlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAodjEgYW5kIHYyKSBjb25uZWN0aW9uIHByb2Nlc3NpbmcgbG9naWMuIEl0IHJlcGxhY2VzIFdBUk5fT04gYXNzZXJ0aW9ucyB3aXRoIGV4cGxpY2l0IGVycm9yIGhhbmRsaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBmb3IgdmFyaW91cyBjb25uZWN0aW9uIHNlcXVlbmNlIGFuZCBjb25maWd1cmF0aW9uIG1pc21hdGNoZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBlcnJvciBwYXRocy4gVGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIENFUEhfTElCIGFuZCBDRVBIX0ZTLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NzM5YzI3ZGIzYmM4ZGE2YTBiYTgzYjZhYmIyM2Y0ODY5NTZkODMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAxMDowOTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKQEAgLTg5OCw4ICYjNDM7ODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKIAkJICAgICBjb24tJmd0O3YxLnBlZXJfZ2xvYmFsX3NlcSwKIAkJICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSwKIAkJICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxKTsKLQkJV0FSTl9PTihjb24tJmd0O3YxLmNvbm5lY3Rfc2VxICE9Ci0JCQlsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQlpZiAoY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJCSAgICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxLAomIzQzOwkJCSAgICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQogCiAJCWlmIChjb24tJmd0O3YxLmluX3JlcGx5LmZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpCiAJCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCmluZGV4IDA1ZjZlZWEyOTlmYzAuLjk2NmE1ZjgwMGM2MGYgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCkBAIC0yMjM3LDkgJiM0MzsyMjM3LDE2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19oZWxsbyhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZCkKIAkJICAgICBfX2Z1bmNfXywgY29uLCBjZXBoX3ByX2FkZHIobXlfYWRkcikpOwogCX0KIAotCVdBUk5fT04oY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpKTsKLQlXQVJOX09OKG15X2FkZHItJmd0O3R5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSk7Ci0JV0FSTl9PTighbXlfYWRkci0mZ3Q7bm9uY2UpOwomIzQzOwlpZiAoY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpIHx8CiYjNDM7CSAgICBteV9hZGRyLSZndDt0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkgfHwKJiM0MzsJICAgICFteV9hZGRyLSZndDtub25jZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIGJhZCBteV9hZGRyICVzXG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcihteV9hZGRyKSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7YmFkIG15X2FkZHImIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAkvKiBubyByZXNldF9vdXRfa3ZlY3MoKSBhcyBvdXIgaGVsbG8gbWF5IHN0aWxsIGJlIHBlbmRpbmcgKi8KIAlyZXQgPSBwcmVwYXJlX2F1dGhfcmVxdWVzdChjb24pOwpAQCAtMjUyOSwxNCAmIzQzOzI1MzYsMzMgQEAgc3RhdGljIGludCBwcm9jZXNzX3NlcnZlcl9pZGVudChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY29uLSZndDtwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTsKIAljb24tJmd0O3YyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7CiAJY29uLSZndDtwZWVyX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0JV0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpOwomIzQzOwlpZiAocmVxdWlyZWRfZmVhdHVyZXMgJmFtcDsgfmNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJiMzOTtzIHJlcXVpcmVkIDB4JWxseFxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcywgcmVxdWlyZWRfZmVhdHVyZXMpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O21pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llID0gY29va2llOwogCiAJaWYgKGZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHsKIAkJY2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpOwotCQlXQVJOX09OKGNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXG4mIzM0OywKJiM0MzsJCQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkcikpOwomIzQzOwkJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0gZWxzZSB7Ci0JCVdBUk5fT04oIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCWNsZWFyX2luX3NpZ25fa3ZlY3MoY29uKTsKQEAgLTI2MTgsNyAmIzQzOzI2NDQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGNvbm5lY3Rfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XG4mIzM0OywgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpOwotCVdBUk5fT04oY29ubmVjdF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5jb25uZWN0X3NlcSk7CiYjNDM7CWlmIChjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICZndDsgJWxsdSwgZ290ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkgICAgICAgY29uLSZndDt2Mi5jb25uZWN0X3NlcSwgY29ubmVjdF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCWNvbi0mZ3Q7djIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKQEAgLTI2NTEsNyAmIzQzOzI2ODQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljZXBoX2RlY29kZV82NF9zYWZlKCZhbXA7cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTsKLQlXQVJOX09OKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKTsKJiM0MzsJaWYgKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgZ2xvYmFsX3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2dsb2JhbF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5nbG9iYWxfc2VxID0gY2VwaF9nZXRfZ2xvYmFsX3NlcShjb24tJmd0O21zZ3IsIGdsb2JhbF9zZXEpOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTYKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogODQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2VwaCBNZXNzZW5nZXIgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IGFkZHJlc3NlcyBzb21lIHJlcG9ydGVkIGlzc3VlcyBmcm9tIHN5emJvdCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgbWFsZm9ybWVkIHBhY2tldHMgZnJvbSBhIGZha2UgQ2VwaCBzZXJ2ZXIuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgaW5zdGFuY2VzIHdoZXJlIHRoZSBjb2RlIHdhcyByZWx5aW5nIG9uIGBXQVJOX09OYCB0byBmbGFnIHByb2JsZW1zIHdpdGhpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYG1lc3Nlbmdlcl92MS5jYCBhbmQgYG1lc3Nlbmdlcl92Mi5jYCkgd2l0aCBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJldHVybmluZyBlcnJvciBjb2RlcyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIGFuZCBzZXR0aW5nIHRoZSBgY29uLSZndDtlcnJvcl9tc2dgIGZpZWxkIHRvIHByb3ZpZGUgc29tZSBjb250ZXh0LiAgVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBsb2dpYyBidWcgZml4LCBjbGVhbmluZyB1cCBzb21lIGVycm9yIGhhbmRsaW5nIHJhdGhlciB0aGFuIGp1c3QgY3Jhc2hpbmcgb3IgZW1pdHRpbmcgYSB3YXJuaW5nLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljIGNoYW5nZXMsIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJJiMzOTttIHNlZWluZyBjaGVja3MgaW4gYG1lc3Nlbmdlcl92MS5jYCB3aXRoaW4gYHByb2Nlc3NfY29ubmVjdGAgZm9yIGEgYGNvbm5lY3Rfc2VxYCBtaXNtYXRjaC4gSWYgdGhlIGV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIHJlY2VpdmVkIHNlcXVlbmNlIG51bWJlciBkb24mIzM5O3QgbWF0Y2gsIHRoZSBwYXRjaCBub3cgbG9ncyBhbiBlcnJvciwgc2V0cyBhbiBlcnJvciBtZXNzYWdlLCBhbmQgcmV0dXJucyBhbiBlcnJvciBjb2RlICgtMSkuIE1ha2VzIHNlbnNlOyB0aGlzIGlzIGZhciBiZXR0ZXIgdGhhbiBzaW1wbHkgdHJpZ2dlcmluZyBhIGBXQVJOX09OYC4KCkluIGBtZXNzZW5nZXJfdjIuY2AgYW5kIHRoZSBgcHJvY2Vzc19oZWxsb2AgZnVuY3Rpb24sIHRoZSBwYXRjaCBub3cgY2hlY2tzIHRoZSBhZGRyZXNzIGZvciB2YWxpZGl0eSwgd2hldGhlciBpdCYjMzk7cyBibGFuayBvciBub3Qgb2YgYSB0eXBlIHdlIGV4cGVjdCwgYW5kIGlmIHRoZXJlJiMzOTtzIG5vIG5vbmNlLiBJZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0LCBhbiBlcnJvciBpcyBsb2dnZWQsIGFuZCBhZ2FpbiwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KClRoZSBjaGFuZ2VzIGluIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAgaW52b2x2ZSBzaW1pbGFyIGxvZ2ljLiBUaGUgcGF0Y2ggbm93IGNoZWNrcyBmb3IgaW52YWxpZCBmZWF0dXJlcywgYSBzZXJ2ZXIgY29va2llLCBhbmQgYW4gaW52YWxpZCBzZXJ2ZXIgY29va2llLiBFYWNoIHRpbWUsIGluc3RlYWQgb2YgYFdBUk5fT05gLCB3ZSBub3cgZ2V0IGFuIGVycm9yIGxvZyBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuLgoKRmluYWxseSwgaW4gYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCB0aGUgcGF0Y2ggaXMgY2hlY2tpbmcgZm9yIHNlcXVlbmNlIG51bWJlcnMuIElmIHRoZSBzZXF1ZW5jZSBpcyBpbnZhbGlkLCB0aGVyZSYjMzk7cyBhZ2FpbiBhbiBlcnJvciBsb2cgYW5kIGFuIGVycm9yIHJldHVybi4KCkNydWNpYWxseSwgZnJvbSBteSBpbml0aWFsIGFuYWx5c2lzIGFuZCBjb25maXJtaW5nIHdpdGggdGhlIGRpZmYsIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgaGVyZSwgYW5kIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBUaGlzIGlzIHB1cmVseSBhYm91dCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IHJlcXVpcmVkIGZvciB0aGlzOyBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIGFyZWEuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYm90aCB2MSBhbmQgdjIpLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdoZXJlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMgZnJvbSBhIHBlZXIgY291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MuIFRoZSBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBieSByZXR1cm5pbmcgZXJyb3IgY29kZXMgKC0xIG9yIC1FSU5WQUwpIGluc3RlYWQgb2YgY29udGludWluZyBleGVjdXRpb24gYWZ0ZXIgYSB3YXJuaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjAxLjgyNTIxMTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MjUwNTkyNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNFUEhfTElCXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBjb2RlIChib3RoIHYxIGFuZCB2MikuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2hlcmUgbWFsZm9ybWVkIG9yIHVuZXhwZWN0ZWQgcGFja2V0cyBmcm9tIGEgcGVlciBjb3VsZCB0cmlnZ2VyIGtlcm5lbCB3YXJuaW5ncy4gVGhlIG1vZGlmaWNhdGlvbnMgb25seSBhZmZlY3QgY29udHJvbCBmbG93IGJ5IHJldHVybmluZyBlcnJvciBjb2RlcyAoLTEgb3IgLUVJTlZBTCkgaW5zdGVhZCBvZiBjb250aW51aW5nIGV4ZWN1dGlvbiBhZnRlciBhIHdhcm5pbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MDEuODI1MjE4OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzUxMDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgOCAxMDowOTowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXFxuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcXG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXFxuQEAgLTg5OCw4ICs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbiBcXHRcXHQgICAgIGNvbi1cXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxcbiBcXHRcXHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLFxcbiBcXHRcXHQgICAgIGNvbi1cXHUwMDNldjEuY29ubmVjdF9zZXEpO1xcbi1cXHRcXHRXQVJOX09OKGNvbi1cXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cXG4tXFx0XFx0XFx0bGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xcbitcXHRcXHRpZiAoY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tXFx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIiVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHRcXHQgICAgICAgY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSxcXG4rXFx0XFx0XFx0ICAgICAgIGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcXG4rXFx0XFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcXFwiO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChjb24tXFx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFxcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSlcXG4gXFx0XFx0XFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXFxuaW5kZXggMDVmNmVlYTI5OWZjMC4uOTY2YTVmODAwYzYwZiAxMDA2NDRcXG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXFxuQEAgLTIyMzcsOSArMjIzNywxNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaGVsbG8oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXFxuIFxcdFxcdCAgICAgX19mdW5jX18sIGNvbiwgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcXG4gXFx0fVxcbiBcXG4tXFx0V0FSTl9PTihjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikpO1xcbi1cXHRXQVJOX09OKG15X2FkZHItXFx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSk7XFxuLVxcdFdBUk5fT04oIW15X2FkZHItXFx1MDAzZW5vbmNlKTtcXG4rXFx0aWYgKGNlcGhfYWRkcl9pc19ibGFuayhteV9hZGRyKSB8fCBjZXBoX2FkZHJfcG9ydChteV9hZGRyKSB8fFxcbitcXHQgICAgbXlfYWRkci1cXHUwMDNldHlwZSAhPSBDRVBIX0VOVElUWV9BRERSX1RZUEVfQU5ZIHx8XFxuK1xcdCAgICAhbXlfYWRkci1cXHUwMDNlbm9uY2UpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgYmFkIG15X2FkZHIgJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihteV9hZGRyKSk7XFxuK1xcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcImJhZCBteV9hZGRyXFxcIjtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqL1xcbiBcXHRyZXQgPSBwcmVwYXJlX2F1dGhfcmVxdWVzdChjb24pO1xcbkBAIC0yNTI5LDE0ICsyNTM2LDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbiBcXHRjb24tXFx1MDAzZXBlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpO1xcbiBcXHRjb24tXFx1MDAzZXYyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7XFxuIFxcdGNvbi1cXHUwMDNlcGVlcl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xcbi1cXHRXQVJOX09OKHJlcXVpcmVkX2ZlYXR1cmVzIFxcdTAwMjYgfmNsaWVudC1cXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcXG4rXFx0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFxcdTAwMjYgfmNsaWVudC1cXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlcidzIHJlcXVpcmVkIDB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHQgICAgICAgY2xpZW50LVxcdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcXG4rXFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwibWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlc1xcXCI7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGNvbi1cXHUwMDNldjIuc2VydmVyX2Nvb2tpZSA9IGNvb2tpZTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHtcXG4gXFx0XFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xcbi1cXHRcXHRXQVJOX09OKGNvbi1cXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XFxuK1xcdFxcdGlmIChjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSk7XFxuK1xcdFxcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcInNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxcIjtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0V0FSTl9PTighY29uLVxcdTAwM2V2Mi5zZXJ2ZXJfY29va2llKTtcXG4rXFx0XFx0aWYgKCFjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgRU5USVRZX05BTUUoY29uLVxcdTAwM2VwZWVyX25hbWUpLFxcbitcXHRcXHRcXHQgICAgICAgY2VwaF9wcl9hZGRyKFxcdTAwMjZjb24tXFx1MDAzZXBlZXJfYWRkcikpO1xcbitcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cXFwiO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XFxuQEAgLTI2MTgsNyArMjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxuIFxcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XFxuIFxcbiBcXHRkb3V0KFxcXCIlcyBjb24gJXAgY29ubmVjdF9zZXEgJWxsdVxcXFxuXFxcIiwgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpO1xcbi1cXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFxcdTAwM2M9IGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEpO1xcbitcXHRpZiAoY29ubmVjdF9zZXEgXFx1MDAzYz0gY29uLVxcdTAwM2V2Mi5jb25uZWN0X3NlcSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIiVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgXFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHQgICAgICAgY29uLVxcdTAwM2V2Mi5jb25uZWN0X3NlcSwgY29ubmVjdF9zZXEpO1xcbitcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJjb25uZWN0X3NlcSBtaXNtYXRjaFxcXCI7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSArIDE7XFxuIFxcbiBcXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xcbkBAIC0yNjUxLDcgKzI2ODQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4gXFx0Y2VwaF9kZWNvZGVfNjRfc2FmZShcXHUwMDI2cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpO1xcbiBcXG4gXFx0ZG91dChcXFwiJXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcXFxuXFxcIiwgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XFxuLVxcdFdBUk5fT04oZ2xvYmFsX3NlcSBcXHUwMDNjPSBjb24tXFx1MDAzZXYyLmdsb2JhbF9zZXEpO1xcbitcXHRpZiAoZ2xvYmFsX3NlcSBcXHUwMDNjPSBjb24tXFx1MDAzZXYyLmdsb2JhbF9zZXEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgZ2xvYmFsX3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgXFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHQgICAgICAgY29uLVxcdTAwM2V2Mi5nbG9iYWxfc2VxLCBnbG9iYWxfc2VxKTtcXG4rXFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiZ2xvYmFsX3NlcSBtaXNtYXRjaFxcXCI7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGNvbi1cXHUwMDNldjIuZ2xvYmFsX3NlcSA9IGNlcGhfZ2V0X2dsb2JhbF9zZXEoY29uLVxcdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcXG4gXFxuIFxcdGZyZWVfY29ubl9idWZzKGNvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjAyLjI5OTcxMTMwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MjQxMjE5Nzc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNlcGhfY29uX3YxX3RyeV9yZWFkXCIsXG4gICAgXCJjZXBoX2Nvbl92Ml90cnlfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAodjEgYW5kIHYyKSBjb25uZWN0aW9uIHByb2Nlc3NpbmcgbG9naWMuIEl0IHJlcGxhY2VzIFdBUk5fT04gYXNzZXJ0aW9ucyB3aXRoIGV4cGxpY2l0IGVycm9yIGhhbmRsaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBmb3IgdmFyaW91cyBjb25uZWN0aW9uIHNlcXVlbmNlIGFuZCBjb25maWd1cmF0aW9uIG1pc21hdGNoZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBlcnJvciBwYXRocy4gVGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIENFUEhfTElCIGFuZCBDRVBIX0ZTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NzM5YzI3ZGIzYmM4ZGE2YTBiYTgzYjZhYmIyM2Y0ODY5NTZkODMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxMDowOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbmluZGV4IGM5ZTAwMmQ5NjMxOTAuLmRmMjI0OGI3YjAyNjUgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbkBAIC04OTgsOCArODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbiBcdFx0ICAgICBjb24tXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxuIFx0XHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cbi1cdFx0XHRsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0aWYgKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxuXCIsXG4rXHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdFx0ICAgICAgIGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSxcbitcdFx0XHQgICAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4rXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKGNvbi1cdTAwM2V2MS5pbl9yZXBseS5mbGFncyBcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSlcbiBcdFx0XHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuaW5kZXggMDVmNmVlYTI5OWZjMC4uOTY2YTVmODAwYzYwZiAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG4rKysgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuQEAgLTIyMzcsOSArMjIzNywxNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaGVsbG8oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4gXHRcdCAgICAgX19mdW5jX18sIGNvbiwgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbiBcdH1cbiBcbi1cdFdBUk5fT04oY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpKTtcbi1cdFdBUk5fT04obXlfYWRkci1cdTAwM2V0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkpO1xuLVx0V0FSTl9PTighbXlfYWRkci1cdTAwM2Vub25jZSk7XG4rXHRpZiAoY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpIHx8XG4rXHQgICAgbXlfYWRkci1cdTAwM2V0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkgfHxcbitcdCAgICAhbXlfYWRkci1cdTAwM2Vub25jZSkge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgYmFkIG15X2FkZHIgJXNcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiYmFkIG15X2FkZHJcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHQvKiBubyByZXNldF9vdXRfa3ZlY3MoKSBhcyBvdXIgaGVsbG8gbWF5IHN0aWxsIGJlIHBlbmRpbmcgKi9cbiBcdHJldCA9IHByZXBhcmVfYXV0aF9yZXF1ZXN0KGNvbik7XG5AQCAtMjUyOSwxNCArMjUzNiwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbitcdGlmIChyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlcidzIHJlcXVpcmVkIDB4JWxseFxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcIm1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXNcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSA9IGNvb2tpZTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkge1xuIFx0XHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSk7XG4rXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwic2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoIWNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0Y2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pO1xuQEAgLTI2MTgsNyArMjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpO1xuLVx0V0FSTl9PTihjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSk7XG4rXHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImNvbm5lY3Rfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxID0gY29ubmVjdF9zZXEgKyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgKzI2ODQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpO1xuIFxuIFx0ZG91dChcIiVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4rXHRpZiAoZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKSB7XG4rXHRcdHByX2VycihcIiVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpO1xuK1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJnbG9iYWxfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTowMi4yOTk3MTI1NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI2OTU5NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENlcGggTWVzc2VuZ2VyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBoaXR0aW5nIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIExvb2tzIGxpa2UgaXQncyBhIGNyaXRpY2FsIGNoYW5nZTsgdGhleSdyZSBzd2FwcGluZyBvdXQgYFdBUk5fT05gIGZvciBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIFRoYXQgbWVhbnMgaW5zdGVhZCBvZiBqdXN0IGxvZ2dpbmcgYSB3YXJuaW5nIGFuZCBsZXR0aW5nIHRoaW5ncyBrZWVwIGdvaW5nLCB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdyByZXR1cm5pbmcgZXJyb3IgY29kZXMgbGlrZSBgLTFgIG9yIGAtRUlOVkFMYCBhbmQgc2V0dGluZyBgY29uLVx1MDAzZWVycm9yX21zZ2AsIGVmZmVjdGl2ZWx5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgYXQgdGhhdC5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCAqd2hpY2gqIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdG91Y2hlZC4gSSBzZWUgYHByb2Nlc3NfY29ubmVjdGAgaW4gbWVzc2VuZ2VyIHYxLCBhbmQgdGhlbiBpbiB2Miwgd2UndmUgZ290IGBwcm9jZXNzX2hlbGxvYCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGNvcmUgdG8gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sLiBDZXBoLCBvZiBjb3Vyc2UsIGJlaW5nIHRoYXQgZGlzdHJpYnV0ZWQgbmV0d29yayBmaWxlIHN5c3RlbSBhbmQgYmxvY2sgZGV2aWNlIHByb3RvY29sLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uOiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gQ2VwaCBjYW4gYmUgbW91bnRlZCBvciBpbnRlcmFjdGVkIHdpdGggb3ZlciB0aGUgbmV0d29yaywgZXZlbiBqdXN0IHVzaW5nIGxvb3BiYWNrLiBUaGlzIG1ha2VzIGl0IHN1cGVyIHJlbGV2YW50IHRvIHRlc3RpbmcuIFdoaWNoIGJyaW5ncyB1cyB0byB0aGUgbmV4dCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBHaXZlbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHByb3RvY29sIHBhcnNpbmcgbG9naWMsIGEgcmVzb3VuZGluZyAqeWVzKi4gQW55IHZ1bG5lcmFiaWxpdGllcyBoZXJlIGNvdWxkIGhhdmUgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cblNvLCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgd2UgbmVlZCB0byBidWlsZCBhbmQgdGVzdCB0aGlzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWdzIGluIGBuZXQvY2VwaC9gLiBJdCdzIHVzdWFsbHkgY29udHJvbGxlZCBieSBgQ09ORklHX0NFUEhfTElCYC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGVpdGhlciBgbmV0L2NlcGgvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGZzL2NlcGgvS2NvbmZpZ2AgdG8gcGluIGRvd24gdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MDkuMDI2Njc0MzUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDczMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0xJQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcXG5uZXQvY2VwaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNlcGggY29yZSBsaWJyYXJ5XFxcIlxcbi0tXFxubmV0L2NlcGgvS2NvbmZpZy0yMi1cXG5uZXQvY2VwaC9LY29uZmlnOjIzOmNvbmZpZyBDRVBIX0xJQl9QUkVUVFlERUJVR1xcbm5ldC9jZXBoL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiSW5jbHVkZSBmaWxlOmxpbmUgaW4gY2VwaCBkZWJ1ZyBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnLTM0LVxcbm5ldC9jZXBoL0tjb25maWc6MzU6Y29uZmlnIENFUEhfTElCX1VTRV9ETlNfUkVTT0xWRVJcXG5uZXQvY2VwaC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlVzZSBpbi1rZXJuZWwgc3VwcG9ydCBmb3IgRE5TIGxvb2t1cFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MDkuMTA0NzU2NDYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxNDE2MjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBzdWJqZWN0OlxuXG4qKkNvbnNpZGVyaW5nIENFUEggTGlicmFyeSBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0byBhcHByb2FjaCB0aGlzLCBpdCBsb29rcyBsaWtlIGBDRVBIX0xJQmAgaXMgYWJzb2x1dGVseSB0aGUgY2VudHJhbCBsaWJyYXJ5IHRvIGZvY3VzIG9uLiBUaGF0J3MgdGhlIGZvdW5kYXRpb24gd2UnbGwgYmUgYnVpbGRpbmcgb24sIG5vIHF1ZXN0aW9uLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyBpdHMgY2FwYWJpbGl0aWVzIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMuXG5cbkFuZCB0aGlua2luZyBicm9hZGVyLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHdoZXRoZXIgZW5hYmxpbmcgYENFUEhfRlNgIG1pZ2h0IGJyaW5nIHNvbWUgaW1tZWRpYXRlIGFkdmFudGFnZXMsIG9yIGJlIGEgdXNlZnVsIHBhdGggZG93biB0aGUgcm9hZCwgaWYgd2UncmUgbG9va2luZyB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgc2V0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaXZlIGluIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY2MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjE3LjAxODkyMTY4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIwNjMyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0VQSF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jZXBoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MTcuMDk1MTMyNTk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE1NTM4NzU3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDZXBoIE1lc3NlbmdlciBFcnJvciBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYSBnb29kIG1vdmUuIFJlcGxhY2luZyBgV0FSTl9PTmAgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIG5vdCBqdXN0IGEgY29zbWV0aWMgdGhpbmc7IGl0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3csIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBQcmV2aW91c2x5LCBhIHdhcm5pbmcgbWlnaHQgaGF2ZSBtYXNrZWQgYSBkZWVwZXIgcHJvYmxlbSwgbGVhZGluZyB0byBwb3RlbnRpYWwgaW5zdGFiaWxpdHkgb3IgY3Jhc2hlcyBkb3duIHRoZSBsaW5lLiBSZXR1cm5pbmcgYW4gZXJyb3IgYWxsb3dzIGZvciBtb3JlIHJvYnVzdCBlcnJvciBwcm9wYWdhdGlvbiBhbmQgaGFuZGxpbmcgaGlnaGVyIHVwIHRoZSBjYWxsIHN0YWNrLCB3aGljaCBpcyBjcml0aWNhbCBpbiBhIGRpc3RyaWJ1dGVkIHN5c3RlbSBsaWtlIENlcGguXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYHByb2Nlc3NfY29ubmVjdGAgaW4gdGhlIHYxIG1lc3NlbmdlciwgYW5kIGBwcm9jZXNzX2hlbGxvYCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAgaW4gdGhlIHYyIG1lc3Nlbmdlci4gVGhlc2UgZnVuY3Rpb25zIGFyZSwgb2YgY291cnNlLCB0aGUgaGVhcnQgb2YgdGhlIENlcGggbmV0d29yayBtZXNzZW5nZXIgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLCBoYW5kbGluZyBpbmNvbWluZyBtZXNzYWdlcy4gR2l2ZW4gdGhlaXIgcm9sZSBpbiBwYXJzaW5nIG5ldHdvcmsgaW5wdXQsIGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGluY3JlZGlibHkgcmVsZXZhbnQuIFRoaXMgY2hhbmdlIHdvdWxkIGluZmx1ZW5jZSB0aGUgZnV6emluZyBzdHJhdGVneSBiZWNhdXNlIHByZXZpb3VzbHksIGFuIGVycm9yIGR1cmluZyBmdXp6aW5nIG1heSBoYXZlIGNhdXNlZCBhIGBXQVJOX09OYCB0byBiZSBmaXJlZCBhbmQgdGhlbiBhbGxvd2VkIHRoZSBjb2RlIHRvIGNvbnRpbnVlLiBOb3cgd2UgZXhwZWN0IGVycm9ycyB0byBjYXVzZSB0aGUgbWVzc2FnZSB0byBiZSBkcm9wcGVkIG9yIHJlamVjdGVkLCBtYWtpbmcgdGVzdGluZyBsZXNzIGZvcmdpdmluZy5cblxuTm93IEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBgcHJvY2Vzc19jb25uZWN0YCBpbiB2MSBpcyBjYWxsZWQgZnJvbSBgcmVhZF9wYXJ0aWFsX2Nvbm5lY3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBzbyB0aGF0IHNob3VsZCBiZSBhY2Nlc3NpYmxlLiBUaGUgdjIgZnVuY3Rpb25z4oCUYHByb2Nlc3NfaGVsbG9gLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYOKAlGFyZSBjYWxsZWQgZnJvbSB0aGUgdjIgc3RhdGUgbWFjaGluZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBjb25maXJtcyB0aGV5J3JlIGFjdGl2ZWx5IHVzZWQgaW4gdGhlIHN5c3RlbS5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgbm93LiBgQ0VQSF9MSUJgIGlzIG9idmlvdXNseSB0aGUgY29yZSBsaWJyYXJ5IHdlIG5lZWQuIFRvIGVuc3VyZSB0aGUgY29kZSBpbiBgbmV0L2NlcGgvYCBpcyBjb21waWxlZCwgYENFUEhfTElCYCBpcyBzdWZmaWNpZW50LCBidXQgdG8gKnVzZSogdGhhdCBjb2RlLCB3ZSB3b3VsZCBtb3N0IGxpa2VseSBuZWVkIGVpdGhlciBgQ0VQSF9GU2Agb3IgYEJMS19ERVZfUkJEYC4gSWYgd2UncmUgdGVzdGluZyB0aGVzZSBtZXNzZW5nZXIgZnVuY3Rpb25zLCBlbmFibGluZyBgQ0VQSF9MSUJgIGFsb25nIHdpdGggZWl0aGVyIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgIHdvdWxkIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGxpa2VseSB1c2VkIHdpdGhpbiBvdXIgdGVzdCBzZXR1cC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjb2RlLlxuXG5SaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLCB0byBnZXQgYSBwcmVjaXNlIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgaG93IGl0J2xsIGFmZmVjdCB0aGUgZnV6emluZyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTozOC42NDkwMTE1NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4NzMyMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz02OTc9c3RhdGljIGludCBwcm9jZXNzX2Jhbm5lcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03MzktXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6NzQwOnN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDEte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ2LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjc0NzpcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3Qgb24gJXAgdGFnICVkXFxcXG5cXFwiLCBjb24sIGNvbi1cXHUwMDNldjEuaW5fdGFnKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDgtXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MDItXFx0XFx0Y29uLVxcdTAwM2V2MS5hdXRoX3JldHJ5Kys7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODAzOlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCAlcCBnb3QgQkFEQVVUSE9SSVpFUiBhdHRlbXB0ICVkXFxcXG5cXFwiLCBjb24sXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODA0LVxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5hdXRoX3JldHJ5KTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgyMy1cXHRcXHQgKi9cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4MjQ6XFx0XFx0ZG91dChcXFwicHJvY2Vzc19jb25uZWN0IGdvdCBSRVNFVCBwZWVyIHNlcSAldVxcXFxuXFxcIixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MjUtXFx0XFx0ICAgICBsZTMyX3RvX2NwdShjb24tXFx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NDktXFx0XFx0ICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODUwOlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfU0VTU0lPTiBteSBzZXEgJXUsIHBlZXIgJXVcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODUxLVxcdFxcdCAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5vdXRfY29ubmVjdC5jb25uZWN0X3NlcSksXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NjUtXFx0XFx0ICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODY2OlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfR0xPQkFMIG15ICV1IHBlZXJfZ3NlcSAldVxcXFxuXFxcIixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NjctXFx0XFx0ICAgICBjb24tXFx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg5Ni1cXHRcXHRjb24tXFx1MDAzZXBlZXJfZmVhdHVyZXMgPSBzZXJ2ZXJfZmVhdDtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4OTc6XFx0XFx0ZG91dChcXFwicHJvY2Vzc19jb25uZWN0IGdvdCBSRUFEWSBnc2VxICVkIGNzZXEgJWQgKCVkKVxcXFxuXFxcIixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04OTgtXFx0XFx0ICAgICBjb24tXFx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jPTEzMjk9aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzNzItXFx0XFx0XFx0Z290byBvdXQ7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6MTM3MzpcXHRcXHRyZXQgPSBwcm9jZXNzX2Nvbm5lY3QoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzc0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTozOC45ODc3NDg2MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODg1NDY1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGBwcm9jZXNzX2Nvbm5lY3RgIGFuZCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyB0aGUgZmxvdyBvZiBldmVudHMgd2l0aGluIGEgQ2VwaCBjb25uZWN0aW9uLiBJIHVuZGVyc3RhbmQgYHByb2Nlc3NfY29ubmVjdGAgaXMgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGluaXRpYWwgaGFuZHNoYWtlIGFuZCBlc3RhYmxpc2htZW50IG9mIGEgY29ubmVjdGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGNsaWVudCBhbmQgT1NEIChvciBNb25pdG9yLCBvciB3aGF0ZXZlciBDZXBoIGNvbXBvbmVudCBpcyBpbnZvbHZlZCkgYWdyZWUgb24gcGFyYW1ldGVycyBhbmQgZ2V0IHRoaW5ncyBzZXQgdXAuXG5cblRoZW4sIHRvIHNlZSB0aGF0IGBwcm9jZXNzX2Nvbm5lY3RgIGlzIGNhbGxlZCAqZnJvbSogYGNlcGhfY29uX3YxX3RyeV9yZWFkYCB0cmlnZ2VycyBzb21lIGFkZGl0aW9uYWwgYW5hbHlzaXMuIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgKnJlYWQqIHBhdGgsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBvbGRlciB2MSBjb25uZWN0aW9uIHByb3RvY29sLiBUaGlzIHByb2JhYmx5IG1lYW5zIGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHZpYSBgcHJvY2Vzc19jb25uZWN0YCwgc3Vic2VxdWVudCByZWFkcyBhcmUgYXR0ZW1wdGluZyB0byBiZSBoYW5kbGVkIHVzaW5nIHRoaXMgbGVnYWN5IHByb3RvY29sLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBgcHJvY2Vzc19jb25uZWN0YCBtaWdodCBiZSBiZWluZyBjYWxsZWQgdG8gZWl0aGVyIHNldCB1cCB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIGJlZm9yZSBhIHJlYWQsIG9yIHBvc3NpYmx5IGEgcmUtZXN0YWJsaXNobWVudCBvZiB0aGUgY29ubmVjdGlvbiB0byBmYWNpbGl0YXRlIHRoZSByZWFkLCBhcyB0aGUgcmVhZCBtaWdodCBiZSBmYWlsaW5nIG9yIHN0YWxlLiBUaGUgZXhhY3QgY29udGV4dCBkaWN0YXRlcywgSSdsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGVuc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjQ2Ljg3MzIxNzUxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0OTcxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19oZWxsb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yMTQ4PXN0YXRpYyBpbnQgcHJvY2Vzc19iYW5uZXJfcGF5bG9hZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yMTkyLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjIxOTM6c3RhdGljIGludCBwcm9jZXNzX2hlbGxvKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTIxOTQte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjgwMT1zdGF0aWMgaW50IHByb2Nlc3NfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MDktXFx0Y2FzZSBGUkFNRV9UQUdfSEVMTE86XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgxMDpcXHRcXHRyZXQgPSBwcm9jZXNzX2hlbGxvKGNvbiwgcCwgZW5kKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODExLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTo0Ni45NjM3MjQ0MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5OTY0MTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbnRlcmFjdGlvbiBGbG93KipcblxuQWxyaWdodCwgc28gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIGBwcm9jZXNzX2hlbGxvYCBpcyBpbnZva2VkLCBhbmQgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIGludm9jYXRpb24gaGFwcGVucyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHByb2Nlc3NfY29udHJvbGAuIFRoaXMgdGVsbHMgbWUgYSBmZXcgaW1tZWRpYXRlIHRoaW5ncyBhYm91dCBob3cgdGhpcyBpbnRlcmFjdGlvbiBsaWtlbHkgdW5mb2xkcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcHJvY2Vzc19jb250cm9sYCBpcyBkb2luZyB0byBjYXVzZSB0aGUgY2FsbCB0byBgcHJvY2Vzc19oZWxsb2AuIElzIGBwcm9jZXNzX2hlbGxvYCBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsLCBvciBwZXJoYXBzIHRyaWdnZXJlZCB2aWEgc29tZSBzb3J0IG9mIG1lc3NhZ2luZyBvciBldmVudCBoYW5kbGluZyB3aXRoaW4gYHByb2Nlc3NfY29udHJvbGA/IFRoYXQgZGV0YWlsIGNoYW5nZXMgaG93IEknZCBhcHByb2FjaCB0cmFjaW5nIGV4ZWN1dGlvbi4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIGBwcm9jZXNzX2NvbnRyb2xgIGl0c2VsZi4gV2hhdCBhcmUgaXRzIGlucHV0cz8gV2hhdCBzdGF0ZSBkb2VzIGl0IG1haW50YWluPyBJcyBpdCBhIGZpbml0ZSBzdGF0ZSBtYWNoaW5lLCBhIGxvb3AsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBjb250cm9sIGZsb3cgd2lsbCBkcmFzdGljYWxseSBpbmZsdWVuY2UgaG93IGBwcm9jZXNzX2hlbGxvYCBnZXRzIGNhbGxlZC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBmb3IgYHByb2Nlc3NfaGVsbG9gIHRvIGJlIGNhbGxlZCBhbmQgaG93IGZyZXF1ZW50bHkgaXQgaXMgY2FsbGVkLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0ZXIgZ3Jhc3Agb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6NTAuNjYzMzY4NDY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY1NTc2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19zZXJ2ZXJfaWRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjQzMT1zdGF0aWMgaW50IHByb2Nlc3NfYXV0aF9zaWduYXR1cmUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjQ3OC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNDc5OnN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI0ODAtXFx0XFx0XFx0XFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjgwMT1zdGF0aWMgaW50IHByb2Nlc3NfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjQtXFx0Y2FzZSBGUkFNRV9UQUdfU0VSVkVSX0lERU5UOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MjU6XFx0XFx0cmV0ID0gcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoY29uLCBwLCBlbmQpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjUwLjg2OTkzMjgyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEyOTQxNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZWVwIERpdmUgb24gYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBhbmQgaXRzIENvbnRleHQqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLnNvLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHByb2Nlc3NfY29udHJvbGAsIHdoaWNoIG1lYW5zIHRoZXJlJ3MgYSBzcGVjaWZpYywgY29udHJvbGxlZCBmbG93IGhhcHBlbmluZy4gYHByb2Nlc3NfY29udHJvbGAsIGluIG15IGV4cGVyaWVuY2UsIGxpa2VseSBtYW5hZ2VzIGEgYnJvYWRlciBzZXQgb2Ygb3BlcmF0aW9ucy4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIGhhbmRsaW5nIHJlcXVlc3RzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgb3ZlcmFsbCBzeXN0ZW0gb3JjaGVzdHJhdGlvbi4gVGhlcmVmb3JlLCB0aGUgZmFjdCB0aGF0IGl0J3MgY2FsbGluZyBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgIHRlbGxzIG1lIHNvbWV0aGluZyBxdWl0ZSBzcGVjaWZpYyBpcyBnb2luZyBvbiB3aXRoaW4gdGhhdCBjb250cm9sIGZsb3cuXG5cbkknbSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgYSBzZXJ2ZXIgaWRlbnRpZmljYXRpb24gcHJvY2VkdXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSByZWdpc3RyYXRpb24gb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgc2VydmVyIGluc3RhbmNlLiBJdCBtaWdodCBpbnZvbHZlIHZlcmlmeWluZyB0aGUgc2VydmVyJ3MgY3JlZGVudGlhbHMsIGZldGNoaW5nIGl0cyBjb25maWd1cmF0aW9uLCBkZXRlcm1pbmluZyBpdHMgcm9sZSwgb3Igc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiBUaGUgcGxhY2VtZW50IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlkZW50aWZpY2F0aW9uIGlzIGEgY3JpdGljYWwgc3RlcCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udHJvbCBzY2hlbWUuIEkgd29uZGVyIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBiZWluZyBwYXNzZWQgaW50byBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNlcnZlciBJRCwgYSBrZXksIG5ldHdvcmsgYWRkcmVzcywgYWxsIG9mIHRoZSBhYm92ZT9cblxuSXQncyB0ZW1wdGluZyB0byB0aGluayBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIElzIHRoaXMgYSBzeXN0ZW0gd2l0aCBtdWx0aXBsZSBzZXJ2ZXIgaW5zdGFuY2VzLCBvciBpcyBpdCBhIHNpbmdsZSwgbW9ub2xpdGhpYyBlbnRpdHk/IFRoaXMgZnVuY3Rpb24gY2FsbCBzaGVkcyBsaWdodCBvbiB0aGUgaW50ZXJuYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGFzY2VydGFpbiBob3cgaXQgaXMgYmVpbmcgdXNlZCBhbmQgaXRzIGltcG9ydGFuY2Ugd2l0aGluIHRoZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTo1NS4yODI4NzkxOTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjE1NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3Nfc2Vzc2lvbl9yZXRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNjA0PXN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JlY29ubmVjdF9vayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjMyLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI2MzM6c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2MzQtXFx0XFx0XFx0XFx0IHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2NzItXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjY3MzpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2NzQtXFx0XFx0XFx0XFx0XFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjgwMT1zdGF0aWMgaW50IHByb2Nlc3NfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MzMtXFx0Y2FzZSBGUkFNRV9UQUdfU0VTU0lPTl9SRVRSWTpcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyODM0OlxcdFxcdHJldCA9IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzNS1cXHRcXHRicmVhaztcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODM2LVxcdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4Mzc6XFx0XFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzOC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6NTUuMzY0MTAwNDM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDIzMzY3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCByZWFjaGFibGUgYW5kIGRpcmVjdGx5IGhhbmRsZSBuZXR3b3JrIGlucHV0LCB0aGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIFRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIG5vdyByZXR1cm5pbmcgZXJyb3JzIGluc3RlYWQgb2YganVzdCB3YXJuaW5ncywgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG1lYW4sIHRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIHdoZXJlIGZ1enppbmcgY2FuIGV4cG9zZSBzb21lIHJlYWxseSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucywgYHByb2Nlc3NfY29ubmVjdGAgaXMgYSB0ZW1wdGluZyB0YXJnZXQsIGJ1dCBpdCdzICpzdGF0aWMqLiBXYWl0IGEgbWludXRlLCBpdCdzIGEgbGFyZ2UgZnVuY3Rpb24gdG9vLiBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGlmIGl0J3MgaW5saW5lZC4gSXQncyBwcm9iYWJseSBub3QsIGJlaW5nIHRoYXQgYmlnLiBCdXQganVzdCB0byBiZSBzdXJlLCBJIHdpbGwgbG9vayBmb3IgaXRzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCB0aG9zZSB3aWxsIGJlIHRoZSByaWdodCBwbGFjZXMgdG8gc3RhcnQgdGhlIGZ1enppbmcgcHJvY2VzcyBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODY0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjAwLjE2NjQ0MDM3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NTUwMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMxND1zdGF0aWMgaW50IHJlYWRfa2VlcGFsaXZlX2FjayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzI4LSAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzMjk6aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzMwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MTA6MDAuMjUxOTA2MTkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzkxMjc4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkhtbSwgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBJc24ndCBTdGF0aWMuLi4qKlxuXG5SaWdodCwgc28gdGhhdCBmdW5jdGlvbiwgYGNlcGhfY29uX3YxX3RyeV9yZWFkYC4uLiBJJ20gbm90aWNpbmcgaXQncyAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBnb3QgZXh0ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhpcyBtb2R1bGUsIGFuZCB0aGF0J3MgaW1tZWRpYXRlbHkgc3BhcmtpbmcgYSBmZXcgY29uc2lkZXJhdGlvbnMuXG5cbkZpcnN0LCBpdCBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gKm91dHNpZGUqIGl0cyBkZWZpbmluZyBjb21waWxhdGlvbiB1bml0LiBUaGF0IGNvdWxkIGJlIGRlbGliZXJhdGUsIGJ1dCBpdCB3YXJyYW50cyBhIGNsb3NlIGxvb2sgYXQgdGhlIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IHdhcyBpbnRlbmRlZCB0byBiZSBtb3JlIGxvY2FsaXplZCwgYnV0IHdhcywgZm9yIHNvbWUgcmVhc29uLCBsZWZ0IG9wZW4/IE9yIGlzIHRoaXMgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgbW9kdWxlJ3MgcHVibGljIEFQST9cblxuU2Vjb25kLCB0aGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaW1wYWN0cyBzeW1ib2wgdmlzaWJpbGl0eS4gVGhlIGxpbmtlciB3aWxsIGJlIGF3YXJlIG9mIGl0IGFuZCB0aGF0IGNhbiBjaGFuZ2UgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGhvdyB0aGlzIGFmZmVjdHMgcG90ZW50aWFsIG5hbWUgY29sbGlzaW9ucyBpbiBsYXJnZXIgcHJvamVjdHMsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIGxpYnJhcmllcyBvciBzaGFyZWQgb2JqZWN0cy4gTWlnaHQgbmVlZCB0byBhdWRpdCBmb3IgcG90ZW50aWFsIG5hbWluZyBjbGFzaGVzLlxuXG5UaGlyZCwgaW4gdGVybXMgb2YgbWFpbnRhaW5hYmlsaXR5LCBpdCByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBnZW51aW5lbHkgbWVhbnQgdG8gYmUgcGFydCBvZiB0aGUgbW9kdWxlJ3MgcHVibGljIGludGVyZmFjZSwgb3IgaWYgaXQgaGFzIHNpbXBseSBiZWVuIGxlZnQgb3BlbiBpbmFkdmVydGVudGx5LiBJZiB0aGlzIHdhc24ndCBpbnRlbnRpb25hbCwgaXQgY291bGQgaW5kaWNhdGUgY29kZSB0aGF0J3MgYXQgcmlzayBvZiBiZWluZyBicm9rZW4gYnkgcmVmYWN0b3JpbmcgaW4gdW5yZWxhdGVkIHBhcnRzIG9mIHRoZSBjb2RlYmFzZS4gSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgaW4gYSBkZWVwZXIgd2F5LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGFkZGl0aW9uYWwgY29tcGxleGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgYXJlIHVzaW5nIHRoaXMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSBjYW4ndCBqdW1wIHRvIGNvbmNsdXNpb25zLCBidXQgdGhpcyBub24tc3RhdGljIGRlY2xhcmF0aW9uIGhhcyBkZWZpbml0ZWx5IGFkZGVkIGEgbGF5ZXIgb2YgaW5xdWlyeSB0byBteSByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMDowNS4zMzEwMzcxMDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTU2MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNzgxPXN0YXRpYyBpbnQgcHJvY2Vzc19hY2soc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODAwLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MDE6c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgwMi17XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTM1PXN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTQxLVxcdGlmIChjb24tXFx1MDAzZXYyLmluX2Rlc2MuZmRfdGFnICE9IEZSQU1FX1RBR19NRVNTQUdFKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI5NDI6XFx0XFx0cmV0dXJuIHByb2Nlc3NfY29udHJvbChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjk0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MTA6MDUuNDEwMjAzODFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMDYwMjUwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo5MDEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMDoxOS43MTYyMzExOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0NjAwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oYW5kbGVfY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTE3PXN0YXRpYyBpbnQgcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzQtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjkzNTpzdGF0aWMgaW50IF9faGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzYte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9Mjk4MD1zdGF0aWMgaW50IGhhbmRsZV9wcmVhbWJsZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDEyLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMTM6XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBDVFJMX0JPRFkoY29uLVxcdTAwM2V2Mi5pbl9idWYpKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDE0LX1cXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwMTY9c3RhdGljIGludCBoYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM1LVxcdFxcdG1lbWNweShidWYsIGNvbi1cXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UsIGN0cmxfbGVuKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDM2OlxcdFxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgYnVmKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM3LVxcdH1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM4LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzk6XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBjb24tXFx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDQwLX1cXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwNDI9c3RhdGljIGludCBoYW5kbGVfY29udHJvbF9yZW1haW5kZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1NC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDU1OlxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVxcdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSAtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1Ni1cXHRcXHRcXHRcXHQgICAgIENFUEhfUFJFQU1CTEVfSU5MSU5FX0xFTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjE5Ljc5MTcxNTIxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzM2NzMxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTA1OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjI3LjUyODQ0OTM5NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NTAzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5MTc9c3RhdGljIGludCBwcm9jZXNzX21lc3NhZ2Uoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTM1OnN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNi17XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTgwPXN0YXRpYyBpbnQgaGFuZGxlX3ByZWFtYmxlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTItXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAxMzpcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIENUUkxfQk9EWShjb24tXFx1MDAzZXYyLmluX2J1ZikpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTQtfVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTUtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAxNjpzdGF0aWMgaW50IGhhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDE3LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzUtXFx0XFx0bWVtY3B5KGJ1ZiwgY29uLVxcdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSwgY3RybF9sZW4pO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzY6XFx0XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBidWYpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzctXFx0fVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzgtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAzOTpcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDAtfVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDEtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzA0MjpzdGF0aWMgaW50IGhhbmRsZV9jb250cm9sX3JlbWFpbmRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA0My17XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDU0LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwNTU6XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBjb24tXFx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlIC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDU2LVxcdFxcdFxcdFxcdCAgICAgQ0VQSF9QUkVBTUJMRV9JTkxJTkVfTEVOKTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxMDc9c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxMjYtXFx0XFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxMjc6XFx0XFx0XFx0cmV0ID0gaGFuZGxlX2NvbnRyb2woY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTI4LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxMjktXFx0XFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MX1JFTUFJTkRFUjpcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTMwOlxcdFxcdFxcdHJldCA9IGhhbmRsZV9jb250cm9sX3JlbWFpbmRlcihjb24pO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxMzEtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjI3LjkyNjk1NzQxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzUyMzU5NjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNDQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMDo0NS40NTA1NTY1NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjM4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvcHVsYXRlX2luX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzA5Nz1zdGF0aWMgdm9pZCBmaW5pc2hfc2tpcChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTA2LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxMDc6c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTA4LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxNzY9aW50IGNlcGhfY29uX3YyX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxODctXFx0ICogV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIHNvbWV0aGluZyBwZW5kaW5nIGhlcmUuICBJZiBub3QsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzE4ODpcXHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxODktXFx0ICogKGNlcGhfdGNwX3JlY3YoKSB3b3VsZCBpbW1lZGlhdGVseSByZXR1cm4gMSkuXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTk4LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxOTk6XFx0XFx0cmV0ID0gcG9wdWxhdGVfaW5faXRlcihjb24pO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMyMDAtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjQ1LjUyOTgwMDc2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI1NDE4OTI4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgQ2VwaCBOZXR3b3JrIFByb3RvY29sIEhhbmRsZXJzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgQ2VwaCBuZXR3b3JrIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgZGF0YSB3aGVuIGl0IGFycml2ZXMgb24gdGhlIHNvY2tldCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IHdvcnRoIGEgZGVlcCBkaXZlLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHRoZXJlLlxuXG5JIGRvdWJsZSBjaGVja2VkLCBhbmQgeWVzLCB0aGV5J3JlIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkgbWFkZSBzdXJlIHRvIHJ1bGUgb3V0IHRoZSBvdGhlciBvYnZpb3VzIGNvbnRlbmRlcnMgdGhhdCBhcmUgY29tbW9ubHkgaW52b2x2ZWQgaW4gdGhlIGNvbm5lY3Rpb24gcHJvY2Vzc2luZywganVzdCB0byBiZSBzdXJlLiBJIGNvbmZpcm1lZCB0aGF0IGBwcm9jZXNzX2Nvbm5lY3RgLCBgcHJvY2Vzc19oZWxsb2AsIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgIGFyZSBhbGwgc3RhdGljLiBUaGF0J3MgZ29vZDsgaXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5TbywgaXQncyBiYWNrIHRvIGZvY3VzaW5nIG9uIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuXG5cbk5vdywgYmVmb3JlIEkgc3RhcnQgY29uc3RydWN0aW5nIGZ1enogaW5wdXRzLCBJIHNob3VsZCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDRVBIX0xJQmAgaXMgZW5hYmxlZC4gSXQgaXMgdW5saWtlbHkgdGhhdCBhbnkgbW9yZSBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkLCBidXQgSSdsbCBkb3VibGUgY2hlY2sgdG8gYmUgc3VyZSwgaW4gdGhlIGBuZXQvY2VwaC9LY29uZmlnYCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMzozOC4wNzE2OTc1NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY1OTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2NlcGgvS2NvbmZpZzoyOmNvbmZpZyBDRVBIX0xJQlxcbm5ldC9jZXBoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ2VwaCBjb3JlIGxpYnJhcnlcXFwiXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnLTIyLVxcbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXFxubmV0L2NlcGgvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9jZXBoL0tjb25maWctMzQtXFxubmV0L2NlcGgvS2NvbmZpZzozNTpjb25maWcgQ0VQSF9MSUJfVVNFX0ROU19SRVNPTFZFUlxcbm5ldC9jZXBoL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGluLWtlcm5lbCBzdXBwb3J0IGZvciBETlMgbG9va3VwXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMzozOC41NDkzNjQzNDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwODAwMzM5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTMyNCwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEzOjU0LjYyOTQwMDY5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTA2MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNlcGhfY29uX3YxX3RyeV9yZWFkXCIsXG4gICAgXCJjZXBoX2Nvbl92Ml90cnlfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAodjEgYW5kIHYyKSBjb25uZWN0aW9uIHByb2Nlc3NpbmcgbG9naWMuIEl0IHJlcGxhY2VzIFdBUk5fT04gYXNzZXJ0aW9ucyB3aXRoIGV4cGxpY2l0IGVycm9yIGhhbmRsaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBmb3IgdmFyaW91cyBjb25uZWN0aW9uIHNlcXVlbmNlIGFuZCBjb25maWd1cmF0aW9uIG1pc21hdGNoZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBlcnJvciBwYXRocy4gVGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIENFUEhfTElCIGFuZCBDRVBIX0ZTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNFUEhfTElCXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sICh2MSBhbmQgdjIpIGNvbm5lY3Rpb24gcHJvY2Vzc2luZyBsb2dpYy4gSXQgcmVwbGFjZXMgV0FSTl9PTiBhc3NlcnRpb25zIHdpdGggZXhwbGljaXQgZXJyb3IgaGFuZGxpbmcgYW5kIGVycm9yIG1lc3NhZ2VzIGZvciB2YXJpb3VzIGNvbm5lY3Rpb24gc2VxdWVuY2UgYW5kIGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2hlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBpbiBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGVycm9yIHBhdGhzLiBUaGUgcmVxdWlyZWQgY29uZmlncyBhcmUgQ0VQSF9MSUIgYW5kIENFUEhfRlMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEzOjU0LjcxMTkxMjE2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjM4ODI3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMzo1NC43MTI0MTc4OThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEzNjMzNzIzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjA5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG4rKysgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuQEAgLTg5OCw4ICs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4gXHRcdCAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSxcbiBcdFx0ICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPVxuLVx0XHRcdGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0XHQgICAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxuK1x0XHRcdCAgICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJjb25uZWN0X3NlcSBtaXNtYXRjaFwiO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoY29uLVx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxuIFx0XHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi45NjZhNWY4MDBjNjBmIDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5AQCAtMjIzNyw5ICsyMjM3LDE2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19oZWxsbyhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcbiBcdFx0ICAgICBfX2Z1bmNfXywgY29uLCBjZXBoX3ByX2FkZHIobXlfYWRkcikpO1xuIFx0fVxuIFxuLVx0V0FSTl9PTihjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikpO1xuLVx0V0FSTl9PTihteV9hZGRyLVx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSk7XG4tXHRXQVJOX09OKCFteV9hZGRyLVx1MDAzZW5vbmNlKTtcbitcdGlmIChjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikgfHxcbitcdCAgICBteV9hZGRyLVx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSB8fFxuK1x0ICAgICFteV9hZGRyLVx1MDAzZW5vbmNlKSB7XG4rXHRcdHByX2VycihcIiVzJWxsZCAlcyBiYWQgbXlfYWRkciAlc1xcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIobXlfYWRkcikpO1xuK1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJiYWQgbXlfYWRkclwiO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdC8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqL1xuIFx0cmV0ID0gcHJlcGFyZV9hdXRoX3JlcXVlc3QoY29uKTtcbkBAIC0yNTI5LDE0ICsyNTM2LDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y29uLVx1MDAzZXBlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpO1xuIFx0Y29uLVx1MDAzZXYyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7XG4gXHRjb24tXHUwMDNlcGVlcl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuLVx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpO1xuK1x0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFx1MDAyNiB+Y2xpZW50LVx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJ3MgcmVxdWlyZWQgMHglbGx4XFxuXCIsXG4rXHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwibWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlc1wiO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcdGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llID0gY29va2llO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKSB7XG4gXHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuK1x0XHRcdHByX2VycihcIiVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRXQVJOX09OKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmICghY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxuXCIsXG4rXHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuK1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcInNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICsyNjQ0LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBjb25uZWN0X3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCIlcyBjb24gJXAgY29ubmVjdF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbitcdGlmIChjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSkge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEsIGNvbm5lY3Rfc2VxKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSArIDE7XG4gXG4gXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xuQEAgLTI2NTEsNyArMjY4NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y2VwaF9kZWNvZGVfNjRfc2FmZShcdTAwMjZwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTtcbi1cdFdBUk5fT04oZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKTtcbitcdGlmIChnbG9iYWxfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGdsb2JhbF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImdsb2JhbF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSA9IGNlcGhfZ2V0X2dsb2JhbF9zZXEoY29uLVx1MDAzZW1zZ3IsIGdsb2JhbF9zZXEpO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEzOjU0LjcxMjQxODYzOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM2MzM0NDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENlcGggTWVzc2VuZ2VyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQgYWRkcmVzc2VzIHNvbWUgcmVwb3J0ZWQgaXNzdWVzIGZyb20gc3l6Ym90LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQgcGFja2V0cyBmcm9tIGEgZmFrZSBDZXBoIHNlcnZlci4gRXNzZW50aWFsbHksIGl0J3MgcmVwbGFjaW5nIGluc3RhbmNlcyB3aGVyZSB0aGUgY29kZSB3YXMgcmVseWluZyBvbiBgV0FSTl9PTmAgdG8gZmxhZyBwcm9ibGVtcyB3aXRoaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGBtZXNzZW5nZXJfdjEuY2AgYW5kIGBtZXNzZW5nZXJfdjIuY2ApIHdpdGggbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuICBXZSdyZSB0YWxraW5nIGFib3V0IHJldHVybmluZyBlcnJvciBjb2RlcyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIGFuZCBzZXR0aW5nIHRoZSBgY29uLVx1MDAzZWVycm9yX21zZ2AgZmllbGQgdG8gcHJvdmlkZSBzb21lIGNvbnRleHQuICBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGNsZWFuaW5nIHVwIHNvbWUgZXJyb3IgaGFuZGxpbmcgcmF0aGVyIHRoYW4ganVzdCBjcmFzaGluZyBvciBlbWl0dGluZyBhIHdhcm5pbmcuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljIGNoYW5nZXMsIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJJ20gc2VlaW5nIGNoZWNrcyBpbiBgbWVzc2VuZ2VyX3YxLmNgIHdpdGhpbiBgcHJvY2Vzc19jb25uZWN0YCBmb3IgYSBgY29ubmVjdF9zZXFgIG1pc21hdGNoLiBJZiB0aGUgZXhwZWN0ZWQgc2VxdWVuY2UgbnVtYmVyIGFuZCB0aGUgcmVjZWl2ZWQgc2VxdWVuY2UgbnVtYmVyIGRvbid0IG1hdGNoLCB0aGUgcGF0Y2ggbm93IGxvZ3MgYW4gZXJyb3IsIHNldHMgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIHJldHVybnMgYW4gZXJyb3IgY29kZSAoLTEpLiBNYWtlcyBzZW5zZTsgdGhpcyBpcyBmYXIgYmV0dGVyIHRoYW4gc2ltcGx5IHRyaWdnZXJpbmcgYSBgV0FSTl9PTmAuXG5cbkluIGBtZXNzZW5nZXJfdjIuY2AgYW5kIHRoZSBgcHJvY2Vzc19oZWxsb2AgZnVuY3Rpb24sIHRoZSBwYXRjaCBub3cgY2hlY2tzIHRoZSBhZGRyZXNzIGZvciB2YWxpZGl0eSwgd2hldGhlciBpdCdzIGJsYW5rIG9yIG5vdCBvZiBhIHR5cGUgd2UgZXhwZWN0LCBhbmQgaWYgdGhlcmUncyBubyBub25jZS4gSWYgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG1ldCwgYW4gZXJyb3IgaXMgbG9nZ2VkLCBhbmQgYWdhaW4sIGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuXG5cblRoZSBjaGFuZ2VzIGluIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAgaW52b2x2ZSBzaW1pbGFyIGxvZ2ljLiBUaGUgcGF0Y2ggbm93IGNoZWNrcyBmb3IgaW52YWxpZCBmZWF0dXJlcywgYSBzZXJ2ZXIgY29va2llLCBhbmQgYW4gaW52YWxpZCBzZXJ2ZXIgY29va2llLiBFYWNoIHRpbWUsIGluc3RlYWQgb2YgYFdBUk5fT05gLCB3ZSBub3cgZ2V0IGFuIGVycm9yIGxvZyBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuLlxuXG5GaW5hbGx5LCBpbiBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgIHRoZSBwYXRjaCBpcyBjaGVja2luZyBmb3Igc2VxdWVuY2UgbnVtYmVycy4gSWYgdGhlIHNlcXVlbmNlIGlzIGludmFsaWQsIHRoZXJlJ3MgYWdhaW4gYW4gZXJyb3IgbG9nIGFuZCBhbiBlcnJvciByZXR1cm4uXG5cbkNydWNpYWxseSwgZnJvbSBteSBpbml0aWFsIGFuYWx5c2lzIGFuZCBjb25maXJtaW5nIHdpdGggdGhlIGRpZmYsIHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSBoZXJlLCBhbmQgYWJzb2x1dGVseSBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHByb3BlciBlcnJvciBoYW5kbGluZy4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQgZm9yIHRoaXM7IEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgYXJlYS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk2LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjE0OjA2LjA3NTc2NzEwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYm90aCB2MSBhbmQgdjIpLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdoZXJlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMgZnJvbSBhIHBlZXIgY291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MuIFRoZSBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBieSByZXR1cm5pbmcgZXJyb3IgY29kZXMgKC0xIG9yIC1FSU5WQUwpIGluc3RlYWQgb2YgY29udGludWluZyBleGVjdXRpb24gYWZ0ZXIgYSB3YXJuaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYm90aCB2MSBhbmQgdjIpLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdoZXJlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMgZnJvbSBhIHBlZXIgY291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MuIFRoZSBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBieSByZXR1cm5pbmcgZXJyb3IgY29kZXMgKC0xIG9yIC1FSU5WQUwpIGluc3RlYWQgb2YgY29udGludWluZyBleGVjdXRpb24gYWZ0ZXIgYSB3YXJuaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 10:06:58 +0000 UTC FinishedAt: 2026-08-08 10:14:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS" ], "series_id": "4ec30de1-909a-4c42-82a9-71f1db2fccac" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ceph_con_v1_try_read", "ceph_con_v2_try_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjA5OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbmluZGV4IGM5ZTAwMmQ5NjMxOTAuLmRmMjI0OGI3YjAyNjUgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbkBAIC04OTgsOCAmIzQzOzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcbiBcdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLFxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9XG4tXHRcdFx0bGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4mIzQzO1x0XHRpZiAoY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuJiM0MztcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0XHQgICAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxuJiM0MztcdFx0XHQgICAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4mIzQzO1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtjb25uZWN0X3NlcSBtaXNtYXRjaFwmIzM0OztcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoY29uLVx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxuIFx0XHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi45NjZhNWY4MDBjNjBmIDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5AQCAtMjIzNyw5ICYjNDM7MjIzNywxNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaGVsbG8oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4gXHRcdCAgICAgX19mdW5jX18sIGNvbiwgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbiBcdH1cbiBcbi1cdFdBUk5fT04oY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpKTtcbi1cdFdBUk5fT04obXlfYWRkci1cdTAwM2V0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkpO1xuLVx0V0FSTl9PTighbXlfYWRkci1cdTAwM2Vub25jZSk7XG4mIzQzO1x0aWYgKGNlcGhfYWRkcl9pc19ibGFuayhteV9hZGRyKSB8fCBjZXBoX2FkZHJfcG9ydChteV9hZGRyKSB8fFxuJiM0MztcdCAgICBteV9hZGRyLVx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSB8fFxuJiM0MztcdCAgICAhbXlfYWRkci1cdTAwM2Vub25jZSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBiYWQgbXlfYWRkciAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbiYjNDM7XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtiYWQgbXlfYWRkclwmIzM0OztcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdC8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqL1xuIFx0cmV0ID0gcHJlcGFyZV9hdXRoX3JlcXVlc3QoY29uKTtcbkBAIC0yNTI5LDE0ICYjNDM7MjUzNiwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRpZiAocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlciYjMzk7cyByZXF1aXJlZCAweCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDttaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUgPSBjb29raWU7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHtcbiBcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKTtcbiYjNDM7XHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuJiM0MztcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cJiMzNDs7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuJiM0MztcdFx0aWYgKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuJiM0MztcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbiYjNDM7XHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwmIzM0OztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICYjNDM7MjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbiYjNDM7XHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbiYjNDM7XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4mIzQzO1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2hcJiMzNDs7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgJiM0MzsyNjg0LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgZ2xvYmFsX3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwmIzM0OywgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4mIzQzO1x0aWYgKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxLCBnbG9iYWxfc2VxKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtnbG9iYWxfc2VxIG1pc21hdGNoXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjA5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYwppbmRleCBjOWUwMDJkOTYzMTkwLi5kZjIyNDhiN2IwMjY1IDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYwpAQCAtODk4LDggJiM0Mzs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKQogCQkgICAgIGNvbi0mZ3Q7djEucGVlcl9nbG9iYWxfc2VxLAogCQkgICAgIGxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLAogCQkgICAgIGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEpOwotCQlXQVJOX09OKGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEgIT0KLQkJCWxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTsKJiM0MzsJCWlmIChjb24tJmd0O3YxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XG4mIzM0OywKJiM0MzsJCQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkJICAgICAgIGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEsCiYjNDM7CQkJICAgICAgIGxlMzJfdG9fY3B1KGNvbi0mZ3Q7djEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTsKJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiAKIAkJaWYgKGNvbi0mZ3Q7djEuaW5fcmVwbHkuZmxhZ3MgJmFtcDsgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkKIAkJCWNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTsKZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMKaW5kZXggMDVmNmVlYTI5OWZjMC4uOTY2YTVmODAwYzYwZiAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMKQEAgLTIyMzcsOSAmIzQzOzIyMzcsMTYgQEAgc3RhdGljIGludCBwcm9jZXNzX2hlbGxvKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKQogCQkgICAgIF9fZnVuY19fLCBjb24sIGNlcGhfcHJfYWRkcihteV9hZGRyKSk7CiAJfQogCi0JV0FSTl9PTihjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikpOwotCVdBUk5fT04obXlfYWRkci0mZ3Q7dHlwZSAhPSBDRVBIX0VOVElUWV9BRERSX1RZUEVfQU5ZKTsKLQlXQVJOX09OKCFteV9hZGRyLSZndDtub25jZSk7CiYjNDM7CWlmIChjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikgfHwKJiM0MzsJICAgIG15X2FkZHItJmd0O3R5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSB8fAomIzQzOwkgICAgIW15X2FkZHItJmd0O25vbmNlKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgYmFkIG15X2FkZHIgJXNcbiYjMzQ7LAomIzQzOwkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTsKJiM0MzsJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtiYWQgbXlfYWRkciYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAogCS8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqLwogCXJldCA9IHByZXBhcmVfYXV0aF9yZXF1ZXN0KGNvbik7CkBAIC0yNTI5LDE0ICYjNDM7MjUzNiwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljb24tJmd0O3BlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpOwogCWNvbi0mZ3Q7djIucGVlcl9nbG9iYWxfc2VxID0gZ2xvYmFsX3NlcTsKIAljb24tJmd0O3BlZXJfZmVhdHVyZXMgPSBmZWF0dXJlczsKLQlXQVJOX09OKHJlcXVpcmVkX2ZlYXR1cmVzICZhbXA7IH5jbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcyk7CiYjNDM7CWlmIChyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBteSBzdXBwb3J0ZWQgMHglbGx4LCBzZXJ2ZXImIzM5O3MgcmVxdWlyZWQgMHglbGx4XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7bWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcyYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLnNlcnZlcl9jb29raWUgPSBjb29raWU7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkgewogCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7Ci0JCVdBUk5fT04oY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmIChjb24tJmd0O3YyLnNlcnZlcl9jb29raWUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfSBlbHNlIHsKLQkJV0FSTl9PTighY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmICghY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpKTsKJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCiAJY2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pOwpAQCAtMjYxOCw3ICYjNDM7MjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY2VwaF9kZWNvZGVfNjRfc2FmZSgmYW1wO3AsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7Ci0JV0FSTl9PTihjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKTsKJiM0MzsJaWYgKGNvbm5lY3Rfc2VxICZsdDs9IGNvbi0mZ3Q7djIuY29ubmVjdF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5jb25uZWN0X3NlcSA9IGNvbm5lY3Rfc2VxICYjNDM7IDE7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwpAQCAtMjY1MSw3ICYjNDM7MjY4NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxuJiMzNDssIF9fZnVuY19fLCBjb24sIGdsb2JhbF9zZXEpOwotCVdBUk5fT04oZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpOwomIzQzOwlpZiAoZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAmZ3Q7ICVsbHUsIGdvdCAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNvbi0mZ3Q7djIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Z2xvYmFsX3NlcSBtaXNtYXRjaCYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi0mZ3Q7bXNnciwgZ2xvYmFsX3NlcSk7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENlcGggTWVzc2VuZ2VyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBoaXR0aW5nIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgYSBjcml0aWNhbCBjaGFuZ2U7IHRoZXkmIzM5O3JlIHN3YXBwaW5nIG91dCBgV0FSTl9PTmAgZm9yIHByb3BlciBlcnJvciBoYW5kbGluZy4gVGhhdCBtZWFucyBpbnN0ZWFkIG9mIGp1c3QgbG9nZ2luZyBhIHdhcm5pbmcgYW5kIGxldHRpbmcgdGhpbmdzIGtlZXAgZ29pbmcsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm93IHJldHVybmluZyBlcnJvciBjb2RlcyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIGFuZCBzZXR0aW5nIGBjb24tJmd0O2Vycm9yX21zZ2AsIGVmZmVjdGl2ZWx5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgYXQgdGhhdC4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgKndoaWNoKiBmdW5jdGlvbnMgYXJlIGJlaW5nIHRvdWNoZWQuIEkgc2VlIGBwcm9jZXNzX2Nvbm5lY3RgIGluIG1lc3NlbmdlciB2MSwgYW5kIHRoZW4gaW4gdjIsIHdlJiMzOTt2ZSBnb3QgYHByb2Nlc3NfaGVsbG9gLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgY29yZSB0byB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wuIENlcGgsIG9mIGNvdXJzZSwgYmVpbmcgdGhhdCBkaXN0cmlidXRlZCBuZXR3b3JrIGZpbGUgc3lzdGVtIGFuZCBibG9jayBkZXZpY2UgcHJvdG9jb2wuCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gQ2VwaCBjYW4gYmUgbW91bnRlZCBvciBpbnRlcmFjdGVkIHdpdGggb3ZlciB0aGUgbmV0d29yaywgZXZlbiBqdXN0IHVzaW5nIGxvb3BiYWNrLiBUaGlzIG1ha2VzIGl0IHN1cGVyIHJlbGV2YW50IHRvIHRlc3RpbmcuIFdoaWNoIGJyaW5ncyB1cyB0byB0aGUgbmV4dCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBhbmQgZmlsZXN5c3RlbSBwcm90b2NvbCBwYXJzaW5nIGxvZ2ljLCBhIHJlc291bmRpbmcgKnllcyouIEFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zLgoKU28sIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgd2UgbmVlZCB0byBidWlsZCBhbmQgdGVzdCB0aGlzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWdzIGluIGBuZXQvY2VwaC9gLiBJdCYjMzk7cyB1c3VhbGx5IGNvbnRyb2xsZWQgYnkgYENPTkZJR19DRVBIX0xJQmAuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gZWl0aGVyIGBuZXQvY2VwaC9LY29uZmlnYCBvciBwb3NzaWJseSBgZnMvY2VwaC9LY29uZmlnYCB0byBwaW4gZG93biB0aG9zZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENFUEhfTElCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcbm5ldC9jZXBoL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NlcGggY29yZSBsaWJyYXJ5XCYjMzQ7XG4tLVxubmV0L2NlcGgvS2NvbmZpZy0yMi1cbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXG5uZXQvY2VwaC9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9jZXBoL0tjb25maWctMzQtXG5uZXQvY2VwaC9LY29uZmlnOjM1OmNvbmZpZyBDRVBIX0xJQl9VU0VfRE5TX1JFU09MVkVSXG5uZXQvY2VwaC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBzdWJqZWN0OgoKKipDb25zaWRlcmluZyBDRVBIIExpYnJhcnkgT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyB3ZSYjMzk7cmUgZ29pbmcgdG8gYXBwcm9hY2ggdGhpcywgaXQgbG9va3MgbGlrZSBgQ0VQSF9MSUJgIGlzIGFic29sdXRlbHkgdGhlIGNlbnRyYWwgbGlicmFyeSB0byBmb2N1cyBvbi4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7bGwgYmUgYnVpbGRpbmcgb24sIG5vIHF1ZXN0aW9uLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyBpdHMgY2FwYWJpbGl0aWVzIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMuCgpBbmQgdGhpbmtpbmcgYnJvYWRlciwgSSBzaG91bGQgYWxzbyBjb25zaWRlciB3aGV0aGVyIGVuYWJsaW5nIGBDRVBIX0ZTYCBtaWdodCBicmluZyBzb21lIGltbWVkaWF0ZSBhZHZhbnRhZ2VzLCBvciBiZSBhIHVzZWZ1bCBwYXRoIGRvd24gdGhlIHJvYWQsIGlmIHdlJiMzOTtyZSBsb29raW5nIHRvIGVuYWJsZSBhIHBhcnRpY3VsYXIgZmVhdHVyZSBzZXQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpdmUgaW4gZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRVBIX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY2VwaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xuZnMvY2VwaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZzoyMDpjb25maWcgQ0VQSF9GU0NBQ0hFXG5mcy9jZXBoL0tjb25maWctMjEtXHRib29sIFwmIzM0O0VuYWJsZSBDZXBoIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWc9Mjc9ZW5kaWZcbmZzL2NlcGgvS2NvbmZpZy0yOC1cbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcbmZzL2NlcGgvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7Q2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZy0zOC1cbmZzL2NlcGgvS2NvbmZpZzozOTpjb25maWcgQ0VQSF9GU19TRUNVUklUWV9MQUJFTFxuZnMvY2VwaC9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtDZXBoRlMgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENlcGggTWVzc2VuZ2VyIEVycm9yIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhIGdvb2QgbW92ZS4gUmVwbGFjaW5nIGBXQVJOX09OYCB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIG5vdCBqdXN0IGEgY29zbWV0aWMgdGhpbmc7IGl0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3csIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBQcmV2aW91c2x5LCBhIHdhcm5pbmcgbWlnaHQgaGF2ZSBtYXNrZWQgYSBkZWVwZXIgcHJvYmxlbSwgbGVhZGluZyB0byBwb3RlbnRpYWwgaW5zdGFiaWxpdHkgb3IgY3Jhc2hlcyBkb3duIHRoZSBsaW5lLiBSZXR1cm5pbmcgYW4gZXJyb3IgYWxsb3dzIGZvciBtb3JlIHJvYnVzdCBlcnJvciBwcm9wYWdhdGlvbiBhbmQgaGFuZGxpbmcgaGlnaGVyIHVwIHRoZSBjYWxsIHN0YWNrLCB3aGljaCBpcyBjcml0aWNhbCBpbiBhIGRpc3RyaWJ1dGVkIHN5c3RlbSBsaWtlIENlcGguCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBhZmZlY3RzIGBwcm9jZXNzX2Nvbm5lY3RgIGluIHRoZSB2MSBtZXNzZW5nZXIsIGFuZCBgcHJvY2Vzc19oZWxsb2AsIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgIGluIHRoZSB2MiBtZXNzZW5nZXIuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgdGhlIGhlYXJ0IG9mIHRoZSBDZXBoIG5ldHdvcmsgbWVzc2VuZ2VyIHByb3RvY29sIGltcGxlbWVudGF0aW9ucywgaGFuZGxpbmcgaW5jb21pbmcgbWVzc2FnZXMuIEdpdmVuIHRoZWlyIHJvbGUgaW4gcGFyc2luZyBuZXR3b3JrIGlucHV0LCBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbmNyZWRpYmx5IHJlbGV2YW50LiBUaGlzIGNoYW5nZSB3b3VsZCBpbmZsdWVuY2UgdGhlIGZ1enppbmcgc3RyYXRlZ3kgYmVjYXVzZSBwcmV2aW91c2x5LCBhbiBlcnJvciBkdXJpbmcgZnV6emluZyBtYXkgaGF2ZSBjYXVzZWQgYSBgV0FSTl9PTmAgdG8gYmUgZmlyZWQgYW5kIHRoZW4gYWxsb3dlZCB0aGUgY29kZSB0byBjb250aW51ZS4gTm93IHdlIGV4cGVjdCBlcnJvcnMgdG8gY2F1c2UgdGhlIG1lc3NhZ2UgdG8gYmUgZHJvcHBlZCBvciByZWplY3RlZCwgbWFraW5nIHRlc3RpbmcgbGVzcyBmb3JnaXZpbmcuCgpOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBwcm9jZXNzX2Nvbm5lY3RgIGluIHYxIGlzIGNhbGxlZCBmcm9tIGByZWFkX3BhcnRpYWxfY29ubmVjdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHNvIHRoYXQgc2hvdWxkIGJlIGFjY2Vzc2libGUuIFRoZSB2MiBmdW5jdGlvbnPigJRgcHJvY2Vzc19oZWxsb2AsIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxg4oCUYXJlIGNhbGxlZCBmcm9tIHRoZSB2MiBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIHRoZXkmIzM5O3JlIGFjdGl2ZWx5IHVzZWQgaW4gdGhlIHN5c3RlbS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgb3B0aW9ucyBub3cuIGBDRVBIX0xJQmAgaXMgb2J2aW91c2x5IHRoZSBjb3JlIGxpYnJhcnkgd2UgbmVlZC4gVG8gZW5zdXJlIHRoZSBjb2RlIGluIGBuZXQvY2VwaC9gIGlzIGNvbXBpbGVkLCBgQ0VQSF9MSUJgIGlzIHN1ZmZpY2llbnQsIGJ1dCB0byAqdXNlKiB0aGF0IGNvZGUsIHdlIHdvdWxkIG1vc3QgbGlrZWx5IG5lZWQgZWl0aGVyIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgLiBJZiB3ZSYjMzk7cmUgdGVzdGluZyB0aGVzZSBtZXNzZW5nZXIgZnVuY3Rpb25zLCBlbmFibGluZyBgQ0VQSF9MSUJgIGFsb25nIHdpdGggZWl0aGVyIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgIHdvdWxkIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGxpa2VseSB1c2VkIHdpdGhpbiBvdXIgdGVzdCBzZXR1cC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjb2RlLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYCwgdG8gZ2V0IGEgcHJlY2lzZSBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCBob3cgaXQmIzM5O2xsIGFmZmVjdCB0aGUgZnV6emluZyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz02OTc9c3RhdGljIGludCBwcm9jZXNzX2Jhbm5lcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzM5LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6NzQwOnN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTc0MS17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ2LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6NzQ3Olx0ZG91dChcJiMzNDtwcm9jZXNzX2Nvbm5lY3Qgb24gJXAgdGFnICVkXFxuXCYjMzQ7LCBjb24sIGNvbi1cdTAwM2V2MS5pbl90YWcpO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ4LVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgwMi1cdFx0Y29uLVx1MDAzZXYxLmF1dGhfcmV0cnkmIzQzOyYjNDM7O1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODAzOlx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCAlcCBnb3QgQkFEQVVUSE9SSVpFUiBhdHRlbXB0ICVkXFxuXCYjMzQ7LCBjb24sXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MDQtXHRcdCAgICAgY29uLVx1MDAzZXYxLmF1dGhfcmV0cnkpO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgyMy1cdFx0ICovXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4MjQ6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0IGdvdCBSRVNFVCBwZWVyIHNlcSAldVxcblwmIzM0Oyxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgyNS1cdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NDktXHRcdCAqL1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODUwOlx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfU0VTU0lPTiBteSBzZXEgJXUsIHBlZXIgJXVcXG5cJiMzNDssXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NTEtXHRcdCAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLm91dF9jb25uZWN0LmNvbm5lY3Rfc2VxKSxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NjUtXHRcdCAqL1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODY2Olx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfR0xPQkFMIG15ICV1IHBlZXJfZ3NlcSAldVxcblwmIzM0Oyxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg2Ny1cdFx0ICAgICBjb24tXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg5Ni1cdFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBzZXJ2ZXJfZmVhdDtcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjg5NzpcdFx0ZG91dChcJiMzNDtwcm9jZXNzX2Nvbm5lY3QgZ290IFJFQURZIGdzZXEgJWQgY3NlcSAlZCAoJWQpXFxuXCYjMzQ7LFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODk4LVx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMyOT1pbnQgY2VwaF9jb25fdjFfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzNzItXHRcdFx0Z290byBvdXQ7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzoxMzczOlx0XHRyZXQgPSBwcm9jZXNzX2Nvbm5lY3QoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzNzQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBjb25uZWN0aW9uIGJldHdlZW4gYHByb2Nlc3NfY29ubmVjdGAgYW5kIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0cmFjaW5nIHRoZSBmbG93IG9mIGV2ZW50cyB3aXRoaW4gYSBDZXBoIGNvbm5lY3Rpb24uIEkgdW5kZXJzdGFuZCBgcHJvY2Vzc19jb25uZWN0YCBpcyBsaWtlbHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgaW5pdGlhbCBoYW5kc2hha2UgYW5kIGVzdGFibGlzaG1lbnQgb2YgYSBjb25uZWN0aW9uLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgdGhlIGNsaWVudCBhbmQgT1NEIChvciBNb25pdG9yLCBvciB3aGF0ZXZlciBDZXBoIGNvbXBvbmVudCBpcyBpbnZvbHZlZCkgYWdyZWUgb24gcGFyYW1ldGVycyBhbmQgZ2V0IHRoaW5ncyBzZXQgdXAuCgpUaGVuLCB0byBzZWUgdGhhdCBgcHJvY2Vzc19jb25uZWN0YCBpcyBjYWxsZWQgKmZyb20qIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgdHJpZ2dlcnMgc29tZSBhZGRpdGlvbmFsIGFuYWx5c2lzLiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIHN1Z2dlc3RzIHRoaXMgaXMgdGhlICpyZWFkKiBwYXRoLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgb2xkZXIgdjEgY29ubmVjdGlvbiBwcm90b2NvbC4gVGhpcyBwcm9iYWJseSBtZWFucyBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB2aWEgYHByb2Nlc3NfY29ubmVjdGAsIHN1YnNlcXVlbnQgcmVhZHMgYXJlIGF0dGVtcHRpbmcgdG8gYmUgaGFuZGxlZCB1c2luZyB0aGlzIGxlZ2FjeSBwcm90b2NvbC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgYHByb2Nlc3NfY29ubmVjdGAgbWlnaHQgYmUgYmVpbmcgY2FsbGVkIHRvIGVpdGhlciBzZXQgdXAgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBiZWZvcmUgYSByZWFkLCBvciBwb3NzaWJseSBhIHJlLWVzdGFibGlzaG1lbnQgb2YgdGhlIGNvbm5lY3Rpb24gdG8gZmFjaWxpdGF0ZSB0aGUgcmVhZCwgYXMgdGhlIHJlYWQgbWlnaHQgYmUgZmFpbGluZyBvciBzdGFsZS4gVGhlIGV4YWN0IGNvbnRleHQgZGljdGF0ZXMsIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZW5zdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX2hlbGxvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjE0OD1zdGF0aWMgaW50IHByb2Nlc3NfYmFubmVyX3BheWxvYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTIxOTItXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyMTkzOnN0YXRpYyBpbnQgcHJvY2Vzc19oZWxsbyhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTIxOTQte1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI4MDE9c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgwOS1cdGNhc2UgRlJBTUVfVEFHX0hFTExPOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgxMDpcdFx0cmV0ID0gcHJvY2Vzc19oZWxsbyhjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODExLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEludGVyYWN0aW9uIEZsb3cqKgoKQWxyaWdodCwgc28gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB3aGVyZSBgcHJvY2Vzc19oZWxsb2AgaXMgaW52b2tlZCwgYW5kIHRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBpbnZvY2F0aW9uIGhhcHBlbnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBwcm9jZXNzX2NvbnRyb2xgLiBUaGlzIHRlbGxzIG1lIGEgZmV3IGltbWVkaWF0ZSB0aGluZ3MgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3Rpb24gbGlrZWx5IHVuZm9sZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHByb2Nlc3NfY29udHJvbGAgaXMgZG9pbmcgdG8gY2F1c2UgdGhlIGNhbGwgdG8gYHByb2Nlc3NfaGVsbG9gLiBJcyBgcHJvY2Vzc19oZWxsb2AgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCwgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgdmlhIHNvbWUgc29ydCBvZiBtZXNzYWdpbmcgb3IgZXZlbnQgaGFuZGxpbmcgd2l0aGluIGBwcm9jZXNzX2NvbnRyb2xgPyBUaGF0IGRldGFpbCBjaGFuZ2VzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRyYWNpbmcgZXhlY3V0aW9uLiBJIHNob3VsZCBsb29rIGludG8gdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYHByb2Nlc3NfY29udHJvbGAgaXRzZWxmLiBXaGF0IGFyZSBpdHMgaW5wdXRzPyBXaGF0IHN0YXRlIGRvZXMgaXQgbWFpbnRhaW4/IElzIGl0IGEgZmluaXRlIHN0YXRlIG1hY2hpbmUsIGEgbG9vcCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSB0eXBlIG9mIGNvbnRyb2wgZmxvdyB3aWxsIGRyYXN0aWNhbGx5IGluZmx1ZW5jZSBob3cgYHByb2Nlc3NfaGVsbG9gIGdldHMgY2FsbGVkLiBNeSBpbnN0aW5jdCBpcyB0byBkZXRlcm1pbmUgd2hhdCBjb25kaXRpb25zIG11c3QgYmUgbWV0IGZvciBgcHJvY2Vzc19oZWxsb2AgdG8gYmUgY2FsbGVkIGFuZCBob3cgZnJlcXVlbnRseSBpdCBpcyBjYWxsZWQuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBncmFzcCBvbiB0aGUgcHVycG9zZSBvZiB0aGlzIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3Nfc2VydmVyX2lkZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjQzMT1zdGF0aWMgaW50IHByb2Nlc3NfYXV0aF9zaWduYXR1cmUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI0NzgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNDc5OnN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjQ4MC1cdFx0XHRcdHZvaWQgKnAsIHZvaWQgKmVuZClcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yODAxPXN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjQtXHRjYXNlIEZSQU1FX1RBR19TRVJWRVJfSURFTlQ6XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyODI1Olx0XHRyZXQgPSBwcm9jZXNzX3NlcnZlcl9pZGVudChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODI2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZWVwIERpdmUgb24gYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBhbmQgaXRzIENvbnRleHQqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi5zbywgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBwcm9jZXNzX2NvbnRyb2xgLCB3aGljaCBtZWFucyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljLCBjb250cm9sbGVkIGZsb3cgaGFwcGVuaW5nLiBgcHJvY2Vzc19jb250cm9sYCwgaW4gbXkgZXhwZXJpZW5jZSwgbGlrZWx5IG1hbmFnZXMgYSBicm9hZGVyIHNldCBvZiBvcGVyYXRpb25zLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGhhbmRsaW5nIHJlcXVlc3RzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgb3ZlcmFsbCBzeXN0ZW0gb3JjaGVzdHJhdGlvbi4gVGhlcmVmb3JlLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxpbmcgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCB0ZWxscyBtZSBzb21ldGhpbmcgcXVpdGUgc3BlY2lmaWMgaXMgZ29pbmcgb24gd2l0aGluIHRoYXQgY29udHJvbCBmbG93LgoKSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgYSBzZXJ2ZXIgaWRlbnRpZmljYXRpb24gcHJvY2VkdXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSByZWdpc3RyYXRpb24gb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgc2VydmVyIGluc3RhbmNlLiBJdCBtaWdodCBpbnZvbHZlIHZlcmlmeWluZyB0aGUgc2VydmVyJiMzOTtzIGNyZWRlbnRpYWxzLCBmZXRjaGluZyBpdHMgY29uZmlndXJhdGlvbiwgZGV0ZXJtaW5pbmcgaXRzIHJvbGUsIG9yIHNldHRpbmcgdXAgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gVGhlIHBsYWNlbWVudCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpZGVudGlmaWNhdGlvbiBpcyBhIGNyaXRpY2FsIHN0ZXAgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRyb2wgc2NoZW1lLiBJIHdvbmRlciB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgYmVpbmcgcGFzc2VkIGludG8gYHByb2Nlc3Nfc2VydmVyX2lkZW50YC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzZXJ2ZXIgSUQsIGEga2V5LCBuZXR3b3JrIGFkZHJlc3MsIGFsbCBvZiB0aGUgYWJvdmU/CgpJdCYjMzk7cyB0ZW1wdGluZyB0byB0aGluayBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIElzIHRoaXMgYSBzeXN0ZW0gd2l0aCBtdWx0aXBsZSBzZXJ2ZXIgaW5zdGFuY2VzLCBvciBpcyBpdCBhIHNpbmdsZSwgbW9ub2xpdGhpYyBlbnRpdHk/IFRoaXMgZnVuY3Rpb24gY2FsbCBzaGVkcyBsaWdodCBvbiB0aGUgaW50ZXJuYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBhc2NlcnRhaW4gaG93IGl0IGlzIGJlaW5nIHVzZWQgYW5kIGl0cyBpbXBvcnRhbmNlIHdpdGhpbiB0aGUgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX3Nlc3Npb25fcmV0cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNjA0PXN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JlY29ubmVjdF9vayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjYzMi1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI2MzM6c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjYzNC1cdFx0XHRcdCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY3Mi1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI2NzM6c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2NzQtXHRcdFx0XHRcdHZvaWQgKnAsIHZvaWQgKmVuZClcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yODAxPXN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MzMtXHRjYXNlIEZSQU1FX1RBR19TRVNTSU9OX1JFVFJZOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgzNDpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5KGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MzUtXHRcdGJyZWFrO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzNi1cdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgzNzpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODM4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCByZWFjaGFibGUgYW5kIGRpcmVjdGx5IGhhbmRsZSBuZXR3b3JrIGlucHV0LCB0aGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBUaGUgY2hhbmdlcyBoYXZlIGJlZW4gZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LCBub3cgcmV0dXJuaW5nIGVycm9ycyBpbnN0ZWFkIG9mIGp1c3Qgd2FybmluZ3MsIHdoaWNoIG1ha2VzIGl0IGFuIGlkZWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSBtZWFuLCB0aGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBzY2VuYXJpbyB3aGVyZSBmdXp6aW5nIGNhbiBleHBvc2Ugc29tZSByZWFsbHkgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucywgYHByb2Nlc3NfY29ubmVjdGAgaXMgYSB0ZW1wdGluZyB0YXJnZXQsIGJ1dCBpdCYjMzk7cyAqc3RhdGljKi4gV2FpdCBhIG1pbnV0ZSwgaXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiB0b28uIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGlmIGl0JiMzOTtzIGlubGluZWQuIEl0JiMzOTtzIHByb2JhYmx5IG5vdCwgYmVpbmcgdGhhdCBiaWcuIEJ1dCBqdXN0IHRvIGJlIHN1cmUsIEkgd2lsbCBsb29rIGZvciBpdHMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRob3NlIHdpbGwgYmUgdGhlIHJpZ2h0IHBsYWNlcyB0byBzdGFydCB0aGUgZnV6emluZyBwcm9jZXNzIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMxND1zdGF0aWMgaW50IHJlYWRfa2VlcGFsaXZlX2FjayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTMyOC0gKi9cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzMjk6aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzMzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkhtbSwgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBJc24mIzM5O3QgU3RhdGljLi4uKioKClJpZ2h0LCBzbyB0aGF0IGZ1bmN0aW9uLCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgLi4uIEkmIzM5O20gbm90aWNpbmcgaXQmIzM5O3MgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGdvdCBleHRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGlzIG1vZHVsZSwgYW5kIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3BhcmtpbmcgYSBmZXcgY29uc2lkZXJhdGlvbnMuCgpGaXJzdCwgaXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tICpvdXRzaWRlKiBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBjb3VsZCBiZSBkZWxpYmVyYXRlLCBidXQgaXQgd2FycmFudHMgYSBjbG9zZSBsb29rIGF0IHRoZSBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCB3YXMgaW50ZW5kZWQgdG8gYmUgbW9yZSBsb2NhbGl6ZWQsIGJ1dCB3YXMsIGZvciBzb21lIHJlYXNvbiwgbGVmdCBvcGVuPyBPciBpcyB0aGlzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIG1vZHVsZSYjMzk7cyBwdWJsaWMgQVBJPwoKU2Vjb25kLCB0aGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaW1wYWN0cyBzeW1ib2wgdmlzaWJpbGl0eS4gVGhlIGxpbmtlciB3aWxsIGJlIGF3YXJlIG9mIGl0IGFuZCB0aGF0IGNhbiBjaGFuZ2UgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGhvdyB0aGlzIGFmZmVjdHMgcG90ZW50aWFsIG5hbWUgY29sbGlzaW9ucyBpbiBsYXJnZXIgcHJvamVjdHMsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsaWJyYXJpZXMgb3Igc2hhcmVkIG9iamVjdHMuIE1pZ2h0IG5lZWQgdG8gYXVkaXQgZm9yIHBvdGVudGlhbCBuYW1pbmcgY2xhc2hlcy4KClRoaXJkLCBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHksIGl0IHJhaXNlcyB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGdlbnVpbmVseSBtZWFudCB0byBiZSBwYXJ0IG9mIHRoZSBtb2R1bGUmIzM5O3MgcHVibGljIGludGVyZmFjZSwgb3IgaWYgaXQgaGFzIHNpbXBseSBiZWVuIGxlZnQgb3BlbiBpbmFkdmVydGVudGx5LiBJZiB0aGlzIHdhc24mIzM5O3QgaW50ZW50aW9uYWwsIGl0IGNvdWxkIGluZGljYXRlIGNvZGUgdGhhdCYjMzk7cyBhdCByaXNrIG9mIGJlaW5nIGJyb2tlbiBieSByZWZhY3RvcmluZyBpbiB1bnJlbGF0ZWQgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBpbiBhIGRlZXBlciB3YXkuCgpGaW5hbGx5LCBJIHNob3VsZCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGFkZGl0aW9uYWwgY29tcGxleGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgYXJlIHVzaW5nIHRoaXMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSBjYW4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucywgYnV0IHRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBoYXMgZGVmaW5pdGVseSBhZGRlZCBhIGxheWVyIG9mIGlucXVpcnkgdG8gbXkgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jZXNzX2NvbnRyb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNzgxPXN0YXRpYyBpbnQgcHJvY2Vzc19hY2soc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgwMC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MDE6c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODAyLXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTM1PXN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjk0MS1cdGlmIChjb24tXHUwMDNldjIuaW5fZGVzYy5mZF90YWcgIT0gRlJBTUVfVEFHX01FU1NBR0UpXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTQyOlx0XHRyZXR1cm4gcHJvY2Vzc19jb250cm9sKGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2hhbmRsZV9jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkxNz1zdGF0aWMgaW50IHByb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI5MzU6c3RhdGljIGludCBfX2hhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcClcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzYte1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5ODA9c3RhdGljIGludCBoYW5kbGVfcHJlYW1ibGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTItXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDEzOlx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBDVFJMX0JPRFkoY29uLVx1MDAzZXYyLmluX2J1ZikpO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAxNC19XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzAxNj1zdGF0aWMgaW50IGhhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM1LVx0XHRtZW1jcHkoYnVmLCBjb24tXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UsIGN0cmxfbGVuKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzY6XHRcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgYnVmKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzctXHR9XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM4LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAzOTpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDAtfVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwNDI9c3RhdGljIGludCBoYW5kbGVfY29udHJvbF9yZW1haW5kZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNTQtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDU1Olx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBjb24tXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UgLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1Ni1cdFx0XHRcdCAgICAgQ0VQSF9QUkVBTUJMRV9JTkxJTkVfTEVOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5MTc9c3RhdGljIGludCBwcm9jZXNzX21lc3NhZ2Uoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzQtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTM1OnN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTM2LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTgwPXN0YXRpYyBpbnQgaGFuZGxlX3ByZWFtYmxlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDEyLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAxMzpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgQ1RSTF9CT0RZKGNvbi1cdTAwM2V2Mi5pbl9idWYpKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTQtfVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAxNS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMTY6c3RhdGljIGludCBoYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDE3LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM1LVx0XHRtZW1jcHkoYnVmLCBjb24tXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UsIGN0cmxfbGVuKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzY6XHRcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgYnVmKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzctXHR9XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM4LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAzOTpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDAtfVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA0MS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwNDI6c3RhdGljIGludCBoYW5kbGVfY29udHJvbF9yZW1haW5kZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA0My17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1NC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwNTU6XHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSAtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDU2LVx0XHRcdFx0ICAgICBDRVBIX1BSRUFNQkxFX0lOTElORV9MRU4pO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxMDc9c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTI2LVx0XHRjYXNlIElOX1NfSEFORExFX0NPTlRST0w6XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTI3Olx0XHRcdHJldCA9IGhhbmRsZV9jb250cm9sKGNvbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTI4LVx0XHRcdGJyZWFrO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzEyOS1cdFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MX1JFTUFJTkRFUjpcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxMzA6XHRcdFx0cmV0ID0gaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKGNvbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTMxLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BvcHVsYXRlX2luX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDk3PXN0YXRpYyB2b2lkIGZpbmlzaF9za2lwKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTA2LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzEwNzpzdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzEwOC17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzE3Nj1pbnQgY2VwaF9jb25fdjJfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxODctXHQgKiBXZSBzaG91bGQgYWx3YXlzIGhhdmUgc29tZXRoaW5nIHBlbmRpbmcgaGVyZS4gIElmIG5vdCxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxODg6XHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE4OS1cdCAqIChjZXBoX3RjcF9yZWN2KCkgd291bGQgaW1tZWRpYXRlbHkgcmV0dXJuIDEpLlxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxOTgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTk5Olx0XHRyZXQgPSBwb3B1bGF0ZV9pbl9pdGVyKGNvbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMjAwLVx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBDZXBoIE5ldHdvcmsgUHJvdG9jb2wgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhlIENlcGggbmV0d29yayBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGRhdGEgd2hlbiBpdCBhcnJpdmVzIG9uIHRoZSBzb2NrZXQsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgd29ydGggYSBkZWVwIGRpdmUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHRoZXJlLgoKSSBkb3VibGUgY2hlY2tlZCwgYW5kIHllcywgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub24tc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpJIG1hZGUgc3VyZSB0byBydWxlIG91dCB0aGUgb3RoZXIgb2J2aW91cyBjb250ZW5kZXJzIHRoYXQgYXJlIGNvbW1vbmx5IGludm9sdmVkIGluIHRoZSBjb25uZWN0aW9uIHByb2Nlc3NpbmcsIGp1c3QgdG8gYmUgc3VyZS4gSSBjb25maXJtZWQgdGhhdCBgcHJvY2Vzc19jb25uZWN0YCwgYHByb2Nlc3NfaGVsbG9gLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpTbywgaXQmIzM5O3MgYmFjayB0byBmb2N1c2luZyBvbiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLgoKTm93LCBiZWZvcmUgSSBzdGFydCBjb25zdHJ1Y3RpbmcgZnV6eiBpbnB1dHMsIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENFUEhfTElCYCBpcyBlbmFibGVkLiBJdCBpcyB1bmxpa2VseSB0aGF0IGFueSBtb3JlIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQsIGJ1dCBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdG8gYmUgc3VyZSwgaW4gdGhlIGBuZXQvY2VwaC9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcbm5ldC9jZXBoL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NlcGggY29yZSBsaWJyYXJ5XCYjMzQ7XG4tLVxubmV0L2NlcGgvS2NvbmZpZy0yMi1cbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXG5uZXQvY2VwaC9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9jZXBoL0tjb25maWctMzQtXG5uZXQvY2VwaC9LY29uZmlnOjM1OmNvbmZpZyBDRVBIX0xJQl9VU0VfRE5TX1JFU09MVkVSXG5uZXQvY2VwaC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjQKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0VQSF9MSUImIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkJiMzNDssCiAgICAmIzM0O2NlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAodjEgYW5kIHYyKSBjb25uZWN0aW9uIHByb2Nlc3NpbmcgbG9naWMuIEl0IHJlcGxhY2VzIFdBUk5fT04gYXNzZXJ0aW9ucyB3aXRoIGV4cGxpY2l0IGVycm9yIGhhbmRsaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBmb3IgdmFyaW91cyBjb25uZWN0aW9uIHNlcXVlbmNlIGFuZCBjb25maWd1cmF0aW9uIG1pc21hdGNoZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBlcnJvciBwYXRocy4gVGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIENFUEhfTElCIGFuZCBDRVBIX0ZTLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NzM5YzI3ZGIzYmM4ZGE2YTBiYTgzYjZhYmIyM2Y0ODY5NTZkODMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAxMDowOTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKQEAgLTg5OCw4ICYjNDM7ODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKIAkJICAgICBjb24tJmd0O3YxLnBlZXJfZ2xvYmFsX3NlcSwKIAkJICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSwKIAkJICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxKTsKLQkJV0FSTl9PTihjb24tJmd0O3YxLmNvbm5lY3Rfc2VxICE9Ci0JCQlsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQlpZiAoY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJCSAgICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxLAomIzQzOwkJCSAgICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQogCiAJCWlmIChjb24tJmd0O3YxLmluX3JlcGx5LmZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpCiAJCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCmluZGV4IDA1ZjZlZWEyOTlmYzAuLjk2NmE1ZjgwMGM2MGYgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCkBAIC0yMjM3LDkgJiM0MzsyMjM3LDE2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19oZWxsbyhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZCkKIAkJICAgICBfX2Z1bmNfXywgY29uLCBjZXBoX3ByX2FkZHIobXlfYWRkcikpOwogCX0KIAotCVdBUk5fT04oY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpKTsKLQlXQVJOX09OKG15X2FkZHItJmd0O3R5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSk7Ci0JV0FSTl9PTighbXlfYWRkci0mZ3Q7bm9uY2UpOwomIzQzOwlpZiAoY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpIHx8CiYjNDM7CSAgICBteV9hZGRyLSZndDt0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkgfHwKJiM0MzsJICAgICFteV9hZGRyLSZndDtub25jZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIGJhZCBteV9hZGRyICVzXG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcihteV9hZGRyKSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7YmFkIG15X2FkZHImIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAkvKiBubyByZXNldF9vdXRfa3ZlY3MoKSBhcyBvdXIgaGVsbG8gbWF5IHN0aWxsIGJlIHBlbmRpbmcgKi8KIAlyZXQgPSBwcmVwYXJlX2F1dGhfcmVxdWVzdChjb24pOwpAQCAtMjUyOSwxNCAmIzQzOzI1MzYsMzMgQEAgc3RhdGljIGludCBwcm9jZXNzX3NlcnZlcl9pZGVudChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY29uLSZndDtwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTsKIAljb24tJmd0O3YyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7CiAJY29uLSZndDtwZWVyX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0JV0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpOwomIzQzOwlpZiAocmVxdWlyZWRfZmVhdHVyZXMgJmFtcDsgfmNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJiMzOTtzIHJlcXVpcmVkIDB4JWxseFxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcywgcmVxdWlyZWRfZmVhdHVyZXMpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O21pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llID0gY29va2llOwogCiAJaWYgKGZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHsKIAkJY2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpOwotCQlXQVJOX09OKGNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXG4mIzM0OywKJiM0MzsJCQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkcikpOwomIzQzOwkJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0gZWxzZSB7Ci0JCVdBUk5fT04oIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCWNsZWFyX2luX3NpZ25fa3ZlY3MoY29uKTsKQEAgLTI2MTgsNyAmIzQzOzI2NDQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGNvbm5lY3Rfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XG4mIzM0OywgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpOwotCVdBUk5fT04oY29ubmVjdF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5jb25uZWN0X3NlcSk7CiYjNDM7CWlmIChjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICZndDsgJWxsdSwgZ290ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkgICAgICAgY29uLSZndDt2Mi5jb25uZWN0X3NlcSwgY29ubmVjdF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCWNvbi0mZ3Q7djIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKQEAgLTI2NTEsNyAmIzQzOzI2ODQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljZXBoX2RlY29kZV82NF9zYWZlKCZhbXA7cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTsKLQlXQVJOX09OKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKTsKJiM0MzsJaWYgKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgZ2xvYmFsX3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2dsb2JhbF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5nbG9iYWxfc2VxID0gY2VwaF9nZXRfZ2xvYmFsX3NlcShjb24tJmd0O21zZ3IsIGdsb2JhbF9zZXEpOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTYKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogODQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2VwaCBNZXNzZW5nZXIgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IGFkZHJlc3NlcyBzb21lIHJlcG9ydGVkIGlzc3VlcyBmcm9tIHN5emJvdCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgbWFsZm9ybWVkIHBhY2tldHMgZnJvbSBhIGZha2UgQ2VwaCBzZXJ2ZXIuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgaW5zdGFuY2VzIHdoZXJlIHRoZSBjb2RlIHdhcyByZWx5aW5nIG9uIGBXQVJOX09OYCB0byBmbGFnIHByb2JsZW1zIHdpdGhpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYG1lc3Nlbmdlcl92MS5jYCBhbmQgYG1lc3Nlbmdlcl92Mi5jYCkgd2l0aCBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJldHVybmluZyBlcnJvciBjb2RlcyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIGFuZCBzZXR0aW5nIHRoZSBgY29uLSZndDtlcnJvcl9tc2dgIGZpZWxkIHRvIHByb3ZpZGUgc29tZSBjb250ZXh0LiAgVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBsb2dpYyBidWcgZml4LCBjbGVhbmluZyB1cCBzb21lIGVycm9yIGhhbmRsaW5nIHJhdGhlciB0aGFuIGp1c3QgY3Jhc2hpbmcgb3IgZW1pdHRpbmcgYSB3YXJuaW5nLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljIGNoYW5nZXMsIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJJiMzOTttIHNlZWluZyBjaGVja3MgaW4gYG1lc3Nlbmdlcl92MS5jYCB3aXRoaW4gYHByb2Nlc3NfY29ubmVjdGAgZm9yIGEgYGNvbm5lY3Rfc2VxYCBtaXNtYXRjaC4gSWYgdGhlIGV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIHJlY2VpdmVkIHNlcXVlbmNlIG51bWJlciBkb24mIzM5O3QgbWF0Y2gsIHRoZSBwYXRjaCBub3cgbG9ncyBhbiBlcnJvciwgc2V0cyBhbiBlcnJvciBtZXNzYWdlLCBhbmQgcmV0dXJucyBhbiBlcnJvciBjb2RlICgtMSkuIE1ha2VzIHNlbnNlOyB0aGlzIGlzIGZhciBiZXR0ZXIgdGhhbiBzaW1wbHkgdHJpZ2dlcmluZyBhIGBXQVJOX09OYC4KCkluIGBtZXNzZW5nZXJfdjIuY2AgYW5kIHRoZSBgcHJvY2Vzc19oZWxsb2AgZnVuY3Rpb24sIHRoZSBwYXRjaCBub3cgY2hlY2tzIHRoZSBhZGRyZXNzIGZvciB2YWxpZGl0eSwgd2hldGhlciBpdCYjMzk7cyBibGFuayBvciBub3Qgb2YgYSB0eXBlIHdlIGV4cGVjdCwgYW5kIGlmIHRoZXJlJiMzOTtzIG5vIG5vbmNlLiBJZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0LCBhbiBlcnJvciBpcyBsb2dnZWQsIGFuZCBhZ2FpbiwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KClRoZSBjaGFuZ2VzIGluIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAgaW52b2x2ZSBzaW1pbGFyIGxvZ2ljLiBUaGUgcGF0Y2ggbm93IGNoZWNrcyBmb3IgaW52YWxpZCBmZWF0dXJlcywgYSBzZXJ2ZXIgY29va2llLCBhbmQgYW4gaW52YWxpZCBzZXJ2ZXIgY29va2llLiBFYWNoIHRpbWUsIGluc3RlYWQgb2YgYFdBUk5fT05gLCB3ZSBub3cgZ2V0IGFuIGVycm9yIGxvZyBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuLgoKRmluYWxseSwgaW4gYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCB0aGUgcGF0Y2ggaXMgY2hlY2tpbmcgZm9yIHNlcXVlbmNlIG51bWJlcnMuIElmIHRoZSBzZXF1ZW5jZSBpcyBpbnZhbGlkLCB0aGVyZSYjMzk7cyBhZ2FpbiBhbiBlcnJvciBsb2cgYW5kIGFuIGVycm9yIHJldHVybi4KCkNydWNpYWxseSwgZnJvbSBteSBpbml0aWFsIGFuYWx5c2lzIGFuZCBjb25maXJtaW5nIHdpdGggdGhlIGRpZmYsIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgaGVyZSwgYW5kIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBUaGlzIGlzIHB1cmVseSBhYm91dCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IHJlcXVpcmVkIGZvciB0aGlzOyBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIGFyZWEuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYm90aCB2MSBhbmQgdjIpLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdoZXJlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMgZnJvbSBhIHBlZXIgY291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MuIFRoZSBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBieSByZXR1cm5pbmcgZXJyb3IgY29kZXMgKC0xIG9yIC1FSU5WQUwpIGluc3RlYWQgb2YgY29udGludWluZyBleGVjdXRpb24gYWZ0ZXIgYSB3YXJuaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjAxLjgyNTIxMTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MjUwNTkyNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNFUEhfTElCXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBjb2RlIChib3RoIHYxIGFuZCB2MikuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2hlcmUgbWFsZm9ybWVkIG9yIHVuZXhwZWN0ZWQgcGFja2V0cyBmcm9tIGEgcGVlciBjb3VsZCB0cmlnZ2VyIGtlcm5lbCB3YXJuaW5ncy4gVGhlIG1vZGlmaWNhdGlvbnMgb25seSBhZmZlY3QgY29udHJvbCBmbG93IGJ5IHJldHVybmluZyBlcnJvciBjb2RlcyAoLTEgb3IgLUVJTlZBTCkgaW5zdGVhZCBvZiBjb250aW51aW5nIGV4ZWN1dGlvbiBhZnRlciBhIHdhcm5pbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKHYxIGFuZCB2MikgY29ubmVjdGlvbiBwcm9jZXNzaW5nIGxvZ2ljLiBJdCByZXBsYWNlcyBXQVJOX09OIGFzc2VydGlvbnMgd2l0aCBleHBsaWNpdCBlcnJvciBoYW5kbGluZyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHZhcmlvdXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBtaXNtYXRjaGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgZXJyb3IgcGF0aHMuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBDRVBIX0xJQiBhbmQgQ0VQSF9GUy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MDEuODI1MjE4OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzUxMDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgOCAxMDowOTowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXFxuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcXG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXFxuQEAgLTg5OCw4ICs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbiBcXHRcXHQgICAgIGNvbi1cXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxcbiBcXHRcXHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLFxcbiBcXHRcXHQgICAgIGNvbi1cXHUwMDNldjEuY29ubmVjdF9zZXEpO1xcbi1cXHRcXHRXQVJOX09OKGNvbi1cXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cXG4tXFx0XFx0XFx0bGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xcbitcXHRcXHRpZiAoY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tXFx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIiVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHRcXHQgICAgICAgY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSxcXG4rXFx0XFx0XFx0ICAgICAgIGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcXG4rXFx0XFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcXFwiO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChjb24tXFx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFxcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSlcXG4gXFx0XFx0XFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXFxuaW5kZXggMDVmNmVlYTI5OWZjMC4uOTY2YTVmODAwYzYwZiAxMDA2NDRcXG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXFxuQEAgLTIyMzcsOSArMjIzNywxNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaGVsbG8oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXFxuIFxcdFxcdCAgICAgX19mdW5jX18sIGNvbiwgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcXG4gXFx0fVxcbiBcXG4tXFx0V0FSTl9PTihjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikpO1xcbi1cXHRXQVJOX09OKG15X2FkZHItXFx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSk7XFxuLVxcdFdBUk5fT04oIW15X2FkZHItXFx1MDAzZW5vbmNlKTtcXG4rXFx0aWYgKGNlcGhfYWRkcl9pc19ibGFuayhteV9hZGRyKSB8fCBjZXBoX2FkZHJfcG9ydChteV9hZGRyKSB8fFxcbitcXHQgICAgbXlfYWRkci1cXHUwMDNldHlwZSAhPSBDRVBIX0VOVElUWV9BRERSX1RZUEVfQU5ZIHx8XFxuK1xcdCAgICAhbXlfYWRkci1cXHUwMDNlbm9uY2UpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgYmFkIG15X2FkZHIgJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihteV9hZGRyKSk7XFxuK1xcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcImJhZCBteV9hZGRyXFxcIjtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqL1xcbiBcXHRyZXQgPSBwcmVwYXJlX2F1dGhfcmVxdWVzdChjb24pO1xcbkBAIC0yNTI5LDE0ICsyNTM2LDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbiBcXHRjb24tXFx1MDAzZXBlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpO1xcbiBcXHRjb24tXFx1MDAzZXYyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7XFxuIFxcdGNvbi1cXHUwMDNlcGVlcl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xcbi1cXHRXQVJOX09OKHJlcXVpcmVkX2ZlYXR1cmVzIFxcdTAwMjYgfmNsaWVudC1cXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcXG4rXFx0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFxcdTAwMjYgfmNsaWVudC1cXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlcidzIHJlcXVpcmVkIDB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHQgICAgICAgY2xpZW50LVxcdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcXG4rXFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwibWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlc1xcXCI7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGNvbi1cXHUwMDNldjIuc2VydmVyX2Nvb2tpZSA9IGNvb2tpZTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHtcXG4gXFx0XFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xcbi1cXHRcXHRXQVJOX09OKGNvbi1cXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XFxuK1xcdFxcdGlmIChjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSk7XFxuK1xcdFxcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcInNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxcIjtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0V0FSTl9PTighY29uLVxcdTAwM2V2Mi5zZXJ2ZXJfY29va2llKTtcXG4rXFx0XFx0aWYgKCFjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgRU5USVRZX05BTUUoY29uLVxcdTAwM2VwZWVyX25hbWUpLFxcbitcXHRcXHRcXHQgICAgICAgY2VwaF9wcl9hZGRyKFxcdTAwMjZjb24tXFx1MDAzZXBlZXJfYWRkcikpO1xcbitcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cXFwiO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XFxuQEAgLTI2MTgsNyArMjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxuIFxcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XFxuIFxcbiBcXHRkb3V0KFxcXCIlcyBjb24gJXAgY29ubmVjdF9zZXEgJWxsdVxcXFxuXFxcIiwgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpO1xcbi1cXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFxcdTAwM2M9IGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEpO1xcbitcXHRpZiAoY29ubmVjdF9zZXEgXFx1MDAzYz0gY29uLVxcdTAwM2V2Mi5jb25uZWN0X3NlcSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIiVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgXFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHQgICAgICAgY29uLVxcdTAwM2V2Mi5jb25uZWN0X3NlcSwgY29ubmVjdF9zZXEpO1xcbitcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJjb25uZWN0X3NlcSBtaXNtYXRjaFxcXCI7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSArIDE7XFxuIFxcbiBcXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xcbkBAIC0yNjUxLDcgKzI2ODQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4gXFx0Y2VwaF9kZWNvZGVfNjRfc2FmZShcXHUwMDI2cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpO1xcbiBcXG4gXFx0ZG91dChcXFwiJXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcXFxuXFxcIiwgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XFxuLVxcdFdBUk5fT04oZ2xvYmFsX3NlcSBcXHUwMDNjPSBjb24tXFx1MDAzZXYyLmdsb2JhbF9zZXEpO1xcbitcXHRpZiAoZ2xvYmFsX3NlcSBcXHUwMDNjPSBjb24tXFx1MDAzZXYyLmdsb2JhbF9zZXEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgZ2xvYmFsX3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgXFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpLFxcbitcXHRcXHQgICAgICAgY29uLVxcdTAwM2V2Mi5nbG9iYWxfc2VxLCBnbG9iYWxfc2VxKTtcXG4rXFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiZ2xvYmFsX3NlcSBtaXNtYXRjaFxcXCI7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGNvbi1cXHUwMDNldjIuZ2xvYmFsX3NlcSA9IGNlcGhfZ2V0X2dsb2JhbF9zZXEoY29uLVxcdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcXG4gXFxuIFxcdGZyZWVfY29ubl9idWZzKGNvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjAyLjI5OTcxMTMwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MjQxMjE5Nzc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNlcGhfY29uX3YxX3RyeV9yZWFkXCIsXG4gICAgXCJjZXBoX2Nvbl92Ml90cnlfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAodjEgYW5kIHYyKSBjb25uZWN0aW9uIHByb2Nlc3NpbmcgbG9naWMuIEl0IHJlcGxhY2VzIFdBUk5fT04gYXNzZXJ0aW9ucyB3aXRoIGV4cGxpY2l0IGVycm9yIGhhbmRsaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBmb3IgdmFyaW91cyBjb25uZWN0aW9uIHNlcXVlbmNlIGFuZCBjb25maWd1cmF0aW9uIG1pc21hdGNoZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBlcnJvciBwYXRocy4gVGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIENFUEhfTElCIGFuZCBDRVBIX0ZTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NzM5YzI3ZGIzYmM4ZGE2YTBiYTgzYjZhYmIyM2Y0ODY5NTZkODMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxMDowOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbmluZGV4IGM5ZTAwMmQ5NjMxOTAuLmRmMjI0OGI3YjAyNjUgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbkBAIC04OTgsOCArODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbiBcdFx0ICAgICBjb24tXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxuIFx0XHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cbi1cdFx0XHRsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0aWYgKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxuXCIsXG4rXHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdFx0ICAgICAgIGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSxcbitcdFx0XHQgICAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4rXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKGNvbi1cdTAwM2V2MS5pbl9yZXBseS5mbGFncyBcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSlcbiBcdFx0XHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuaW5kZXggMDVmNmVlYTI5OWZjMC4uOTY2YTVmODAwYzYwZiAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG4rKysgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuQEAgLTIyMzcsOSArMjIzNywxNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaGVsbG8oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4gXHRcdCAgICAgX19mdW5jX18sIGNvbiwgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbiBcdH1cbiBcbi1cdFdBUk5fT04oY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpKTtcbi1cdFdBUk5fT04obXlfYWRkci1cdTAwM2V0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkpO1xuLVx0V0FSTl9PTighbXlfYWRkci1cdTAwM2Vub25jZSk7XG4rXHRpZiAoY2VwaF9hZGRyX2lzX2JsYW5rKG15X2FkZHIpIHx8IGNlcGhfYWRkcl9wb3J0KG15X2FkZHIpIHx8XG4rXHQgICAgbXlfYWRkci1cdTAwM2V0eXBlICE9IENFUEhfRU5USVRZX0FERFJfVFlQRV9BTlkgfHxcbitcdCAgICAhbXlfYWRkci1cdTAwM2Vub25jZSkge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgYmFkIG15X2FkZHIgJXNcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKG15X2FkZHIpKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiYmFkIG15X2FkZHJcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHQvKiBubyByZXNldF9vdXRfa3ZlY3MoKSBhcyBvdXIgaGVsbG8gbWF5IHN0aWxsIGJlIHBlbmRpbmcgKi9cbiBcdHJldCA9IHByZXBhcmVfYXV0aF9yZXF1ZXN0KGNvbik7XG5AQCAtMjUyOSwxNCArMjUzNiwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbitcdGlmIChyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlcidzIHJlcXVpcmVkIDB4JWxseFxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcIm1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXNcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSA9IGNvb2tpZTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkge1xuIFx0XHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSk7XG4rXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwic2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoIWNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0Y2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pO1xuQEAgLTI2MTgsNyArMjY0NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpO1xuLVx0V0FSTl9PTihjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSk7XG4rXHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImNvbm5lY3Rfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxID0gY29ubmVjdF9zZXEgKyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgKzI2ODQsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpO1xuIFxuIFx0ZG91dChcIiVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4rXHRpZiAoZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKSB7XG4rXHRcdHByX2VycihcIiVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpO1xuK1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJnbG9iYWxfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTowMi4yOTk3MTI1NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI2OTU5NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENlcGggTWVzc2VuZ2VyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBoaXR0aW5nIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AuIExvb2tzIGxpa2UgaXQncyBhIGNyaXRpY2FsIGNoYW5nZTsgdGhleSdyZSBzd2FwcGluZyBvdXQgYFdBUk5fT05gIGZvciBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIFRoYXQgbWVhbnMgaW5zdGVhZCBvZiBqdXN0IGxvZ2dpbmcgYSB3YXJuaW5nIGFuZCBsZXR0aW5nIHRoaW5ncyBrZWVwIGdvaW5nLCB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdyByZXR1cm5pbmcgZXJyb3IgY29kZXMgbGlrZSBgLTFgIG9yIGAtRUlOVkFMYCBhbmQgc2V0dGluZyBgY29uLVx1MDAzZWVycm9yX21zZ2AsIGVmZmVjdGl2ZWx5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgYXQgdGhhdC5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCAqd2hpY2gqIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdG91Y2hlZC4gSSBzZWUgYHByb2Nlc3NfY29ubmVjdGAgaW4gbWVzc2VuZ2VyIHYxLCBhbmQgdGhlbiBpbiB2Miwgd2UndmUgZ290IGBwcm9jZXNzX2hlbGxvYCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGNvcmUgdG8gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sLiBDZXBoLCBvZiBjb3Vyc2UsIGJlaW5nIHRoYXQgZGlzdHJpYnV0ZWQgbmV0d29yayBmaWxlIHN5c3RlbSBhbmQgYmxvY2sgZGV2aWNlIHByb3RvY29sLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uOiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gQ2VwaCBjYW4gYmUgbW91bnRlZCBvciBpbnRlcmFjdGVkIHdpdGggb3ZlciB0aGUgbmV0d29yaywgZXZlbiBqdXN0IHVzaW5nIGxvb3BiYWNrLiBUaGlzIG1ha2VzIGl0IHN1cGVyIHJlbGV2YW50IHRvIHRlc3RpbmcuIFdoaWNoIGJyaW5ncyB1cyB0byB0aGUgbmV4dCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBHaXZlbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHByb3RvY29sIHBhcnNpbmcgbG9naWMsIGEgcmVzb3VuZGluZyAqeWVzKi4gQW55IHZ1bG5lcmFiaWxpdGllcyBoZXJlIGNvdWxkIGhhdmUgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cblNvLCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgd2UgbmVlZCB0byBidWlsZCBhbmQgdGVzdCB0aGlzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWdzIGluIGBuZXQvY2VwaC9gLiBJdCdzIHVzdWFsbHkgY29udHJvbGxlZCBieSBgQ09ORklHX0NFUEhfTElCYC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGVpdGhlciBgbmV0L2NlcGgvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGZzL2NlcGgvS2NvbmZpZ2AgdG8gcGluIGRvd24gdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MDkuMDI2Njc0MzUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDczMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0xJQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcXG5uZXQvY2VwaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNlcGggY29yZSBsaWJyYXJ5XFxcIlxcbi0tXFxubmV0L2NlcGgvS2NvbmZpZy0yMi1cXG5uZXQvY2VwaC9LY29uZmlnOjIzOmNvbmZpZyBDRVBIX0xJQl9QUkVUVFlERUJVR1xcbm5ldC9jZXBoL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiSW5jbHVkZSBmaWxlOmxpbmUgaW4gY2VwaCBkZWJ1ZyBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnLTM0LVxcbm5ldC9jZXBoL0tjb25maWc6MzU6Y29uZmlnIENFUEhfTElCX1VTRV9ETlNfUkVTT0xWRVJcXG5uZXQvY2VwaC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlVzZSBpbi1rZXJuZWwgc3VwcG9ydCBmb3IgRE5TIGxvb2t1cFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MDkuMTA0NzU2NDYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxNDE2MjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBzdWJqZWN0OlxuXG4qKkNvbnNpZGVyaW5nIENFUEggTGlicmFyeSBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0byBhcHByb2FjaCB0aGlzLCBpdCBsb29rcyBsaWtlIGBDRVBIX0xJQmAgaXMgYWJzb2x1dGVseSB0aGUgY2VudHJhbCBsaWJyYXJ5IHRvIGZvY3VzIG9uLiBUaGF0J3MgdGhlIGZvdW5kYXRpb24gd2UnbGwgYmUgYnVpbGRpbmcgb24sIG5vIHF1ZXN0aW9uLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyBpdHMgY2FwYWJpbGl0aWVzIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMuXG5cbkFuZCB0aGlua2luZyBicm9hZGVyLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHdoZXRoZXIgZW5hYmxpbmcgYENFUEhfRlNgIG1pZ2h0IGJyaW5nIHNvbWUgaW1tZWRpYXRlIGFkdmFudGFnZXMsIG9yIGJlIGEgdXNlZnVsIHBhdGggZG93biB0aGUgcm9hZCwgaWYgd2UncmUgbG9va2luZyB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgc2V0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaXZlIGluIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY2MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjE3LjAxODkyMTY4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIwNjMyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0VQSF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jZXBoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6MTcuMDk1MTMyNTk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE1NTM4NzU3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDZXBoIE1lc3NlbmdlciBFcnJvciBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYSBnb29kIG1vdmUuIFJlcGxhY2luZyBgV0FSTl9PTmAgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIGluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AgYW5kIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIG5vdCBqdXN0IGEgY29zbWV0aWMgdGhpbmc7IGl0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3csIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBQcmV2aW91c2x5LCBhIHdhcm5pbmcgbWlnaHQgaGF2ZSBtYXNrZWQgYSBkZWVwZXIgcHJvYmxlbSwgbGVhZGluZyB0byBwb3RlbnRpYWwgaW5zdGFiaWxpdHkgb3IgY3Jhc2hlcyBkb3duIHRoZSBsaW5lLiBSZXR1cm5pbmcgYW4gZXJyb3IgYWxsb3dzIGZvciBtb3JlIHJvYnVzdCBlcnJvciBwcm9wYWdhdGlvbiBhbmQgaGFuZGxpbmcgaGlnaGVyIHVwIHRoZSBjYWxsIHN0YWNrLCB3aGljaCBpcyBjcml0aWNhbCBpbiBhIGRpc3RyaWJ1dGVkIHN5c3RlbSBsaWtlIENlcGguXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYHByb2Nlc3NfY29ubmVjdGAgaW4gdGhlIHYxIG1lc3NlbmdlciwgYW5kIGBwcm9jZXNzX2hlbGxvYCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAgaW4gdGhlIHYyIG1lc3Nlbmdlci4gVGhlc2UgZnVuY3Rpb25zIGFyZSwgb2YgY291cnNlLCB0aGUgaGVhcnQgb2YgdGhlIENlcGggbmV0d29yayBtZXNzZW5nZXIgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLCBoYW5kbGluZyBpbmNvbWluZyBtZXNzYWdlcy4gR2l2ZW4gdGhlaXIgcm9sZSBpbiBwYXJzaW5nIG5ldHdvcmsgaW5wdXQsIGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGluY3JlZGlibHkgcmVsZXZhbnQuIFRoaXMgY2hhbmdlIHdvdWxkIGluZmx1ZW5jZSB0aGUgZnV6emluZyBzdHJhdGVneSBiZWNhdXNlIHByZXZpb3VzbHksIGFuIGVycm9yIGR1cmluZyBmdXp6aW5nIG1heSBoYXZlIGNhdXNlZCBhIGBXQVJOX09OYCB0byBiZSBmaXJlZCBhbmQgdGhlbiBhbGxvd2VkIHRoZSBjb2RlIHRvIGNvbnRpbnVlLiBOb3cgd2UgZXhwZWN0IGVycm9ycyB0byBjYXVzZSB0aGUgbWVzc2FnZSB0byBiZSBkcm9wcGVkIG9yIHJlamVjdGVkLCBtYWtpbmcgdGVzdGluZyBsZXNzIGZvcmdpdmluZy5cblxuTm93IEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBgcHJvY2Vzc19jb25uZWN0YCBpbiB2MSBpcyBjYWxsZWQgZnJvbSBgcmVhZF9wYXJ0aWFsX2Nvbm5lY3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBzbyB0aGF0IHNob3VsZCBiZSBhY2Nlc3NpYmxlLiBUaGUgdjIgZnVuY3Rpb25z4oCUYHByb2Nlc3NfaGVsbG9gLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYOKAlGFyZSBjYWxsZWQgZnJvbSB0aGUgdjIgc3RhdGUgbWFjaGluZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBjb25maXJtcyB0aGV5J3JlIGFjdGl2ZWx5IHVzZWQgaW4gdGhlIHN5c3RlbS5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgbm93LiBgQ0VQSF9MSUJgIGlzIG9idmlvdXNseSB0aGUgY29yZSBsaWJyYXJ5IHdlIG5lZWQuIFRvIGVuc3VyZSB0aGUgY29kZSBpbiBgbmV0L2NlcGgvYCBpcyBjb21waWxlZCwgYENFUEhfTElCYCBpcyBzdWZmaWNpZW50LCBidXQgdG8gKnVzZSogdGhhdCBjb2RlLCB3ZSB3b3VsZCBtb3N0IGxpa2VseSBuZWVkIGVpdGhlciBgQ0VQSF9GU2Agb3IgYEJMS19ERVZfUkJEYC4gSWYgd2UncmUgdGVzdGluZyB0aGVzZSBtZXNzZW5nZXIgZnVuY3Rpb25zLCBlbmFibGluZyBgQ0VQSF9MSUJgIGFsb25nIHdpdGggZWl0aGVyIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgIHdvdWxkIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGxpa2VseSB1c2VkIHdpdGhpbiBvdXIgdGVzdCBzZXR1cC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjb2RlLlxuXG5SaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLCB0byBnZXQgYSBwcmVjaXNlIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgaG93IGl0J2xsIGFmZmVjdCB0aGUgZnV6emluZyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTozOC42NDkwMTE1NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4NzMyMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz02OTc9c3RhdGljIGludCBwcm9jZXNzX2Jhbm5lcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03MzktXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6NzQwOnN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDEte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ2LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjc0NzpcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3Qgb24gJXAgdGFnICVkXFxcXG5cXFwiLCBjb24sIGNvbi1cXHUwMDNldjEuaW5fdGFnKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDgtXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MDItXFx0XFx0Y29uLVxcdTAwM2V2MS5hdXRoX3JldHJ5Kys7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODAzOlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCAlcCBnb3QgQkFEQVVUSE9SSVpFUiBhdHRlbXB0ICVkXFxcXG5cXFwiLCBjb24sXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODA0LVxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5hdXRoX3JldHJ5KTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgyMy1cXHRcXHQgKi9cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4MjQ6XFx0XFx0ZG91dChcXFwicHJvY2Vzc19jb25uZWN0IGdvdCBSRVNFVCBwZWVyIHNlcSAldVxcXFxuXFxcIixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MjUtXFx0XFx0ICAgICBsZTMyX3RvX2NwdShjb24tXFx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NDktXFx0XFx0ICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODUwOlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfU0VTU0lPTiBteSBzZXEgJXUsIHBlZXIgJXVcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODUxLVxcdFxcdCAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5vdXRfY29ubmVjdC5jb25uZWN0X3NlcSksXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NjUtXFx0XFx0ICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODY2OlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVUUllfR0xPQkFMIG15ICV1IHBlZXJfZ3NlcSAldVxcXFxuXFxcIixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04NjctXFx0XFx0ICAgICBjb24tXFx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg5Ni1cXHRcXHRjb24tXFx1MDAzZXBlZXJfZmVhdHVyZXMgPSBzZXJ2ZXJfZmVhdDtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4OTc6XFx0XFx0ZG91dChcXFwicHJvY2Vzc19jb25uZWN0IGdvdCBSRUFEWSBnc2VxICVkIGNzZXEgJWQgKCVkKVxcXFxuXFxcIixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04OTgtXFx0XFx0ICAgICBjb24tXFx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jPTEzMjk9aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTEzNzItXFx0XFx0XFx0Z290byBvdXQ7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6MTM3MzpcXHRcXHRyZXQgPSBwcm9jZXNzX2Nvbm5lY3QoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzc0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTozOC45ODc3NDg2MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODg1NDY1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGBwcm9jZXNzX2Nvbm5lY3RgIGFuZCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyB0aGUgZmxvdyBvZiBldmVudHMgd2l0aGluIGEgQ2VwaCBjb25uZWN0aW9uLiBJIHVuZGVyc3RhbmQgYHByb2Nlc3NfY29ubmVjdGAgaXMgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGluaXRpYWwgaGFuZHNoYWtlIGFuZCBlc3RhYmxpc2htZW50IG9mIGEgY29ubmVjdGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGNsaWVudCBhbmQgT1NEIChvciBNb25pdG9yLCBvciB3aGF0ZXZlciBDZXBoIGNvbXBvbmVudCBpcyBpbnZvbHZlZCkgYWdyZWUgb24gcGFyYW1ldGVycyBhbmQgZ2V0IHRoaW5ncyBzZXQgdXAuXG5cblRoZW4sIHRvIHNlZSB0aGF0IGBwcm9jZXNzX2Nvbm5lY3RgIGlzIGNhbGxlZCAqZnJvbSogYGNlcGhfY29uX3YxX3RyeV9yZWFkYCB0cmlnZ2VycyBzb21lIGFkZGl0aW9uYWwgYW5hbHlzaXMuIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgKnJlYWQqIHBhdGgsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBvbGRlciB2MSBjb25uZWN0aW9uIHByb3RvY29sLiBUaGlzIHByb2JhYmx5IG1lYW5zIGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHZpYSBgcHJvY2Vzc19jb25uZWN0YCwgc3Vic2VxdWVudCByZWFkcyBhcmUgYXR0ZW1wdGluZyB0byBiZSBoYW5kbGVkIHVzaW5nIHRoaXMgbGVnYWN5IHByb3RvY29sLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBgcHJvY2Vzc19jb25uZWN0YCBtaWdodCBiZSBiZWluZyBjYWxsZWQgdG8gZWl0aGVyIHNldCB1cCB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIGJlZm9yZSBhIHJlYWQsIG9yIHBvc3NpYmx5IGEgcmUtZXN0YWJsaXNobWVudCBvZiB0aGUgY29ubmVjdGlvbiB0byBmYWNpbGl0YXRlIHRoZSByZWFkLCBhcyB0aGUgcmVhZCBtaWdodCBiZSBmYWlsaW5nIG9yIHN0YWxlLiBUaGUgZXhhY3QgY29udGV4dCBkaWN0YXRlcywgSSdsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGVuc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjQ2Ljg3MzIxNzUxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0OTcxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19oZWxsb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yMTQ4PXN0YXRpYyBpbnQgcHJvY2Vzc19iYW5uZXJfcGF5bG9hZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yMTkyLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjIxOTM6c3RhdGljIGludCBwcm9jZXNzX2hlbGxvKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTIxOTQte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjgwMT1zdGF0aWMgaW50IHByb2Nlc3NfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MDktXFx0Y2FzZSBGUkFNRV9UQUdfSEVMTE86XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgxMDpcXHRcXHRyZXQgPSBwcm9jZXNzX2hlbGxvKGNvbiwgcCwgZW5kKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODExLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTo0Ni45NjM3MjQ0MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5OTY0MTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbnRlcmFjdGlvbiBGbG93KipcblxuQWxyaWdodCwgc28gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIGBwcm9jZXNzX2hlbGxvYCBpcyBpbnZva2VkLCBhbmQgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIGludm9jYXRpb24gaGFwcGVucyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHByb2Nlc3NfY29udHJvbGAuIFRoaXMgdGVsbHMgbWUgYSBmZXcgaW1tZWRpYXRlIHRoaW5ncyBhYm91dCBob3cgdGhpcyBpbnRlcmFjdGlvbiBsaWtlbHkgdW5mb2xkcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcHJvY2Vzc19jb250cm9sYCBpcyBkb2luZyB0byBjYXVzZSB0aGUgY2FsbCB0byBgcHJvY2Vzc19oZWxsb2AuIElzIGBwcm9jZXNzX2hlbGxvYCBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsLCBvciBwZXJoYXBzIHRyaWdnZXJlZCB2aWEgc29tZSBzb3J0IG9mIG1lc3NhZ2luZyBvciBldmVudCBoYW5kbGluZyB3aXRoaW4gYHByb2Nlc3NfY29udHJvbGA/IFRoYXQgZGV0YWlsIGNoYW5nZXMgaG93IEknZCBhcHByb2FjaCB0cmFjaW5nIGV4ZWN1dGlvbi4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIGBwcm9jZXNzX2NvbnRyb2xgIGl0c2VsZi4gV2hhdCBhcmUgaXRzIGlucHV0cz8gV2hhdCBzdGF0ZSBkb2VzIGl0IG1haW50YWluPyBJcyBpdCBhIGZpbml0ZSBzdGF0ZSBtYWNoaW5lLCBhIGxvb3AsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBjb250cm9sIGZsb3cgd2lsbCBkcmFzdGljYWxseSBpbmZsdWVuY2UgaG93IGBwcm9jZXNzX2hlbGxvYCBnZXRzIGNhbGxlZC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBmb3IgYHByb2Nlc3NfaGVsbG9gIHRvIGJlIGNhbGxlZCBhbmQgaG93IGZyZXF1ZW50bHkgaXQgaXMgY2FsbGVkLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0ZXIgZ3Jhc3Agb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6NTAuNjYzMzY4NDY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY1NTc2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY2Vzc19zZXJ2ZXJfaWRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjQzMT1zdGF0aWMgaW50IHByb2Nlc3NfYXV0aF9zaWduYXR1cmUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjQ3OC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNDc5OnN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI0ODAtXFx0XFx0XFx0XFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjgwMT1zdGF0aWMgaW50IHByb2Nlc3NfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjQtXFx0Y2FzZSBGUkFNRV9UQUdfU0VSVkVSX0lERU5UOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MjU6XFx0XFx0cmV0ID0gcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoY29uLCBwLCBlbmQpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjA5OjUwLjg2OTkzMjgyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEyOTQxNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZWVwIERpdmUgb24gYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBhbmQgaXRzIENvbnRleHQqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLnNvLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHByb2Nlc3NfY29udHJvbGAsIHdoaWNoIG1lYW5zIHRoZXJlJ3MgYSBzcGVjaWZpYywgY29udHJvbGxlZCBmbG93IGhhcHBlbmluZy4gYHByb2Nlc3NfY29udHJvbGAsIGluIG15IGV4cGVyaWVuY2UsIGxpa2VseSBtYW5hZ2VzIGEgYnJvYWRlciBzZXQgb2Ygb3BlcmF0aW9ucy4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIGhhbmRsaW5nIHJlcXVlc3RzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgb3ZlcmFsbCBzeXN0ZW0gb3JjaGVzdHJhdGlvbi4gVGhlcmVmb3JlLCB0aGUgZmFjdCB0aGF0IGl0J3MgY2FsbGluZyBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgIHRlbGxzIG1lIHNvbWV0aGluZyBxdWl0ZSBzcGVjaWZpYyBpcyBnb2luZyBvbiB3aXRoaW4gdGhhdCBjb250cm9sIGZsb3cuXG5cbkknbSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgYSBzZXJ2ZXIgaWRlbnRpZmljYXRpb24gcHJvY2VkdXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSByZWdpc3RyYXRpb24gb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgc2VydmVyIGluc3RhbmNlLiBJdCBtaWdodCBpbnZvbHZlIHZlcmlmeWluZyB0aGUgc2VydmVyJ3MgY3JlZGVudGlhbHMsIGZldGNoaW5nIGl0cyBjb25maWd1cmF0aW9uLCBkZXRlcm1pbmluZyBpdHMgcm9sZSwgb3Igc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiBUaGUgcGxhY2VtZW50IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlkZW50aWZpY2F0aW9uIGlzIGEgY3JpdGljYWwgc3RlcCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udHJvbCBzY2hlbWUuIEkgd29uZGVyIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBiZWluZyBwYXNzZWQgaW50byBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNlcnZlciBJRCwgYSBrZXksIG5ldHdvcmsgYWRkcmVzcywgYWxsIG9mIHRoZSBhYm92ZT9cblxuSXQncyB0ZW1wdGluZyB0byB0aGluayBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIElzIHRoaXMgYSBzeXN0ZW0gd2l0aCBtdWx0aXBsZSBzZXJ2ZXIgaW5zdGFuY2VzLCBvciBpcyBpdCBhIHNpbmdsZSwgbW9ub2xpdGhpYyBlbnRpdHk/IFRoaXMgZnVuY3Rpb24gY2FsbCBzaGVkcyBsaWdodCBvbiB0aGUgaW50ZXJuYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGFzY2VydGFpbiBob3cgaXQgaXMgYmVpbmcgdXNlZCBhbmQgaXRzIGltcG9ydGFuY2Ugd2l0aGluIHRoZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDowOTo1NS4yODI4NzkxOTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjE1NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3Nfc2Vzc2lvbl9yZXRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNjA0PXN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JlY29ubmVjdF9vayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjMyLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI2MzM6c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2MzQtXFx0XFx0XFx0XFx0IHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2NzItXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjY3MzpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2NzQtXFx0XFx0XFx0XFx0XFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjgwMT1zdGF0aWMgaW50IHByb2Nlc3NfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MzMtXFx0Y2FzZSBGUkFNRV9UQUdfU0VTU0lPTl9SRVRSWTpcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyODM0OlxcdFxcdHJldCA9IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzNS1cXHRcXHRicmVhaztcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODM2LVxcdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4Mzc6XFx0XFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzOC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MDk6NTUuMzY0MTAwNDM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDIzMzY3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCByZWFjaGFibGUgYW5kIGRpcmVjdGx5IGhhbmRsZSBuZXR3b3JrIGlucHV0LCB0aGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIFRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIG5vdyByZXR1cm5pbmcgZXJyb3JzIGluc3RlYWQgb2YganVzdCB3YXJuaW5ncywgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG1lYW4sIHRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIHdoZXJlIGZ1enppbmcgY2FuIGV4cG9zZSBzb21lIHJlYWxseSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucywgYHByb2Nlc3NfY29ubmVjdGAgaXMgYSB0ZW1wdGluZyB0YXJnZXQsIGJ1dCBpdCdzICpzdGF0aWMqLiBXYWl0IGEgbWludXRlLCBpdCdzIGEgbGFyZ2UgZnVuY3Rpb24gdG9vLiBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGlmIGl0J3MgaW5saW5lZC4gSXQncyBwcm9iYWJseSBub3QsIGJlaW5nIHRoYXQgYmlnLiBCdXQganVzdCB0byBiZSBzdXJlLCBJIHdpbGwgbG9vayBmb3IgaXRzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCB0aG9zZSB3aWxsIGJlIHRoZSByaWdodCBwbGFjZXMgdG8gc3RhcnQgdGhlIGZ1enppbmcgcHJvY2VzcyBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODY0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjAwLjE2NjQ0MDM3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NTUwMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMxND1zdGF0aWMgaW50IHJlYWRfa2VlcGFsaXZlX2FjayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzI4LSAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzMjk6aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzMwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MTA6MDAuMjUxOTA2MTkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzkxMjc4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkhtbSwgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBJc24ndCBTdGF0aWMuLi4qKlxuXG5SaWdodCwgc28gdGhhdCBmdW5jdGlvbiwgYGNlcGhfY29uX3YxX3RyeV9yZWFkYC4uLiBJJ20gbm90aWNpbmcgaXQncyAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBnb3QgZXh0ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhpcyBtb2R1bGUsIGFuZCB0aGF0J3MgaW1tZWRpYXRlbHkgc3BhcmtpbmcgYSBmZXcgY29uc2lkZXJhdGlvbnMuXG5cbkZpcnN0LCBpdCBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gKm91dHNpZGUqIGl0cyBkZWZpbmluZyBjb21waWxhdGlvbiB1bml0LiBUaGF0IGNvdWxkIGJlIGRlbGliZXJhdGUsIGJ1dCBpdCB3YXJyYW50cyBhIGNsb3NlIGxvb2sgYXQgdGhlIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IHdhcyBpbnRlbmRlZCB0byBiZSBtb3JlIGxvY2FsaXplZCwgYnV0IHdhcywgZm9yIHNvbWUgcmVhc29uLCBsZWZ0IG9wZW4/IE9yIGlzIHRoaXMgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgbW9kdWxlJ3MgcHVibGljIEFQST9cblxuU2Vjb25kLCB0aGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaW1wYWN0cyBzeW1ib2wgdmlzaWJpbGl0eS4gVGhlIGxpbmtlciB3aWxsIGJlIGF3YXJlIG9mIGl0IGFuZCB0aGF0IGNhbiBjaGFuZ2UgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGhvdyB0aGlzIGFmZmVjdHMgcG90ZW50aWFsIG5hbWUgY29sbGlzaW9ucyBpbiBsYXJnZXIgcHJvamVjdHMsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIGxpYnJhcmllcyBvciBzaGFyZWQgb2JqZWN0cy4gTWlnaHQgbmVlZCB0byBhdWRpdCBmb3IgcG90ZW50aWFsIG5hbWluZyBjbGFzaGVzLlxuXG5UaGlyZCwgaW4gdGVybXMgb2YgbWFpbnRhaW5hYmlsaXR5LCBpdCByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBnZW51aW5lbHkgbWVhbnQgdG8gYmUgcGFydCBvZiB0aGUgbW9kdWxlJ3MgcHVibGljIGludGVyZmFjZSwgb3IgaWYgaXQgaGFzIHNpbXBseSBiZWVuIGxlZnQgb3BlbiBpbmFkdmVydGVudGx5LiBJZiB0aGlzIHdhc24ndCBpbnRlbnRpb25hbCwgaXQgY291bGQgaW5kaWNhdGUgY29kZSB0aGF0J3MgYXQgcmlzayBvZiBiZWluZyBicm9rZW4gYnkgcmVmYWN0b3JpbmcgaW4gdW5yZWxhdGVkIHBhcnRzIG9mIHRoZSBjb2RlYmFzZS4gSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgaW4gYSBkZWVwZXIgd2F5LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGFkZGl0aW9uYWwgY29tcGxleGl0eS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgYXJlIHVzaW5nIHRoaXMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSBjYW4ndCBqdW1wIHRvIGNvbmNsdXNpb25zLCBidXQgdGhpcyBub24tc3RhdGljIGRlY2xhcmF0aW9uIGhhcyBkZWZpbml0ZWx5IGFkZGVkIGEgbGF5ZXIgb2YgaW5xdWlyeSB0byBteSByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMDowNS4zMzEwMzcxMDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTU2MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNzgxPXN0YXRpYyBpbnQgcHJvY2Vzc19hY2soc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODAwLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MDE6c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgwMi17XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTM1PXN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTQxLVxcdGlmIChjb24tXFx1MDAzZXYyLmluX2Rlc2MuZmRfdGFnICE9IEZSQU1FX1RBR19NRVNTQUdFKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI5NDI6XFx0XFx0cmV0dXJuIHByb2Nlc3NfY29udHJvbChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjk0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6MTA6MDUuNDEwMjAzODFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMDYwMjUwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo5MDEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMDoxOS43MTYyMzExOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0NjAwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oYW5kbGVfY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTE3PXN0YXRpYyBpbnQgcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzQtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjkzNTpzdGF0aWMgaW50IF9faGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzYte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9Mjk4MD1zdGF0aWMgaW50IGhhbmRsZV9wcmVhbWJsZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDEyLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMTM6XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBDVFJMX0JPRFkoY29uLVxcdTAwM2V2Mi5pbl9idWYpKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDE0LX1cXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwMTY9c3RhdGljIGludCBoYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM1LVxcdFxcdG1lbWNweShidWYsIGNvbi1cXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UsIGN0cmxfbGVuKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDM2OlxcdFxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgYnVmKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM3LVxcdH1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDM4LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzk6XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBjb24tXFx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDQwLX1cXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwNDI9c3RhdGljIGludCBoYW5kbGVfY29udHJvbF9yZW1haW5kZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1NC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDU1OlxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVxcdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSAtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA1Ni1cXHRcXHRcXHRcXHQgICAgIENFUEhfUFJFQU1CTEVfSU5MSU5FX0xFTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjE5Ljc5MTcxNTIxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzM2NzMxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTA1OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjI3LjUyODQ0OTM5NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NTAzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5MTc9c3RhdGljIGludCBwcm9jZXNzX21lc3NhZ2Uoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTM1OnN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNi17XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTgwPXN0YXRpYyBpbnQgaGFuZGxlX3ByZWFtYmxlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTItXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAxMzpcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIENUUkxfQk9EWShjb24tXFx1MDAzZXYyLmluX2J1ZikpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTQtfVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMTUtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAxNjpzdGF0aWMgaW50IGhhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDE3LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzUtXFx0XFx0bWVtY3B5KGJ1ZiwgY29uLVxcdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSwgY3RybF9sZW4pO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzY6XFx0XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBidWYpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzctXFx0fVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMzgtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAzOTpcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDAtfVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDEtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzA0MjpzdGF0aWMgaW50IGhhbmRsZV9jb250cm9sX3JlbWFpbmRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzA0My17XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDU0LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwNTU6XFx0cmV0dXJuIF9faGFuZGxlX2NvbnRyb2woY29uLCBjb24tXFx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlIC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDU2LVxcdFxcdFxcdFxcdCAgICAgQ0VQSF9QUkVBTUJMRV9JTkxJTkVfTEVOKTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxMDc9c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxMjYtXFx0XFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxMjc6XFx0XFx0XFx0cmV0ID0gaGFuZGxlX2NvbnRyb2woY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTI4LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxMjktXFx0XFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MX1JFTUFJTkRFUjpcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTMwOlxcdFxcdFxcdHJldCA9IGhhbmRsZV9jb250cm9sX3JlbWFpbmRlcihjb24pO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxMzEtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjI3LjkyNjk1NzQxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzUyMzU5NjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNDQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMDo0NS40NTA1NTY1NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjM4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvcHVsYXRlX2luX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzA5Nz1zdGF0aWMgdm9pZCBmaW5pc2hfc2tpcChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTA2LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxMDc6c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTA4LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxNzY9aW50IGNlcGhfY29uX3YyX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxODctXFx0ICogV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIHNvbWV0aGluZyBwZW5kaW5nIGhlcmUuICBJZiBub3QsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzE4ODpcXHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxODktXFx0ICogKGNlcGhfdGNwX3JlY3YoKSB3b3VsZCBpbW1lZGlhdGVseSByZXR1cm4gMSkuXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTk4LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxOTk6XFx0XFx0cmV0ID0gcG9wdWxhdGVfaW5faXRlcihjb24pO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMyMDAtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEwOjQ1LjUyOTgwMDc2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI1NDE4OTI4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgQ2VwaCBOZXR3b3JrIFByb3RvY29sIEhhbmRsZXJzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgQ2VwaCBuZXR3b3JrIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgZGF0YSB3aGVuIGl0IGFycml2ZXMgb24gdGhlIHNvY2tldCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IHdvcnRoIGEgZGVlcCBkaXZlLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHRoZXJlLlxuXG5JIGRvdWJsZSBjaGVja2VkLCBhbmQgeWVzLCB0aGV5J3JlIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkgbWFkZSBzdXJlIHRvIHJ1bGUgb3V0IHRoZSBvdGhlciBvYnZpb3VzIGNvbnRlbmRlcnMgdGhhdCBhcmUgY29tbW9ubHkgaW52b2x2ZWQgaW4gdGhlIGNvbm5lY3Rpb24gcHJvY2Vzc2luZywganVzdCB0byBiZSBzdXJlLiBJIGNvbmZpcm1lZCB0aGF0IGBwcm9jZXNzX2Nvbm5lY3RgLCBgcHJvY2Vzc19oZWxsb2AsIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgIGFyZSBhbGwgc3RhdGljLiBUaGF0J3MgZ29vZDsgaXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5TbywgaXQncyBiYWNrIHRvIGZvY3VzaW5nIG9uIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuXG5cbk5vdywgYmVmb3JlIEkgc3RhcnQgY29uc3RydWN0aW5nIGZ1enogaW5wdXRzLCBJIHNob3VsZCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDRVBIX0xJQmAgaXMgZW5hYmxlZC4gSXQgaXMgdW5saWtlbHkgdGhhdCBhbnkgbW9yZSBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkLCBidXQgSSdsbCBkb3VibGUgY2hlY2sgdG8gYmUgc3VyZSwgaW4gdGhlIGBuZXQvY2VwaC9LY29uZmlnYCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMzozOC4wNzE2OTc1NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY1OTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2NlcGgvS2NvbmZpZzoyOmNvbmZpZyBDRVBIX0xJQlxcbm5ldC9jZXBoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ2VwaCBjb3JlIGxpYnJhcnlcXFwiXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnLTIyLVxcbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXFxubmV0L2NlcGgvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9jZXBoL0tjb25maWctMzQtXFxubmV0L2NlcGgvS2NvbmZpZzozNTpjb25maWcgQ0VQSF9MSUJfVVNFX0ROU19SRVNPTFZFUlxcbm5ldC9jZXBoL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGluLWtlcm5lbCBzdXBwb3J0IGZvciBETlMgbG9va3VwXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMzozOC41NDkzNjQzNDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwODAwMzM5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTMyNCwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEzOjU0LjYyOTQwMDY5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNTA2MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNlcGhfY29uX3YxX3RyeV9yZWFkXCIsXG4gICAgXCJjZXBoX2Nvbl92Ml90cnlfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAodjEgYW5kIHYyKSBjb25uZWN0aW9uIHByb2Nlc3NpbmcgbG9naWMuIEl0IHJlcGxhY2VzIFdBUk5fT04gYXNzZXJ0aW9ucyB3aXRoIGV4cGxpY2l0IGVycm9yIGhhbmRsaW5nIGFuZCBlcnJvciBtZXNzYWdlcyBmb3IgdmFyaW91cyBjb25uZWN0aW9uIHNlcXVlbmNlIGFuZCBjb25maWd1cmF0aW9uIG1pc21hdGNoZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBlcnJvciBwYXRocy4gVGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIENFUEhfTElCIGFuZCBDRVBIX0ZTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNFUEhfTElCXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sICh2MSBhbmQgdjIpIGNvbm5lY3Rpb24gcHJvY2Vzc2luZyBsb2dpYy4gSXQgcmVwbGFjZXMgV0FSTl9PTiBhc3NlcnRpb25zIHdpdGggZXhwbGljaXQgZXJyb3IgaGFuZGxpbmcgYW5kIGVycm9yIG1lc3NhZ2VzIGZvciB2YXJpb3VzIGNvbm5lY3Rpb24gc2VxdWVuY2UgYW5kIGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2hlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBpbiBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGVycm9yIHBhdGhzLiBUaGUgcmVxdWlyZWQgY29uZmlncyBhcmUgQ0VQSF9MSUIgYW5kIENFUEhfRlMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEzOjU0LjcxMTkxMjE2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjM4ODI3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDoxMzo1NC43MTI0MTc4OThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEzNjMzNzIzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGJvdGggdjEgYW5kIHYyKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aGVyZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzIGZyb20gYSBwZWVyIGNvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzLiBUaGUgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgYnkgcmV0dXJuaW5nIGVycm9yIGNvZGVzICgtMSBvciAtRUlOVkFMKSBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZXhlY3V0aW9uIGFmdGVyIGEgd2FybmluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3MzljMjdkYjNiYzhkYTZhMGJhODNiNmFiYjIzZjQ4Njk1NmQ4MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjA5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG4rKysgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuQEAgLTg5OCw4ICs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4gXHRcdCAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSxcbiBcdFx0ICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPVxuLVx0XHRcdGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0XHQgICAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxuK1x0XHRcdCAgICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJjb25uZWN0X3NlcSBtaXNtYXRjaFwiO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoY29uLVx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxuIFx0XHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi45NjZhNWY4MDBjNjBmIDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5AQCAtMjIzNyw5ICsyMjM3LDE2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19oZWxsbyhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnAsIHZvaWQgKmVuZClcbiBcdFx0ICAgICBfX2Z1bmNfXywgY29uLCBjZXBoX3ByX2FkZHIobXlfYWRkcikpO1xuIFx0fVxuIFxuLVx0V0FSTl9PTihjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikpO1xuLVx0V0FSTl9PTihteV9hZGRyLVx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSk7XG4tXHRXQVJOX09OKCFteV9hZGRyLVx1MDAzZW5vbmNlKTtcbitcdGlmIChjZXBoX2FkZHJfaXNfYmxhbmsobXlfYWRkcikgfHwgY2VwaF9hZGRyX3BvcnQobXlfYWRkcikgfHxcbitcdCAgICBteV9hZGRyLVx1MDAzZXR5cGUgIT0gQ0VQSF9FTlRJVFlfQUREUl9UWVBFX0FOWSB8fFxuK1x0ICAgICFteV9hZGRyLVx1MDAzZW5vbmNlKSB7XG4rXHRcdHByX2VycihcIiVzJWxsZCAlcyBiYWQgbXlfYWRkciAlc1xcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIobXlfYWRkcikpO1xuK1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJiYWQgbXlfYWRkclwiO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdC8qIG5vIHJlc2V0X291dF9rdmVjcygpIGFzIG91ciBoZWxsbyBtYXkgc3RpbGwgYmUgcGVuZGluZyAqL1xuIFx0cmV0ID0gcHJlcGFyZV9hdXRoX3JlcXVlc3QoY29uKTtcbkBAIC0yNTI5LDE0ICsyNTM2LDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y29uLVx1MDAzZXBlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpO1xuIFx0Y29uLVx1MDAzZXYyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7XG4gXHRjb24tXHUwMDNlcGVlcl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuLVx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpO1xuK1x0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFx1MDAyNiB+Y2xpZW50LVx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJ3MgcmVxdWlyZWQgMHglbGx4XFxuXCIsXG4rXHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwibWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlc1wiO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcdGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llID0gY29va2llO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKSB7XG4gXHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuK1x0XHRcdHByX2VycihcIiVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRXQVJOX09OKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmICghY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxuXCIsXG4rXHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuK1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcInNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICsyNjQ0LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBjb25uZWN0X3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCIlcyBjb24gJXAgY29ubmVjdF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbitcdGlmIChjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSkge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEsIGNvbm5lY3Rfc2VxKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSArIDE7XG4gXG4gXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xuQEAgLTI2NTEsNyArMjY4NCwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y2VwaF9kZWNvZGVfNjRfc2FmZShcdTAwMjZwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTtcbi1cdFdBUk5fT04oZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKTtcbitcdGlmIChnbG9iYWxfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGdsb2JhbF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImdsb2JhbF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSA9IGNlcGhfZ2V0X2dsb2JhbF9zZXEoY29uLVx1MDAzZW1zZ3IsIGdsb2JhbF9zZXEpO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjEzOjU0LjcxMjQxODYzOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM2MzM0NDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENlcGggTWVzc2VuZ2VyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQgYWRkcmVzc2VzIHNvbWUgcmVwb3J0ZWQgaXNzdWVzIGZyb20gc3l6Ym90LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IG1hbGljaW91cyBvciBtYWxmb3JtZWQgcGFja2V0cyBmcm9tIGEgZmFrZSBDZXBoIHNlcnZlci4gRXNzZW50aWFsbHksIGl0J3MgcmVwbGFjaW5nIGluc3RhbmNlcyB3aGVyZSB0aGUgY29kZSB3YXMgcmVseWluZyBvbiBgV0FSTl9PTmAgdG8gZmxhZyBwcm9ibGVtcyB3aXRoaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUgKGBtZXNzZW5nZXJfdjEuY2AgYW5kIGBtZXNzZW5nZXJfdjIuY2ApIHdpdGggbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuICBXZSdyZSB0YWxraW5nIGFib3V0IHJldHVybmluZyBlcnJvciBjb2RlcyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIGFuZCBzZXR0aW5nIHRoZSBgY29uLVx1MDAzZWVycm9yX21zZ2AgZmllbGQgdG8gcHJvdmlkZSBzb21lIGNvbnRleHQuICBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGNsZWFuaW5nIHVwIHNvbWUgZXJyb3IgaGFuZGxpbmcgcmF0aGVyIHRoYW4ganVzdCBjcmFzaGluZyBvciBlbWl0dGluZyBhIHdhcm5pbmcuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljIGNoYW5nZXMsIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJJ20gc2VlaW5nIGNoZWNrcyBpbiBgbWVzc2VuZ2VyX3YxLmNgIHdpdGhpbiBgcHJvY2Vzc19jb25uZWN0YCBmb3IgYSBgY29ubmVjdF9zZXFgIG1pc21hdGNoLiBJZiB0aGUgZXhwZWN0ZWQgc2VxdWVuY2UgbnVtYmVyIGFuZCB0aGUgcmVjZWl2ZWQgc2VxdWVuY2UgbnVtYmVyIGRvbid0IG1hdGNoLCB0aGUgcGF0Y2ggbm93IGxvZ3MgYW4gZXJyb3IsIHNldHMgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIHJldHVybnMgYW4gZXJyb3IgY29kZSAoLTEpLiBNYWtlcyBzZW5zZTsgdGhpcyBpcyBmYXIgYmV0dGVyIHRoYW4gc2ltcGx5IHRyaWdnZXJpbmcgYSBgV0FSTl9PTmAuXG5cbkluIGBtZXNzZW5nZXJfdjIuY2AgYW5kIHRoZSBgcHJvY2Vzc19oZWxsb2AgZnVuY3Rpb24sIHRoZSBwYXRjaCBub3cgY2hlY2tzIHRoZSBhZGRyZXNzIGZvciB2YWxpZGl0eSwgd2hldGhlciBpdCdzIGJsYW5rIG9yIG5vdCBvZiBhIHR5cGUgd2UgZXhwZWN0LCBhbmQgaWYgdGhlcmUncyBubyBub25jZS4gSWYgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG1ldCwgYW4gZXJyb3IgaXMgbG9nZ2VkLCBhbmQgYWdhaW4sIGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuXG5cblRoZSBjaGFuZ2VzIGluIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAgaW52b2x2ZSBzaW1pbGFyIGxvZ2ljLiBUaGUgcGF0Y2ggbm93IGNoZWNrcyBmb3IgaW52YWxpZCBmZWF0dXJlcywgYSBzZXJ2ZXIgY29va2llLCBhbmQgYW4gaW52YWxpZCBzZXJ2ZXIgY29va2llLiBFYWNoIHRpbWUsIGluc3RlYWQgb2YgYFdBUk5fT05gLCB3ZSBub3cgZ2V0IGFuIGVycm9yIGxvZyBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuLlxuXG5GaW5hbGx5LCBpbiBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgIHRoZSBwYXRjaCBpcyBjaGVja2luZyBmb3Igc2VxdWVuY2UgbnVtYmVycy4gSWYgdGhlIHNlcXVlbmNlIGlzIGludmFsaWQsIHRoZXJlJ3MgYWdhaW4gYW4gZXJyb3IgbG9nIGFuZCBhbiBlcnJvciByZXR1cm4uXG5cbkNydWNpYWxseSwgZnJvbSBteSBpbml0aWFsIGFuYWx5c2lzIGFuZCBjb25maXJtaW5nIHdpdGggdGhlIGRpZmYsIHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSBoZXJlLCBhbmQgYWJzb2x1dGVseSBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHByb3BlciBlcnJvciBoYW5kbGluZy4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQgZm9yIHRoaXM7IEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgYXJlYS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk2LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjE0OjA2LjA3NTc2NzEwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYm90aCB2MSBhbmQgdjIpLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdoZXJlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMgZnJvbSBhIHBlZXIgY291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MuIFRoZSBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBieSByZXR1cm5pbmcgZXJyb3IgY29kZXMgKC0xIG9yIC1FSU5WQUwpIGluc3RlYWQgb2YgY29udGludWluZyBleGVjdXRpb24gYWZ0ZXIgYSB3YXJuaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgY29kZSAoYm90aCB2MSBhbmQgdjIpLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdoZXJlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMgZnJvbSBhIHBlZXIgY291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MuIFRoZSBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBieSByZXR1cm5pbmcgZXJyb3IgY29kZXMgKC0xIG9yIC1FSU5WQUwpIGluc3RlYWQgb2YgY29udGludWluZyBleGVjdXRpb24gYWZ0ZXIgYSB3YXJuaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[1] Phase: Succeeded StartedAt: 2026-08-08 10:14:17 +0000 UTC FinishedAt: 2026-08-08 10:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 10:14:17 +0000 UTC FinishedAt: 2026-08-08 10:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2] Phase: Succeeded StartedAt: 2026-08-08 10:14:17 +0000 UTC FinishedAt: 2026-08-08 13:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-08 10:14:17 +0000 UTC FinishedAt: 2026-08-08 13:57:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-08 10:14:17 +0000 UTC FinishedAt: 2026-08-08 10:14:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-08 10:14:17 +0000 UTC FinishedAt: 2026-08-08 10:14:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7kmh4/series-workflow7kmh4-convert-artifact-293536832/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-08 10:14:27 +0000 UTC FinishedAt: 2026-08-08 10:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-08 10:14:27 +0000 UTC FinishedAt: 2026-08-08 10:32:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*87fa02c5-6f29-4b1f-a6e9-e266a59b9769,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-workflow7kmh4/series-workflow7kmh4-convert-artifact-293536832/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": "10127020-e3d8-4557-b6a1-d025a462c65b", "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-workflow7kmh4/series-workflow7kmh4-build-action-3052530694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-08 10:14:27 +0000 UTC FinishedAt: 2026-08-08 10:32:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*87fa02c5-6f29-4b1f-a6e9-e266a59b9769,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-workflow7kmh4/series-workflow7kmh4-convert-artifact-293536832/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": "10127020-e3d8-4557-b6a1-d025a462c65b", "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-workflow7kmh4/series-workflow7kmh4-build-action-3052530694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-08 10:32:11 +0000 UTC FinishedAt: 2026-08-08 10:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-08 10:32:11 +0000 UTC FinishedAt: 2026-08-08 10:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-08 10:32:11 +0000 UTC FinishedAt: 2026-08-08 10:32:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-08 10:32:11 +0000 UTC FinishedAt: 2026-08-08 10:32:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7kmh4/series-workflow7kmh4-convert-artifact-1890608103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-08 10:32:21 +0000 UTC FinishedAt: 2026-08-08 10:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-08 10:32:21 +0000 UTC FinishedAt: 2026-08-08 10:34:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10127020-e3d8-4557-b6a1-d025a462c65b,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-workflow7kmh4/series-workflow7kmh4-build-action-3052530694/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-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-08 10:34:40 +0000 UTC FinishedAt: 2026-08-08 10:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-08 10:34:40 +0000 UTC FinishedAt: 2026-08-08 10:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-08 10:34:40 +0000 UTC FinishedAt: 2026-08-08 10:52:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-08 10:34:40 +0000 UTC FinishedAt: 2026-08-08 10:52:31 +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:*87fa02c5-6f29-4b1f-a6e9-e266a59b9769,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-workflow7kmh4/series-workflow7kmh4-convert-artifact-1890608103/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": "03a8c10d-4aff-47cd-add3-b4df9728fcd7", "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-workflow7kmh4/series-workflow7kmh4-build-action-1467816811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-08 10:34:40 +0000 UTC FinishedAt: 2026-08-08 10:52:21 +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:*87fa02c5-6f29-4b1f-a6e9-e266a59b9769,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-workflow7kmh4/series-workflow7kmh4-convert-artifact-1890608103/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": "03a8c10d-4aff-47cd-add3-b4df9728fcd7", "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-workflow7kmh4/series-workflow7kmh4-build-action-1467816811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-08 10:52:31 +0000 UTC FinishedAt: 2026-08-08 10:52:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-08 10:52:31 +0000 UTC FinishedAt: 2026-08-08 10:52:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-08 10:52:31 +0000 UTC FinishedAt: 2026-08-08 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-08 10:52:31 +0000 UTC FinishedAt: 2026-08-08 10:54:32 +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:*03a8c10d-4aff-47cd-add3-b4df9728fcd7,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-workflow7kmh4/series-workflow7kmh4-build-action-1467816811/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-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-08 10:54:42 +0000 UTC FinishedAt: 2026-08-08 13:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-08 10:54:42 +0000 UTC FinishedAt: 2026-08-08 13:57:52 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"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:*10127020-e3d8-4557-b6a1-d025a462c65b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03a8c10d-4aff-47cd-add3-b4df9728fcd7,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-workflow7kmh4/series-workflow7kmh4-build-action-3052530694/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-workflow7kmh4/series-workflow7kmh4-build-action-1467816811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-08 10:54:42 +0000 UTC FinishedAt: 2026-08-08 10:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-08 10:54:42 +0000 UTC FinishedAt: 2026-08-08 10:54:46 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"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-workflow7kmh4/series-workflow7kmh4-convert-artifact-179843392/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-08 10:54:42 +0000 UTC FinishedAt: 2026-08-08 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-08 10:54:42 +0000 UTC FinishedAt: 2026-08-08 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-08 10:54:42 +0000 UTC FinishedAt: 2026-08-08 10:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-08 10:54:52 +0000 UTC FinishedAt: 2026-08-08 13:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kmh4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS"],"series_id":"4ec30de1-909a-4c42-82a9-71f1db2fccac","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-08 10:54:52 +0000 UTC FinishedAt: 2026-08-08 13:57:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10127020-e3d8-4557-b6a1-d025a462c65b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03a8c10d-4aff-47cd-add3-b4df9728fcd7,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-workflow7kmh4/series-workflow7kmh4-build-action-3052530694/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-workflow7kmh4/series-workflow7kmh4-build-action-1467816811/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-workflow7kmh4/series-workflow7kmh4-convert-artifact-179843392/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,}