Name: series-workflowj48tr Phase: Succeeded StartedAt: 2026-08-10 09:44:08 +0000 UTC FinishedAt: 2026-08-10 13:36:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[0] Phase: Succeeded StartedAt: 2026-08-10 09:44:08 +0000 UTC FinishedAt: 2026-08-10 09:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 09:44:08 +0000 UTC FinishedAt: 2026-08-10 09:49:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "04e57db5-0ec1-4c0b-8ae9-151a4237b5f3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "userdatum_value_store", "userdatum_drop", "userdatum_make_item", "netconsole_target_release", "netconsole_write_ext" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9kcm9wJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9tYWtlX2l0ZW0mIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3dyaXRlX2V4dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuc2FmZSBsb2NrbGVzcyB1cGRhdGUgb2YgYG50LVx1MDAzZXVzZXJkYXRhYCB3aXRoIGFuIFJDVS1wcm90ZWN0ZWQgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIGluIHRoZSBuZXRjb25zb2xlIHRyYW5zbWl0IHBhdGguIFRoZSBuZXcgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NfZmxleGAsIHBvcHVsYXRlZCB1c2luZyBgc2NucHJpbnRmYCAod2hpY2ggbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcpLCBhbmQgaXRzIGV4YWN0IHdyaXR0ZW4gbGVuZ3RoIGlzIHJlY29yZGVkIGluIGBsZW5ndGhgLiBUaGUgdHJhbnNtaXQgcGF0aCB0aGVuIHJlYWRzIGVpdGhlciB2aWEgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIChzdG9wcGluZyBhdCB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBvciBieSBleHBsaWNpdGx5IHVzaW5nIHRoZSByZWNvcmRlZCBgbGVuZ3RoYC4gSW4gYm90aCBjYXNlcywgb25seSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5dGVzIGFyZSByZWFkIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAodXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMpIGFyZSBwZXJmZWN0bHkgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHByb3Blcmx5IHVzZSBSQ1Ugd2hlbiB1cGRhdGluZyBhbmQgcmVhZGluZyB0aGUgdXNlcmRhdGEgcGF5bG9hZCwgd2hpY2ggaXMgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMgYW5kIHVzZWQgZHVyaW5nIGV4dGVuZGVkIGNvbnNvbGUgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsL2RyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDA2N2Q5NTQzNGY3Mjg0NGE0OTdkZWI1OTcyMWU5ZDZlMzgzOGQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggMDM5MTMzMDIzMjhjYy4uYjM1OGU1YzM2NzM1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDEzICYjNDM7MTUxLDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAtIEZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkIG9mIGEgdGFyZ2V0LlxuJiM0MzsgKiBAcmN1Olx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuJiM0MzsgKiBAbGVuZ3RoOlx0TGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLlxuJiM0MzsgKiBAZGF0YTpcdEZvcm1hdHRlZCBcJiMzNDsga2V5PXZhbHVlXFxuXCYjMzQ7IGVudHJpZXMsIE5VTCB0ZXJtaW5hdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxuJiM0MzsgKiBAbGVuZ3RoIGRpc2FncmVlaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4mIzQzO1x0c2l6ZV90XHRcdFx0bGVuZ3RoO1xuJiM0MztcdGNoYXJcdFx0XHRkYXRhW107XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LlxuICAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG4gICogQGdyb3VwOlx0TGlua3MgdXMgaW50byB0aGUgY29uZmlnZnMgc3Vic3lzdGVtIGhpZXJhcmNoeS5cbiAgKiBAdXNlcmRhdGFfZ3JvdXA6XHRMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5XG4tICogQHVzZXJkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXG4tICogQHVzZXJkYXRhX2xlbmd0aDpcdFN0cmluZyBsZW5ndGggb2YgdXNlcmRhdGEuXG4mIzQzOyAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC5cbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuQEAgLTE5OCw4ICYjNDM7MjEyLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdGdyb3VwO1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0dXNlcmRhdGFfZ3JvdXA7XG4tXHRjaGFyXHRcdFx0KnVzZXJkYXRhO1xuLVx0c2l6ZV90XHRcdFx0dXNlcmRhdGFfbGVuZ3RoO1xuJiM0MztcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTtcbiBcdGNoYXJcdFx0XHRzeXNkYXRhW01BWF9FWFRSQURBVEFfRU5UUllfTEVOICogTUFYX1NZU0RBVEFfSVRFTVNdO1xuIFxuIFx0LyogYml0LXdpc2Ugd2l0aCBzeXNkYXRhX2ZlYXR1cmUgYml0cyAqL1xuQEAgLTEzNTEsMTIgJiM0MzsxMzY0LDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqb2xkO1xuIFx0c3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbi1cdGNoYXIgKm9sZF9idWYgPSBOVUxMO1xuLVx0Y2hhciAqbmV3X2J1ZiA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IG9mZnNldCA9IDA7XG4gXHRpbnQgbGVuO1xuIFxuQEAgLTEzNjgsOCAmIzQzOzEzODAsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xuIFx0aWYgKGxlbikge1xuLVx0XHRuZXdfYnVmID0ga21hbGxvYyhsZW4gJiM0MzsgMSwgR0ZQX0tFUk5FTCk7XG4tXHRcdGlmICghbmV3X2J1ZilcbiYjNDM7XHRcdG5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbkBAIC0xMzc5LDIyICYjNDM7MTM5MSwyMSBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHR1ZG1faXRlbSA9IHRvX3VzZXJkYXR1bShpdGVtKTtcbiBcdFx0LyogU2tpcCB1c2VyZGF0YSB3aXRoIG5vIHZhbHVlIHNldCAqL1xuIFx0XHRpZiAodWRtX2l0ZW0tXHUwMDNldmFsdWVbMF0pIHtcbi1cdFx0XHRvZmZzZXQgJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZuZXdfYnVmW29mZnNldF0sIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LFxuJiM0MztcdFx0XHRvZmZzZXQgJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZuZXctXHUwMDNlZGF0YVtvZmZzZXRdLFxuJiM0MztcdFx0XHRcdFx0ICAgIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LFxuIFx0XHRcdFx0XHQgICAgXCYjMzQ7ICVzPSVzXFxuXCYjMzQ7LCBpdGVtLVx1MDAzZWNpX25hbWUsXG4gXHRcdFx0XHRcdCAgICB1ZG1faXRlbS1cdTAwM2V2YWx1ZSk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdFdBUk5fT05fT05DRShvZmZzZXQgIT0gbGVuKTtcbiYjNDM7XHRpZiAobmV3KVxuJiM0MztcdFx0bmV3LVx1MDAzZWxlbmd0aCA9IG9mZnNldDtcbiBcbi1cdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdG9sZF9idWYgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi1cdG50LVx1MDAzZXVzZXJkYXRhID0gbmV3X2J1Zjtcbi1cdG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWUob2xkX2J1Zik7XG4mIzQzO1x0LyogV3JpdGVycyBhcmUgc2VyaWFsaXplZCBieSBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXguICovXG4mIzQzO1x0b2xkID0gcmN1X3JlcGxhY2VfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSwgbmV3LFxuJiM0MztcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpO1xuJiM0MztcdGtmcmVlX3JjdShvbGQsIHJjdSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTY4NCw3ICYjNDM7MTY5NSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4mIzQzO1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gXHRrZnJlZShudCk7XG4gfVxuIFxuQEAgLTIyMjcsMTQgJiM0MzsyMjM4LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4gXHRcdFx0XHQgICAgICBpbnQgbXNnX2xlbixcbi1cdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbilcbiYjNDM7XHRcdFx0XHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuICNlbmRpZlxuIFxuQEAgLTIyNTEsNyAmIzQzOzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpZiAodXNlcmRhdGEpXG4gXHRcdG1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG4gXHRcdFx0XHQgICAgIHNpemVvZihudC1cdTAwM2VidWYpIC0gbXNnX2xlbiwgXCYjMzQ7JXNcJiMzNDssXG4tXHRcdFx0XHQgICAgIHVzZXJkYXRhKTtcbiYjNDM7XHRcdFx0XHQgICAgIHVzZXJkYXRhLVx1MDAzZWRhdGEpO1xuIFxuIFx0aWYgKHN5c2RhdGEpXG4gXHRcdG1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG5AQCAtMjI3MSw3ICYjNDM7MjI4MSw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcbi1cdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbilcbiYjNDM7XHRcdFx0XHQgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xuQEAgLTIyODIsMTIgJiM0MzsyMjkzLDEyIEBAIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4gXHRzeXNkYXRhX3B0ciA9IG50LVx1MDAzZXN5c2RhdGE7XG4tXHR1c2VyZGF0YV9sZW4gPSBudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGg7XG4gI2VuZGlmXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHVzZXJkYXRhX2xlbiAhPSAwKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmICh1c2VyZGF0YSkge1xuJiM0MztcdFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXHUwMDNlZGF0YTtcbiYjNDM7XHRcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVx1MDAzZWxlbmd0aDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFzeXNkYXRhX3B0ciBcdTAwMjZcdTAwMjYgc3lzZGF0YV9sZW4gIT0gMCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMzY0LDcgJiM0MzsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuIFx0XHRcdFx0aW50IG1zZ19sZW4sXG4gXHRcdFx0XHRpbnQgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4pXG4mIzQzO1x0XHRcdFx0aW50IHN5c2RhdGFfbGVuLFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRpbnQgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW47XG4gXHRjb25zdCBjaGFyICptc2dib2R5O1xuQEAgLTIzOTMsNyAmIzQzOzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHQgKiB3aWxsIGJlIHJlcGxhY2VkXG4gXHQgKi9cbiBcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcbi1cdFx0XHQgICAgIHN5c2RhdGFfbGVuKTtcbiYjNDM7XHRcdFx0ICAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNDA4LDI1ICYjNDM7MjQyMCwzMyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gc3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdCAgICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XG4gXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xuIFx0aW50IHN5c2RhdGFfbGVuID0gMDtcbiBcdGludCBsZW47XG4gXG4mIzQzO1x0LyogS2VlcHMgdGhlIHBheWxvYWQgcGlja2VkIGJlbG93IGFsaXZlIHVudGlsIHRoZSBsYXN0IHNlbmRfdWRwKCkuICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiYjNDM7XHR1c2VyZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShudC1cdTAwM2V1c2VyZGF0YSk7XG4mIzQzO1x0aWYgKHVzZXJkYXRhKVxuJiM0MztcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuICNlbmRpZlxuIFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4gXHRcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpICYjNDM7IDE7XG4gXG4gXHRsZW4gPSB3Y3R4dC1cdTAwM2VsZW4gJiM0MzsgcmVsZWFzZV9sZW4gJiM0Mzsgc3lzZGF0YV9sZW4gJiM0MzsgdXNlcmRhdGFfbGVuO1xuIFx0aWYgKGxlbiBcdTAwM2M9IE1BWF9QUklOVF9DSFVOSylcbi1cdFx0cmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Zixcbi1cdFx0XHRcdFx0XHQgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbik7XG4mIzQzO1x0XHRzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0XHRcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gXG4tXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0ICAgc3lzZGF0YV9sZW4pO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuQEAgLTI2NjksNyAmIzQzOzI2ODksNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4mIzQzO1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gI2VuZGlmXG4gXHRrZnJlZShudCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5pbmRleCBiNTZjNzBiN2UyNzQyLi5mMDY3NGMwMDE3ZmM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuQEAgLTEzLDYgJiM0MzsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuJiM0MztcdG5ldGNvbnNfdXNlcmRhdGEuc2ggXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXG4gXG4gaW5jbHVkZSAuLi8uLi8uLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbkBAIC0wLDAgJiM0MzsxLDIyOSBAQFxuJiM0MzsjIS91c3IvYmluL2VudiBiYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC5cbiYjNDM7I1xuJiM0MzsjIFRoZSBmaXJzdCBwYXJ0IGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIHRoZSB0YXJnZXQgdHJhbnNtaXRzIGZvbGxvd3Mgd2hhdFxuJiM0MzsjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZVxuJiM0MzsjIHByZXZpb3VzIG9uZSwgY2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeSwgYW5kIHNvIGRvZXMgcmVtb3ZpbmcgdGhlXG4mIzQzOyMga2V5LlxuJiM0MzsjXG4mIzQzOyMgVGhlIHNlY29uZCBwYXJ0IHJld3JpdGVzIHZhbHVlcywgY3JlYXRlcyBhbmQgZGVsZXRlcyBrZXlzLCBhbmQgY2xlYXJzIHRoZVxuJiM0MzsjIHBheWxvYWQgZW50aXJlbHkgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIGtlZXBzXG4mIzQzOyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLFxuJiM0MzsjIG9uY2Ugd2l0aCBhIHBheWxvYWQgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiBhIHNpbmdsZSBwYWNrZXQgYW5kIG9uY2UgbGFyZ2VcbiYjNDM7IyBlbm91Z2ggdG8gYmUgZnJhZ21lbnRlZC5cbiYjNDM7I1xuJiM0MzsjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzO1xuJiM0MztzZXQgLWV1byBwaXBlZmFpbFxuJiM0MztcbiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSBcJiMzNDskKHJlYWRsaW5rIC1lIFwmIzM0OyR7QkFTSF9TT1VSQ0VbMF19XCYjMzQ7KVwmIzM0OylcbiYjNDM7XG4mIzQzO3NvdXJjZSBcJiMzNDske1NDUklQVERJUn1cJiMzNDsvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXG4mIzQzO1xuJiM0MzsjIE51bWJlciBvZiB0aW1lcyBlYWNoIHRvcnR1cmUgd29ya2VyIGxvb3BzXG4mIzQzO0lURVJBVElPTlM9JHsxOi0yMDB9XG4mIzQzO1xuJiM0MzsjIEtleXMgb3duZWQgYnkgZWFjaCB0b3J0dXJlIHdvcmtlci4gV29ya2VycyBkbyBub3Qgc2hhcmUga2V5cywgc28gYSBmYWlsaW5nXG4mIzQzOyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuXG4mIzQzO0NIVVJOX0tFWT1cJiMzNDtjaHVybmtleVwmIzM0O1xuJiM0MztUUkFOU0lFTlRfS0VZPVwmIzM0O3RyYW5zaWVudGtleVwmIzM0O1xuJiM0MzsjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTktcbiYjNDM7QlVMS19LRVlTPThcbiYjNDM7XG4mIzQzO1VTRVJEQVRBX0RJUj1cJiMzNDske05FVENPTlNfUEFUSH0vdXNlcmRhdGFcJiMzNDtcbiYjNDM7IyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU31cbiYjNDM7IyBlbnRyaWVzIG9mIHRoaXMgc2l6ZSBhcmUgZW5vdWdoIHRvIGZvcmNlIGZyYWdtZW50YXRpb25cbiYjNDM7TE9OR19WQUxVRT0kKHByaW50ZiAtLSAmIzM5O3YlLjBzJiMzOTsgezEuLjE5MH0pXG4mIzQzO1xuJiM0MztmdW5jdGlvbiB3cml0ZV9rZXkoKSB7XG4mIzQzO1x0bG9jYWwgS0VZPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBWQUxVRT1cJiMzNDskezJ9XCYjMzQ7XG4mIzQzO1xuJiM0MztcdG1rZGlyIC1wIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0tFWX1cJiMzNDtcbiYjNDM7XHRlY2hvIFwmIzM0OyR7VkFMVUV9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgU2VuZCBhIHNpbmdsZSBtZXNzYWdlIGFuZCBjYXB0dXJlIGl0IG9uIHRoZSBkZXN0aW5hdGlvbiBpbnRlcmZhY2VcbiYjNDM7ZnVuY3Rpb24gc2VuZF9hbmRfY2FwdHVyZSgpIHtcbiYjNDM7XHRybSAtZiBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0MztcbiYjNDM7XHRsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwMjZcbiYjNDM7XHR3YWl0X2Zvcl9wb3J0IFwmIzM0OyR7TkFNRVNQQUNFfVwmIzM0OyBcJiMzNDske1BPUlR9XCYjMzQ7IFwmIzM0OyR7SVBfVkVSU0lPTn1cJiMzNDtcbiYjNDM7XHRlY2hvIFwmIzM0OyR7TVNHfTogJHtUQVJHRVR9XCYjMzQ7IFx1MDAzZSAvZGV2L2ttc2dcbiYjNDM7XHRidXN5d2FpdCBcJiMzNDske0JVU1lXQUlUX1RJTUVPVVR9XCYjMzQ7IHRlc3QgLXMgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgfHwgdHJ1ZVxuJiM0MztcdHBraWxsX3NvY2F0XG4mIzQzO1x0dmFsaWRhdGVfbXNnIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGV4cGVjdF9pbl9tc2coKSB7XG4mIzQzO1x0bG9jYWwgV0FOVEVEPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgISBncmVwIC1xIC0tIFwmIzM0OyR7V0FOVEVEfVwmIzM0OyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAmIzM5OyR7V0FOVEVEfSYjMzk7IG5vdCBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRjYXQgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZXhpdCBcJiMzNDske2tzZnRfZmFpbH1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHtcbiYjNDM7XHRsb2NhbCBVTldBTlRFRD1cJiMzNDskezF9XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIGdyZXAgLXEgLS0gXCYjMzQ7JHtVTldBTlRFRH1cJiMzNDsgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJiMzOTske1VOV0FOVEVEfSYjMzk7IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGNhdCBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IFwmIzM0OyR7a3NmdF9mYWlsfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgRXZlcnkgd3JpdGUgcHVibGlzaGVzIGEgbmV3IHBheWxvYWQgYW5kIGZyZWVzIHRoZSBwcmV2aW91cyBvbmUuIEFuIGVtcHR5XG4mIzQzOyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGVcbiYjNDM7IyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuXG4mIzQzO2Z1bmN0aW9uIGNodXJuX3ZhbHVlKCkge1xuJiM0MztcdGxvY2FsIGlcbiYjNDM7XG4mIzQzO1x0Zm9yIGkgaW4gJChzZXEgXCYjMzQ7JHtJVEVSQVRJT05TfVwmIzM0OylcbiYjNDM7XHRkb1xuJiM0MztcdFx0ZWNobyBcJiMzNDt2YWx1ZSR7aX1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcJiMzNDtcbiYjNDM7XHRcdGVjaG8gXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgQ3JlYXRlIGFuZCBkZWxldGUgYSBrZXkgdW5kZXJuZWF0aCB0aGUgc2VuZGVyXG4mIzQzO2Z1bmN0aW9uIGNodXJuX2tleSgpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7SVRFUkFUSU9OU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdG1rZGlyIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9XCYjMzQ7XG4mIzQzO1x0XHRlY2hvIFwmIzM0O3RyYW5zaWVudCR7aX1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO1x0XHRybWRpciBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWRcbiYjNDM7ZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7SVRFUkFUSU9OU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JHtNU0d9OiAke1RBUkdFVH0gJHtpfVwmIzM0OyBcdTAwM2UgL2Rldi9rbXNnXG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvclxuJiM0MztmdW5jdGlvbiBydW5fd29ya2VycygpIHtcbiYjNDM7XHRsb2NhbCBQSURTPSgpXG4mIzQzO1x0bG9jYWwgV09SS0VSXG4mIzQzO1x0bG9jYWwgUkVUPTBcbiYjNDM7XHRsb2NhbCBQSURcbiYjNDM7XG4mIzQzO1x0Zm9yIFdPUktFUiBpbiBcJiMzNDskQFwmIzM0O1xuJiM0MztcdGRvXG4mIzQzO1x0XHRcJiMzNDske1dPUktFUn1cJiMzNDsgXHUwMDI2XG4mIzQzO1x0XHRQSURTJiM0Mzs9KFwmIzM0OyQhXCYjMzQ7KVxuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0IyBSZWFwIGV2ZXJ5IHdvcmtlciBiZWZvcmUgcmVwb3J0aW5nIGEgZmFpbHVyZSwgb3RoZXJ3aXNlIGEgc3Vydml2aW5nXG4mIzQzO1x0IyB3b3JrZXIga2VlcHMgd3JpdGluZyB0byBjb25maWdmcyB3aGlsZSB0aGUgZXhpdCB0cmFwIGNsZWFucyBpdCB1cC5cbiYjNDM7XHRmb3IgUElEIGluIFwmIzM0OyR7UElEU1tAXX1cJiMzNDtcbiYjNDM7XHRkb1xuJiM0MztcdFx0d2FpdCBcJiMzNDske1BJRH1cJiMzNDsgfHwgUkVUPTFcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdGlmIFtbIFwmIzM0OyR7UkVUfVwmIzM0OyAtbmUgMCBdXVxuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogdXNlcmRhdGEgdG9ydHVyZSB3b3JrZXIgZmFpbGVkXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7QlVMS19LRVlTfVwmIzM0OylcbiYjNDM7XHRkb1xuJiM0MztcdFx0d3JpdGVfa2V5IFwmIzM0O2J1bGske2l9XCYjMzQ7IFwmIzM0OyR7TE9OR19WQUxVRX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0JVTEtfS0VZU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdHJtZGlyIFwmIzM0OyR7VVNFUkRBVEFfRElSfS9idWxrJHtpfVwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7IyBTdGFydCBoZXJlICNcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7XG4mIzQzO21vZHByb2JlIG5ldGRldnNpbSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4mIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcbiYjNDM7SVBfVkVSU0lPTj1cJiMzNDtpcHY0XCYjMzQ7XG4mIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxuJiM0MztPVVRQVVRfRklMRT1cJiMzNDsvdG1wLyR7VEFSR0VUfVwmIzM0O1xuJiM0MztcbiYjNDM7IyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXG4mIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbiYjNDM7IyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXG4mIzQzO2VjaG8gXCYjMzQ7NiA1XCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xuJiM0MzsjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzXG4mIzQzO3NldF9uZXR3b3JrIFwmIzM0OyR7SVBfVkVSU0lPTn1cJiMzNDtcbiYjNDM7IyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxuJiM0MztjcmVhdGVfZHluYW1pY190YXJnZXRcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjMVxuJiM0MzsjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvblxuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0Mzt3cml0ZV9rZXkgXCYjMzQ7JHtVU0VSREFUQV9LRVl9XCYjMzQ7IFwmIzM0O2ZpcnN0XCYjMzQ7XG4mIzQzO3NlbmRfYW5kX2NhcHR1cmVcbiYjNDM7ZXhwZWN0X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3RcJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjMlxuJiM0MzsjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZFxuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0Mzt3cml0ZV9rZXkgXCYjMzQ7JHtVU0VSREFUQV9LRVl9XCYjMzQ7IFwmIzM0O3NlY29uZFwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9pbl9tc2cgXCYjMzQ7JHtVU0VSREFUQV9LRVl9PXNlY29uZFwmIzM0O1xuJiM0MztleHBlY3Rfbm90X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3RcJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjM1xuJiM0MzsjIENsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnlcbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ZWNobyBcdTAwM2UgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZVwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9ub3RfaW5fbXNnIFwmIzM0OyR7VVNFUkRBVEFfS0VZfT1cJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjNFxuJiM0MzsjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO3dyaXRlX2tleSBcJiMzNDske1VTRVJEQVRBX0tFWX1cJiMzNDsgXCYjMzQ7dGhpcmRcJiMzNDtcbiYjNDM7cm1kaXIgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfVwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9ub3RfaW5fbXNnIFwmIzM0OyR7VVNFUkRBVEFfS0VZfT1cJiMzNDtcbiYjNDM7cm0gXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjNVxuJiM0MzsjIFRvcnR1cmUgdGhlIHBheWxvYWQgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsXG4mIzQzOyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWRcbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7d3JpdGVfa2V5IFwmIzM0OyR7Q0hVUk5fS0VZfVwmIzM0OyBcJiMzNDske1VTRVJEQVRBX1ZBTFVFfVwmIzM0O1xuJiM0MztydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuJiM0MztcbiYjNDM7Y3JlYXRlX2J1bGtfa2V5c1xuJiM0MztydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuJiM0MztkZWxldGVfYnVsa19rZXlzXG4mIzQzO1xuJiM0MztleGl0IFwmIzM0OyR7a3NmdF9wYXNzfVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJkYXR1bV92YWx1ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fbWFrZV9pdGVtJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV93cml0ZV9leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHByb3Blcmx5IHVzZSBSQ1Ugd2hlbiB1cGRhdGluZyBhbmQgcmVhZGluZyB0aGUgdXNlcmRhdGEgcGF5bG9hZCwgd2hpY2ggaXMgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMgYW5kIHVzZWQgZHVyaW5nIGV4dGVuZGVkIGNvbnNvbGUgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsL2RyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDA2N2Q5NTQzNGY3Mjg0NGE0OTdkZWI1OTcyMWU5ZDZlMzgzOGQ4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDAzOTEzMzAyMzI4Y2MuLmIzNThlNWMzNjczNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTE1MSwxMyAmIzQzOzE1MSwyNyBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAJU1RBVEVfREVBQ1RJVkFURUQsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC4KJiM0MzsgKiBAcmN1OglVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCiYjNDM7ICogQGxlbmd0aDoJTGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLgomIzQzOyAqIEBkYXRhOglGb3JtYXR0ZWQgJiMzNDsga2V5PXZhbHVlXG4mIzM0OyBlbnRyaWVzLCBOVUwgdGVybWluYXRlZC4KJiM0MzsgKgomIzQzOyAqIEltbXV0YWJsZSBvbmNlIHB1Ymxpc2hlZCwgc28gdGhlIHRyYW5zbWl0IHBhdGggbmV2ZXIgb2JzZXJ2ZXMgQGRhdGEgYW5kCiYjNDM7ICogQGxlbmd0aCBkaXNhZ3JlZWluZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7CiYjNDM7CXN0cnVjdCByY3VfaGVhZAkJcmN1OwomIzQzOwlzaXplX3QJCQlsZW5ndGg7CiYjNDM7CWNoYXIJCQlkYXRhW107CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuCiAgKiBAbGlzdDoJTGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuCiAgKiBAZ3JvdXA6CUxpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuCiAgKiBAdXNlcmRhdGFfZ3JvdXA6CUxpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHkKLSAqIEB1c2VyZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKLSAqIEB1c2VyZGF0YV9sZW5ndGg6CVN0cmluZyBsZW5ndGggb2YgdXNlcmRhdGEuCiYjNDM7ICogQHVzZXJkYXRhOgkJQ2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC4KICAqIEBzeXNkYXRhOgkJQ2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZAogICogQHN5c2RhdGFfZmllbGRzOglTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuCiAgKiBAbXNnY291bnRlcjoJTWVzc2FnZSBzZW50IGNvdW50ZXIuCkBAIC0xOTgsOCAmIzQzOzIxMiw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwogCXN0cnVjdCBjb25maWdfZ3JvdXAJZ3JvdXA7CiAJc3RydWN0IGNvbmZpZ19ncm91cAl1c2VyZGF0YV9ncm91cDsKLQljaGFyCQkJKnVzZXJkYXRhOwotCXNpemVfdAkJCXVzZXJkYXRhX2xlbmd0aDsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhOwogCWNoYXIJCQlzeXNkYXRhW01BWF9FWFRSQURBVEFfRU5UUllfTEVOICogTUFYX1NZU0RBVEFfSVRFTVNdOwogCiAJLyogYml0LXdpc2Ugd2l0aCBzeXNkYXRhX2ZlYXR1cmUgYml0cyAqLwpAQCAtMTM1MSwxMiAmIzQzOzEzNjQsMTEgQEAgc3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewomIzQzOwlzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDsKIAlzdHJ1Y3QgdXNlcmRhdHVtICp1ZG1faXRlbTsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0JY2hhciAqb2xkX2J1ZiA9IE5VTEw7Ci0JY2hhciAqbmV3X2J1ZiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb2Zmc2V0ID0gMDsKIAlpbnQgbGVuOwogCkBAIC0xMzY4LDggJiM0MzsxMzgwLDggQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAogCS8qIEFsbG9jYXRlIG5ldyBidWZmZXIgKi8KIAlpZiAobGVuKSB7Ci0JCW5ld19idWYgPSBrbWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuZXdfYnVmKQomIzQzOwkJbmV3ID0ga21hbGxvY19mbGV4KCpuZXcsIGRhdGEsIGxlbiAmIzQzOyAxKTsKJiM0MzsJCWlmICghbmV3KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMzc5LDIyICYjNDM7MTM5MSwyMSBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQl1ZG1faXRlbSA9IHRvX3VzZXJkYXR1bShpdGVtKTsKIAkJLyogU2tpcCB1c2VyZGF0YSB3aXRoIG5vIHZhbHVlIHNldCAqLwogCQlpZiAodWRtX2l0ZW0tJmd0O3ZhbHVlWzBdKSB7Ci0JCQlvZmZzZXQgJiM0Mzs9IHNjbnByaW50ZigmYW1wO25ld19idWZbb2Zmc2V0XSwgbGVuICYjNDM7IDEgLSBvZmZzZXQsCiYjNDM7CQkJb2Zmc2V0ICYjNDM7PSBzY25wcmludGYoJmFtcDtuZXctJmd0O2RhdGFbb2Zmc2V0XSwKJiM0MzsJCQkJCSAgICBsZW4gJiM0MzsgMSAtIG9mZnNldCwKIAkJCQkJICAgICYjMzQ7ICVzPSVzXG4mIzM0OywgaXRlbS0mZ3Q7Y2lfbmFtZSwKIAkJCQkJICAgIHVkbV9pdGVtLSZndDt2YWx1ZSk7CiAJCX0KIAl9CiAKIAlXQVJOX09OX09OQ0Uob2Zmc2V0ICE9IGxlbik7CiYjNDM7CWlmIChuZXcpCiYjNDM7CQluZXctJmd0O2xlbmd0aCA9IG9mZnNldDsKIAotCS8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3RhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKLQlvbGRfYnVmID0gbnQtJmd0O3VzZXJkYXRhOwotCW50LSZndDt1c2VyZGF0YSA9IG5ld19idWY7Ci0JbnQtJmd0O3VzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWUob2xkX2J1Zik7CiYjNDM7CS8qIFdyaXRlcnMgYXJlIHNlcmlhbGl6ZWQgYnkgZHluYW1pY19uZXRjb25zb2xlX211dGV4LiAqLwomIzQzOwlvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LSZndDt1c2VyZGF0YSwgbmV3LAomIzQzOwkJCQkgIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2R5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpOwomIzQzOwlrZnJlZV9yY3Uob2xkLCByY3UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjg0LDcgJiM0MzsxNjk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEpKTsKIAlrZnJlZShudCk7CiB9CiAKQEAgLTIyMjcsMTQgJiM0MzsyMjM4LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQkgICAgICBjb25zdCBjaGFyICptc2csCiAJCQkJICAgICAgaW50IG1zZ19sZW4sCi0JCQkJICAgICAgaW50IHJlbGVhc2VfbGVuKQomIzQzOwkJCQkgICAgICBpbnQgcmVsZWFzZV9sZW4sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSkKIHsKLQljb25zdCBjaGFyICp1c2VyZGF0YSA9IE5VTEw7CiAJY29uc3QgY2hhciAqc3lzZGF0YSA9IE5VTEw7CiAJY29uc3QgY2hhciAqcmVsZWFzZTsKIAogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKLQl1c2VyZGF0YSA9IG50LSZndDt1c2VyZGF0YTsKIAlzeXNkYXRhID0gbnQtJmd0O3N5c2RhdGE7CiAjZW5kaWYKIApAQCAtMjI1MSw3ICYjNDM7MjI2MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAlpZiAodXNlcmRhdGEpCiAJCW1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZigmYW1wO250LSZndDtidWZbbXNnX2xlbl0sCiAJCQkJICAgICBzaXplb2YobnQtJmd0O2J1ZikgLSBtc2dfbGVuLCAmIzM0OyVzJiMzNDssCi0JCQkJICAgICB1c2VyZGF0YSk7CiYjNDM7CQkJCSAgICAgdXNlcmRhdGEtJmd0O2RhdGEpOwogCiAJaWYgKHN5c2RhdGEpCiAJCW1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZigmYW1wO250LSZndDtidWZbbXNnX2xlbl0sCkBAIC0yMjcxLDcgJiM0MzsyMjgxLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKQogCiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCSBjb25zdCBjaGFyICptc2dib2R5X3B0ciwgaW50IGhlYWRlcl9sZW4sCi0JCQkJIGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKQomIzQzOwkJCQkgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4sCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpCiB7CiAJY29uc3QgY2hhciAqdXNlcmRhdGFfcHRyID0gTlVMTDsKIAljb25zdCBjaGFyICpzeXNkYXRhX3B0ciA9IE5VTEw7CkBAIC0yMjgyLDEyICYjNDM7MjI5MywxMiBAQCBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCWludCB1c2VyZGF0YV9sZW4gPSAwOwogCiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwotCXVzZXJkYXRhX3B0ciA9IG50LSZndDt1c2VyZGF0YTsKIAlzeXNkYXRhX3B0ciA9IG50LSZndDtzeXNkYXRhOwotCXVzZXJkYXRhX2xlbiA9IG50LSZndDt1c2VyZGF0YV9sZW5ndGg7CiAjZW5kaWYKLQlpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgJmFtcDsmYW1wOyB1c2VyZGF0YV9sZW4gIT0gMCkpCi0JCXJldHVybjsKJiM0MzsJaWYgKHVzZXJkYXRhKSB7CiYjNDM7CQl1c2VyZGF0YV9wdHIgPSB1c2VyZGF0YS0mZ3Q7ZGF0YTsKJiM0MzsJCXVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLSZndDtsZW5ndGg7CiYjNDM7CX0KIAogCWlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyICZhbXA7JmFtcDsgc3lzZGF0YV9sZW4gIT0gMCkpCiAJCXJldHVybjsKQEAgLTIzNjQsNyAmIzQzOzIzNzUsOCBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkJY29uc3QgY2hhciAqbXNnLAogCQkJCWludCBtc2dfbGVuLAogCQkJCWludCByZWxlYXNlX2xlbiwKLQkJCQlpbnQgc3lzZGF0YV9sZW4pCiYjNDM7CQkJCWludCBzeXNkYXRhX2xlbiwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKQogewogCWludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjsKIAljb25zdCBjaGFyICptc2dib2R5OwpAQCAtMjM5Myw3ICYjNDM7MjQwNSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkgKiB3aWxsIGJlIHJlcGxhY2VkCiAJICovCiAJc2VuZF9mcmFnbWVudGVkX2JvZHkobnQsIG1zZ2JvZHksIGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuLAotCQkJICAgICBzeXNkYXRhX2xlbik7CiYjNDM7CQkJICAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpOwogfQogCiAvKioKQEAgLTI0MDgsMjUgJiM0MzsyNDIwLDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIHN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCSAgICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KQogewomIzQzOwljb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMOwogCWludCB1c2VyZGF0YV9sZW4gPSAwOwogCWludCByZWxlYXNlX2xlbiA9IDA7CiAJaW50IHN5c2RhdGFfbGVuID0gMDsKIAlpbnQgbGVuOwogCiYjNDM7CS8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwogCXN5c2RhdGFfbGVuID0gcHJlcGFyZV9zeXNkYXRhKG50LCB3Y3R4dCk7Ci0JdXNlcmRhdGFfbGVuID0gbnQtJmd0O3VzZXJkYXRhX2xlbmd0aDsKJiM0MzsJdXNlcmRhdGEgPSByY3VfZGVyZWZlcmVuY2UobnQtJmd0O3VzZXJkYXRhKTsKJiM0MzsJaWYgKHVzZXJkYXRhKQomIzQzOwkJdXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtJmd0O2xlbmd0aDsKICNlbmRpZgogCWlmIChudC0mZ3Q7cmVsZWFzZSkKIAkJcmVsZWFzZV9sZW4gPSBzdHJsZW4oaW5pdF91dHNuYW1lKCktJmd0O3JlbGVhc2UpICYjNDM7IDE7CiAKIAlsZW4gPSB3Y3R4dC0mZ3Q7bGVuICYjNDM7IHJlbGVhc2VfbGVuICYjNDM7IHN5c2RhdGFfbGVuICYjNDM7IHVzZXJkYXRhX2xlbjsKIAlpZiAobGVuICZsdDs9IE1BWF9QUklOVF9DSFVOSykKLQkJcmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LSZndDtvdXRidWYsCi0JCQkJCQkgd2N0eHQtJmd0O2xlbiwgcmVsZWFzZV9sZW4pOwomIzQzOwkJc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtJmd0O291dGJ1Ziwgd2N0eHQtJmd0O2xlbiwKJiM0MzsJCQkJCSAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTsKJiM0MzsJZWxzZQomIzQzOwkJc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtJmd0O291dGJ1Ziwgd2N0eHQtJmd0O2xlbiwgcmVsZWFzZV9sZW4sCiYjNDM7CQkJCSAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpOwogCi0JcmV0dXJuIHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuLAotCQkJCSAgIHN5c2RhdGFfbGVuKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCkBAIC0yNjY5LDcgJiM0MzsyNjg5LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJbmV0cG9sbF9jbGVhbnVwKCZhbXA7bnQtJmd0O25wKTsKICNpZmRlZglDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCi0Ja2ZyZWUobnQtJmd0O3VzZXJkYXRhKTsKJiM0MzsJa2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LSZndDt1c2VyZGF0YSkpOwogI2VuZGlmCiAJa2ZyZWUobnQpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBURVNUX1BST0dTIDo9IFwKIAluZXRjb25zX3Jlc3VtZS5zaCBcCiAJbmV0Y29uc19zeXNkYXRhLnNoIFwKIAluZXRjb25zX3RvcnR1cmUuc2ggXAomIzQzOwluZXRjb25zX3VzZXJkYXRhLnNoIFwKICMgZW5kIG9mIFRFU1RfUFJPR1MKIAogaW5jbHVkZSAuLi8uLi8uLi9saWIubWsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoCkBAIC0wLDAgJiM0MzsxLDIyOSBAQAomIzQzOyMhL3Vzci9iaW4vZW52IGJhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7IyBFeGVyY2lzZSB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLgomIzQzOyMKJiM0MzsjIFRoZSBmaXJzdCBwYXJ0IGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIHRoZSB0YXJnZXQgdHJhbnNtaXRzIGZvbGxvd3Mgd2hhdAomIzQzOyMgY29uZmlnZnMgc2F5czogYSB2YWx1ZSBzaG93cyB1cCBpbiB0aGUgbmV4dCBtZXNzYWdlLCBhbiB1cGRhdGUgcmVwbGFjZXMgdGhlCiYjNDM7IyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZQomIzQzOyMga2V5LgomIzQzOyMKJiM0MzsjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGUKJiM0MzsjIHBheWxvYWQgZW50aXJlbHkgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIGtlZXBzCiYjNDM7IyBwaWNraW5nIHVwIHBheWxvYWRzIHRoYXQgYXJlIGJlaW5nIHJlcGxhY2VkIHVuZGVybmVhdGggaXQuIEl0IHJ1bnMgdHdpY2UsCiYjNDM7IyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlCiYjNDM7IyBlbm91Z2ggdG8gYmUgZnJhZ21lbnRlZC4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7c2V0IC1ldW8gcGlwZWZhaWwKJiM0MzsKJiM0MztTQ1JJUFRESVI9JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDspCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7JHtTQ1JJUFRESVJ9JiMzNDsvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoCiYjNDM7CiYjNDM7IyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wcwomIzQzO0lURVJBVElPTlM9JHsxOi0yMDB9CiYjNDM7CiYjNDM7IyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZwomIzQzOyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuCiYjNDM7Q0hVUk5fS0VZPSYjMzQ7Y2h1cm5rZXkmIzM0OwomIzQzO1RSQU5TSUVOVF9LRVk9JiMzNDt0cmFuc2llbnRrZXkmIzM0OwomIzQzOyMgTnVtYmVyIG9mIGtleXMgdXNlZCB0byBwdXNoIGEgbWVzc2FnZSBwYXN0IE1BWF9QUklOVF9DSFVOSwomIzQzO0JVTEtfS0VZUz04CiYjNDM7CiYjNDM7VVNFUkRBVEFfRElSPSYjMzQ7JHtORVRDT05TX1BBVEh9L3VzZXJkYXRhJiMzNDsKJiM0MzsjIFZhbHVlcyBhcmUgY2FwcGVkIGF0IE1BWF9FWFRSQURBVEFfVkFMVUVfTEVOKDIwMCkgYnl0ZXMsIHNvICR7QlVMS19LRVlTfQomIzQzOyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uCiYjNDM7TE9OR19WQUxVRT0kKHByaW50ZiAtLSAmIzM5O3YlLjBzJiMzOTsgezEuLjE5MH0pCiYjNDM7CiYjNDM7ZnVuY3Rpb24gd3JpdGVfa2V5KCkgewomIzQzOwlsb2NhbCBLRVk9JiMzNDskezF9JiMzNDsKJiM0MzsJbG9jYWwgVkFMVUU9JiMzNDskezJ9JiMzNDsKJiM0MzsKJiM0MzsJbWtkaXIgLXAgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9JiMzNDsKJiM0MzsJZWNobyAmIzM0OyR7VkFMVUV9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0tFWX0vdmFsdWUmIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlCiYjNDM7ZnVuY3Rpb24gc2VuZF9hbmRfY2FwdHVyZSgpIHsKJiM0MzsJcm0gLWYgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CiYjNDM7CWxpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmYW1wOwomIzQzOwl3YWl0X2Zvcl9wb3J0ICYjMzQ7JHtOQU1FU1BBQ0V9JiMzNDsgJiMzNDske1BPUlR9JiMzNDsgJiMzNDske0lQX1ZFUlNJT059JiMzNDsKJiM0MzsJZWNobyAmIzM0OyR7TVNHfTogJHtUQVJHRVR9JiMzNDsgJmd0OyAvZGV2L2ttc2cKJiM0MzsJYnVzeXdhaXQgJiMzNDske0JVU1lXQUlUX1RJTUVPVVR9JiMzNDsgdGVzdCAtcyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgfHwgdHJ1ZQomIzQzOwlwa2lsbF9zb2NhdAomIzQzOwl2YWxpZGF0ZV9tc2cgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGV4cGVjdF9pbl9tc2coKSB7CiYjNDM7CWxvY2FsIFdBTlRFRD0mIzM0OyR7MX0mIzM0OwomIzQzOwomIzQzOwlpZiAhIGdyZXAgLXEgLS0gJiMzNDske1dBTlRFRH0mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAmIzM5OyR7V0FOVEVEfSYjMzk7IG5vdCBmb3VuZCBpbiAke09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWNhdCAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGV4cGVjdF9ub3RfaW5fbXNnKCkgewomIzQzOwlsb2NhbCBVTldBTlRFRD0mIzM0OyR7MX0mIzM0OwomIzQzOwomIzQzOwlpZiBncmVwIC1xIC0tICYjMzQ7JHtVTldBTlRFRH0mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAmIzM5OyR7VU5XQU5URUR9JiMzOTsgZm91bmQgaW4gJHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQljYXQgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MzsjIEV2ZXJ5IHdyaXRlIHB1Ymxpc2hlcyBhIG5ldyBwYXlsb2FkIGFuZCBmcmVlcyB0aGUgcHJldmlvdXMgb25lLiBBbiBlbXB0eQomIzQzOyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGUKJiM0MzsjIHRhcmdldCB0aHJvdWdoIGhhdmluZyBubyBwYXlsb2FkIGF0IGFsbC4KJiM0MztmdW5jdGlvbiBjaHVybl92YWx1ZSgpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCWVjaG8gJiMzNDt2YWx1ZSR7aX0mIzM0OyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZSYjMzQ7CiYjNDM7CQllY2hvICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlJiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjIENyZWF0ZSBhbmQgZGVsZXRlIGEga2V5IHVuZGVybmVhdGggdGhlIHNlbmRlcgomIzQzO2Z1bmN0aW9uIGNodXJuX2tleSgpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCW1rZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0mIzM0OwomIzQzOwkJZWNobyAmIzM0O3RyYW5zaWVudCR7aX0mIzM0OyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0vdmFsdWUmIzM0OwomIzQzOwkJcm1kaXIgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWQKJiM0MztmdW5jdGlvbiBzZW5kX21lc3NhZ2VzKCkgewomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluICQoc2VxICYjMzQ7JHtJVEVSQVRJT05TfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJZWNobyAmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7aX0mIzM0OyAmZ3Q7IC9kZXYva21zZwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgUnVuIHRoZSB3b3JrZXJzIGNvbmN1cnJlbnRseSBhbmQgZmFpbCBpZiBhbnkgb2YgdGhlbSBoaXRzIGFuIGVycm9yCiYjNDM7ZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7CiYjNDM7CWxvY2FsIFBJRFM9KCkKJiM0MzsJbG9jYWwgV09SS0VSCiYjNDM7CWxvY2FsIFJFVD0wCiYjNDM7CWxvY2FsIFBJRAomIzQzOwomIzQzOwlmb3IgV09SS0VSIGluICYjMzQ7JEAmIzM0OwomIzQzOwlkbwomIzQzOwkJJiMzNDske1dPUktFUn0mIzM0OyAmYW1wOwomIzQzOwkJUElEUyYjNDM7PSgmIzM0OyQhJiMzNDspCiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJIyBSZWFwIGV2ZXJ5IHdvcmtlciBiZWZvcmUgcmVwb3J0aW5nIGEgZmFpbHVyZSwgb3RoZXJ3aXNlIGEgc3Vydml2aW5nCiYjNDM7CSMgd29ya2VyIGtlZXBzIHdyaXRpbmcgdG8gY29uZmlnZnMgd2hpbGUgdGhlIGV4aXQgdHJhcCBjbGVhbnMgaXQgdXAuCiYjNDM7CWZvciBQSUQgaW4gJiMzNDske1BJRFNbQF19JiMzNDsKJiM0MzsJZG8KJiM0MzsJCXdhaXQgJiMzNDske1BJRH0mIzM0OyB8fCBSRVQ9MQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlmIFtbICYjMzQ7JHtSRVR9JiMzNDsgLW5lIDAgXV0KJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZCYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBjcmVhdGVfYnVsa19rZXlzKCkgewomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluICQoc2VxICYjMzQ7JHtCVUxLX0tFWVN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQl3cml0ZV9rZXkgJiMzNDtidWxrJHtpfSYjMzQ7ICYjMzQ7JHtMT05HX1ZBTFVFfSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gZGVsZXRlX2J1bGtfa2V5cygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7QlVMS19LRVlTfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJcm1kaXIgJiMzNDske1VTRVJEQVRBX0RJUn0vYnVsayR7aX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgPT09PT09PT09PSAjCiYjNDM7IyBTdGFydCBoZXJlICMKJiM0MzsjID09PT09PT09PT0gIwomIzQzOwomIzQzO21vZHByb2JlIG5ldGRldnNpbSAyJmd0OyAvZGV2L251bGwgfHwgdHJ1ZQomIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0MzsKJiM0MztJUF9WRVJTSU9OPSYjMzQ7aXB2NCYjMzQ7CiYjNDM7IyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlCiYjNDM7T1VUUFVUX0ZJTEU9JiMzNDsvdG1wLyR7VEFSR0VUfSYjMzQ7CiYjNDM7CiYjNDM7IyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kCiYjNDM7Y2hlY2tfZm9yX2RlcGVuZGVuY2llcwomIzQzOyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KQomIzQzO2VjaG8gJiMzNDs2IDUmIzM0OyAmZ3Q7IC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdAomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7IyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXMKJiM0MztzZXRfbmV0d29yayAmIzM0OyR7SVBfVkVSU0lPTn0mIzM0OwomIzQzOyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGUKJiM0MztjcmVhdGVfZHluYW1pY190YXJnZXQKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjMQomIzQzOyMgQSB2YWx1ZSB3cml0dGVuIHRvIGNvbmZpZ2ZzIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uCiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0Mzt3cml0ZV9rZXkgJiMzNDske1VTRVJEQVRBX0tFWX0mIzM0OyAmIzM0O2ZpcnN0JiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT1maXJzdCYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzIKJiM0MzsjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZAomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtVU0VSREFUQV9LRVl9JiMzNDsgJiMzNDtzZWNvbmQmIzM0OwomIzQzO3NlbmRfYW5kX2NhcHR1cmUKJiM0MztleHBlY3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PXNlY29uZCYjMzQ7CiYjNDM7ZXhwZWN0X25vdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3QmIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICMzCiYjNDM7IyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MztlY2hvICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9L3ZhbHVlJiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X25vdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09JiMzNDsKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjNAomIzQzOyMgUmVtb3ZpbmcgdGhlIGtleSBkcm9wcyB0aGUgZW50cnkKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7VVNFUkRBVEFfS0VZfSYjMzQ7ICYjMzQ7dGhpcmQmIzM0OwomIzQzO3JtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfSYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PSYjMzQ7CiYjNDM7cm0gJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzUKJiM0MzsjIFRvcnR1cmUgdGhlIHBheWxvYWQgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsCiYjNDM7IyBmaXJzdCB1bmZyYWdtZW50ZWQgYW5kIHRoZW4gZnJhZ21lbnRlZAomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtDSFVSTl9LRVl9JiMzNDsgJiMzNDske1VTRVJEQVRBX1ZBTFVFfSYjMzQ7CiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXMKJiM0MzsKJiM0MztjcmVhdGVfYnVsa19rZXlzCiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXMKJiM0MztkZWxldGVfYnVsa19rZXlzCiYjNDM7CiYjNDM7ZXhpdCAmIzM0OyR7a3NmdF9wYXNzfSYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGRvZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGFuZCBhZGRzIGEgc2VsZi10ZXN0LCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCBpZiB0aG9zZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYXR0YWNrIHN1cmZhY2VzIG9yIG1vZGlmeSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIGEgd2F5IHRoYXTigJlzIHdvcnRoIGZ1enppbmcuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyBub3QganVzdCBhIHJlZmFjdG9yaW5nIG9yIGNsZWFudXAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCBhbmQsIG1vcmUgc2lnbmlmaWNhbnRseSwgY29udmVydHMgdGhlIGB1c2VyZGF0YWAgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHRvIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGhhbmRsZXMgaXRzIHVzZXIgZGF0YS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgcmFjZSBjb25kaXRpb24gdnVsbmVyYWJpbGl0aWVzLCBhbmQgdGh1cywgZnV6emluZyBpcyBhIHN0cm9uZyBjb25zaWRlcmF0aW9uLgoKTG9va2luZyBkZWVwZXIsIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB1cGRhdGVfdXNlcmRhdGFgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYC4gSXQgc2VlbXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgaW52b2x2ZWQgaW4gc2VuZGluZyBhbmQgbWFuYWdpbmcgdGhlIG5ldGNvbnNvbGUgbWVzc2FnZXMuIFRoZSBtb3N0IGludGVyZXN0aW5nIGZ1bmN0aW9uIGlzIGBzZW5kX2V4dF9tc2dfdWRwYCwgYXMgaXQgbm93IGluY2x1ZGVzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGl0IGlzIGJlaW5nIGd1YXJkZWQgd2l0aCBSQ1UgcHJvdGVjdGlvbi4gVGhpcyBpcyB0aGUgYXJlYSBvZiBpbnRlcmVzdC4KClRoZSBmYWN0IHRoYXQgYG5ldGNvbnNvbGVgIGlzIGEgbmV0d29yayBjb25zb2xlIGRyaXZlciBhbmQgY29uZmlndXJhYmxlIHZpYSBjb25maWdmcyBmdXJ0aGVyIGluY3JlYXNlcyBpdHMgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLCBwYXJ0aWN1bGFybHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgUkNVIHByb3RlY3Rpb24gb2YgdXNlcmRhdGEuIFRodXMsIGFueSByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIHdoYXQgSSB3aWxsIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4KCk5vdyBJIG5lZWQgdG8gcmVmaW5lIHRoZSBmb2N1cy4gSSBzZWUgdGhhdCB0aGUgYHVwZGF0ZV91c2VyZGF0YWAgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYCBhcmUgc3RhdGljLiBJIGtub3cgdGhhdCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgY2FsbGVkIGZyb20gYHdyaXRlX2V4dF9tc2dgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2V4dF93cml0ZWAuIFRoZXNlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtIGFyZSBpbXBvcnRhbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBmaWxlIHRvIHNlZSBob3cgZXhhY3RseSB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBkZXNpZ25pbmcgZWZmZWN0aXZlIGZ1enppbmcgY2FtcGFpZ25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV9leHRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgc2VuZF9leHRfbXNnX3VkcGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgc2VuZF9leHRfbXNnX3VkcGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhYm91dCBzZW5kaW5nIHNvbWUga2luZCBvZiBleHRlcm5hbCBtZXNzYWdlIG92ZXIgVURQLiBUaGUgJiMzNDtleHQmIzM0OyBwYXJ0IHN1Z2dlc3RzIGl0JiMzOTtzIG5vdCBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBwcm9jZXNzIG9yIG1vZHVsZSDigJMgaXQmIzM5O3MgZ29pbmcgKm91dCogc29tZXdoZXJlLiBVRFAgaW1wbGllcyBhIGNvbm5lY3Rpb25sZXNzLCBkYXRhZ3JhbS1iYXNlZCBwcm90b2NvbCwgd2hpY2ggZ2l2ZXMgdXMgc29tZSBpbml0aWFsIGFzc3VtcHRpb25zIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNvbW11bmljYXRpb246IHBvdGVudGlhbGx5IHVucmVsaWFibGUsIGZvY3VzZWQgb24gc3BlZWQsIGFuZCBsaWtlbHkgaGFuZGxpbmcgaW5kaXZpZHVhbCBwYWNrZXRzIG9mIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGluIHRoZXNlIG1lc3NhZ2VzLCB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyBzZW50LCBhbmQgd2h5IHRoaXMgbWV0aG9kIGlzIHRoZSBvbmUgY2hvc2VuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCBmaW5kIHNvbWUgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjb250ZXh0LiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGlzIG1ldGhvZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgY2FsbGVkLCBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW50ZW5kZWQgZGVzdGluYXRpb24gYW5kIHB1cnBvc2Ugb2YgdGhlIGNvbW11bmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM3ND1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MTEtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQxMjogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MjA6c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjEtXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NzM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXHRcdGlmIChleHRlbmRlZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDkzOlx0XHRcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk0LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0Y29uc29sZV93cml0ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBuZXRjb25zb2xlX3dyaXRlYCwgd2hpY2ggSSByZWNvZ25pemUgYXMgdGhlIGVudHJ5IHBvaW50LiBOb3csIHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBhbGwgdGhlIGxvY2F0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlIHdoZXJlIGBuZXRjb25zb2xlX3dyaXRlYCBpcyBhY3R1YWxseSBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDUyPXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ2NzogKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2OC0gKiBAd2N0eHQ6IG5iY29uIHdyaXRlIGNvbnRleHRcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ3Mi0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDczOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTAwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMi1cdFx0XHRcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMy17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwNDpcdG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIHRydWUpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDUtfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwNzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDgtXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwOS17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUxMDpcdG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTExLX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY5Nz1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTktXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9FWFRFTkRFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDA6XHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwMTpcdC53cml0ZV9hdG9taWMgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzAyLVx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjcwNj1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcwOC1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwOTpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MTA6XHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzExLVx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzY5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25zb2xlIFdyaXRlIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBUaG9zZSBzZWVtIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IHRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIHNlbmRpbmcgY29uc29sZSBvdXRwdXQgYWNyb3NzIHRoZSBuZXR3b3JrLiBCdXQgd2hhdCBhYm91dCBgdXBkYXRlX3VzZXJkYXRhYD8gTm93LCB0aGF0IG5hbWUuLi4gaXQmIzM5O3MgYmVnZ2luZyB0aGUgcXVlc3Rpb24sIHdoYXQgdXNlciBkYXRhIGlzIHRoYXQgZXZlbiByZWZlcnJpbmcgdG8/IElzIHRoaXMgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gdXBkYXRlIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uc29sZSBpdHNlbGY/IElzIGl0IGEgd2F5IHRvIHVwZGF0ZSB0aGUgdXNlciBjb25maWcsIHBlcmhhcHMgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBkYXRhIHRoZSBjb25zb2xlIHNlbmRzIG9yIGRvZXNuJiMzOTt0PyBPciBpcyBpdCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBzaG91bGQgZGVmaW5pdGVseSBkaWcgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi4gVGhlIG5hbWluZyBjb252ZW50aW9uIGlzIHRocm93aW5nIG1lLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LiBJdCBjb3VsZCBiZSBjcml0aWNhbCB0byBob3cgd2UgbWFuYWdlIG9yIGN1c3RvbWl6ZSB0aGUgZGF0YSB0aGF0JiMzOTtzIGJlaW5nIHNlbnQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNDY9c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzY0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNjU6c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzY2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQxMz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MjYtXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Mjc6XHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI4LVx0c3Ryc2NweShvbGRfdmFsdWUsIHVkbS1cdTAwM2V2YWx1ZSwgc2l6ZW9mKG9sZF92YWx1ZSkpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDM0LVx0bnQgPSB1c2VyZGF0YV90b190YXJnZXQodWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MzU6XHRyZXQgPSB1cGRhdGVfdXNlcmRhdGEobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzYtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mjk9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzNy1cdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYzODpcdHVwZGF0ZV91c2VyZGF0YShudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzOS1cdGNvbmZpZ19pdGVtX3B1dChpdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipOYXZpZ2F0aW5nIENvbmZpZ0ZTIENhbGxiYWNrcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBgdXBkYXRlX3VzZXJkYXRhYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gdHdvIGtleSBwbGFjZXM6IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLiBUaG9zZSBuYW1lcyByaW5nIGEgYmVsbC4uLiB5ZXMsIHRoZXkmIzM5O3JlIGNvbmZpZ2ZzIGNhbGxiYWNrcy4gVGhhdCB0cmlnZ2VycyBhIGxpbmUgb2YgaW5xdWlyeS4gTm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZmlnZnMgb3BlcmF0aW9ucyBhdCBwbGF5IGhlcmUuIExldCBtZSB0cmFjZSBiYWNrIHRvIHRoZSBhY3R1YWwgY29uZmlnZnMgaW1wbGVtZW50YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBjYWxsYmFja3MuIFdoZXJlIGFyZSB0aGUgY29uZmlnZnMgb3BlcmF0aW9uIGRlZmluaXRpb25zPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGB1cGRhdGVfdXNlcmRhdGFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNjU9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDEzOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE0LVx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIFVzYWdlKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgdmFyaWFibGUgb3IgZGF0YSBzdHJ1Y3R1cmUgaXMgYmVpbmcgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIGFsbCBpbnN0YW5jZXMgd2hlcmUgaXQmIzM5O3MgYmVpbmcgcmVhZCBmcm9tLCB3cml0dGVuIHRvLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQsIG9yIHBvdGVudGlhbGx5IGluaXRpYWxpemVkLiBUaGUgZ29hbCBpcyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgbGlmZWN5Y2xlIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMsIG9wdGltaXphdGlvbnMsIG9yIGFyZWFzIGZvciByZWZhY3RvcmluZyBpZiBuZWVkZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiB1bmNvdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzY1PXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQxMzpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxNC1cdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czoKCioqVW52ZWlsaW5nIHRoZSBVc2FnZSoqCgpIbW0sIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgdGhpcyBzcGVjaWZpYyBlbGVtZW50IG9yIGZ1bmN0aW9uIGluIHVzZS4gSSB3YXMgbG9va2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IGRpcmVjdCBjYWxscyB0byBpdC4gKk9kZC4qIFBlcmhhcHMgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkIGF0IGFsbCwgYW5kIGl0JiMzOTtzIGRlYWQgY29kZS4gV2FpdCwgaG9sZCBvbi4uLiBjb3VsZCBpdCBiZSBoaWRkZW4gYXdheSBpbiBhIG1hY3JvIGRlZmluaXRpb24gc29tZXdoZXJlPyBUaGF0JiMzOTtzIGEgY2xhc3NpYyB0cmljay4gSXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGNhbGxlZCBidXQgaW5kaXJlY3RseSBpbnZva2VkIHRocm91Z2ggYSBtb3JlIGNvbXBsZXggbWFjcm8gZXhwYW5zaW9uLiBOZWVkIHRvIGNoZWNrIHRoYXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19BVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTQ3PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODA6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MjpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCB0YXNrbmFtZV9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTgzOkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHJlbGVhc2VfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NDpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjYyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjQ6Q09ORklHRlNfQVRUUigsIGV4dGVuZGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY1OkNPTkZJR0ZTX0FUVFIoLCBkZXZfbmFtZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NzpDT05GSUdGU19BVFRSKCwgcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Njg6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY5OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzA6Q09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MTpDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MjpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MzpDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRjb25zb2xlIENvbmZpZ0ZTIEludGVyYWN0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgQ09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7YCBkZWZpbml0ZWx5IGNyZWF0ZXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25maWdmcyBvcGVyYXRpb25zIG9uIG5ldGNvbnNvbGUgdXNlcmRhdGEuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiBuZXRjb25zb2xlIHRocm91Z2ggY29uZmlnZnM/CgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIHllcywgaXQgKnNob3VsZCogYmUgYWJsZSB0byBtb3VudCBjb25maWdmcyBhbmQgaW50ZXJhY3Qgd2l0aCBpdC4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBpcyBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCB0aGF0IG9wdGlvbiBleGlzdHMgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucyB0byBlbnN1cmUgc3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBmdXp6IHRoaXMgc3BlY2lmaWMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgbGluZSBvZiB0aGlua2luZywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbiBvZiBgTkVUQ09OU09MRV9EWU5BTUlDYCoqCgpBbHJpZ2h0LCBzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyB0aGUga2V5IHRoaW5nIEkmIzM5O20gZm9jdXNpbmcgb24gcmlnaHQgbm93LiBJdCYjMzk7cyB0aW1lIHRvIG1hcCBpdHMgZGVwZW5kZW5jaWVzLiBUaGF0IHNlZW1pbmdseSBpbm5vY2VudCB2YXJpYWJsZSBjb3VsZCBiZSBhIGxpbmNocGluIGluIHNvbWUgY29tcGxleCBjb25maWd1cmF0aW9uIHNjaGVtZSwgb3IgbWF5YmUgaXQmIzM5O3Mgc3VycHJpc2luZ2x5IHNpbXBsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyAqZW5hYmxlKiBpdCwgYW5kIHdoYXQgaXQgKmVuYWJsZXMqIGluIHR1cm4uIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlLCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBwb3NpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdGhlbHBcbiAzMzE6XHRcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cbiAzMzI6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbiAzMzU6XHRcdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbiAzMzc6XHRcdFx0XHQhKE5FVENPTlNPTEU9eSBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlM9bSlcbiAzMzg6XHRcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxuIDMzOTpcdFx0aGVscFxuIDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4gMzQ1Olx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG4gMzQ2Olx0XHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4gMzQ3Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbiAzNDg6XHRcdGRlZmF1bHQgblxuIDM0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0Y29uc29sZSBhbmQgVXNlcmRhdGEgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgTkVUQ09OU09MRV9EWU5BTUlDYCByZWxpZXMgb24gYE5FVENPTlNPTEVgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBlbmFibGUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgYW5hbHlzaXMuCgpJbml0aWFsbHksIGB1cGRhdGVfdXNlcmRhdGFgIHNlZW1lZCBsaWtlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZyBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYy4gSG93ZXZlciwgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgY2FsbGVkIGJ5IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExvb2tpbmcgZGVlcGVyLCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCB0aGVtc2VsdmVzIGFyZSBzdGF0aWMgYnV0IGFyZSB0aWVkIHRvIGBDT05GSUdGU19BVFRSYCBhbmQgYXJlIHVzZWQgaW4gYHVzZXJkYXR1bV9hdHRyX3ZhbHVlYCwgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gSGVuY2UsIEkmIzM5O2xsIGZvY3VzIG9uIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLgoKT24gdGhlIHRyYW5zbWlzc2lvbiBzaWRlLCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAuICBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dGAsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGlubGluZWQuICBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaXMgZGVmaW5pdGVseSBub3QgaW5saW5lZC4gIGBuZXRjb25zb2xlX3dyaXRlYCAqbWlnaHQqIGJlIGlubGluZWQsIGFzIGNvdWxkIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLgoKSSB3YXMgY29uc2lkZXJpbmcgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhcyBhIGdvb2QgZm9jdXMgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCYjMzk7cyBhIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2ssIHNvIGl0IGNvdWxkIGJlIGluIGEgaG90IHBhdGgsIGRlcGVuZGluZyBvbiBob3cgZnJlcXVlbnRseSBwcmludGtzIGFyZSBoYXBwZW5pbmcuIEhvd2V2ZXIsIHNpbmNlIHRoZSBnb2FsIGlzIHRvIGV4YW1pbmUgdGhlIHVzZXJkYXRhIFJDVSBjaGFuZ2VzLCB0aGUgcmVsZXZhbnQgY29kZSBpcyBzcGxpdCBiZXR3ZWVuIGB1cGRhdGVfdXNlcmRhdGFgIChjb25maWdmcyBzaWRlKSBhbmQgYHNlbmRfZXh0X21zZ191ZHBgIChjb25zb2xlIHdyaXRlIHNpZGUpLgoKVGhlcmVmb3JlLCBmb2N1c2luZyBvbiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCBjb3ZlcnMgdGhlIGNvbmZpZ2ZzIGFzcGVjdCBvZiB0aGlzIGFuYWx5c2lzLiBGb3IgdGhlIHRyYW5zbWl0IHBhdGgsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGJlY2F1c2UgYHNlbmRfZXh0X21zZ191ZHBgIGlzIHN0YXRpYywgcG90ZW50aWFsbHkgaW5saW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlIG5vdCBzdGF0aWMgc28gdGhhdCBpbmxpbmluZyBpcyBub3QgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNjU9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDEzOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE0LVx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLgoKKipBbmFseXppbmcgRnVuY3Rpb24gUG9pbnRlciBVc2FnZSoqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBhYm91dCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBCdXQsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIGJlaW5nIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciBwcm9iYWJseSB3b24mIzM5O3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHNvIHRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24gdG8ga2VlcCBpbiBtaW5kIGZvciBwZXJmb3JtYW5jZS4gTm93LCBJJiMzOTtsbCBzaGlmdCBteSBhdHRlbnRpb24gdG8gYHVzZXJkYXR1bV9kcm9wYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTYwNj1zdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjI4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Mjk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjMwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTItXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUzOlx0LmRyb3BfaXRlbVx0XHQ9IHVzZXJkYXR1bV9kcm9wLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25jdXJyZW5jeSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYHVzZXJkYXR1bV9kcm9wYCBpcyBkZWZpbml0ZWx5IHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtYWtlcyBpdCBhbiBpbnRlcmVzdGluZyBzeW1ib2wgdG8gZm9jdXMgb24uIFRoZW4gdGhlcmUmIzM5O3MgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCB3aGljaCBhbHNvIHNlZW1zIHRvIGhhdmUgdGhlIHNhbWUgdXNhZ2UgcGF0dGVybi4gR290IGl0LiBUaGVzZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYHNlbmRfZXh0X21zZ191ZHBgLiBJJiMzOTttIGN1cmlvdXMgaWYgaXQmIzM5O3MgaW5saW5lZC4gTm9wZSwgaXQmIzM5O3Mgc3RhdGljLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBgbmV0Y29uc29sZV93cml0ZWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGEgZnVuY3Rpb24gcG9pbnRlci4gTGV0JiMzOTtzIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMsIGFsb25nIHdpdGggYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBIb2xkIG9uLCB0aG91Z2guLi4gbG9va3MgbGlrZSBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgKmRvZXNuJiMzOTt0KiBjYWxsIGBzZW5kX2V4dF9tc2dfdWRwYCBkaXJlY3RseTsgaXQgY2FsbHMgYHNlbmRfbXNnX3VkcGAgaW5zdGVhZC4gQnV0IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgKmRvZXMqIGNhbGwgYG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIHRydWUpYCB3aGljaCB0aGVuIGNhbGxzIGBzZW5kX2V4dF9tc2dfdWRwYC4gVGhlcmVmb3JlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGEgc29saWQgZm9jdXMgc3ltYm9sLgoKT2theSwgbGV0JiMzOTtzIHJlY2FwIHdoYXQgd2UmIzM5O3ZlIGdvdC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgdXBkYXRlX3VzZXJkYXRhYCB0byB1c2UgYHJjdV9yZXBsYWNlX3BvaW50ZXJgIGFuZCBga2ZyZWVfcmN1YCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBjb25jdXJyZW50IGFjY2Vzcy4gYHNlbmRfZXh0X21zZ191ZHBgIGlzIHVwZGF0ZWQgdG8gdXNlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIHRoZSBmdW5jdGlvbnMgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLCBhbmQgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgIGFyZSBtb2RpZmllZCB0byB0YWtlIGB1c2VyZGF0YWAgYXMgYW4gYXJndW1lbnQsIGFuZCB0aGF0JiMzOTtzIGxpa2VseSBhIGNvbnNlcXVlbmNlIG9mIHRoZSBjb25jdXJyZW5jeSBjaGFuZ2VzLiBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAgYW5kIGBmcmVlX3BhcmFtX3RhcmdldGAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgcmN1X2FjY2Vzc19wb2ludGVyYC4KClNvIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgKmFuZCogYXJlICpub3QqIGlubGluZWQgKGJlY2F1c2UgdGhleSBhcmUgZWl0aGVyIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgdXNlZCBleHRlcm5hbGx5KToKIC0gYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAKIC0gYHVzZXJkYXR1bV9kcm9wYAogLSBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAKIC0gYGZyZWVfcGFyYW1fdGFyZ2V0YAogLSBgbmV0Y29uc29sZV93cml0ZV9leHRgCgpXYWl0Li4uIGBmcmVlX3BhcmFtX3RhcmdldGAgaXMgc3RhdGljLiBHb3R0YSBzZWUgd2hlcmUgdGhhdCYjMzk7cyBhY3R1YWxseSAqdXNlZCouLi4ganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYyMz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4NC0vKiBDbGVhbnVwIG5ldHBvbGwgZm9yIGdpdmVuIHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIGZyZWUgaXQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg1OnN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3MTU9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3ODYtXHRcdGxpc3RfZGVsKFx1MDAyNm50LVx1MDAzZWxpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3ODc6XHRcdGZyZWVfcGFyYW1fdGFyZ2V0KG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzg4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzk2PXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX25ldGNvbnNvbGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxNy1cdFx0bGlzdF9kZWwoXHUwMDI2bnQtXHUwMDNlbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgxODpcdFx0ZnJlZV9wYXJhbV90YXJnZXQobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFRhcmdldCBTeW1ib2xzIGZvciBQb3RlbnRpYWwgT3B0aW1pemF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgdGFyZ2V0IHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZnJlZV9wYXJhbV90YXJnZXRgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpvbmx5KiB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgZXhpdCBpbW1lZGlhdGVseSBzdHJpa2VzIG1lIGFzIGEgcmVkIGZsYWcuIEl0JiMzOTtzIG5vdCBhIHBhcnRpY3VsYXJseSBhY3RpdmUgcG9pbnQgaW4gdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lLCBtYWtpbmcgaXQgYSBwb29yIGNob2ljZSBmb3IgYW55IGtpbmQgb2YgcGVyZm9ybWFuY2UtY3JpdGljYWwgcHJvZmlsaW5nIG9yIGZvY3VzaW5nIGVmZm9ydHMuIEl0IGp1c3QgaXNuJiMzOTt0IGEgZ29vZCBmb2N1cyBzeW1ib2wsIGF0IGxlYXN0IG5vdCBpbiBhbnkgdHJhZGl0aW9uYWwgcGVyZm9ybWFuY2Ugc2Vuc2UuIEl0JiMzOTtzIHRvbyBsaW1pdGVkIGluIHNjb3BlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdXNlIGEgc3ltYm9sIGZvciBtZWFzdXJlbWVudCBtb3JlIG9mdGVuLgoKSW5zdGVhZCBvZiB0aGlzIGxpbWl0ZWQgZm9jdXMsIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGdvIGV4YW1pbmUgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgIG1vcmUgY2xvc2VseS4gTWF5YmUgdGhhdCBvbmUmIzM5O3MgZ290IGEgYmV0dGVyIHByb2ZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzU9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY5NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjk1LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzAzOlx0LnJlbGVhc2VcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkRpc3NlY3RpbmcgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgIGFuZCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCoqCgpPa2F5LCBzbyBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAuLi4gdGhhdCYjMzk7cyB0aGUgcmVsZWFzZSBjYWxsYmFjayBmb3IgY29uZmlnZnMuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLCBhIGZvY3VzZWQgc3ltYm9sLiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuIEl0JiMzOTtzIGRlZmluZWQgdXNpbmcgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZSBiZWhpbmQgdGhhdCBtYWNybyAqc2hvdWxkKiBiZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gdmVyaWZ5IHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdGU19BVFRSYCB0byBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGF0IG1hY3JvIGV4cGFuZHMgdG8gYXZvaWQgYW55IG1pc3VuZGVyc3RhbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQ09ORklHRlNfQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29uZmlnZnMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmg9MTE1PXN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUge1xuLS1cbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjItXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmg6MTIzOiNkZWZpbmUgQ09ORklHRlNfQVRUUl9QRVJNKF9wZngsIF9uYW1lLCBfcGVybSlcdFx0XFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjQtc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTMxLVxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEzMjojZGVmaW5lIENPTkZJR0ZTX0FUVFIoX3BmeCwgX25hbWUpIENPTkZJR0ZTX0FUVFJfUEVSTShcdFxcXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTMzLVx0XHRfcGZ4LCBfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1JcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTM1LVxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEzNjojZGVmaW5lIENPTkZJR0ZTX0FUVFJfUk8oX3BmeCwgX25hbWUpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMzctc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTQzLVxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjE0NDojZGVmaW5lIENPTkZJR0ZTX0FUVFJfV08oX3BmeCwgX25hbWUpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xNDUtc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0Y29uc29sZSBNb2R1bGUgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgYG5ldGNvbnNvbGVgIG1vZHVsZSYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gRmlyc3QsIEkgc2VlIHRoYXQgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYCBpcyBjcmVhdGluZyBhIGB1c2VyZGF0dW1fYXR0cl92YWx1ZWAgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjb25maXJtZWQgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBpcyBleHBsaWNpdGx5IGRlZmluZWQgaW4gYG5ldGNvbnNvbGUuY2Ag4oCTIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG15IGFuYWx5c2lzLiBTcGVjaWZpY2FsbHksIGBzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClgIGlzIHRoZSBzaWduYXR1cmUuCgpNeSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiBpbml0aWFsIHJldmlldywgYXJlIGxvb2tpbmcgbGlrZToKCiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYAoqICAgYHVzZXJkYXR1bV9kcm9wYAoqICAgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgCiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBgdXBkYXRlX3VzZXJkYXRhYC4gSXQmIzM5O3MgbWFya2VkIGBzdGF0aWNgLCB3aGljaCBvZnRlbiBtZWFucyBpdCYjMzk7cyBhIGNyaXRpY2FsIGludGVybmFsIGZ1bmN0aW9uLiBJIGhhdmUgdG8gc2VlIGlmIGl0JiMzOTtzIGlubGluZWQuIEkgY2hlY2tlZCBpdHMgY29kZTsgaXQmIzM5O3MgYXJvdW5kIDQwIGxpbmVzLCBpbmNsdWRlcyBhbGxvY2F0aW9ucywgYW5kIGxvb3BzLCB3aGljaCBtYWtlcyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkLCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zIChgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCkuIFNvIEkmIzM5O20gYWRkaW5nIGB1cGRhdGVfdXNlcmRhdGFgIHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgcHJvdmlzaW9uYWxseSwganVzdCB0byBiZSBzYWZlLgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgYmUga2V5LCBmb3IgaW5zdGFuY2UsIGBzZW5kX2V4dF9tc2dfdWRwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBJdCYjMzk7cyBhYm91dCAyNSBsaW5lcy4gTWF5YmUgaXQmIzM5O3MgaW5saW5lZC4gSSBhbHNvIGxvb2tlZCBhdCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAgYW5kIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgZWFjaCBhYm91dCAzMCBhbmQgMjUgbGluZXMgcmVzcGVjdGl2ZWx5LgoKRm9yIG5vdywgSSYjMzk7bSBnb2luZyB3aXRoIHRoZXNlIG5vbi1zdGF0aWMvZnVuY3Rpb24gcG9pbnRlciBvbmVzOgoKKiAgIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgCiogICBgdXNlcmRhdHVtX2Ryb3BgCiogICBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAKKiAgIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAKYW5kIHRoZSBwb3RlbnRpYWxseSBrZXkgYHVwZGF0ZV91c2VyZGF0YWAuCgpMZXQgbWUgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5vdy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdGU19GU2Agb3B0aW9ucy4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaG93IGBDT05GSUdGU19GU2AgcmVsYXRlcyB0byBgTkVUQ09OU09MRV9EWU5BTUlDYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZS1FeGFtaW5pbmcgdGhlIEZvdW5kYXRpb246IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgcHJvYmxlbSBvciBzb2x1dGlvbiwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHJldmlzaXQgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgZWFzeSB0byBnZXQgY2F1Z2h0IHVwIGluIHRoZSBkZXRhaWxzIG9mIHRoZSBpbW1lZGlhdGUgdGFzayBhdCBoYW5kLCBidXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgdW5kZXJseWluZyBjb21wb25lbnRzIGlzIHBhcmFtb3VudC4gSSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGggdGhlc2UgZGVwZW5kZW5jaWVzIGZvciBhIHdoaWxlLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgZnJlc2ggbG9vaywgZXNwZWNpYWxseSB3aGVuIHRhY2tsaW5nIGEgbmV3IGNoYWxsZW5nZSBvciBhIHBhcnRpY3VsYXJseSBjb21wbGV4IHNlY3Rpb24gb2YgY29kZS4gRXZlbiBzZWVtaW5nbHkgbWlub3IgY2hhbmdlcyBvciB1cGRhdGVzIGluIGRlcGVuZGVuY3kgdmVyc2lvbnMgY2FuIGhhdmUgcmlwcGxlIGVmZmVjdHMsIGFuZCBpdCYjMzk7cyBiZXR0ZXIgdG8gYmUgcHJvYWN0aXZlIHRoYW4gcmVhY3RpdmUuIEkgd2FudCB0byBlbnN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGRpZmZlcmVudCBtb2R1bGVzIGlzIGFic29sdXRlbHkgY2xlYXIgYW5kIHVwLXRvLWRhdGUgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyByZXZpZXcgaXNu4oCZdCBqdXN0IGFib3V0IG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgKnRoZXJlKiwgYnV0IGFib3V0IGNvbmZpcm1pbmcgbXkgKnVuZGVyc3RhbmRpbmcqIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIHdpbGwgaW50ZXJhY3QgZHVyaW5nIHRoZSBuZXh0IHBoYXNlLiBUaW1lIGludmVzdGVkIGhlcmUgaXMgb2Z0ZW4gdGltZSBzYXZlZCBsYXRlciwgcHJldmVudGluZyB0aG9zZSBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgc2Vzc2lvbnMgY2F1c2VkIGJ5IG92ZXJsb29rZWQgbnVhbmNlcyBpbiB0aGUgZGVwZW5kZW5jeSBsYW5kc2NhcGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBYLCB0aGVuIFksIGFuZCBmaW5hbGx5IFosIHRyYWNpbmcgdGhlaXIgbGluZWFnZSBhbmQgaW50ZXJkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzM0Olx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuIDMzNTpcdFx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiAzMzY6XHRcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBcXFxuIDMzNzpcdFx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuIDMzODpcdFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXG4gMzM5Olx0XHRoZWxwXG4gMzQwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XG4gMzQxOlx0XHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXG4gMzQyOlx0XHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXG4gMzQzOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgY29uc29sZSBtb2RpZmljYXRpb24sIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvd2FyZHMgbmVlZGluZyBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gYFNZU0ZTYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLCB1c3VhbGx5IGVuYWJsZWQuIEhvd2V2ZXIsIGBDT05GSUdGU19GU2AgaXMgZXhwbGljaXRseSByZXF1aXJlZCwgYW5kIHRoYXQmIzM5O3MgYSBrZXkgcGllY2UuCgpJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBidXQgdGhlIHJlYWwgdGVzdCBsaWVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hgLiBUaGlzIHRlc3QgdXNlcyBgbW9kcHJvYmUgbmV0ZGV2c2ltYCBhbmQgYG1vZHByb2JlIG5ldGNvbnNvbGVgLiBTbyB3aGlsZSBgTkVUREVWU0lNYCB3b3VsZCBiZSBhIGdyZWF0IGNvbnZlbmllbmNlIGZvciB0ZXN0aW5nIHRoaXMgbmV3IGZlYXR1cmUsIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IGZvciB0aGUgY29kZSBpdHNlbGYgdG8gY29tcGlsZS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIHRvIGtub3cgdGhlICYjMzQ7U3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZSYjMzQ7LiBCYXNlZCBvbiBteSBhbmFseXNpcywgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBhcmUgdGhlIGNvcmUgb3B0aW9ucywgYW5kIGNyaXRpY2FsbHksIGBDT05GSUdGU19GU2AgaXMgZXhwbGljaXRseSBuZWVkZWQgYnkgYE5FVENPTlNPTEVfRFlOQU1JQ2AuCgpUbyBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgdGhpcyBmZWF0dXJlLiBJIHNlZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYHVzZXJkYXR1bV9kcm9wYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gVGhleSYjMzk7cmUgdGhlIGZvY3VzIG9mIHRoZSBjaGFuZ2VzLgoKT2theSwgbGV0JiMzOTtzIGFsc28gZXhhbWluZSBgdXNlcmRhdHVtX21ha2VfaXRlbWAsIHdoaWNoIGFsc28gYXBwZWFycyB0byBiZSBhIGNvbmZpZ2ZzIGNhbGxiYWNrLiBUaGF0IHJlaW5mb3JjZXMgdGhlIG5lZWQgZm9yIGBDT05GSUdGU19GU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJkYXR1bV9tYWtlX2l0ZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXR1bV90eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDY6c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA3LVx0XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTI6XHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjUzLVx0LmRyb3BfaXRlbVx0XHQ9IHVzZXJkYXR1bV9kcm9wLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgV3JpdGUgRnVuY3Rpb25zKioKCk9rYXksIGB1c2VyZGF0dW1fbWFrZV9pdGVtYCBkb2VzIHNlZW0gbGlrZSBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IGRhdGEgaXMgcGFzc2VkIGFuZCBoYW5kbGVkLCBhbmQgdGhhdCBzeW1ib2wgc2VlbXMgcmVsZXZhbnQuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgbmV0Y29uc29sZV93cml0ZV9leHRgLiBUaGlzIGV4dGVuZGVkIHdyaXRlIGZ1bmN0aW9uIGlzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLgoKVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIG1vZGlmaWVzIGBzZW5kX2V4dF9tc2dfdWRwYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBuZXRjb25zb2xlX3dyaXRlYCB3aGVuIGl0JiMzOTtzIGluIGl0cyBleHRlbmRlZCBtb2RlIOKAkyBtZWFuaW5nIGBleHRlbmRlZGAgaXMgc2V0IHRvIHRydWUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgICppdHNlbGYqIGNhbGxzIGBuZXRjb25zb2xlX3dyaXRlYCB3aXRoIHRoZSBgZXh0ZW5kZWRgIGZsYWcgc2V0LiBUaGlzIGNvbmZpcm1zIHRoYXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyB0aGUgdHJ1ZSBlbnRyeSBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIE15IHRob3VnaHQgcHJvY2VzcyBpcyB0aGF0IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuZGFtZW50YWwgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW5hZHZlcnRlbnRseSBhbHRlcmVkLiBUaGlzIHJvdXRpbmUgY2FsbHMgYG5ldGNvbnNvbGVfd3JpdGVgIHdpdGggdGhlIGBleHRlbmRlZGAgZmxhZyBzZXQgdG8gZmFsc2UsIG1lYW5pbmcgaXQmIzM5O3MgdGhlIGJhc2ljIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb24uCgpOb3csIHdpdGggYGV4dGVuZGVkPWZhbHNlYCwgYG5ldGNvbnNvbGVfd3JpdGVgIGNhbGxzIGBzZW5kX21zZ191ZHBgLCB3aGljaCBJIHRob3VnaHQsIGF0IGZpcnN0LCBkaWQgbm90IHVzZSB1c2VyIGRhdGEuIEJ1dCwgd2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayBgc2VuZF9tc2dfdWRwYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9tc2dfdWRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDIwPXN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDUyOnN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1My1cdFx0XHQgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ3Mz1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cdFx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTU6XHRcdFx0c2VuZF9tc2dfdWRwKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgJiMzNDtJJiMzNDsgaW4gdGhpcyBzaXR1YXRpb246CgoqKlJldmlld2luZyBgc2VuZF9tc2dfdWRwYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYHNlbmRfbXNnX3VkcGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjcml0aWNhbCBmdW5jdGlvbiBpcyByb2J1c3QgYW5kIGVmZmljaWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBvYnZpb3VzOiBhcmUgdGhlIGVycm9yIGNoZWNrcyBjb21wcmVoZW5zaXZlPyBBcmUgd2UgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIHByb3Blcmx5LCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBzb2NrZXQgZXJyb3JzLCBhbmQgbmV0d29yayBjb25uZWN0aXZpdHkgaXNzdWVzPyBCZXlvbmQgYmFzaWMgZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byBsb29rIGZvciBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLiBJcyB0aGlzIGZ1bmN0aW9uIGJsb2NraW5nLCBvciBpcyBpdCBub24tYmxvY2tpbmcgYW5kIHVzaW5nIGFwcHJvcHJpYXRlIG1lY2hhbmlzbXMgdG8gYXZvaWQgaG9sZGluZyB1cCB0aGUgY2FsbGluZyB0aHJlYWQ/IEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGF0YSBjb3B5IG1lY2hhbmlzbXMg4oCTIGFyZSB3ZSBtYWtpbmcgdW5uZWNlc3NhcnkgY29waWVzLCBhbmQgY2FuIHdlIGxldmVyYWdlIHplcm8tY29weSB0ZWNobmlxdWVzIHdoZXJlIGFwcHJvcHJpYXRlPyBQZXJmb3JtYW5jZSBpcyBhbHdheXMga2V5IHdpdGggVURQLCBzbyBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFja2V0aXphdGlvbiBhbmQgcmVhc3NlbWJseSBpZiB0aGlzIGFwcGxpY2F0aW9uIGhhbmRsZXMgZnJhZ21lbnRlZCBtZXNzYWdlcy4gRmluYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgcmVwb3J0aW5nIGFuZCBsb2dnaW5nLCBlbnN1cmluZyB3ZSYjMzk7cmUgcHJvdmlkaW5nIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkaWFnbm9zZSBwcm9ibGVtcyB3aXRob3V0IGxlYWtpbmcgc2Vuc2l0aXZlIGRhdGEuIEJhc2ljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhpcyBpcyBidWxsZXRwcm9vZiBhbmQgb3B0aW1hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NTI6XHRzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuMjQ1MzpcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuKVxuMjQ1NDpcdHtcbjI0NTU6XHRcdGNvbnN0IGNoYXIgKnRtcCA9IG1zZztcbjI0NTY6XHRcdGludCBmcmFnLCBsZWZ0ID0gbGVuO1xuMjQ1NzpcdFxuMjQ1ODpcdFx0d2hpbGUgKGxlZnQgXHUwMDNlIDApIHtcbjI0NTk6XHRcdFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xuMjQ2MDpcdFx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbjI0NjE6XHRcdFx0dG1wICYjNDM7PSBmcmFnO1xuMjQ2MjpcdFx0XHRsZWZ0IC09IGZyYWc7XG4yNDYzOlx0XHR9XG4yNDY0Olx0fVxuMjQ2NTpcdFxuMjQ2NjpcdC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUkNVIFByb3RlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgY2xlYXIgYHNlbmRfbXNnX3VkcGAgZG9lc24mIzM5O3QgdG91Y2ggYHVzZXJkYXRhYC4gVGhhdCBtZWFucyBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaXMgc2FmZSwgYW5kIHRoaXMgcGF0Y2ggKm9ubHkqIGltcGFjdHMgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYmVjb21lOiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYHVzZXJkYXR1bV9kcm9wYCwgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAsIGFuZCwgb2YgY291cnNlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc3dlZXAgdG8gc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgZ290IHR3ZWFrZWQuIEFoLCBgY2FsY191c2VyZGF0YV9sZW5gIGlzIHRoZXJlLCBidXQgdGhhdCYjMzk7cyBqdXN0IGZvciBjb250ZXh0LiBIb3dldmVyLCBgdXBkYXRlX3VzZXJkYXRhYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YCBhbGwgZ290IG1vZGlmaWVkLiBPa2F5LCBzbyBteSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgc3RpbGwgbG9vayBsaWtlIHRoZXkgY292ZXIgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGUgY2hhbmdlcy4KCk5vdywgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZml4aW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBUaGUgaW50ZW50IGlzIHRvIG1ha2UgdGhlIGNvcmUgbmV0Y29uc29sZSBkcml2ZXIgdXNlIFJDVSBwcm9wZXJseSB3aGVuIGl0IHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhpcyB1c2VyZGF0YSwgd2hpY2ggdGhlIHN5c3RlbSBhY2Nlc3NlcyB0aHJvdWdoIGNvbmZpZ2ZzIGFuZCB1dGlsaXplcyBkdXJpbmcgZXh0ZW5kZWQgY29uc29sZSB3cml0ZXMuIFNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUga2VybmVsL2RyaXZlciBjb2RlIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpHaXZlbiB0aGlzIGlzIGEgUkNVIGZpeCBhZmZlY3RpbmcgYSBjb3JlIGRyaXZlciwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBpcyB0aGUgZXhhY3QgbmFtZSwgc28gdGhlIG5hbWluZyBjb252ZW50aW9ucyBhcmUgY29ycmVjdC4KCk9oLCBhbmQgd2FpdCwgaXQgbG9va3MgbGlrZSBgQ09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7YCBjcmVhdGVzIGB1c2VyZGF0dW1fYXR0cl92YWx1ZWAgd2hpY2ggdXNlcyBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zaG93YC4KRG9lcyB0aGF0IG1lYW4gdGhlIG1hY3JvIGV4cGVjdHMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgb3IgZG9lcyBpdCAqZGVmaW5lKiBpdD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdGU19BVFRSYCBtYWNybyBkZWZpbml0aW9uIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb25maWdmcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjM6XHQjZGVmaW5lIENPTkZJR0ZTX0FUVFJfUEVSTShfcGZ4LCBfbmFtZSwgX3Blcm0pXHRcdFxcXG4gMTI0Olx0c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbiAxMjU6XHRcdC5jYV9uYW1lXHQ9IF9fc3RyaW5naWZ5KF9uYW1lKSxcdFx0XFxcbiAxMjY6XHRcdC5jYV9tb2RlXHQ9IF9wZXJtLFx0XHRcdFxcXG4gMTI3Olx0XHQuY2Ffb3duZXJcdD0gVEhJU19NT0RVTEUsXHRcdFx0XFxcbiAxMjg6XHRcdC5zaG93XHRcdD0gX3BmeCMjX25hbWUjI19zaG93LFx0XHRcXFxuIDEyOTpcdFx0LnN0b3JlXHRcdD0gX3BmeCMjX25hbWUjI19zdG9yZSxcdFx0XFxcbiAxMzA6XHR9XG4gMTMxOlx0XG4gMTMyOlx0I2RlZmluZSBDT05GSUdGU19BVFRSKF9wZngsIF9uYW1lKSBDT05GSUdGU19BVFRSX1BFUk0oXHRcXFxuIDEzMzpcdFx0XHRfcGZ4LCBfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1JcdFx0XFxcbiAxMzQ6XHQpXG4gMTM1Olx0XG4gMTM2Olx0I2RlZmluZSBDT05GSUdGU19BVFRSX1JPKF9wZngsIF9uYW1lKVx0XHRcdFxcXG4gMTM3Olx0c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzQKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBOYW1lIENvbnN0cnVjdGlvbiBhbmQgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gY29uZmlybWluZyB0aGUgZnVuY3Rpb24gbmFtZSBjb25zdHJ1Y3Rpb24gaGVyZS4gSSYjMzk7dmUgZ290IGAuc3RvcmUgPSBfcGZ4IyNfbmFtZSMjX3N0b3JlYC4gVGhhdCBtZWFucyBgX3BmeGAgaXMgYHVzZXJkYXR1bV9gIGFuZCBgX25hbWVgIGlzIGB2YWx1ZWAsIHNvIHRoZSBmdWxsIGZ1bmN0aW9uIG5hbWUgKnNob3VsZCogYmUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBvdGhlciBmdW5jdGlvbiBuYW1lcyBhcmUgZXhhY3RseSBhcyB0aGV5IHNob3VsZCBiZS4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0Y29uc29sZV93cml0ZV9leHRgLiBZZXAsIGZvdW5kIGl0OiBgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClgIGluIGBuZXRjb25zb2xlLmNgLiBHb29kLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYC4gQ29uZmlybWVkOiBgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pYCBpcyBhbHNvIGluIGBuZXRjb25zb2xlLmNgLgoKQWxyaWdodCwgb250byBgdXNlcmRhdHVtX2Ryb3BgLiBGb3VuZDogYHN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pYCBpcyBhbHNvIGNvcnJlY3RseSBkZWZpbmVkIGluIGBuZXRjb25zb2xlLmNgLgoKQW5kIGZpbmFsbHksIGB1c2VyZGF0dW1fbWFrZV9pdGVtYC4gWWVwLCB0aGF0IG9uZSYjMzk7cyB0aGVyZSB0b286IGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBjb25zdCBjaGFyICpuYW1lKWAgaXMgZGVmaW5lZCwgYXMgZXhwZWN0ZWQsIGluIGBuZXRjb25zb2xlLmNgLgoKT2theSwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZCwgSSBjYW4gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX21ha2VfaXRlbSYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX21ha2VfaXRlbSYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhbiB1bnNhZmUgbG9ja2xlc3MgdXBkYXRlIG9mIGBudC1cdTAwM2V1c2VyZGF0YWAgd2l0aCBhbiBSQ1UtcHJvdGVjdGVkIGBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YWAgdG8gZml4IGEgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZSBpbiB0aGUgbmV0Y29uc29sZSB0cmFuc21pdCBwYXRoLiBUaGUgbmV3IHBheWxvYWQgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX2ZsZXhgLCBwb3B1bGF0ZWQgdXNpbmcgYHNjbnByaW50ZmAgKHdoaWNoIG51bGwtdGVybWluYXRlcyB0aGUgc3RyaW5nKSwgYW5kIGl0cyBleGFjdCB3cml0dGVuIGxlbmd0aCBpcyByZWNvcmRlZCBpbiBgbGVuZ3RoYC4gVGhlIHRyYW5zbWl0IHBhdGggdGhlbiByZWFkcyBlaXRoZXIgdmlhIGAlc2AgZm9ybWF0IHNwZWNpZmllciAoc3RvcHBpbmcgYXQgdGhlIG51bGwgdGVybWluYXRvcikgb3IgYnkgZXhwbGljaXRseSB1c2luZyB0aGUgcmVjb3JkZWQgYGxlbmd0aGAuIEluIGJvdGggY2FzZXMsIG9ubHkgZXhwbGljaXRseSBpbml0aWFsaXplZCBieXRlcyBhcmUgcmVhZCBhbmQgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzKSBhcmUgcGVyZmVjdGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQwNjdkOTU0MzRmNzI4NDRhNDk3ZGViNTk3MjFlOWQ2ZTM4MzhkODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0NToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCAwMzkxMzMwMjMyOGNjLi5iMzU4ZTVjMzY3MzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0xNTEsMTMgJiM0MzsxNTEsMjcgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogCVNUQVRFX0RFQUNUSVZBVEVELAogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuCiYjNDM7ICogQHJjdToJVXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgomIzQzOyAqIEBsZW5ndGg6CUxlbmd0aCBvZiBAZGF0YSwgZXhjbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvci4KJiM0MzsgKiBAZGF0YToJRm9ybWF0dGVkICYjMzQ7IGtleT12YWx1ZVxuJiMzNDsgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuCiYjNDM7ICoKJiM0MzsgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZAomIzQzOyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuCiYjNDM7ICovCiYjNDM7c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgewomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKJiM0MzsJc2l6ZV90CQkJbGVuZ3RoOwomIzQzOwljaGFyCQkJZGF0YVtdOwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LgogICogQGxpc3Q6CUxpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LgogICogQGdyb3VwOglMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LgogICogQHVzZXJkYXRhX2dyb3VwOglMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5Ci0gKiBAdXNlcmRhdGE6CQlDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kCi0gKiBAdXNlcmRhdGFfbGVuZ3RoOglTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLgomIzQzOyAqIEB1c2VyZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuCiAgKiBAc3lzZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKICAqIEBzeXNkYXRhX2ZpZWxkczoJU3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLgogICogQG1zZ2NvdW50ZXI6CU1lc3NhZ2Ugc2VudCBjb3VudGVyLgpAQCAtMTk4LDggJiM0MzsyMTIsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogI2lmZGVmCUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwCWdyb3VwOwogCXN0cnVjdCBjb25maWdfZ3JvdXAJdXNlcmRhdGFfZ3JvdXA7Ci0JY2hhcgkJCSp1c2VyZGF0YTsKLQlzaXplX3QJCQl1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTsKIAljaGFyCQkJc3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTsKIAogCS8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi8KQEAgLTEzNTEsMTIgJiM0MzsxMzY0LDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAogc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm5ldyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7CiAJc3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwotCWNoYXIgKm9sZF9idWYgPSBOVUxMOwotCWNoYXIgKm5ld19idWYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9mZnNldCA9IDA7CiAJaW50IGxlbjsKIApAQCAtMTM2OCw4ICYjNDM7MTM4MCw4IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAKIAkvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyICovCiAJaWYgKGxlbikgewotCQluZXdfYnVmID0ga21hbGxvYyhsZW4gJiM0MzsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmV3X2J1ZikKJiM0MzsJCW5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gJiM0MzsgMSk7CiYjNDM7CQlpZiAoIW5ldykKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTM3OSwyMiAmIzQzOzEzOTEsMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJdWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7CiAJCS8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi8KIAkJaWYgKHVkbV9pdGVtLSZndDt2YWx1ZVswXSkgewotCQkJb2Zmc2V0ICYjNDM7PSBzY25wcmludGYoJmFtcDtuZXdfYnVmW29mZnNldF0sIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LAomIzQzOwkJCW9mZnNldCAmIzQzOz0gc2NucHJpbnRmKCZhbXA7bmV3LSZndDtkYXRhW29mZnNldF0sCiYjNDM7CQkJCQkgICAgbGVuICYjNDM7IDEgLSBvZmZzZXQsCiAJCQkJCSAgICAmIzM0OyAlcz0lc1xuJiMzNDssIGl0ZW0tJmd0O2NpX25hbWUsCiAJCQkJCSAgICB1ZG1faXRlbS0mZ3Q7dmFsdWUpOwogCQl9CiAJfQogCiAJV0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pOwomIzQzOwlpZiAobmV3KQomIzQzOwkJbmV3LSZndDtsZW5ndGggPSBvZmZzZXQ7CiAKLQkvKiBTd2l0Y2ggdG8gbmV3IGJ1ZmZlciBhbmQgZnJlZSBvbGQgYnVmZmVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0Jb2xkX2J1ZiA9IG50LSZndDt1c2VyZGF0YTsKLQludC0mZ3Q7dXNlcmRhdGEgPSBuZXdfYnVmOwotCW50LSZndDt1c2VyZGF0YV9sZW5ndGggPSBvZmZzZXQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCWtmcmVlKG9sZF9idWYpOwomIzQzOwkvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi8KJiM0MzsJb2xkID0gcmN1X3JlcGxhY2VfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEsIG5ldywKJiM0MzsJCQkJICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTsKJiM0MzsJa2ZyZWVfcmN1KG9sZCwgcmN1KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY4NCw3ICYjNDM7MTY5NSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlrZnJlZShudC0mZ3Q7dXNlcmRhdGEpOwomIzQzOwlrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtJmd0O3VzZXJkYXRhKSk7CiAJa2ZyZWUobnQpOwogfQogCkBAIC0yMjI3LDE0ICYjNDM7MjIzOCwxMyBAQCBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkJICAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJCSAgICAgIGludCBtc2dfbGVuLAotCQkJCSAgICAgIGludCByZWxlYXNlX2xlbikKJiM0MzsJCQkJICAgICAgaW50IHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpCiB7Ci0JY29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnJlbGVhc2U7CiAKICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCi0JdXNlcmRhdGEgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YSA9IG50LSZndDtzeXNkYXRhOwogI2VuZGlmCiAKQEAgLTIyNTEsNyAmIzQzOzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJaWYgKHVzZXJkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLAogCQkJCSAgICAgc2l6ZW9mKG50LSZndDtidWYpIC0gbXNnX2xlbiwgJiMzNDslcyYjMzQ7LAotCQkJCSAgICAgdXNlcmRhdGEpOwomIzQzOwkJCQkgICAgIHVzZXJkYXRhLSZndDtkYXRhKTsKIAogCWlmIChzeXNkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLApAQCAtMjI3MSw3ICYjNDM7MjI4MSw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZikKIAogc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQkgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLAotCQkJCSBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbikKJiM0MzsJCQkJIGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKQogewogCWNvbnN0IGNoYXIgKnVzZXJkYXRhX3B0ciA9IE5VTEw7CiAJY29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMOwpAQCAtMjI4MiwxMiAmIzQzOzIyOTMsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKLQl1c2VyZGF0YV9wdHIgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YV9wdHIgPSBudC0mZ3Q7c3lzZGF0YTsKLQl1c2VyZGF0YV9sZW4gPSBudC0mZ3Q7dXNlcmRhdGFfbGVuZ3RoOwogI2VuZGlmCi0JaWYgKFdBUk5fT05fT05DRSghdXNlcmRhdGFfcHRyICZhbXA7JmFtcDsgdXNlcmRhdGFfbGVuICE9IDApKQotCQlyZXR1cm47CiYjNDM7CWlmICh1c2VyZGF0YSkgewomIzQzOwkJdXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtJmd0O2RhdGE7CiYjNDM7CQl1c2VyZGF0YV9sZW4gPSB1c2VyZGF0YS0mZ3Q7bGVuZ3RoOwomIzQzOwl9CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFzeXNkYXRhX3B0ciAmYW1wOyZhbXA7IHN5c2RhdGFfbGVuICE9IDApKQogCQlyZXR1cm47CkBAIC0yMzY0LDcgJiM0MzsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnN0IGNoYXIgKm1zZywKIAkJCQlpbnQgbXNnX2xlbiwKIAkJCQlpbnQgcmVsZWFzZV9sZW4sCi0JCQkJaW50IHN5c2RhdGFfbGVuKQomIzQzOwkJCQlpbnQgc3lzZGF0YV9sZW4sCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSkKIHsKIAlpbnQgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW47CiAJY29uc3QgY2hhciAqbXNnYm9keTsKQEAgLTIzOTMsNyAmIzQzOzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJICogd2lsbCBiZSByZXBsYWNlZAogCSAqLwogCXNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbiwKLQkJCSAgICAgc3lzZGF0YV9sZW4pOwomIzQzOwkJCSAgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIH0KIAogLyoqCkBAIC0yNDA4LDI1ICYjNDM7MjQyMCwzMyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhID0gTlVMTDsKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAlpbnQgcmVsZWFzZV9sZW4gPSAwOwogCWludCBzeXNkYXRhX2xlbiA9IDA7CiAJaW50IGxlbjsKIAomIzQzOwkvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpOwotCXVzZXJkYXRhX2xlbiA9IG50LSZndDt1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWlmICh1c2VyZGF0YSkKJiM0MzsJCXVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLSZndDtsZW5ndGg7CiAjZW5kaWYKIAlpZiAobnQtJmd0O3JlbGVhc2UpCiAJCXJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLSZndDtyZWxlYXNlKSAmIzQzOyAxOwogCiAJbGVuID0gd2N0eHQtJmd0O2xlbiAmIzQzOyByZWxlYXNlX2xlbiAmIzQzOyBzeXNkYXRhX2xlbiAmIzQzOyB1c2VyZGF0YV9sZW47CiAJaWYgKGxlbiAmbHQ7PSBNQVhfUFJJTlRfQ0hVTkspCi0JCXJldHVybiBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLAotCQkJCQkJIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuKTsKJiM0MzsJCXNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sCiYjNDM7CQkJCQkgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIAotCXJldHVybiBzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLCB3Y3R4dC0mZ3Q7bGVuLCByZWxlYXNlX2xlbiwKLQkJCQkgICBzeXNkYXRhX2xlbik7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLApAQCAtMjY2OSw3ICYjNDM7MjY4OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpOwogCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwotCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEpKTsKICNlbmRpZgogCWtmcmVlKG50KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQpAQCAtMTMsNiAmIzQzOzEzLDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJbmV0Y29uc19yZXN1bWUuc2ggXAogCW5ldGNvbnNfc3lzZGF0YS5zaCBcCiAJbmV0Y29uc190b3J0dXJlLnNoIFwKJiM0MzsJbmV0Y29uc191c2VyZGF0YS5zaCBcCiAjIGVuZCBvZiBURVNUX1BST0dTCiAKIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaApAQCAtMCwwICYjNDM7MSwyMjkgQEAKJiM0MzsjIS91c3IvYmluL2VudiBiYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC4KJiM0MzsjCiYjNDM7IyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXQKJiM0MzsjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZQomIzQzOyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGUKJiM0MzsjIGtleS4KJiM0MzsjCiYjNDM7IyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlCiYjNDM7IyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwcwomIzQzOyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLAomIzQzOyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZQomIzQzOyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtZXVvIHBpcGVmYWlsCiYjNDM7CiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWUgJiMzNDske0JBU0hfU09VUkNFWzBdfSYjMzQ7KSYjMzQ7KQomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBURElSfSYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaAomIzQzOwomIzQzOyMgTnVtYmVyIG9mIHRpbWVzIGVhY2ggdG9ydHVyZSB3b3JrZXIgbG9vcHMKJiM0MztJVEVSQVRJT05TPSR7MTotMjAwfQomIzQzOwomIzQzOyMgS2V5cyBvd25lZCBieSBlYWNoIHRvcnR1cmUgd29ya2VyLiBXb3JrZXJzIGRvIG5vdCBzaGFyZSBrZXlzLCBzbyBhIGZhaWxpbmcKJiM0MzsjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLgomIzQzO0NIVVJOX0tFWT0mIzM0O2NodXJua2V5JiMzNDsKJiM0MztUUkFOU0lFTlRfS0VZPSYjMzQ7dHJhbnNpZW50a2V5JiMzNDsKJiM0MzsjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTksKJiM0MztCVUxLX0tFWVM9OAomIzQzOwomIzQzO1VTRVJEQVRBX0RJUj0mIzM0OyR7TkVUQ09OU19QQVRIfS91c2VyZGF0YSYjMzQ7CiYjNDM7IyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU30KJiM0MzsjIGVudHJpZXMgb2YgdGhpcyBzaXplIGFyZSBlbm91Z2ggdG8gZm9yY2UgZnJhZ21lbnRhdGlvbgomIzQzO0xPTkdfVkFMVUU9JChwcmludGYgLS0gJiMzOTt2JS4wcyYjMzk7IHsxLi4xOTB9KQomIzQzOwomIzQzO2Z1bmN0aW9uIHdyaXRlX2tleSgpIHsKJiM0MzsJbG9jYWwgS0VZPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CWxvY2FsIFZBTFVFPSYjMzQ7JHsyfSYjMzQ7CiYjNDM7CiYjNDM7CW1rZGlyIC1wICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7S0VZfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske1ZBTFVFfSYjMzQ7ICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7IyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZQomIzQzO2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7CiYjNDM7CXJtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOwlsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmFtcDsKJiM0MzsJd2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7JHtJUF9WRVJTSU9OfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSYjMzQ7ICZndDsgL2Rldi9rbXNnCiYjNDM7CWJ1c3l3YWl0ICYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfSYjMzQ7IHRlc3QgLXMgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7IHx8IHRydWUKJiM0MzsJcGtpbGxfc29jYXQKJiM0MzsJdmFsaWRhdGVfbXNnICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkgewomIzQzOwlsb2NhbCBXQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgISBncmVwIC1xIC0tICYjMzQ7JHtXQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1dBTlRFRH0mIzM5OyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQljYXQgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHsKJiM0MzsJbG9jYWwgVU5XQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgZ3JlcCAtcSAtLSAmIzM0OyR7VU5XQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1VOV0FOVEVEfSYjMzk7IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHkKJiM0MzsjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlCiYjNDM7IyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuCiYjNDM7ZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQllY2hvICYjMzQ7dmFsdWUke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWUmIzM0OwomIzQzOwkJZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXIKJiM0MztmdW5jdGlvbiBjaHVybl9rZXkoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQlta2RpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9JiMzNDsKJiM0MzsJCWVjaG8gJiMzNDt0cmFuc2llbnQke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlJiMzNDsKJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkCiYjNDM7ZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSAke2l9JiMzNDsgJmd0OyAvZGV2L2ttc2cKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvcgomIzQzO2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkgewomIzQzOwlsb2NhbCBQSURTPSgpCiYjNDM7CWxvY2FsIFdPUktFUgomIzQzOwlsb2NhbCBSRVQ9MAomIzQzOwlsb2NhbCBQSUQKJiM0MzsKJiM0MzsJZm9yIFdPUktFUiBpbiAmIzM0OyRAJiMzNDsKJiM0MzsJZG8KJiM0MzsJCSYjMzQ7JHtXT1JLRVJ9JiMzNDsgJmFtcDsKJiM0MzsJCVBJRFMmIzQzOz0oJiMzNDskISYjMzQ7KQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CSMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZwomIzQzOwkjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLgomIzQzOwlmb3IgUElEIGluICYjMzQ7JHtQSURTW0BdfSYjMzQ7CiYjNDM7CWRvCiYjNDM7CQl3YWl0ICYjMzQ7JHtQSUR9JiMzNDsgfHwgUkVUPTEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyR7UkVUfSYjMzQ7IC1uZSAwIF1dCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiB1c2VyZGF0YSB0b3J0dXJlIHdvcmtlciBmYWlsZWQmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7QlVMS19LRVlTfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJd3JpdGVfa2V5ICYjMzQ7YnVsayR7aX0mIzM0OyAmIzM0OyR7TE9OR19WQUxVRX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0JVTEtfS0VZU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9L2J1bGske2l9JiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjID09PT09PT09PT0gIwomIzQzOyMgU3RhcnQgaGVyZSAjCiYjNDM7IyA9PT09PT09PT09ICMKJiM0MzsKJiM0Mzttb2Rwcm9iZSBuZXRkZXZzaW0gMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0Mzttb2Rwcm9iZSBuZXRjb25zb2xlIDImZ3Q7IC9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7CiYjNDM7SVBfVkVSU0lPTj0mIzM0O2lwdjQmIzM0OwomIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZQomIzQzO09VVFBVVF9GSUxFPSYjMzQ7L3RtcC8ke1RBUkdFVH0mIzM0OwomIzQzOwomIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZAomIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXMKJiM0MzsjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSkKJiM0MztlY2hvICYjMzQ7NiA1JiMzNDsgJmd0OyAvcHJvYy9zeXMva2VybmVsL3ByaW50awomIzQzOyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXQKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzCiYjNDM7c2V0X25ldHdvcmsgJiMzNDske0lQX1ZFUlNJT059JiMzNDsKJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlCiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzEKJiM0MzsjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbgomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtVU0VSREFUQV9LRVl9JiMzNDsgJiMzNDtmaXJzdCYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3QmIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICMyCiYjNDM7IyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7VVNFUkRBVEFfS0VZfSYjMzQ7ICYjMzQ7c2Vjb25kJiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT1zZWNvbmQmIzM0OwomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0JiMzNDsKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjMwomIzQzOyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeQomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZSYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PSYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzQKJiM0MzsjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0Mzt3cml0ZV9rZXkgJiMzNDske1VTRVJEQVRBX0tFWX0mIzM0OyAmIzM0O3RoaXJkJiMzNDsKJiM0MztybWRpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0mIzM0OwomIzQzO3NlbmRfYW5kX2NhcHR1cmUKJiM0MztleHBlY3Rfbm90X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT0mIzM0OwomIzQzO3JtICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICM1CiYjNDM7IyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LAomIzQzOyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7Q0hVUk5fS0VZfSYjMzQ7ICYjMzQ7JHtVU0VSREFUQV9WQUxVRX0mIzM0OwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7CiYjNDM7Y3JlYXRlX2J1bGtfa2V5cwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7ZGVsZXRlX2J1bGtfa2V5cwomIzQzOwomIzQzO2V4aXQgJiMzNDske2tzZnRfcGFzc30mIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0OQoJCQkJCQkJb3V0cHV0OiAyMjEKCQkJCQkJCXRob3VnaHRzOiAxODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJDVSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBuZXRjb25zb2xlLmNgIHBhdGNoLiBUaGUgY29yZSBpZGVhIGlzIHRvIGludHJvZHVjZSBSQ1UgZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgdGFyZ2V0LiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlIOKAkyB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gbGlrZWx5IHN1ZmZlcmVkIGZyb20gdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMgd2hlbiB1cGRhdGluZyBgdXNlcmRhdGFgIHdoaWxlIGl0IHdhcyBiZWluZyB0cmFuc21pdHRlZC4gTWFrZXMgc2Vuc2UuIFRoaXMgbmV3IGBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YWAgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYHJjdWAsIGBsZW5ndGhgLCBhbmQgYSBmbGV4aWJsZSBhcnJheSBgZGF0YVtdYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBhbGxvY2F0aW9uIGFuZCBkYXRhIHBvcHVsYXRpb24uIFRoZXkmIzM5O3JlIHVzaW5nIGBrbWFsbG9jX2ZsZXhgIGFuZCBgc2NucHJpbnRmYC4gYGttYWxsb2NfZmxleGAgaXRzZWxmIGRvZXNuJiMzOTt0IHplcm8gbWVtb3J5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyB3cml0dGVuIGlzIGluaXRpYWxpemVkLiBUaGUgY29kZSBkb2VzIGBzY25wcmludGZgIHRvIHBvcHVsYXRlIHRoZSBgZGF0YWAgZmllbGQsIHNvIHRoZSBzdHJpbmcgaXMgbnVsbC10ZXJtaW5hdGVkLiBHb29kLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCB0aGUgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIGV4cGVjdHMgbGF0ZXIuIFRoZSBjb2RlIHRoZW4gcmVjb3JkcyB0aGUgd3JpdHRlbiBsZW5ndGggaW4gYG5ldy0mZ3Q7bGVuZ3RoYC4gVGhpcyBzZXRzIHVwIHRoZSBjcml0aWNhbCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gZm9yIHRoZSBwYXlsb2FkLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHRyYW5zbWl0IHBhdGhzLCBzcGVjaWZpY2FsbHkgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAuIEluIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgaXQgdXNlcyBgJXNgIG9uIGB1c2VyZGF0YS0mZ3Q7ZGF0YWAsIHdoaWNoIGlzIHNhZmUgYmVjYXVzZSBpdCYjMzk7cyBudWxsLXRlcm1pbmF0ZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAgZnVuY3Rpb24gdXNlcyB0aGUgYHVzZXJkYXRhLSZndDtsZW5ndGhgIHZhbHVlLiBDcnVjaWFsbHksIHRoaXMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIGBvZmZzZXRgIGZyb20gYHNjbnByaW50ZmAsIHJlcHJlc2VudGluZyB0aGUgKmV4YWN0KiBudW1iZXIgb2YgYnl0ZXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGZ1bmN0aW9uLiBTbyB0aGUgZGF0YSBiZWluZyBzZW50IGlzIGFsbCBpbml0aWFsaXplZC4gSSYjMzk7bSBzYXRpc2ZpZWQuCgpOb3csIGFuIG9idmlvdXMgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrcyo/IFRoZSBgcmN1YCBoZWFkIGlzIGluaXRpYWxpemVkIGJ5IGBrZnJlZV9yY3VgIGludGVybmFsbHksIGJ1dCBpcyBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIFRoZSBgZGF0YVtdYCBhcnJheSBpcyB0aGUgb25seSBwYXJ0IHNlbnQgb3ZlciB0aGUgbmV0d29yaywgYW5kIHRoZSBjb2RlIGVuc3VyZXMgaXQgb25seSB0cmFuc21pdHMgdGhlIGluaXRpYWxpemVkIGJ5dGVzIGJ5IHVzaW5nIHRoZSBsZW5ndGggZmllbGQuIE5vIGxlYWsgaGVyZS4KClNvLCB0aGUgcHJpbWFyeSBvYmplY3RpdmUgaXMgdG8gZWxpbWluYXRlIHRoZSBVQUYvZGF0YSByYWNlLCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGBzcGluX2xvY2tfaXJxc2F2ZWAgYW5kIGBrZnJlZWAgcGF0dGVybiBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIHByb2JsZW0uJiMzNDsgSXQmIzM5O3MgdmVyeSBsaWtlbHkgS0FTQU4gd291bGQgaGF2ZSBjYXVnaHQgdGhpcyBxdWlja2x5LiBUaGUgUkNVIGFwcHJvYWNoIGVmZmVjdGl2ZWx5IGVsaW1pbmF0ZXMgdGhpcyByYWNlLiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgYSBnb29kIGZpeC4KClRoZSBrZXkgdG8gZW5zdXJlIGlzIHRoZXJlIGlzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4KCkkmIzM5O2xsIGNoZWNrIGEgS01TQU4gc3BlY2lmaWMgdGhpbmcuCkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPwoKVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBrbWFsbG9jX2ZsZXhgLCB3aGljaCBkb2VzbiYjMzk7dCB6ZXJvLCBhbmQgdGhlIHNpemUgY2FsY3VsYXRpb25zLiBXZSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIHRoZSBidWZmZXIgbWF0Y2hlcyB0aGUgYnl0ZXMgd3JpdHRlbiB0byB0aGUgYnVmZmVyLgpUaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzdHJpbmcgd3JpdGluZyBhcmUgcmVsYXRlZCBieSBgbGVuYCBhbmQgYG9mZnNldGAuIGBsZW5gIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYGNhbGNfdXNlcmRhdGFfbGVuYCwgYW5kIGBvZmZzZXRgIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYHNjbnByaW50ZmAuCgpUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcyBpcyB3cml0dGVuLiBUaGVyZSBzaG91bGQgYmUgYSBtdXRleCBmb3IgdGhlIHdyaXRlcnMgYW5kIHJlYWRlcnMuClRoZSBjb21tZW50IG1lbnRpb25zIHRoZSBzZXJpYWxpemF0aW9uIGJ5IGBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhgLgpTbyB0aGUgc2l6ZSBpcyBleGFjdGx5IHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KCkV2ZW4gaWYgYGNhbGNfdXNlcmRhdGFfbGVuYCBhbmQgYHNjbnByaW50ZmAgZGlkbiYjMzk7dCBhZ3JlZSBwZXJmZWN0bHksIGBvZmZzZXRgIGlzIHRoZSBhY3R1YWwgYnl0ZXMgd3JpdHRlbiwgYW5kIGB1c2VyZGF0YS0mZ3Q7bGVuZ3RoYCBob2xkcyB0aGUgY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMgdXNlZCwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCByZWFkcy4gYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIHVzZXMgdGhlIG51bGwgdGVybWluYXRvci4gYHNlbmRfZnJhZ21lbnRlZF9ib2R5YCB1c2VzIGB1c2VyZGF0YS0mZ3Q7bGVuZ3RoYCB3aGljaCBpcyBlcXVhbCB0byBgb2Zmc2V0YC4KClNvLCBuby4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSXQmIzM5O3Mgc2FmZS4KTm8gS01TQU4gaXMgbmVlZGVkLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYGttYWxsb2NfZmxleGAgbWFjcm8ganVzdCB0byBiZSAxMDAlIHN1cmUsIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZml4ZXMgYSBVQUYvZGF0YSByYWNlLCB3aGljaCBpcyBhIEtBU0FOIGRvbWFpbiBidWcuCk5vIEtNU0FOIGlzIG5lZWRlZC4KCkkgd2lsbCBzZXQgTmVlZHNLTVNBTj1mYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NToyNy40MTIwMDgwMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg3OTk1NjU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcInVzZXJkYXR1bV9tYWtlX2l0ZW1cIixcbiAgICBcIm5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bnNhZmUgbG9ja2xlc3MgdXBkYXRlIG9mIGBudC1cXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjcuNDEyMDEyNDMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMxMDkwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MDY3ZDk1NDM0ZjcyODQ0YTQ5N2RlYjU5NzIxZTlkNmUzODM4ZDg0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbmluZGV4IDAzOTEzMzAyMzI4Y2MuLmIzNThlNWMzNjczNTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuQEAgLTE1MSwxMyArMTUxLDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcXG4gXFx0U1RBVEVfREVBQ1RJVkFURUQsXFxuIH07XFxuIFxcbisvKipcXG4rICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cXG4rICogQHJjdTpcXHRVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXFxuKyAqIEBsZW5ndGg6XFx0TGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLlxcbisgKiBAZGF0YTpcXHRGb3JtYXR0ZWQgXFxcIiBrZXk9dmFsdWVcXFxcblxcXCIgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXFxuKyAqXFxuKyAqIEltbXV0YWJsZSBvbmNlIHB1Ymxpc2hlZCwgc28gdGhlIHRyYW5zbWl0IHBhdGggbmV2ZXIgb2JzZXJ2ZXMgQGRhdGEgYW5kXFxuKyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXFxuKyAqL1xcbitzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuK1xcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdTtcXG4rXFx0c2l6ZV90XFx0XFx0XFx0bGVuZ3RoO1xcbitcXHRjaGFyXFx0XFx0XFx0ZGF0YVtdO1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LlxcbiAgKiBAbGlzdDpcXHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cXG4gICogQGdyb3VwOlxcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXFxuICAqIEB1c2VyZGF0YV9ncm91cDpcXHRMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5XFxuLSAqIEB1c2VyZGF0YTpcXHRcXHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXFxuLSAqIEB1c2VyZGF0YV9sZW5ndGg6XFx0U3RyaW5nIGxlbmd0aCBvZiB1c2VyZGF0YS5cXG4rICogQHVzZXJkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuXFxuICAqIEBzeXNkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcXG4gICogQHN5c2RhdGFfZmllbGRzOlxcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cXG4gICogQG1zZ2NvdW50ZXI6XFx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXFxuQEAgLTE5OCw4ICsyMTIsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiAjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIFxcdHN0cnVjdCBjb25maWdfZ3JvdXBcXHRncm91cDtcXG4gXFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdHVzZXJkYXRhX2dyb3VwO1xcbi1cXHRjaGFyXFx0XFx0XFx0KnVzZXJkYXRhO1xcbi1cXHRzaXplX3RcXHRcXHRcXHR1c2VyZGF0YV9sZW5ndGg7XFxuK1xcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTtcXG4gXFx0Y2hhclxcdFxcdFxcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XFxuIFxcbiBcXHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXFxuQEAgLTEzNTEsMTIgKzEzNjQsMTEgQEAgc3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXG4gc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDtcXG4rXFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDtcXG4gXFx0c3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07XFxuIFxcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuLVxcdGNoYXIgKm9sZF9idWYgPSBOVUxMO1xcbi1cXHRjaGFyICpuZXdfYnVmID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IG9mZnNldCA9IDA7XFxuIFxcdGludCBsZW47XFxuIFxcbkBAIC0xMzY4LDggKzEzODAsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXG4gXFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xcbiBcXHRpZiAobGVuKSB7XFxuLVxcdFxcdG5ld19idWYgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpO1xcbi1cXHRcXHRpZiAoIW5ld19idWYpXFxuK1xcdFxcdG5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gKyAxKTtcXG4rXFx0XFx0aWYgKCFuZXcpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbkBAIC0xMzc5LDIyICsxMzkxLDIxIEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdHVkbV9pdGVtID0gdG9fdXNlcmRhdHVtKGl0ZW0pO1xcbiBcXHRcXHQvKiBTa2lwIHVzZXJkYXRhIHdpdGggbm8gdmFsdWUgc2V0ICovXFxuIFxcdFxcdGlmICh1ZG1faXRlbS1cXHUwMDNldmFsdWVbMF0pIHtcXG4tXFx0XFx0XFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcXHUwMDI2bmV3X2J1ZltvZmZzZXRdLCBsZW4gKyAxIC0gb2Zmc2V0LFxcbitcXHRcXHRcXHRvZmZzZXQgKz0gc2NucHJpbnRmKFxcdTAwMjZuZXctXFx1MDAzZWRhdGFbb2Zmc2V0XSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGxlbiArIDEgLSBvZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiICVzPSVzXFxcXG5cXFwiLCBpdGVtLVxcdTAwM2VjaV9uYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgdWRtX2l0ZW0tXFx1MDAzZXZhbHVlKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRXQVJOX09OX09OQ0Uob2Zmc2V0ICE9IGxlbik7XFxuK1xcdGlmIChuZXcpXFxuK1xcdFxcdG5ldy1cXHUwMDNlbGVuZ3RoID0gb2Zmc2V0O1xcbiBcXG4tXFx0LyogU3dpdGNoIHRvIG5ldyBidWZmZXIgYW5kIGZyZWUgb2xkIGJ1ZmZlciAqL1xcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbi1cXHRvbGRfYnVmID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi1cXHRudC1cXHUwMDNldXNlcmRhdGEgPSBuZXdfYnVmO1xcbi1cXHRudC1cXHUwMDNldXNlcmRhdGFfbGVuZ3RoID0gb2Zmc2V0O1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XFxuLVxcbi1cXHRrZnJlZShvbGRfYnVmKTtcXG4rXFx0LyogV3JpdGVycyBhcmUgc2VyaWFsaXplZCBieSBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXguICovXFxuK1xcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIobnQtXFx1MDAzZXVzZXJkYXRhLCBuZXcsXFxuK1xcdFxcdFxcdFxcdCAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTtcXG4rXFx0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTE2ODQsNyArMTY5NSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuIFxcbi1cXHRrZnJlZShudC1cXHUwMDNldXNlcmRhdGEpO1xcbitcXHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXFx1MDAzZXVzZXJkYXRhKSk7XFxuIFxcdGtmcmVlKG50KTtcXG4gfVxcbiBcXG5AQCAtMjIyNywxNCArMjIzOCwxMyBAQCBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgICBpbnQgbXNnX2xlbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcXG4ge1xcbi1cXHRjb25zdCBjaGFyICp1c2VyZGF0YSA9IE5VTEw7XFxuIFxcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICpyZWxlYXNlO1xcbiBcXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG4tXFx0dXNlcmRhdGEgPSBudC1cXHUwMDNldXNlcmRhdGE7XFxuIFxcdHN5c2RhdGEgPSBudC1cXHUwMDNlc3lzZGF0YTtcXG4gI2VuZGlmXFxuIFxcbkBAIC0yMjUxLDcgKzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdGlmICh1c2VyZGF0YSlcXG4gXFx0XFx0bXNnX2xlbiArPSBzY25wcmludGYoXFx1MDAyNm50LVxcdTAwM2VidWZbbXNnX2xlbl0sXFxuIFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKG50LVxcdTAwM2VidWYpIC0gbXNnX2xlbiwgXFxcIiVzXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICB1c2VyZGF0YSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgdXNlcmRhdGEtXFx1MDAzZWRhdGEpO1xcbiBcXG4gXFx0aWYgKHN5c2RhdGEpXFxuIFxcdFxcdG1zZ19sZW4gKz0gc2NucHJpbnRmKFxcdTAwMjZudC1cXHUwMDNlYnVmW21zZ19sZW5dLFxcbkBAIC0yMjcxLDcgKzIyODEsOCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRfcmVsZWFzZShjaGFyICpidWYpXFxuIFxcbiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxcbi1cXHRcXHRcXHRcXHQgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4pXFxuK1xcdFxcdFxcdFxcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcXG4ge1xcbiBcXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICpzeXNkYXRhX3B0ciA9IE5VTEw7XFxuQEAgLTIyODIsMTIgKzIyOTMsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XFxuIFxcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbi1cXHR1c2VyZGF0YV9wdHIgPSBudC1cXHUwMDNldXNlcmRhdGE7XFxuIFxcdHN5c2RhdGFfcHRyID0gbnQtXFx1MDAzZXN5c2RhdGE7XFxuLVxcdHVzZXJkYXRhX2xlbiA9IG50LVxcdTAwM2V1c2VyZGF0YV9sZW5ndGg7XFxuICNlbmRpZlxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgXFx1MDAyNlxcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmICh1c2VyZGF0YSkge1xcbitcXHRcXHR1c2VyZGF0YV9wdHIgPSB1c2VyZGF0YS1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXFx1MDAzZWxlbmd0aDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghc3lzZGF0YV9wdHIgXFx1MDAyNlxcdTAwMjYgc3lzZGF0YV9sZW4gIT0gMCkpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM2NCw3ICsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHRcXHRjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFxcdFxcdGludCBtc2dfbGVuLFxcbiBcXHRcXHRcXHRcXHRpbnQgcmVsZWFzZV9sZW4sXFxuLVxcdFxcdFxcdFxcdGludCBzeXNkYXRhX2xlbilcXG4rXFx0XFx0XFx0XFx0aW50IHN5c2RhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuIHtcXG4gXFx0aW50IGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuO1xcbiBcXHRjb25zdCBjaGFyICptc2dib2R5O1xcbkBAIC0yMzkzLDcgKzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdCAqIHdpbGwgYmUgcmVwbGFjZWRcXG4gXFx0ICovXFxuIFxcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcXG4tXFx0XFx0XFx0ICAgICBzeXNkYXRhX2xlbik7XFxuK1xcdFxcdFxcdCAgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI0MDgsMjUgKzI0MjAsMzMgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbiB7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSA9IE5VTEw7XFxuIFxcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xcbiBcXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xcbiBcXHRpbnQgc3lzZGF0YV9sZW4gPSAwO1xcbiBcXHRpbnQgbGVuO1xcbiBcXG4rXFx0LyogS2VlcHMgdGhlIHBheWxvYWQgcGlja2VkIGJlbG93IGFsaXZlIHVudGlsIHRoZSBsYXN0IHNlbmRfdWRwKCkuICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIFxcdHN5c2RhdGFfbGVuID0gcHJlcGFyZV9zeXNkYXRhKG50LCB3Y3R4dCk7XFxuLVxcdHVzZXJkYXRhX2xlbiA9IG50LVxcdTAwM2V1c2VyZGF0YV9sZW5ndGg7XFxuK1xcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuK1xcdGlmICh1c2VyZGF0YSlcXG4rXFx0XFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXFx1MDAzZWxlbmd0aDtcXG4gI2VuZGlmXFxuIFxcdGlmIChudC1cXHUwMDNlcmVsZWFzZSlcXG4gXFx0XFx0cmVsZWFzZV9sZW4gPSBzdHJsZW4oaW5pdF91dHNuYW1lKCktXFx1MDAzZXJlbGVhc2UpICsgMTtcXG4gXFxuIFxcdGxlbiA9IHdjdHh0LVxcdTAwM2VsZW4gKyByZWxlYXNlX2xlbiArIHN5c2RhdGFfbGVuICsgdXNlcmRhdGFfbGVuO1xcbiBcXHRpZiAobGVuIFxcdTAwM2M9IE1BWF9QUklOVF9DSFVOSylcXG4tXFx0XFx0cmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVxcdTAwM2VvdXRidWYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB3Y3R4dC1cXHUwMDNlbGVuLCByZWxlYXNlX2xlbik7XFxuK1xcdFxcdHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVxcdTAwM2VvdXRidWYsIHdjdHh0LVxcdTAwM2VsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLCB3Y3R4dC1cXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XFxuIFxcbi1cXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXFx1MDAzZW91dGJ1Ziwgd2N0eHQtXFx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXFxuLVxcdFxcdFxcdFxcdCAgIHN5c2RhdGFfbGVuKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuQEAgLTI2NjksNyArMjY4OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiBcXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuICNpZmRlZlxcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG4tXFx0a2ZyZWUobnQtXFx1MDAzZXVzZXJkYXRhKTtcXG4rXFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVxcdTAwM2V1c2VyZGF0YSkpO1xcbiAjZW5kaWZcXG4gXFx0a2ZyZWUobnQpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRuZXRjb25zX3Jlc3VtZS5zaCBcXFxcXFxuIFxcdG5ldGNvbnNfc3lzZGF0YS5zaCBcXFxcXFxuIFxcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxcXFxuK1xcdG5ldGNvbnNfdXNlcmRhdGEuc2ggXFxcXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXFxuIFxcbiBpbmNsdWRlIC4uLy4uLy4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjExMzkwM2Y0Y2UxYzVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXFxuQEAgLTAsMCArMSwyMjkgQEBcXG4rIyEvdXNyL2Jpbi9lbnYgYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjIEV4ZXJjaXNlIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuXFxuKyNcXG4rIyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXRcXG4rIyBjb25maWdmcyBzYXlzOiBhIHZhbHVlIHNob3dzIHVwIGluIHRoZSBuZXh0IG1lc3NhZ2UsIGFuIHVwZGF0ZSByZXBsYWNlcyB0aGVcXG4rIyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZVxcbisjIGtleS5cXG4rI1xcbisjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGVcXG4rIyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwc1xcbisjIHBpY2tpbmcgdXAgcGF5bG9hZHMgdGhhdCBhcmUgYmVpbmcgcmVwbGFjZWQgdW5kZXJuZWF0aCBpdC4gSXQgcnVucyB0d2ljZSxcXG4rIyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlXFxuKyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuXFxuKyNcXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcXHUwMDNlXFxuK1xcbitzZXQgLWV1byBwaXBlZmFpbFxcbitcXG4rU0NSSVBURElSPSQoZGlybmFtZSBcXFwiJChyZWFkbGluayAtZSBcXFwiJHtCQVNIX1NPVVJDRVswXX1cXFwiKVxcXCIpXFxuK1xcbitzb3VyY2UgXFxcIiR7U0NSSVBURElSfVxcXCIvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXFxuK1xcbisjIE51bWJlciBvZiB0aW1lcyBlYWNoIHRvcnR1cmUgd29ya2VyIGxvb3BzXFxuK0lURVJBVElPTlM9JHsxOi0yMDB9XFxuK1xcbisjIEtleXMgb3duZWQgYnkgZWFjaCB0b3J0dXJlIHdvcmtlci4gV29ya2VycyBkbyBub3Qgc2hhcmUga2V5cywgc28gYSBmYWlsaW5nXFxuKyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuXFxuK0NIVVJOX0tFWT1cXFwiY2h1cm5rZXlcXFwiXFxuK1RSQU5TSUVOVF9LRVk9XFxcInRyYW5zaWVudGtleVxcXCJcXG4rIyBOdW1iZXIgb2Yga2V5cyB1c2VkIHRvIHB1c2ggYSBtZXNzYWdlIHBhc3QgTUFYX1BSSU5UX0NIVU5LXFxuK0JVTEtfS0VZUz04XFxuK1xcbitVU0VSREFUQV9ESVI9XFxcIiR7TkVUQ09OU19QQVRIfS91c2VyZGF0YVxcXCJcXG4rIyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU31cXG4rIyBlbnRyaWVzIG9mIHRoaXMgc2l6ZSBhcmUgZW5vdWdoIHRvIGZvcmNlIGZyYWdtZW50YXRpb25cXG4rTE9OR19WQUxVRT0kKHByaW50ZiAtLSAndiUuMHMnIHsxLi4xOTB9KVxcbitcXG4rZnVuY3Rpb24gd3JpdGVfa2V5KCkge1xcbitcXHRsb2NhbCBLRVk9XFxcIiR7MX1cXFwiXFxuK1xcdGxvY2FsIFZBTFVFPVxcXCIkezJ9XFxcIlxcbitcXG4rXFx0bWtkaXIgLXAgXFxcIiR7VVNFUkRBVEFfRElSfS8ke0tFWX1cXFwiXFxuK1xcdGVjaG8gXFxcIiR7VkFMVUV9XFxcIiBcXHUwMDNlIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlXFxcIlxcbit9XFxuK1xcbisjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlXFxuK2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7XFxuK1xcdHJtIC1mIFxcXCIke09VVFBVVF9GSUxFfVxcXCJcXG4rXFxuK1xcdGxpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvIFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAyNlxcbitcXHR3YWl0X2Zvcl9wb3J0IFxcXCIke05BTUVTUEFDRX1cXFwiIFxcXCIke1BPUlR9XFxcIiBcXFwiJHtJUF9WRVJTSU9OfVxcXCJcXG4rXFx0ZWNobyBcXFwiJHtNU0d9OiAke1RBUkdFVH1cXFwiIFxcdTAwM2UgL2Rldi9rbXNnXFxuK1xcdGJ1c3l3YWl0IFxcXCIke0JVU1lXQUlUX1RJTUVPVVR9XFxcIiB0ZXN0IC1zIFxcXCIke09VVFBVVF9GSUxFfVxcXCIgfHwgdHJ1ZVxcbitcXHRwa2lsbF9zb2NhdFxcbitcXHR2YWxpZGF0ZV9tc2cgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbit9XFxuK1xcbitmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkge1xcbitcXHRsb2NhbCBXQU5URUQ9XFxcIiR7MX1cXFwiXFxuK1xcbitcXHRpZiAhIGdyZXAgLXEgLS0gXFxcIiR7V0FOVEVEfVxcXCIgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAnJHtXQU5URUR9JyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRjYXQgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHtcXG4rXFx0bG9jYWwgVU5XQU5URUQ9XFxcIiR7MX1cXFwiXFxuK1xcbitcXHRpZiBncmVwIC1xIC0tIFxcXCIke1VOV0FOVEVEfVxcXCIgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAnJHtVTldBTlRFRH0nIGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0Y2F0IFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHlcXG4rIyB2YWx1ZSBpcyBza2lwcGVkIHdoZW4gdGhlIHBheWxvYWQgaXMgZm9ybWF0dGVkLCBzbyB0aGlzIGFsc28gZHJpdmVzIHRoZVxcbisjIHRhcmdldCB0aHJvdWdoIGhhdmluZyBubyBwYXlsb2FkIGF0IGFsbC5cXG4rZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluICQoc2VxIFxcXCIke0lURVJBVElPTlN9XFxcIilcXG4rXFx0ZG9cXG4rXFx0XFx0ZWNobyBcXFwidmFsdWUke2l9XFxcIiBcXHUwMDNlIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXFxcIlxcbitcXHRcXHRlY2hvIFxcdTAwM2UgXFxcIiR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXJcXG4rZnVuY3Rpb24gY2h1cm5fa2V5KCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtJVEVSQVRJT05TfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdG1rZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVxcXCJcXG4rXFx0XFx0ZWNobyBcXFwidHJhbnNpZW50JHtpfVxcXCIgXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0vdmFsdWVcXFwiXFxuK1xcdFxcdHJtZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVxcXCJcXG4rXFx0ZG9uZVxcbit9XFxuK1xcbisjIEtlZXAgdGhlIHRyYW5zbWl0IHBhdGggYnVzeSB3aGlsZSB0aGUgcGF5bG9hZCBpcyBiZWluZyByZXBsYWNlZFxcbitmdW5jdGlvbiBzZW5kX21lc3NhZ2VzKCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtJVEVSQVRJT05TfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdGVjaG8gXFxcIiR7TVNHfTogJHtUQVJHRVR9ICR7aX1cXFwiIFxcdTAwM2UgL2Rldi9rbXNnXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyBSdW4gdGhlIHdvcmtlcnMgY29uY3VycmVudGx5IGFuZCBmYWlsIGlmIGFueSBvZiB0aGVtIGhpdHMgYW4gZXJyb3JcXG4rZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7XFxuK1xcdGxvY2FsIFBJRFM9KClcXG4rXFx0bG9jYWwgV09SS0VSXFxuK1xcdGxvY2FsIFJFVD0wXFxuK1xcdGxvY2FsIFBJRFxcbitcXG4rXFx0Zm9yIFdPUktFUiBpbiBcXFwiJEBcXFwiXFxuK1xcdGRvXFxuK1xcdFxcdFxcXCIke1dPUktFUn1cXFwiIFxcdTAwMjZcXG4rXFx0XFx0UElEUys9KFxcXCIkIVxcXCIpXFxuK1xcdGRvbmVcXG4rXFxuK1xcdCMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZ1xcbitcXHQjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLlxcbitcXHRmb3IgUElEIGluIFxcXCIke1BJRFNbQF19XFxcIlxcbitcXHRkb1xcbitcXHRcXHR3YWl0IFxcXCIke1BJRH1cXFwiIHx8IFJFVD0xXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlmIFtbIFxcXCIke1JFVH1cXFwiIC1uZSAwIF1dXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogdXNlcmRhdGEgdG9ydHVyZSB3b3JrZXIgZmFpbGVkXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitmdW5jdGlvbiBjcmVhdGVfYnVsa19rZXlzKCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtCVUxLX0tFWVN9XFxcIilcXG4rXFx0ZG9cXG4rXFx0XFx0d3JpdGVfa2V5IFxcXCJidWxrJHtpfVxcXCIgXFxcIiR7TE9OR19WQUxVRX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rZnVuY3Rpb24gZGVsZXRlX2J1bGtfa2V5cygpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7QlVMS19LRVlTfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdHJtZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vYnVsayR7aX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyA9PT09PT09PT09ICNcXG4rIyBTdGFydCBoZXJlICNcXG4rIyA9PT09PT09PT09ICNcXG4rXFxuK21vZHByb2JlIG5ldGRldnNpbSAyXFx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxcbittb2Rwcm9iZSBuZXRjb25zb2xlIDJcXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXFxuK1xcbitJUF9WRVJTSU9OPVxcXCJpcHY0XFxcIlxcbisjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGVcXG4rT1VUUFVUX0ZJTEU9XFxcIi90bXAvJHtUQVJHRVR9XFxcIlxcbitcXG4rIyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcXG4rIyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXFxuK2VjaG8gXFxcIjYgNVxcXCIgXFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XFxuK3RyYXAgY2xlYW51cCBFWElUXFxuKyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzXFxuK3NldF9uZXR3b3JrIFxcXCIke0lQX1ZFUlNJT059XFxcIlxcbisjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlXFxuK2NyZWF0ZV9keW5hbWljX3RhcmdldFxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICMxXFxuKyMgQSB2YWx1ZSB3cml0dGVuIHRvIGNvbmZpZ2ZzIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtVU0VSREFUQV9LRVl9XFxcIiBcXFwiZmlyc3RcXFwiXFxuK3NlbmRfYW5kX2NhcHR1cmVcXG4rZXhwZWN0X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XFxcIlxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICMyXFxuKyMgVXBkYXRpbmcgdGhlIHZhbHVlIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBwYXlsb2FkXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtVU0VSREFUQV9LRVl9XFxcIiBcXFwic2Vjb25kXFxcIlxcbitzZW5kX2FuZF9jYXB0dXJlXFxuK2V4cGVjdF9pbl9tc2cgXFxcIiR7VVNFUkRBVEFfS0VZfT1zZWNvbmRcXFwiXFxuK2V4cGVjdF9ub3RfaW5fbXNnIFxcXCIke1VTRVJEQVRBX0tFWX09Zmlyc3RcXFwiXFxuK1xcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisjIFRFU1QgIzNcXG4rIyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5XFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK2VjaG8gXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZVxcXCJcXG4rc2VuZF9hbmRfY2FwdHVyZVxcbitleHBlY3Rfbm90X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PVxcXCJcXG4rXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyMgVEVTVCAjNFxcbisjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5XFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtVU0VSREFUQV9LRVl9XFxcIiBcXFwidGhpcmRcXFwiXFxuK3JtZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9XFxcIlxcbitzZW5kX2FuZF9jYXB0dXJlXFxuK2V4cGVjdF9ub3RfaW5fbXNnIFxcXCIke1VTRVJEQVRBX0tFWX09XFxcIlxcbitybSBcXFwiJHtPVVRQVVRfRklMRX1cXFwiXFxuK1xcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisjIFRFU1QgIzVcXG4rIyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LFxcbisjIGZpcnN0IHVuZnJhZ21lbnRlZCBhbmQgdGhlbiBmcmFnbWVudGVkXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtDSFVSTl9LRVl9XFxcIiBcXFwiJHtVU0VSREFUQV9WQUxVRX1cXFwiXFxuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXFxuK1xcbitjcmVhdGVfYnVsa19rZXlzXFxuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXFxuK2RlbGV0ZV9idWxrX2tleXNcXG4rXFxuK2V4aXQgXFxcIiR7a3NmdF9wYXNzfVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjcuODg1ODU2MjU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTk1MDc3NDU4OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgICBcInVzZXJkYXR1bV9kcm9wXCIsXG4gICAgXCJ1c2VyZGF0dW1fbWFrZV9pdGVtXCIsXG4gICAgXCJuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlXCIsXG4gICAgXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDA2N2Q5NTQzNGY3Mjg0NGE0OTdkZWI1OTcyMWU5ZDZlMzgzOGQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCAwMzkxMzMwMjMyOGNjLi5iMzU4ZTVjMzY3MzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xNTEsMTMgKzE1MSwyNyBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuKy8qKlxuKyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4rICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbisgKiBAbGVuZ3RoOlx0TGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLlxuKyAqIEBkYXRhOlx0Rm9ybWF0dGVkIFwiIGtleT12YWx1ZVxcblwiIGVudHJpZXMsIE5VTCB0ZXJtaW5hdGVkLlxuKyAqXG4rICogSW1tdXRhYmxlIG9uY2UgcHVibGlzaGVkLCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBuZXZlciBvYnNlcnZlcyBAZGF0YSBhbmRcbisgKiBAbGVuZ3RoIGRpc2FncmVlaW5nLlxuKyAqL1xuK3N0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbitcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4rXHRzaXplX3RcdFx0XHRsZW5ndGg7XG4rXHRjaGFyXHRcdFx0ZGF0YVtdO1xuK307XG4rXG4gLyoqXG4gICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG4gICogQGxpc3Q6XHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cbiAgKiBAZ3JvdXA6XHRMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LlxuICAqIEB1c2VyZGF0YV9ncm91cDpcdExpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHlcbi0gKiBAdXNlcmRhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcbi0gKiBAdXNlcmRhdGFfbGVuZ3RoOlx0U3RyaW5nIGxlbmd0aCBvZiB1c2VyZGF0YS5cbisgKiBAdXNlcmRhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuXG4gICogQHN5c2RhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcbiAgKiBAc3lzZGF0YV9maWVsZHM6XHRTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuXG4gICogQG1zZ2NvdW50ZXI6XHRNZXNzYWdlIHNlbnQgY291bnRlci5cbkBAIC0xOTgsOCArMjEyLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdGdyb3VwO1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0dXNlcmRhdGFfZ3JvdXA7XG4tXHRjaGFyXHRcdFx0KnVzZXJkYXRhO1xuLVx0c2l6ZV90XHRcdFx0dXNlcmRhdGFfbGVuZ3RoO1xuK1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xuIFx0Y2hhclx0XHRcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XG4gXG4gXHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXG5AQCAtMTM1MSwxMiArMTM2NCwxMSBAQCBzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXG4gc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4rXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDtcbitcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7XG4gXHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG1faXRlbTtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuLVx0Y2hhciAqb2xkX2J1ZiA9IE5VTEw7XG4tXHRjaGFyICpuZXdfYnVmID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgb2Zmc2V0ID0gMDtcbiBcdGludCBsZW47XG4gXG5AQCAtMTM2OCw4ICsxMzgwLDggQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgKi9cbiBcdGlmIChsZW4pIHtcbi1cdFx0bmV3X2J1ZiA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7XG4tXHRcdGlmICghbmV3X2J1ZilcbitcdFx0bmV3ID0ga21hbGxvY19mbGV4KCpuZXcsIGRhdGEsIGxlbiArIDEpO1xuK1x0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbkBAIC0xMzc5LDIyICsxMzkxLDIxIEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHVkbV9pdGVtID0gdG9fdXNlcmRhdHVtKGl0ZW0pO1xuIFx0XHQvKiBTa2lwIHVzZXJkYXRhIHdpdGggbm8gdmFsdWUgc2V0ICovXG4gXHRcdGlmICh1ZG1faXRlbS1cdTAwM2V2YWx1ZVswXSkge1xuLVx0XHRcdG9mZnNldCArPSBzY25wcmludGYoXHUwMDI2bmV3X2J1ZltvZmZzZXRdLCBsZW4gKyAxIC0gb2Zmc2V0LFxuK1x0XHRcdG9mZnNldCArPSBzY25wcmludGYoXHUwMDI2bmV3LVx1MDAzZWRhdGFbb2Zmc2V0XSxcbitcdFx0XHRcdFx0ICAgIGxlbiArIDEgLSBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgICBcIiAlcz0lc1xcblwiLCBpdGVtLVx1MDAzZWNpX25hbWUsXG4gXHRcdFx0XHRcdCAgICB1ZG1faXRlbS1cdTAwM2V2YWx1ZSk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdFdBUk5fT05fT05DRShvZmZzZXQgIT0gbGVuKTtcbitcdGlmIChuZXcpXG4rXHRcdG5ldy1cdTAwM2VsZW5ndGggPSBvZmZzZXQ7XG4gXG4tXHQvKiBTd2l0Y2ggdG8gbmV3IGJ1ZmZlciBhbmQgZnJlZSBvbGQgYnVmZmVyICovXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4tXHRvbGRfYnVmID0gbnQtXHUwMDNldXNlcmRhdGE7XG4tXHRudC1cdTAwM2V1c2VyZGF0YSA9IG5ld19idWY7XG4tXHRudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGggPSBvZmZzZXQ7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cbi1cdGtmcmVlKG9sZF9idWYpO1xuK1x0LyogV3JpdGVycyBhcmUgc2VyaWFsaXplZCBieSBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXguICovXG4rXHRvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhLCBuZXcsXG4rXHRcdFx0XHQgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTtcbitcdGtmcmVlX3JjdShvbGQsIHJjdSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTY4NCw3ICsxNjk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGtmcmVlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSkpO1xuIFx0a2ZyZWUobnQpO1xuIH1cbiBcbkBAIC0yMjI3LDE0ICsyMjM4LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4gXHRcdFx0XHQgICAgICBpbnQgbXNnX2xlbixcbi1cdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbilcbitcdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4tXHRjb25zdCBjaGFyICp1c2VyZGF0YSA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICpzeXNkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnJlbGVhc2U7XG4gXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbi1cdHVzZXJkYXRhID0gbnQtXHUwMDNldXNlcmRhdGE7XG4gXHRzeXNkYXRhID0gbnQtXHUwMDNlc3lzZGF0YTtcbiAjZW5kaWZcbiBcbkBAIC0yMjUxLDcgKzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpZiAodXNlcmRhdGEpXG4gXHRcdG1zZ19sZW4gKz0gc2NucHJpbnRmKFx1MDAyNm50LVx1MDAzZWJ1Zlttc2dfbGVuXSxcbiBcdFx0XHRcdCAgICAgc2l6ZW9mKG50LVx1MDAzZWJ1ZikgLSBtc2dfbGVuLCBcIiVzXCIsXG4tXHRcdFx0XHQgICAgIHVzZXJkYXRhKTtcbitcdFx0XHRcdCAgICAgdXNlcmRhdGEtXHUwMDNlZGF0YSk7XG4gXG4gXHRpZiAoc3lzZGF0YSlcbiBcdFx0bXNnX2xlbiArPSBzY25wcmludGYoXHUwMDI2bnQtXHUwMDNlYnVmW21zZ19sZW5dLFxuQEAgLTIyNzEsNyArMjI4MSw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcbi1cdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbilcbitcdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbixcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuIFx0Y29uc3QgY2hhciAqdXNlcmRhdGFfcHRyID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGFfcHRyID0gTlVMTDtcbkBAIC0yMjgyLDEyICsyMjkzLDEyIEBAIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4gXHRzeXNkYXRhX3B0ciA9IG50LVx1MDAzZXN5c2RhdGE7XG4tXHR1c2VyZGF0YV9sZW4gPSBudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGg7XG4gI2VuZGlmXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHVzZXJkYXRhX2xlbiAhPSAwKSlcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKHVzZXJkYXRhKSB7XG4rXHRcdHVzZXJkYXRhX3B0ciA9IHVzZXJkYXRhLVx1MDAzZWRhdGE7XG4rXHRcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVx1MDAzZWxlbmd0aDtcbitcdH1cbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyIFx1MDAyNlx1MDAyNiBzeXNkYXRhX2xlbiAhPSAwKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIzNjQsNyArMjM3NSw4IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdGludCBtc2dfbGVuLFxuIFx0XHRcdFx0aW50IHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0aW50IHN5c2RhdGFfbGVuKVxuK1x0XHRcdFx0aW50IHN5c2RhdGFfbGVuLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbiBcdGludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjtcbiBcdGNvbnN0IGNoYXIgKm1zZ2JvZHk7XG5AQCAtMjM5Myw3ICsyNDA1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0ICogd2lsbCBiZSByZXBsYWNlZFxuIFx0ICovXG4gXHRzZW5kX2ZyYWdtZW50ZWRfYm9keShudCwgbXNnYm9keSwgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW4sXG4tXHRcdFx0ICAgICBzeXNkYXRhX2xlbik7XG4rXHRcdFx0ICAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNDA4LDI1ICsyNDIwLDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFx0aW50IHJlbGVhc2VfbGVuID0gMDtcbiBcdGludCBzeXNkYXRhX2xlbiA9IDA7XG4gXHRpbnQgbGVuO1xuIFxuK1x0LyogS2VlcHMgdGhlIHBheWxvYWQgcGlja2VkIGJlbG93IGFsaXZlIHVudGlsIHRoZSBsYXN0IHNlbmRfdWRwKCkuICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbiBcdHN5c2RhdGFfbGVuID0gcHJlcGFyZV9zeXNkYXRhKG50LCB3Y3R4dCk7XG4tXHR1c2VyZGF0YV9sZW4gPSBudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGg7XG4rXHR1c2VyZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShudC1cdTAwM2V1c2VyZGF0YSk7XG4rXHRpZiAodXNlcmRhdGEpXG4rXHRcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVx1MDAzZWxlbmd0aDtcbiAjZW5kaWZcbiBcdGlmIChudC1cdTAwM2VyZWxlYXNlKVxuIFx0XHRyZWxlYXNlX2xlbiA9IHN0cmxlbihpbml0X3V0c25hbWUoKS1cdTAwM2VyZWxlYXNlKSArIDE7XG4gXG4gXHRsZW4gPSB3Y3R4dC1cdTAwM2VsZW4gKyByZWxlYXNlX2xlbiArIHN5c2RhdGFfbGVuICsgdXNlcmRhdGFfbGVuO1xuIFx0aWYgKGxlbiBcdTAwM2M9IE1BWF9QUklOVF9DSFVOSylcbi1cdFx0cmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Zixcbi1cdFx0XHRcdFx0XHQgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbik7XG4rXHRcdHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLFxuK1x0XHRcdFx0XHQgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7XG4rXHRlbHNlXG4rXHRcdHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcbitcdFx0XHRcdCAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xuIFxuLVx0cmV0dXJuIHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcbi1cdFx0XHRcdCAgIHN5c2RhdGFfbGVuKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuQEAgLTI2NjksNyArMjY4OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbi1cdGtmcmVlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSkpO1xuICNlbmRpZlxuIFx0a2ZyZWUobnQpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuK1x0bmV0Y29uc191c2VyZGF0YS5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiBpbmNsdWRlIC4uLy4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjExMzkwM2Y0Y2UxYzVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaFxuQEAgLTAsMCArMSwyMjkgQEBcbisjIS91c3IvYmluL2VudiBiYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC5cbisjXG4rIyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXRcbisjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZVxuKyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGVcbisjIGtleS5cbisjXG4rIyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlXG4rIyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwc1xuKyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLFxuKyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZVxuKyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuXG4rI1xuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbitcbitzZXQgLWV1byBwaXBlZmFpbFxuK1xuK1NDUklQVERJUj0kKGRpcm5hbWUgXCIkKHJlYWRsaW5rIC1lIFwiJHtCQVNIX1NPVVJDRVswXX1cIilcIilcbitcbitzb3VyY2UgXCIke1NDUklQVERJUn1cIi8uLi9saWIvc2gvbGliX25ldGNvbnMuc2hcbitcbisjIE51bWJlciBvZiB0aW1lcyBlYWNoIHRvcnR1cmUgd29ya2VyIGxvb3BzXG4rSVRFUkFUSU9OUz0kezE6LTIwMH1cbitcbisjIEtleXMgb3duZWQgYnkgZWFjaCB0b3J0dXJlIHdvcmtlci4gV29ya2VycyBkbyBub3Qgc2hhcmUga2V5cywgc28gYSBmYWlsaW5nXG4rIyBjb25maWdmcyBvcGVyYXRpb24gbWVhbnMgYSByZWFsIHByb2JsZW0gYW5kIG5vdCBhIGxvc3QgcmFjZS5cbitDSFVSTl9LRVk9XCJjaHVybmtleVwiXG4rVFJBTlNJRU5UX0tFWT1cInRyYW5zaWVudGtleVwiXG4rIyBOdW1iZXIgb2Yga2V5cyB1c2VkIHRvIHB1c2ggYSBtZXNzYWdlIHBhc3QgTUFYX1BSSU5UX0NIVU5LXG4rQlVMS19LRVlTPThcbitcbitVU0VSREFUQV9ESVI9XCIke05FVENPTlNfUEFUSH0vdXNlcmRhdGFcIlxuKyMgVmFsdWVzIGFyZSBjYXBwZWQgYXQgTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4oMjAwKSBieXRlcywgc28gJHtCVUxLX0tFWVN9XG4rIyBlbnRyaWVzIG9mIHRoaXMgc2l6ZSBhcmUgZW5vdWdoIHRvIGZvcmNlIGZyYWdtZW50YXRpb25cbitMT05HX1ZBTFVFPSQocHJpbnRmIC0tICd2JS4wcycgezEuLjE5MH0pXG4rXG4rZnVuY3Rpb24gd3JpdGVfa2V5KCkge1xuK1x0bG9jYWwgS0VZPVwiJHsxfVwiXG4rXHRsb2NhbCBWQUxVRT1cIiR7Mn1cIlxuK1xuK1x0bWtkaXIgLXAgXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9XCJcbitcdGVjaG8gXCIke1ZBTFVFfVwiIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke0tFWX0vdmFsdWVcIlxuK31cbitcbisjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlXG4rZnVuY3Rpb24gc2VuZF9hbmRfY2FwdHVyZSgpIHtcbitcdHJtIC1mIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuK1x0bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCIke09VVFBVVF9GSUxFfVwiIFx1MDAyNlxuK1x0d2FpdF9mb3JfcG9ydCBcIiR7TkFNRVNQQUNFfVwiIFwiJHtQT1JUfVwiIFwiJHtJUF9WRVJTSU9OfVwiXG4rXHRlY2hvIFwiJHtNU0d9OiAke1RBUkdFVH1cIiBcdTAwM2UgL2Rldi9rbXNnXG4rXHRidXN5d2FpdCBcIiR7QlVTWVdBSVRfVElNRU9VVH1cIiB0ZXN0IC1zIFwiJHtPVVRQVVRfRklMRX1cIiB8fCB0cnVlXG4rXHRwa2lsbF9zb2NhdFxuK1x0dmFsaWRhdGVfbXNnIFwiJHtPVVRQVVRfRklMRX1cIlxuK31cbitcbitmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkge1xuK1x0bG9jYWwgV0FOVEVEPVwiJHsxfVwiXG4rXG4rXHRpZiAhIGdyZXAgLXEgLS0gXCIke1dBTlRFRH1cIiBcIiR7T1VUUFVUX0ZJTEV9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICcke1dBTlRFRH0nIG5vdCBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0Y2F0IFwiJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gZXhwZWN0X25vdF9pbl9tc2coKSB7XG4rXHRsb2NhbCBVTldBTlRFRD1cIiR7MX1cIlxuK1xuK1x0aWYgZ3JlcCAtcSAtLSBcIiR7VU5XQU5URUR9XCIgXCIke09VVFBVVF9GSUxFfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiAnJHtVTldBTlRFRH0nIGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjIEV2ZXJ5IHdyaXRlIHB1Ymxpc2hlcyBhIG5ldyBwYXlsb2FkIGFuZCBmcmVlcyB0aGUgcHJldmlvdXMgb25lLiBBbiBlbXB0eVxuKyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGVcbisjIHRhcmdldCB0aHJvdWdoIGhhdmluZyBubyBwYXlsb2FkIGF0IGFsbC5cbitmdW5jdGlvbiBjaHVybl92YWx1ZSgpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtJVEVSQVRJT05TfVwiKVxuK1x0ZG9cbitcdFx0ZWNobyBcInZhbHVlJHtpfVwiIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcIlxuK1x0XHRlY2hvIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcIlxuK1x0ZG9uZVxuK31cbitcbisjIENyZWF0ZSBhbmQgZGVsZXRlIGEga2V5IHVuZGVybmVhdGggdGhlIHNlbmRlclxuK2Z1bmN0aW9uIGNodXJuX2tleSgpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtJVEVSQVRJT05TfVwiKVxuK1x0ZG9cbitcdFx0bWtkaXIgXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwiXG4rXHRcdGVjaG8gXCJ0cmFuc2llbnQke2l9XCIgXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0vdmFsdWVcIlxuK1x0XHRybWRpciBcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9XCJcbitcdGRvbmVcbit9XG4rXG4rIyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWRcbitmdW5jdGlvbiBzZW5kX21lc3NhZ2VzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0lURVJBVElPTlN9XCIpXG4rXHRkb1xuK1x0XHRlY2hvIFwiJHtNU0d9OiAke1RBUkdFVH0gJHtpfVwiIFx1MDAzZSAvZGV2L2ttc2dcbitcdGRvbmVcbit9XG4rXG4rIyBSdW4gdGhlIHdvcmtlcnMgY29uY3VycmVudGx5IGFuZCBmYWlsIGlmIGFueSBvZiB0aGVtIGhpdHMgYW4gZXJyb3JcbitmdW5jdGlvbiBydW5fd29ya2VycygpIHtcbitcdGxvY2FsIFBJRFM9KClcbitcdGxvY2FsIFdPUktFUlxuK1x0bG9jYWwgUkVUPTBcbitcdGxvY2FsIFBJRFxuK1xuK1x0Zm9yIFdPUktFUiBpbiBcIiRAXCJcbitcdGRvXG4rXHRcdFwiJHtXT1JLRVJ9XCIgXHUwMDI2XG4rXHRcdFBJRFMrPShcIiQhXCIpXG4rXHRkb25lXG4rXG4rXHQjIFJlYXAgZXZlcnkgd29ya2VyIGJlZm9yZSByZXBvcnRpbmcgYSBmYWlsdXJlLCBvdGhlcndpc2UgYSBzdXJ2aXZpbmdcbitcdCMgd29ya2VyIGtlZXBzIHdyaXRpbmcgdG8gY29uZmlnZnMgd2hpbGUgdGhlIGV4aXQgdHJhcCBjbGVhbnMgaXQgdXAuXG4rXHRmb3IgUElEIGluIFwiJHtQSURTW0BdfVwiXG4rXHRkb1xuK1x0XHR3YWl0IFwiJHtQSUR9XCIgfHwgUkVUPTFcbitcdGRvbmVcbitcbitcdGlmIFtbIFwiJHtSRVR9XCIgLW5lIDAgXV1cbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZFwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbitmdW5jdGlvbiBjcmVhdGVfYnVsa19rZXlzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0JVTEtfS0VZU31cIilcbitcdGRvXG4rXHRcdHdyaXRlX2tleSBcImJ1bGske2l9XCIgXCIke0xPTkdfVkFMVUV9XCJcbitcdGRvbmVcbit9XG4rXG4rZnVuY3Rpb24gZGVsZXRlX2J1bGtfa2V5cygpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtCVUxLX0tFWVN9XCIpXG4rXHRkb1xuK1x0XHRybWRpciBcIiR7VVNFUkRBVEFfRElSfS9idWxrJHtpfVwiXG4rXHRkb25lXG4rfVxuK1xuKyMgPT09PT09PT09PSAjXG4rIyBTdGFydCBoZXJlICNcbisjID09PT09PT09PT0gI1xuK1xuK21vZHByb2JlIG5ldGRldnNpbSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4rbW9kcHJvYmUgbmV0Y29uc29sZSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4rXG4rSVBfVkVSU0lPTj1cImlwdjRcIlxuKyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxuK09VVFBVVF9GSUxFPVwiL3RtcC8ke1RBUkdFVH1cIlxuK1xuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbisjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSlcbitlY2hvIFwiNiA1XCIgXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrXG4rIyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxuK3RyYXAgY2xlYW51cCBFWElUXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcbitzZXRfbmV0d29yayBcIiR7SVBfVkVSU0lPTn1cIlxuKyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbitjcmVhdGVfZHluYW1pY190YXJnZXRcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjMVxuKyMgQSB2YWx1ZSB3cml0dGVuIHRvIGNvbmZpZ2ZzIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke1VTRVJEQVRBX0tFWX1cIiBcImZpcnN0XCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1maXJzdFwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzJcbisjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtVU0VSREFUQV9LRVl9XCIgXCJzZWNvbmRcIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PXNlY29uZFwiXG4rZXhwZWN0X25vdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09Zmlyc3RcIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICMzXG4rIyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5XG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitlY2hvIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0vdmFsdWVcIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3Rfbm90X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1cIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICM0XG4rIyBSZW1vdmluZyB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeVxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtVU0VSREFUQV9LRVl9XCIgXCJ0aGlyZFwiXG4rcm1kaXIgXCIke1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9XCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X25vdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09XCJcbitybSBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjNVxuKyMgVG9ydHVyZSB0aGUgcGF5bG9hZCB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCxcbisjIGZpcnN0IHVuZnJhZ21lbnRlZCBhbmQgdGhlbiBmcmFnbWVudGVkXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke0NIVVJOX0tFWX1cIiBcIiR7VVNFUkRBVEFfVkFMVUV9XCJcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuK1xuK2NyZWF0ZV9idWxrX2tleXNcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuK2RlbGV0ZV9idWxrX2tleXNcbitcbitleGl0IFwiJHtrc2Z0X3Bhc3N9XCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjI3Ljg4NTg1Nzg0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNTI5MjcxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgYW5kIGFkZHMgYSBzZWxmLXRlc3QsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgaWYgdGhvc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGF0dGFjayBzdXJmYWNlcyBvciBtb2RpZnkgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBpbiBhIHdheSB0aGF04oCZcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIG5vdCBqdXN0IGEgcmVmYWN0b3Jpbmcgb3IgY2xlYW51cC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIGFuZCwgbW9yZSBzaWduaWZpY2FudGx5LCBjb252ZXJ0cyB0aGUgYHVzZXJkYXRhYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgdG8gYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgaGFuZGxlcyBpdHMgdXNlciBkYXRhLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIHJhY2UgY29uZGl0aW9uIHZ1bG5lcmFiaWxpdGllcywgYW5kIHRodXMsIGZ1enppbmcgaXMgYSBzdHJvbmcgY29uc2lkZXJhdGlvbi5cblxuTG9va2luZyBkZWVwZXIsIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB1cGRhdGVfdXNlcmRhdGFgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYC4gSXQgc2VlbXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgaW52b2x2ZWQgaW4gc2VuZGluZyBhbmQgbWFuYWdpbmcgdGhlIG5ldGNvbnNvbGUgbWVzc2FnZXMuIFRoZSBtb3N0IGludGVyZXN0aW5nIGZ1bmN0aW9uIGlzIGBzZW5kX2V4dF9tc2dfdWRwYCwgYXMgaXQgbm93IGluY2x1ZGVzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLiBJdCdzIGNsZWFyIHRoYXQgaXQgaXMgYmVpbmcgZ3VhcmRlZCB3aXRoIFJDVSBwcm90ZWN0aW9uLiBUaGlzIGlzIHRoZSBhcmVhIG9mIGludGVyZXN0LlxuXG5UaGUgZmFjdCB0aGF0IGBuZXRjb25zb2xlYCBpcyBhIG5ldHdvcmsgY29uc29sZSBkcml2ZXIgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgY29uZmlnZnMgZnVydGhlciBpbmNyZWFzZXMgaXRzIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSwgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIFJDVSBwcm90ZWN0aW9uIG9mIHVzZXJkYXRhLiBUaHVzLCBhbnkgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyB3aGF0IEkgd2lsbCBuZWVkIHRvIGJlIGZvY3VzZWQgb24uXG5cbk5vdyBJIG5lZWQgdG8gcmVmaW5lIHRoZSBmb2N1cy4gSSBzZWUgdGhhdCB0aGUgYHVwZGF0ZV91c2VyZGF0YWAgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYCBhcmUgc3RhdGljLiBJIGtub3cgdGhhdCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgY2FsbGVkIGZyb20gYHdyaXRlX2V4dF9tc2dgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2V4dF93cml0ZWAuIFRoZXNlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtIGFyZSBpbXBvcnRhbnQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGZpbGUgdG8gc2VlIGhvdyBleGFjdGx5IHRoZXNlIGFyZSBiZWluZyBjYWxsZWQuIFRoYXQgd2lsbCBiZSB0aGUga2V5IHRvIGRlc2lnbmluZyBlZmZlY3RpdmUgZnV6emluZyBjYW1wYWlnbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NTozNi4xMzg3ODcyNDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMjAxNjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVfZXh0X3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MzYuMTk3MTEzNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2OTQzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgc2VuZF9leHRfbXNnX3VkcGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgc2VuZF9leHRfbXNnX3VkcGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHNlbmRpbmcgc29tZSBraW5kIG9mIGV4dGVybmFsIG1lc3NhZ2Ugb3ZlciBVRFAuIFRoZSBcImV4dFwiIHBhcnQgc3VnZ2VzdHMgaXQncyBub3QgaW50ZXJuYWwgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyBvciBtb2R1bGUg4oCTIGl0J3MgZ29pbmcgKm91dCogc29tZXdoZXJlLiBVRFAgaW1wbGllcyBhIGNvbm5lY3Rpb25sZXNzLCBkYXRhZ3JhbS1iYXNlZCBwcm90b2NvbCwgd2hpY2ggZ2l2ZXMgdXMgc29tZSBpbml0aWFsIGFzc3VtcHRpb25zIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNvbW11bmljYXRpb246IHBvdGVudGlhbGx5IHVucmVsaWFibGUsIGZvY3VzZWQgb24gc3BlZWQsIGFuZCBsaWtlbHkgaGFuZGxpbmcgaW5kaXZpZHVhbCBwYWNrZXRzIG9mIGRhdGEuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBpbiB0aGVzZSBtZXNzYWdlcywgd2hlcmUgdGhleSdyZSBiZWluZyBzZW50LCBhbmQgd2h5IHRoaXMgbWV0aG9kIGlzIHRoZSBvbmUgY2hvc2VuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBkZWVwZXIgYW5kIGZpbmQgc29tZSByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIGNvbnRleHQuIEknbGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBhbmQgZG9jdW1lbnRhdGlvbiBhcm91bmQgdGhpcyBtZXRob2QgdG8gc2VlIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgY2FsbGVkLCBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW50ZW5kZWQgZGVzdGluYXRpb24gYW5kIHB1cnBvc2Ugb2YgdGhlIGNvbW11bmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NTo0MC4wOTQwNjAxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0OTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX2V4dF9tc2dfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM3ND1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQxMS0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQxMjogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQxMy0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDE5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDIwOnN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDczPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXFx0XFx0aWYgKGV4dGVuZGVkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDkzOlxcdFxcdFxcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjQwLjE0MjkxODkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjEwMTUzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldGNvbnNvbGVfd3JpdGVgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYG5ldGNvbnNvbGVfd3JpdGVgLCB3aGljaCBJIHJlY29nbml6ZSBhcyB0aGUgZW50cnkgcG9pbnQuIE5vdywgdG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGFsbCB0aGUgbG9jYXRpb25zIHdpdGhpbiB0aGUgY29kZWJhc2Ugd2hlcmUgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIGFjdHVhbGx5IGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MzUuNzUzMDc2NjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODYwNjgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ1Mj1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0Njc6ICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDY4LSAqIEB3Y3R4dDogbmJjb24gd3JpdGUgY29udGV4dFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzItICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NzM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDItXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMy17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDQ6XFx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDUtfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTA2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTA3OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTA5LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUxMDpcXHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2OTc9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTktXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwMDpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDE6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzAyLVxcdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjcwNj1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzA4LVxcdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDk6XFx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MTA6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MTEtXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MzYuMTAxNjg3NjU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MzIzODMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbnNvbGUgV3JpdGUgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBUaG9zZSBzZWVtIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IHRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIHNlbmRpbmcgY29uc29sZSBvdXRwdXQgYWNyb3NzIHRoZSBuZXR3b3JrLiBCdXQgd2hhdCBhYm91dCBgdXBkYXRlX3VzZXJkYXRhYD8gTm93LCB0aGF0IG5hbWUuLi4gaXQncyBiZWdnaW5nIHRoZSBxdWVzdGlvbiwgd2hhdCB1c2VyIGRhdGEgaXMgdGhhdCBldmVuIHJlZmVycmluZyB0bz8gSXMgdGhpcyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiB1cGRhdGUgcmVsYXRlZCB0byB0aGUgbmV0d29yayBjb25zb2xlIGl0c2VsZj8gSXMgaXQgYSB3YXkgdG8gdXBkYXRlIHRoZSB1c2VyIGNvbmZpZywgcGVyaGFwcyB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGRhdGEgdGhlIGNvbnNvbGUgc2VuZHMgb3IgZG9lc24ndD8gT3IgaXMgaXQgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIGRlZmluaXRlbHkgZGlnIGRlZXBlciBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyB0aHJvd2luZyBtZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LiBJdCBjb3VsZCBiZSBjcml0aWNhbCB0byBob3cgd2UgbWFuYWdlIG9yIGN1c3RvbWl6ZSB0aGUgZGF0YSB0aGF0J3MgYmVpbmcgc2VudCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjozOS41OTQ5MjgxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzAzOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV91c2VyZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNDY9c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNjU6c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQxMz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyNi1cXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDI3OlxcdC8qIFNuYXBzaG90IGZvciByb2xsYmFjayBpZiB1cGRhdGVfdXNlcmRhdGEoKSBmYWlscyBiZWxvdyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI4LVxcdHN0cnNjcHkob2xkX3ZhbHVlLCB1ZG0tXFx1MDAzZXZhbHVlLCBzaXplb2Yob2xkX3ZhbHVlKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzNC1cXHRudCA9IHVzZXJkYXRhX3RvX3RhcmdldCh1ZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MzU6XFx0cmV0ID0gdXBkYXRlX3VzZXJkYXRhKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzNi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mjk9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjM3LVxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Mzg6XFx0dXBkYXRlX3VzZXJkYXRhKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzOS1cXHRjb25maWdfaXRlbV9wdXQoaXRlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjM5LjY5NjYzNzU2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk1OTE2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ0ZTIENhbGxiYWNrcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgYHVwZGF0ZV91c2VyZGF0YWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEkgc2VlIHRoYXQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB0d28ga2V5IHBsYWNlczogYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIFRob3NlIG5hbWVzIHJpbmcgYSBiZWxsLi4uIHllcywgdGhleSdyZSBjb25maWdmcyBjYWxsYmFja3MuIFRoYXQgdHJpZ2dlcnMgYSBsaW5lIG9mIGlucXVpcnkuIE5vdyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ2ZzIG9wZXJhdGlvbnMgYXQgcGxheSBoZXJlLiBMZXQgbWUgdHJhY2UgYmFjayB0byB0aGUgYWN0dWFsIGNvbmZpZ2ZzIGltcGxlbWVudGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY2FsbGJhY2tzLiBXaGVyZSBhcmUgdGhlIGNvbmZpZ2ZzIG9wZXJhdGlvbiBkZWZpbml0aW9ucz8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYHVwZGF0ZV91c2VyZGF0YWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6NDMuMjkyNTU2NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODg0OTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzY1PXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQxMzpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTQtXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjQzLjQwMTQxMjk4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQyMDA3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXZlcnl3aGVyZSB0aGlzIHZhcmlhYmxlIG9yIGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCBtb2RpZmllZC4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb2NhdGUgYWxsIGluc3RhbmNlcyB3aGVyZSBpdCdzIGJlaW5nIHJlYWQgZnJvbSwgd3JpdHRlbiB0bywgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LCBvciBwb3RlbnRpYWxseSBpbml0aWFsaXplZC4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGxpZmVjeWNsZSBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzLCBvcHRpbWl6YXRpb25zLCBvciBhcmVhcyBmb3IgcmVmYWN0b3JpbmcgaWYgbmVlZGVkLiBMZXQncyBzZWUgd2hhdCB0aGUgSURFJ3Mgc2VhcmNoIGZ1bmN0aW9uIHVuY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjQ3LjI0MzQyNDU0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0MjYwMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmRhdHVtX3ZhbHVlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM2NT1zdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MTM6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE0LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo0Ny4zMDc4NTcxODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5ODYwNzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czpcblxuKipVbnZlaWxpbmcgdGhlIFVzYWdlKipcblxuSG1tLCBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIHRoaXMgc3BlY2lmaWMgZWxlbWVudCBvciBmdW5jdGlvbiBpbiB1c2UuIEkgd2FzIGxvb2tpbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgSSBkb24ndCBzZWUgYW55IGRpcmVjdCBjYWxscyB0byBpdC4gKk9kZC4qIFBlcmhhcHMgaXQncyBub3QgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgYXQgYWxsLCBhbmQgaXQncyBkZWFkIGNvZGUuIFdhaXQsIGhvbGQgb24uLi4gY291bGQgaXQgYmUgaGlkZGVuIGF3YXkgaW4gYSBtYWNybyBkZWZpbml0aW9uIHNvbWV3aGVyZT8gVGhhdCdzIGEgY2xhc3NpYyB0cmljay4gSXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGNhbGxlZCBidXQgaW5kaXJlY3RseSBpbnZva2VkIHRocm91Z2ggYSBtb3JlIGNvbXBsZXggbWFjcm8gZXhwYW5zaW9uLiBOZWVkIHRvIGNoZWNrIHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjUwLjgwNjQ2NjU2OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2OTM2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHRlNfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1NDc9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MDpDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODI6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgdGFza25hbWVfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODM6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgcmVsZWFzZV9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NDpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NjItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY0OkNPTkZJR0ZTX0FUVFIoLCBleHRlbmRlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjU6Q09ORklHRlNfQVRUUigsIGRldl9uYW1lKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Njc6Q09ORklHRlNfQVRUUigsIHJlbW90ZV9wb3J0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2ODpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY5OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjcwOkNPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjcxOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MjpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzM6Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjUwLjkwMjE2NDcwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzY2Mzc2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRjb25zb2xlIENvbmZpZ0ZTIEludGVyYWN0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtgIGRlZmluaXRlbHkgY3JlYXRlcyBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29uZmlnZnMgb3BlcmF0aW9ucyBvbiBuZXRjb25zb2xlIHVzZXJkYXRhLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICpyZWFjaCogbmV0Y29uc29sZSB0aHJvdWdoIGNvbmZpZ2ZzP1xuXG5CYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIHllcywgaXQgKnNob3VsZCogYmUgYWJsZSB0byBtb3VudCBjb25maWdmcyBhbmQgaW50ZXJhY3Qgd2l0aCBpdC4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkIGlzIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IHRoYXQgb3B0aW9uIGV4aXN0cyBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zIHRvIGVuc3VyZSBzeXprYWxsZXIgY2FuIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBzcGVjaWZpYyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjU1LjY2ODU0NDA1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2ODYwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo1NS43MjcyMzY3ODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MTA3NzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgbGluZSBvZiB0aGlua2luZywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2AqKlxuXG5BbHJpZ2h0LCBzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyB0aGUga2V5IHRoaW5nIEknbSBmb2N1c2luZyBvbiByaWdodCBub3cuIEl0J3MgdGltZSB0byBtYXAgaXRzIGRlcGVuZGVuY2llcy4gVGhhdCBzZWVtaW5nbHkgaW5ub2NlbnQgdmFyaWFibGUgY291bGQgYmUgYSBsaW5jaHBpbiBpbiBzb21lIGNvbXBsZXggY29uZmlndXJhdGlvbiBzY2hlbWUsIG9yIG1heWJlIGl0J3Mgc3VycHJpc2luZ2x5IHNpbXBsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyAqZW5hYmxlKiBpdCwgYW5kIHdoYXQgaXQgKmVuYWJsZXMqIGluIHR1cm4uIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlLCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBwb3NpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo1OS4zNjgzMTY4NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNDc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuIDM0ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6NTkuMzY4NDI1NTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NDQxNjA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGNvbnNvbGUgYW5kIFVzZXJkYXRhIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBORVRDT05TT0xFX0RZTkFNSUNgIHJlbGllcyBvbiBgTkVUQ09OU09MRWAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGVuYWJsZSBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBhbmFseXNpcy5cblxuSW5pdGlhbGx5LCBgdXBkYXRlX3VzZXJkYXRhYCBzZWVtZWQgbGlrZSBhIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcgYmVjYXVzZSBpdCdzIHN0YXRpYy4gSG93ZXZlciwgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBvciBjYWxsZWQgYnkgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTG9va2luZyBkZWVwZXIsIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgIHRoZW1zZWx2ZXMgYXJlIHN0YXRpYyBidXQgYXJlIHRpZWQgdG8gYENPTkZJR0ZTX0FUVFJgIGFuZCBhcmUgdXNlZCBpbiBgdXNlcmRhdHVtX2F0dHJfdmFsdWVgLCBtZWFuaW5nIHRoZXkncmUgbm90IGlubGluZWQuIEhlbmNlLCBJJ2xsIGZvY3VzIG9uIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLlxuXG5PbiB0aGUgdHJhbnNtaXNzaW9uIHNpZGUsIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyBjYWxsZWQgZnJvbSBgbmV0Y29uc29sZV93cml0ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0YCwgc28gaXQncyBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLiAgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGlzIGRlZmluaXRlbHkgbm90IGlubGluZWQuICBgbmV0Y29uc29sZV93cml0ZWAgKm1pZ2h0KiBiZSBpbmxpbmVkLCBhcyBjb3VsZCBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYW5kIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYC5cblxuSSB3YXMgY29uc2lkZXJpbmcgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhcyBhIGdvb2QgZm9jdXMgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCdzIGEgY29uc29sZSB3cml0ZSBjYWxsYmFjaywgc28gaXQgY291bGQgYmUgaW4gYSBob3QgcGF0aCwgZGVwZW5kaW5nIG9uIGhvdyBmcmVxdWVudGx5IHByaW50a3MgYXJlIGhhcHBlbmluZy4gSG93ZXZlciwgc2luY2UgdGhlIGdvYWwgaXMgdG8gZXhhbWluZSB0aGUgdXNlcmRhdGEgUkNVIGNoYW5nZXMsIHRoZSByZWxldmFudCBjb2RlIGlzIHNwbGl0IGJldHdlZW4gYHVwZGF0ZV91c2VyZGF0YWAgKGNvbmZpZ2ZzIHNpZGUpIGFuZCBgc2VuZF9leHRfbXNnX3VkcGAgKGNvbnNvbGUgd3JpdGUgc2lkZSkuXG5cblRoZXJlZm9yZSwgZm9jdXNpbmcgb24gYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAgY292ZXJzIHRoZSBjb25maWdmcyBhc3BlY3Qgb2YgdGhpcyBhbmFseXNpcy4gRm9yIHRoZSB0cmFuc21pdCBwYXRoLCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGJlY2F1c2UgYHNlbmRfZXh0X21zZ191ZHBgIGlzIHN0YXRpYywgcG90ZW50aWFsbHkgaW5saW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlIG5vdCBzdGF0aWMgc28gdGhhdCBpbmxpbmluZyBpcyBub3QgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjA5LjMxMjU5MjI1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NzA2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNjU9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDEyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDEzOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxNC1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MDkuNTk5MzAzODk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODY4NjE2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuXG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIFBvaW50ZXIgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBhYm91dCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBCdXQsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBiZWluZyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgcHJvYmFibHkgd29uJ3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHNvIHRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiB0byBrZWVwIGluIG1pbmQgZm9yIHBlcmZvcm1hbmNlLiBOb3csIEknbGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGB1c2VyZGF0dW1fZHJvcGAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MTMuODg2MTY3OTM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQ2MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fZHJvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MDY9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjI4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjI5OnN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Mi1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUzOlxcdC5kcm9wX2l0ZW1cXHRcXHQ9IHVzZXJkYXR1bV9kcm9wLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjEzLjk1NDYzNTAzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODMyNDI1OTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmN1cnJlbmN5IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHVzZXJkYXR1bV9kcm9wYCBpcyBkZWZpbml0ZWx5IHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtYWtlcyBpdCBhbiBpbnRlcmVzdGluZyBzeW1ib2wgdG8gZm9jdXMgb24uIFRoZW4gdGhlcmUncyBgdXNlcmRhdHVtX21ha2VfaXRlbWAsIHdoaWNoIGFsc28gc2VlbXMgdG8gaGF2ZSB0aGUgc2FtZSB1c2FnZSBwYXR0ZXJuLiBHb3QgaXQuIFRoZXNlIGFyZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBzZW5kX2V4dF9tc2dfdWRwYC4gSSdtIGN1cmlvdXMgaWYgaXQncyBpbmxpbmVkLiBOb3BlLCBpdCdzIHN0YXRpYywgYW5kIGl0J3MgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBgbmV0Y29uc29sZV93cml0ZWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGEgZnVuY3Rpb24gcG9pbnRlci4gTGV0J3MgYWRkIHRoYXQgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgYWxvbmcgd2l0aCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIEhvbGQgb24sIHRob3VnaC4uLiBsb29rcyBsaWtlIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCAqZG9lc24ndCogY2FsbCBgc2VuZF9leHRfbXNnX3VkcGAgZGlyZWN0bHk7IGl0IGNhbGxzIGBzZW5kX21zZ191ZHBgIGluc3RlYWQuIEJ1dCBgbmV0Y29uc29sZV93cml0ZV9leHRgICpkb2VzKiBjYWxsIGBuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCB0cnVlKWAgd2hpY2ggdGhlbiBjYWxscyBgc2VuZF9leHRfbXNnX3VkcGAuIFRoZXJlZm9yZSwgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC5cblxuT2theSwgbGV0J3MgcmVjYXAgd2hhdCB3ZSd2ZSBnb3QuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYHVwZGF0ZV91c2VyZGF0YWAgdG8gdXNlIGByY3VfcmVwbGFjZV9wb2ludGVyYCBhbmQgYGtmcmVlX3JjdWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgY29uY3VycmVudCBhY2Nlc3MuIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyB1cGRhdGVkIHRvIHVzZSBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfZGVyZWZlcmVuY2VgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiB0aGUgZnVuY3Rpb25zIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgYHNlbmRfZnJhZ21lbnRlZF9ib2R5YCwgYW5kIGBzZW5kX21zZ19mcmFnbWVudGVkYCBhcmUgbW9kaWZpZWQgdG8gdGFrZSBgdXNlcmRhdGFgIGFzIGFuIGFyZ3VtZW50LCBhbmQgdGhhdCdzIGxpa2VseSBhIGNvbnNlcXVlbmNlIG9mIHRoZSBjb25jdXJyZW5jeSBjaGFuZ2VzLiBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAgYW5kIGBmcmVlX3BhcmFtX3RhcmdldGAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgcmN1X2FjY2Vzc19wb2ludGVyYC5cblxuU28gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCAqYW5kKiBhcmUgKm5vdCogaW5saW5lZCAoYmVjYXVzZSB0aGV5IGFyZSBlaXRoZXIgZnVuY3Rpb24gcG9pbnRlcnMgb3IgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBwb3RlbnRpYWxseSB1c2VkIGV4dGVybmFsbHkpOlxuIC0gYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWBcbiAtIGB1c2VyZGF0dW1fZHJvcGBcbiAtIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYFxuIC0gYGZyZWVfcGFyYW1fdGFyZ2V0YFxuIC0gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YFxuXG5XYWl0Li4uIGBmcmVlX3BhcmFtX3RhcmdldGAgaXMgc3RhdGljLiBHb3R0YSBzZWUgd2hlcmUgdGhhdCdzIGFjdHVhbGx5ICp1c2VkKi4uLiBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjMyLjI3ODg5ODc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA2OTA3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJlZV9wYXJhbV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODQtLyogQ2xlYW51cCBuZXRwb2xsIGZvciBnaXZlbiB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBmcmVlIGl0ICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODU6c3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjcxNT1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzg2LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZudC1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3ODc6XFx0XFx0ZnJlZV9wYXJhbV90YXJnZXQobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzg4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzk2PXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODE3LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZudC1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4MTg6XFx0XFx0ZnJlZV9wYXJhbV90YXJnZXQobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODE5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MzIuMzg5NTkzODM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTY5MDcyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgVGFyZ2V0IFN5bWJvbHMgZm9yIFBvdGVudGlhbCBPcHRpbWl6YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgdGFyZ2V0IHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBmcmVlX3BhcmFtX3RhcmdldGAuIFRoZSBmYWN0IHRoYXQgaXQncyAqb25seSogdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBhIHJlZCBmbGFnLiBJdCdzIG5vdCBhIHBhcnRpY3VsYXJseSBhY3RpdmUgcG9pbnQgaW4gdGhlIHN5c3RlbSdzIHJ1bnRpbWUsIG1ha2luZyBpdCBhIHBvb3IgY2hvaWNlIGZvciBhbnkga2luZCBvZiBwZXJmb3JtYW5jZS1jcml0aWNhbCBwcm9maWxpbmcgb3IgZm9jdXNpbmcgZWZmb3J0cy4gSXQganVzdCBpc24ndCBhIGdvb2QgZm9jdXMgc3ltYm9sLCBhdCBsZWFzdCBub3QgaW4gYW55IHRyYWRpdGlvbmFsIHBlcmZvcm1hbmNlIHNlbnNlLiBJdCdzIHRvbyBsaW1pdGVkIGluIHNjb3BlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdXNlIGEgc3ltYm9sIGZvciBtZWFzdXJlbWVudCBtb3JlIG9mdGVuLlxuXG5JbnN0ZWFkIG9mIHRoaXMgbGltaXRlZCBmb2N1cywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBnbyBleGFtaW5lIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCBtb3JlIGNsb3NlbHkuIE1heWJlIHRoYXQgb25lJ3MgZ290IGEgYmV0dGVyIHByb2ZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6NDUuNTU4NjY5ODM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzYzMjI0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzU9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY5NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMzpcXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Nzo0NS44OTQ5OTc0NzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5MDk3MzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipEaXNzZWN0aW5nIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAqKlxuXG5Pa2F5LCBzbyBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAuLi4gdGhhdCdzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGZvciBjb25maWdmcy4gU2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgZm9jdXNlZCBzeW1ib2wuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoYXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXQncyBkZWZpbmVkIHVzaW5nIGBDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUgYmVoaW5kIHRoYXQgbWFjcm8gKnNob3VsZCogYmUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAsIGJ1dCBpdCdzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR0ZTX0FUVFJgIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBOZWVkIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoYXQgbWFjcm8gZXhwYW5kcyB0byBhdm9pZCBhbnkgbWlzdW5kZXJzdGFuZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6NTAuMjg1OTczMzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY4MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQ09ORklHRlNfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jb25maWdmcy5oPTExNT1zdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjItXFxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEyMzojZGVmaW5lIENPTkZJR0ZTX0FUVFJfUEVSTShfcGZ4LCBfbmFtZSwgX3Blcm0pXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjQtc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1xcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMzEtXFxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEzMjojZGVmaW5lIENPTkZJR0ZTX0FUVFIoX3BmeCwgX25hbWUpIENPTkZJR0ZTX0FUVFJfUEVSTShcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oLTEzMy1cXHRcXHRfcGZ4LCBfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1JcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTM1LVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaDoxMzY6I2RlZmluZSBDT05GSUdGU19BVFRSX1JPKF9wZngsIF9uYW1lKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTM3LXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIF9wZngjI2F0dHJfIyNfbmFtZSA9IHtcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTQzLVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaDoxNDQ6I2RlZmluZSBDT05GSUdGU19BVFRSX1dPKF9wZngsIF9uYW1lKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTQ1LXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIF9wZngjI2F0dHJfIyNfbmFtZSA9IHtcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjUwLjM5MTY1OTk5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NDk1OTM4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0Y29uc29sZSBNb2R1bGUgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGBuZXRjb25zb2xlYCBtb2R1bGUncyBpbXBsZW1lbnRhdGlvbi4gRmlyc3QsIEkgc2VlIHRoYXQgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYCBpcyBjcmVhdGluZyBhIGB1c2VyZGF0dW1fYXR0cl92YWx1ZWAgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjb25maXJtZWQgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBpcyBleHBsaWNpdGx5IGRlZmluZWQgaW4gYG5ldGNvbnNvbGUuY2Ag4oCTIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbXkgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgYHN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KWAgaXMgdGhlIHNpZ25hdHVyZS5cblxuTXkgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gaW5pdGlhbCByZXZpZXcsIGFyZSBsb29raW5nIGxpa2U6XG5cbiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYFxuKiAgIGB1c2VyZGF0dW1fZHJvcGBcbiogICBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWBcbiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGB1cGRhdGVfdXNlcmRhdGFgLiBJdCdzIG1hcmtlZCBgc3RhdGljYCwgd2hpY2ggb2Z0ZW4gbWVhbnMgaXQncyBhIGNyaXRpY2FsIGludGVybmFsIGZ1bmN0aW9uLiBJIGhhdmUgdG8gc2VlIGlmIGl0J3MgaW5saW5lZC4gSSBjaGVja2VkIGl0cyBjb2RlOyBpdCdzIGFyb3VuZCA0MCBsaW5lcywgaW5jbHVkZXMgYWxsb2NhdGlvbnMsIGFuZCBsb29wcywgd2hpY2ggbWFrZXMgaXQgdW5saWtlbHkgdG8gYmUgaW5saW5lZCwgZXNwZWNpYWxseSBzaW5jZSBpdCdzIGNhbGxlZCBmcm9tIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zIChgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCkuIFNvIEknbSBhZGRpbmcgYHVwZGF0ZV91c2VyZGF0YWAgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBwcm92aXNpb25hbGx5LCBqdXN0IHRvIGJlIHNhZmUuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgYmUga2V5LCBmb3IgaW5zdGFuY2UsIGBzZW5kX2V4dF9tc2dfdWRwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBJdCdzIGFib3V0IDI1IGxpbmVzLiBNYXliZSBpdCdzIGlubGluZWQuIEkgYWxzbyBsb29rZWQgYXQgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgIGFuZCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGVhY2ggYWJvdXQgMzAgYW5kIDI1IGxpbmVzIHJlc3BlY3RpdmVseS5cblxuRm9yIG5vdywgSSdtIGdvaW5nIHdpdGggdGhlc2Ugbm9uLXN0YXRpYy9mdW5jdGlvbiBwb2ludGVyIG9uZXM6XG5cbiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYFxuKiAgIGB1c2VyZGF0dW1fZHJvcGBcbiogICBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWBcbiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgXG5hbmQgdGhlIHBvdGVudGlhbGx5IGtleSBgdXBkYXRlX3VzZXJkYXRhYC5cblxuTGV0IG1lIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBub3cuIEknbSBmb2N1c2luZyBvbiB0aGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdGU19GU2Agb3B0aW9ucy4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaG93IGBDT05GSUdGU19GU2AgcmVsYXRlcyB0byBgTkVUQ09OU09MRV9EWU5BTUlDYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6NTkuMjQxMjU3MTQxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjI4NTY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjU5LjMwNzU0ODE4NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY4MzYzNDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmUtRXhhbWluaW5nIHRoZSBGb3VuZGF0aW9uOiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgcHJvYmxlbSBvciBzb2x1dGlvbiwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHJldmlzaXQgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBlYXN5IHRvIGdldCBjYXVnaHQgdXAgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGltbWVkaWF0ZSB0YXNrIGF0IGhhbmQsIGJ1dCBhIHNvbGlkIGdyYXNwIG9mIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgaXMgcGFyYW1vdW50LiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoZXNlIGRlcGVuZGVuY2llcyBmb3IgYSB3aGlsZSwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgZnJlc2ggbG9vaywgZXNwZWNpYWxseSB3aGVuIHRhY2tsaW5nIGEgbmV3IGNoYWxsZW5nZSBvciBhIHBhcnRpY3VsYXJseSBjb21wbGV4IHNlY3Rpb24gb2YgY29kZS4gRXZlbiBzZWVtaW5nbHkgbWlub3IgY2hhbmdlcyBvciB1cGRhdGVzIGluIGRlcGVuZGVuY3kgdmVyc2lvbnMgY2FuIGhhdmUgcmlwcGxlIGVmZmVjdHMsIGFuZCBpdCdzIGJldHRlciB0byBiZSBwcm9hY3RpdmUgdGhhbiByZWFjdGl2ZS4gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgbW9kdWxlcyBpcyBhYnNvbHV0ZWx5IGNsZWFyIGFuZCB1cC10by1kYXRlIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgcmV2aWV3IGlzbuKAmXQganVzdCBhYm91dCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGlzICp0aGVyZSosIGJ1dCBhYm91dCBjb25maXJtaW5nIG15ICp1bmRlcnN0YW5kaW5nKiBvZiBob3cgdGhlc2UgY29tcG9uZW50cyB3aWxsIGludGVyYWN0IGR1cmluZyB0aGUgbmV4dCBwaGFzZS4gVGltZSBpbnZlc3RlZCBoZXJlIGlzIG9mdGVuIHRpbWUgc2F2ZWQgbGF0ZXIsIHByZXZlbnRpbmcgdGhvc2UgZnJ1c3RyYXRpbmcgZGVidWdnaW5nIHNlc3Npb25zIGNhdXNlZCBieSBvdmVybG9va2VkIG51YW5jZXMgaW4gdGhlIGRlcGVuZGVuY3kgbGFuZHNjYXBlLiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCB3aXRoIFgsIHRoZW4gWSwgYW5kIGZpbmFsbHkgWiwgdHJhY2luZyB0aGVpciBsaW5lYWdlIGFuZCBpbnRlcmRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjA0LjQ3NTkxNjI0M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzQ6XFx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xcbiAzMzU6XFx0XFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMzM3OlxcdFxcdFxcdFxcdCEoTkVUQ09OU09MRT15IFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTPW0pXFxuIDMzODpcXHRcXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcXG4gMzM5OlxcdFxcdGhlbHBcXG4gMzQwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcXG4gMzQxOlxcdFxcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcXG4gMzQyOlxcdFxcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cXG4gMzQzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjA0LjQ3NjAzMjYzM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTA2ODM3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBkZWFsaW5nIHdpdGggYSBuZXR3b3JrIGNvbnNvbGUgbW9kaWZpY2F0aW9uLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0b3dhcmRzIG5lZWRpbmcgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AuIGBTWVNGU2AgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiwgdXN1YWxseSBlbmFibGVkLiBIb3dldmVyLCBgQ09ORklHRlNfRlNgIGlzIGV4cGxpY2l0bHkgcmVxdWlyZWQsIGFuZCB0aGF0J3MgYSBrZXkgcGllY2UuXG5cbkknbSB0aGlua2luZywgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBidXQgdGhlIHJlYWwgdGVzdCBsaWVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hgLiBUaGlzIHRlc3QgdXNlcyBgbW9kcHJvYmUgbmV0ZGV2c2ltYCBhbmQgYG1vZHByb2JlIG5ldGNvbnNvbGVgLiBTbyB3aGlsZSBgTkVUREVWU0lNYCB3b3VsZCBiZSBhIGdyZWF0IGNvbnZlbmllbmNlIGZvciB0ZXN0aW5nIHRoaXMgbmV3IGZlYXR1cmUsIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0J3MgKmFic29sdXRlbHkqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvZGUgaXRzZWxmIHRvIGNvbXBpbGUuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIHRvIGtub3cgdGhlIFwiU3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZVwiLiBCYXNlZCBvbiBteSBhbmFseXNpcywgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBhcmUgdGhlIGNvcmUgb3B0aW9ucywgYW5kIGNyaXRpY2FsbHksIGBDT05GSUdGU19GU2AgaXMgZXhwbGljaXRseSBuZWVkZWQgYnkgYE5FVENPTlNPTEVfRFlOQU1JQ2AuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgZGVmaW5lIHRoaXMgZmVhdHVyZS4gSSBzZWUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAsIGB1c2VyZGF0dW1fZHJvcGAsIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCwgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAuIFRoZXkncmUgdGhlIGZvY3VzIG9mIHRoZSBjaGFuZ2VzLlxuXG5Pa2F5LCBsZXQncyBhbHNvIGV4YW1pbmUgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCB3aGljaCBhbHNvIGFwcGVhcnMgdG8gYmUgYSBjb25maWdmcyBjYWxsYmFjay4gVGhhdCByZWluZm9yY2VzIHRoZSBuZWVkIGZvciBgQ09ORklHRlNfRlNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjExLjU4Mjg3NDExM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNzI4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJkYXR1bV9tYWtlX2l0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0dW1fdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjA2OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzZXJkYXR1bV9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MDctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUyOlxcdC5tYWtlX2l0ZW1cXHRcXHQ9IHVzZXJkYXR1bV9tYWtlX2l0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTMtXFx0LmRyb3BfaXRlbVxcdFxcdD0gdXNlcmRhdHVtX2Ryb3AsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjExLjg3MzYwODg5M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTk2NzU0NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBXcml0ZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBgdXNlcmRhdHVtX21ha2VfaXRlbWAgZG9lcyBzZWVtIGxpa2UgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhpcy4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGhvdyBkYXRhIGlzIHBhc3NlZCBhbmQgaGFuZGxlZCwgYW5kIHRoYXQgc3ltYm9sIHNlZW1zIHJlbGV2YW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgbmV0Y29uc29sZV93cml0ZV9leHRgLiBUaGlzIGV4dGVuZGVkIHdyaXRlIGZ1bmN0aW9uIGlzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLlxuXG5UaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyBgc2VuZF9leHRfbXNnX3VkcGAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbmV0Y29uc29sZV93cml0ZWAgd2hlbiBpdCdzIGluIGl0cyBleHRlbmRlZCBtb2RlIOKAkyBtZWFuaW5nIGBleHRlbmRlZGAgaXMgc2V0IHRvIHRydWUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgICppdHNlbGYqIGNhbGxzIGBuZXRjb25zb2xlX3dyaXRlYCB3aXRoIHRoZSBgZXh0ZW5kZWRgIGZsYWcgc2V0LiBUaGlzIGNvbmZpcm1zIHRoYXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyB0aGUgdHJ1ZSBlbnRyeSBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgYXJlbid0IGluYWR2ZXJ0ZW50bHkgYWx0ZXJlZC4gVGhpcyByb3V0aW5lIGNhbGxzIGBuZXRjb25zb2xlX3dyaXRlYCB3aXRoIHRoZSBgZXh0ZW5kZWRgIGZsYWcgc2V0IHRvIGZhbHNlLCBtZWFuaW5nIGl0J3MgdGhlIGJhc2ljIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb24uXG5cbk5vdywgd2l0aCBgZXh0ZW5kZWQ9ZmFsc2VgLCBgbmV0Y29uc29sZV93cml0ZWAgY2FsbHMgYHNlbmRfbXNnX3VkcGAsIHdoaWNoIEkgdGhvdWdodCwgYXQgZmlyc3QsIGRpZCBub3QgdXNlIHVzZXIgZGF0YS4gQnV0LCB3YWl0LCBsZXQgbWUgZG91YmxlLWNoZWNrIGBzZW5kX21zZ191ZHBgIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTQ3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjE5LjA3MDM2NjkwNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MjY3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF9tc2dfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQyMD1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1MjpzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDUzLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NzM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTU6XFx0XFx0XFx0c2VuZF9tc2dfdWRwKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLCB3Y3R4dC1cXHUwMDNlbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MTkuMTUzMDAwMTI1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDI5OTUyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgXCJJXCIgaW4gdGhpcyBzaXR1YXRpb246XG5cbioqUmV2aWV3aW5nIGBzZW5kX21zZ191ZHBgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBzZW5kX21zZ191ZHBgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24gaXMgcm9idXN0IGFuZCBlZmZpY2llbnQuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBvYnZpb3VzOiBhcmUgdGhlIGVycm9yIGNoZWNrcyBjb21wcmVoZW5zaXZlPyBBcmUgd2UgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIHByb3Blcmx5LCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBzb2NrZXQgZXJyb3JzLCBhbmQgbmV0d29yayBjb25uZWN0aXZpdHkgaXNzdWVzPyBCZXlvbmQgYmFzaWMgZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byBsb29rIGZvciBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLiBJcyB0aGlzIGZ1bmN0aW9uIGJsb2NraW5nLCBvciBpcyBpdCBub24tYmxvY2tpbmcgYW5kIHVzaW5nIGFwcHJvcHJpYXRlIG1lY2hhbmlzbXMgdG8gYXZvaWQgaG9sZGluZyB1cCB0aGUgY2FsbGluZyB0aHJlYWQ/IEknbGwgYmUgc2NydXRpbml6aW5nIHRoZSBkYXRhIGNvcHkgbWVjaGFuaXNtcyDigJMgYXJlIHdlIG1ha2luZyB1bm5lY2Vzc2FyeSBjb3BpZXMsIGFuZCBjYW4gd2UgbGV2ZXJhZ2UgemVyby1jb3B5IHRlY2huaXF1ZXMgd2hlcmUgYXBwcm9wcmlhdGU/IFBlcmZvcm1hbmNlIGlzIGFsd2F5cyBrZXkgd2l0aCBVRFAsIHNvIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFja2V0aXphdGlvbiBhbmQgcmVhc3NlbWJseSBpZiB0aGlzIGFwcGxpY2F0aW9uIGhhbmRsZXMgZnJhZ21lbnRlZCBtZXNzYWdlcy4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciByZXBvcnRpbmcgYW5kIGxvZ2dpbmcsIGVuc3VyaW5nIHdlJ3JlIHByb3ZpZGluZyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZGlhZ25vc2UgcHJvYmxlbXMgd2l0aG91dCBsZWFraW5nIHNlbnNpdGl2ZSBkYXRhLiBCYXNpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoaXMgaXMgYnVsbGV0cHJvb2YgYW5kIG9wdGltYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MjQuOTU2MDAwMjE5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1MixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ1MjpcXHRzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbjI0NTM6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW4pXFxuMjQ1NDpcXHR7XFxuMjQ1NTpcXHRcXHRjb25zdCBjaGFyICp0bXAgPSBtc2c7XFxuMjQ1NjpcXHRcXHRpbnQgZnJhZywgbGVmdCA9IGxlbjtcXG4yNDU3OlxcdFxcbjI0NTg6XFx0XFx0d2hpbGUgKGxlZnQgXFx1MDAzZSAwKSB7XFxuMjQ1OTpcXHRcXHRcXHRmcmFnID0gbWluKGxlZnQsIE1BWF9QUklOVF9DSFVOSyk7XFxuMjQ2MDpcXHRcXHRcXHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcXG4yNDYxOlxcdFxcdFxcdHRtcCArPSBmcmFnO1xcbjI0NjI6XFx0XFx0XFx0bGVmdCAtPSBmcmFnO1xcbjI0NjM6XFx0XFx0fVxcbjI0NjQ6XFx0fVxcbjI0NjU6XFx0XFxuMjQ2NjpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MjQuOTU2MTgyNDM5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MDMzNTUyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFJDVSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIGNsZWFyIGBzZW5kX21zZ191ZHBgIGRvZXNuJ3QgdG91Y2ggYHVzZXJkYXRhYC4gVGhhdCBtZWFucyBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaXMgc2FmZSwgYW5kIHRoaXMgcGF0Y2ggKm9ubHkqIGltcGFjdHMgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYmVjb21lOiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYHVzZXJkYXR1bV9kcm9wYCwgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAsIGFuZCwgb2YgY291cnNlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGdvdCB0d2Vha2VkLiBBaCwgYGNhbGNfdXNlcmRhdGFfbGVuYCBpcyB0aGVyZSwgYnV0IHRoYXQncyBqdXN0IGZvciBjb250ZXh0LiBIb3dldmVyLCBgdXBkYXRlX3VzZXJkYXRhYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YCBhbGwgZ290IG1vZGlmaWVkLiBPa2F5LCBzbyBteSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgc3RpbGwgbG9vayBsaWtlIHRoZXkgY292ZXIgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGUgY2hhbmdlcy5cblxuTm93LCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIFRoZSBpbnRlbnQgaXMgdG8gbWFrZSB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB1c2UgUkNVIHByb3Blcmx5IHdoZW4gaXQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGlzIHVzZXJkYXRhLCB3aGljaCB0aGUgc3lzdGVtIGFjY2Vzc2VzIHRocm91Z2ggY29uZmlnZnMgYW5kIHV0aWxpemVzIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gU28sIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwvZHJpdmVyIGNvZGUgdGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5HaXZlbiB0aGlzIGlzIGEgUkNVIGZpeCBhZmZlY3RpbmcgYSBjb3JlIGRyaXZlciwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGlzIHRoZSBleGFjdCBuYW1lLCBzbyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBjb3JyZWN0LlxuXG5PaCwgYW5kIHdhaXQsIGl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpO2AgY3JlYXRlcyBgdXNlcmRhdHVtX2F0dHJfdmFsdWVgIHdoaWNoIHVzZXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fdmFsdWVfc2hvd2AuXG5Eb2VzIHRoYXQgbWVhbiB0aGUgbWFjcm8gZXhwZWN0cyBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBvciBkb2VzIGl0ICpkZWZpbmUqIGl0PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR0ZTX0FUVFJgIG1hY3JvIGRlZmluaXRpb24gdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0ODozMy40NTk1NDE1MjRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvY29uZmlnZnMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjM6XFx0I2RlZmluZSBDT05GSUdGU19BVFRSX1BFUk0oX3BmeCwgX25hbWUsIF9wZXJtKVxcdFxcdFxcXFxcXG4gMTI0OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIF9wZngjI2F0dHJfIyNfbmFtZSA9IHtcXHRcXFxcXFxuIDEyNTpcXHRcXHQuY2FfbmFtZVxcdD0gX19zdHJpbmdpZnkoX25hbWUpLFxcdFxcdFxcXFxcXG4gMTI2OlxcdFxcdC5jYV9tb2RlXFx0PSBfcGVybSxcXHRcXHRcXHRcXFxcXFxuIDEyNzpcXHRcXHQuY2Ffb3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcdFxcdFxcdFxcXFxcXG4gMTI4OlxcdFxcdC5zaG93XFx0XFx0PSBfcGZ4IyNfbmFtZSMjX3Nob3csXFx0XFx0XFxcXFxcbiAxMjk6XFx0XFx0LnN0b3JlXFx0XFx0PSBfcGZ4IyNfbmFtZSMjX3N0b3JlLFxcdFxcdFxcXFxcXG4gMTMwOlxcdH1cXG4gMTMxOlxcdFxcbiAxMzI6XFx0I2RlZmluZSBDT05GSUdGU19BVFRSKF9wZngsIF9uYW1lKSBDT05GSUdGU19BVFRSX1BFUk0oXFx0XFxcXFxcbiAxMzM6XFx0XFx0XFx0X3BmeCwgX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSXFx0XFx0XFxcXFxcbiAxMzQ6XFx0KVxcbiAxMzU6XFx0XFxuIDEzNjpcXHQjZGVmaW5lIENPTkZJR0ZTX0FUVFJfUk8oX3BmeCwgX25hbWUpXFx0XFx0XFx0XFxcXFxcbiAxMzc6XFx0c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1xcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MzMuNDU5NjYxOTc0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDMzMDA2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1bmN0aW9uIE5hbWUgQ29uc3RydWN0aW9uIGFuZCBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlybWluZyB0aGUgZnVuY3Rpb24gbmFtZSBjb25zdHJ1Y3Rpb24gaGVyZS4gSSd2ZSBnb3QgYC5zdG9yZSA9IF9wZngjI19uYW1lIyNfc3RvcmVgLiBUaGF0IG1lYW5zIGBfcGZ4YCBpcyBgdXNlcmRhdHVtX2AgYW5kIGBfbmFtZWAgaXMgYHZhbHVlYCwgc28gdGhlIGZ1bGwgZnVuY3Rpb24gbmFtZSAqc2hvdWxkKiBiZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBvdGhlciBmdW5jdGlvbiBuYW1lcyBhcmUgZXhhY3RseSBhcyB0aGV5IHNob3VsZCBiZS4gTGV0J3Mgc2VlLi4uIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAuIFllcCwgZm91bmQgaXQ6IGBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCwgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KWAgaW4gYG5ldGNvbnNvbGUuY2AuIEdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAuIENvbmZpcm1lZDogYHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKWAgaXMgYWxzbyBpbiBgbmV0Y29uc29sZS5jYC5cblxuQWxyaWdodCwgb250byBgdXNlcmRhdHVtX2Ryb3BgLiBGb3VuZDogYHN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pYCBpcyBhbHNvIGNvcnJlY3RseSBkZWZpbmVkIGluIGBuZXRjb25zb2xlLmNgLlxuXG5BbmQgZmluYWxseSwgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLiBZZXAsIHRoYXQgb25lJ3MgdGhlcmUgdG9vOiBgc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgY29uc3QgY2hhciAqbmFtZSlgIGlzIGRlZmluZWQsIGFzIGV4cGVjdGVkLCBpbiBgbmV0Y29uc29sZS5jYC5cblxuT2theSwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLCBJIGNhbiBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDM0LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjQyLjUwMjk2NTMwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDM0NTg0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcInVzZXJkYXR1bV9tYWtlX2l0ZW1cIixcbiAgICBcIm5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHByb3Blcmx5IHVzZSBSQ1Ugd2hlbiB1cGRhdGluZyBhbmQgcmVhZGluZyB0aGUgdXNlcmRhdGEgcGF5bG9hZCwgd2hpY2ggaXMgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMgYW5kIHVzZWQgZHVyaW5nIGV4dGVuZGVkIGNvbnNvbGUgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsL2RyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgICBcInVzZXJkYXR1bV9kcm9wXCIsXG4gICAgXCJ1c2VyZGF0dW1fbWFrZV9pdGVtXCIsXG4gICAgXCJuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlXCIsXG4gICAgXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6NDIuOTYzMzIwOTI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI0ODI0MjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjQyLjk2NDE5Njc1NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzI0NzM2MjIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXFx1MDAzZXVzZXJkYXRhYCB3aXRoIGFuIFJDVS1wcm90ZWN0ZWQgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIGluIHRoZSBuZXRjb25zb2xlIHRyYW5zbWl0IHBhdGguIFRoZSBuZXcgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NfZmxleGAsIHBvcHVsYXRlZCB1c2luZyBgc2NucHJpbnRmYCAod2hpY2ggbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcpLCBhbmQgaXRzIGV4YWN0IHdyaXR0ZW4gbGVuZ3RoIGlzIHJlY29yZGVkIGluIGBsZW5ndGhgLiBUaGUgdHJhbnNtaXQgcGF0aCB0aGVuIHJlYWRzIGVpdGhlciB2aWEgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIChzdG9wcGluZyBhdCB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBvciBieSBleHBsaWNpdGx5IHVzaW5nIHRoZSByZWNvcmRlZCBgbGVuZ3RoYC4gSW4gYm90aCBjYXNlcywgb25seSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5dGVzIGFyZSByZWFkIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAodXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMpIGFyZSBwZXJmZWN0bHkgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MDY3ZDk1NDM0ZjcyODQ0YTQ5N2RlYjU5NzIxZTlkNmUzODM4ZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDU6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IDAzOTEzMzAyMzI4Y2MuLmIzNThlNWMzNjczNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTE1MSwxMyArMTUxLDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cbisgKiBAcmN1Olx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuKyAqIEBsZW5ndGg6XHRMZW5ndGggb2YgQGRhdGEsIGV4Y2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IuXG4rICogQGRhdGE6XHRGb3JtYXR0ZWQgXCIga2V5PXZhbHVlXFxuXCIgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXG4rICpcbisgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxuKyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXG4rICovXG4rc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuK1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbitcdHNpemVfdFx0XHRcdGxlbmd0aDtcbitcdGNoYXJcdFx0XHRkYXRhW107XG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cbiAgKiBAbGlzdDpcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxuICAqIEBncm91cDpcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXG4gICogQHVzZXJkYXRhX2dyb3VwOlx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxuLSAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuLSAqIEB1c2VyZGF0YV9sZW5ndGg6XHRTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLlxuKyAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC5cbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuQEAgLTE5OCw4ICsyMTIsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHR1c2VyZGF0YV9ncm91cDtcbi1cdGNoYXJcdFx0XHQqdXNlcmRhdGE7XG4tXHRzaXplX3RcdFx0XHR1c2VyZGF0YV9sZW5ndGg7XG4rXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSBfX3JjdSAqdXNlcmRhdGE7XG4gXHRjaGFyXHRcdFx0c3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTtcbiBcbiBcdC8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi9cbkBAIC0xMzUxLDEyICsxMzY0LDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpuZXcgPSBOVUxMO1xuK1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDtcbiBcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbV9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4tXHRjaGFyICpvbGRfYnVmID0gTlVMTDtcbi1cdGNoYXIgKm5ld19idWYgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBvZmZzZXQgPSAwO1xuIFx0aW50IGxlbjtcbiBcbkBAIC0xMzY4LDggKzEzODAsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xuIFx0aWYgKGxlbikge1xuLVx0XHRuZXdfYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFuZXdfYnVmKVxuK1x0XHRuZXcgPSBrbWFsbG9jX2ZsZXgoKm5ldywgZGF0YSwgbGVuICsgMSk7XG4rXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuQEAgLTEzNzksMjIgKzEzOTEsMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0dWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7XG4gXHRcdC8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi9cbiBcdFx0aWYgKHVkbV9pdGVtLVx1MDAzZXZhbHVlWzBdKSB7XG4tXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXdfYnVmW29mZnNldF0sIGxlbiArIDEgLSBvZmZzZXQsXG4rXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXctXHUwMDNlZGF0YVtvZmZzZXRdLFxuK1x0XHRcdFx0XHQgICAgbGVuICsgMSAtIG9mZnNldCxcbiBcdFx0XHRcdFx0ICAgIFwiICVzPSVzXFxuXCIsIGl0ZW0tXHUwMDNlY2lfbmFtZSxcbiBcdFx0XHRcdFx0ICAgIHVkbV9pdGVtLVx1MDAzZXZhbHVlKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xuK1x0aWYgKG5ldylcbitcdFx0bmV3LVx1MDAzZWxlbmd0aCA9IG9mZnNldDtcbiBcbi1cdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdG9sZF9idWYgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi1cdG50LVx1MDAzZXVzZXJkYXRhID0gbmV3X2J1Zjtcbi1cdG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWUob2xkX2J1Zik7XG4rXHQvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi9cbitcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEsIG5ldyxcbitcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpO1xuK1x0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNjg0LDcgKzE2OTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuK1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gXHRrZnJlZShudCk7XG4gfVxuIFxuQEAgLTIyMjcsMTQgKzIyMzgsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdCAgICAgIGludCBtc2dfbGVuLFxuLVx0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxuK1x0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuICNlbmRpZlxuIFxuQEAgLTIyNTEsNyArMjI2MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGlmICh1c2VyZGF0YSlcbiBcdFx0bXNnX2xlbiArPSBzY25wcmludGYoXHUwMDI2bnQtXHUwMDNlYnVmW21zZ19sZW5dLFxuIFx0XHRcdFx0ICAgICBzaXplb2YobnQtXHUwMDNlYnVmKSAtIG1zZ19sZW4sIFwiJXNcIixcbi1cdFx0XHRcdCAgICAgdXNlcmRhdGEpO1xuK1x0XHRcdFx0ICAgICB1c2VyZGF0YS1cdTAwM2VkYXRhKTtcbiBcbiBcdGlmIChzeXNkYXRhKVxuIFx0XHRtc2dfbGVuICs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG5AQCAtMjI3MSw3ICsyMjgxLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLVx0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxuK1x0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xuQEAgLTIyODIsMTIgKzIyOTMsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YV9wdHIgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGFfcHRyID0gbnQtXHUwMDNlc3lzZGF0YTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiAjZW5kaWZcbi1cdGlmIChXQVJOX09OX09OQ0UoIXVzZXJkYXRhX3B0ciBcdTAwMjZcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxuLVx0XHRyZXR1cm47XG4rXHRpZiAodXNlcmRhdGEpIHtcbitcdFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXHUwMDNlZGF0YTtcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuK1x0fVxuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghc3lzZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHN5c2RhdGFfbGVuICE9IDApKVxuIFx0XHRyZXR1cm47XG5AQCAtMjM2NCw3ICsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuIFx0XHRcdFx0aW50IG1zZ19sZW4sXG4gXHRcdFx0XHRpbnQgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4pXG4rXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4sXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuIFx0aW50IGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuO1xuIFx0Y29uc3QgY2hhciAqbXNnYm9keTtcbkBAIC0yMzkzLDcgKzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHQgKiB3aWxsIGJlIHJlcGxhY2VkXG4gXHQgKi9cbiBcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcbi1cdFx0XHQgICAgIHN5c2RhdGFfbGVuKTtcbitcdFx0XHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTI0MDgsMjUgKzI0MjAsMzMgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIHN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XG4gXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xuIFx0aW50IHN5c2RhdGFfbGVuID0gMDtcbiBcdGludCBsZW47XG4gXG4rXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbitcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGlmICh1c2VyZGF0YSlcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuICNlbmRpZlxuIFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4gXHRcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpICsgMTtcbiBcbiBcdGxlbiA9IHdjdHh0LVx1MDAzZWxlbiArIHJlbGVhc2VfbGVuICsgc3lzZGF0YV9sZW4gKyB1c2VyZGF0YV9sZW47XG4gXHRpZiAobGVuIFx1MDAzYz0gTUFYX1BSSU5UX0NIVU5LKVxuLVx0XHRyZXR1cm4gc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLFxuLVx0XHRcdFx0XHRcdCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuKTtcbitcdFx0c2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sXG4rXHRcdFx0XHRcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcbitcdGVsc2VcbitcdFx0c2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gXG4tXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0ICAgc3lzZGF0YV9sZW4pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5AQCAtMjY2OSw3ICsyNjg5LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuK1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gI2VuZGlmXG4gXHRrZnJlZShudCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5pbmRleCBiNTZjNzBiN2UyNzQyLi5mMDY3NGMwMDE3ZmM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuQEAgLTEzLDYgKzEzLDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0bmV0Y29uc19yZXN1bWUuc2ggXFxcbiBcdG5ldGNvbnNfc3lzZGF0YS5zaCBcXFxuIFx0bmV0Y29uc190b3J0dXJlLnNoIFxcXG4rXHRuZXRjb25zX3VzZXJkYXRhLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuIFxuIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5AQCAtMCwwICsxLDIyOSBAQFxuKyMhL3Vzci9iaW4vZW52IGJhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rIyBFeGVyY2lzZSB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLlxuKyNcbisjIFRoZSBmaXJzdCBwYXJ0IGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIHRoZSB0YXJnZXQgdHJhbnNtaXRzIGZvbGxvd3Mgd2hhdFxuKyMgY29uZmlnZnMgc2F5czogYSB2YWx1ZSBzaG93cyB1cCBpbiB0aGUgbmV4dCBtZXNzYWdlLCBhbiB1cGRhdGUgcmVwbGFjZXMgdGhlXG4rIyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZVxuKyMga2V5LlxuKyNcbisjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGVcbisjIHBheWxvYWQgZW50aXJlbHkgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIGtlZXBzXG4rIyBwaWNraW5nIHVwIHBheWxvYWRzIHRoYXQgYXJlIGJlaW5nIHJlcGxhY2VkIHVuZGVybmVhdGggaXQuIEl0IHJ1bnMgdHdpY2UsXG4rIyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlXG4rIyBlbm91Z2ggdG8gYmUgZnJhZ21lbnRlZC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rU0NSSVBURElSPSQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiKVxuK1xuK3NvdXJjZSBcIiR7U0NSSVBURElSfVwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuK1xuKyMgTnVtYmVyIG9mIHRpbWVzIGVhY2ggdG9ydHVyZSB3b3JrZXIgbG9vcHNcbitJVEVSQVRJT05TPSR7MTotMjAwfVxuK1xuKyMgS2V5cyBvd25lZCBieSBlYWNoIHRvcnR1cmUgd29ya2VyLiBXb3JrZXJzIGRvIG5vdCBzaGFyZSBrZXlzLCBzbyBhIGZhaWxpbmdcbisjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLlxuK0NIVVJOX0tFWT1cImNodXJua2V5XCJcbitUUkFOU0lFTlRfS0VZPVwidHJhbnNpZW50a2V5XCJcbisjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTktcbitCVUxLX0tFWVM9OFxuK1xuK1VTRVJEQVRBX0RJUj1cIiR7TkVUQ09OU19QQVRIfS91c2VyZGF0YVwiXG4rIyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU31cbisjIGVudHJpZXMgb2YgdGhpcyBzaXplIGFyZSBlbm91Z2ggdG8gZm9yY2UgZnJhZ21lbnRhdGlvblxuK0xPTkdfVkFMVUU9JChwcmludGYgLS0gJ3YlLjBzJyB7MS4uMTkwfSlcbitcbitmdW5jdGlvbiB3cml0ZV9rZXkoKSB7XG4rXHRsb2NhbCBLRVk9XCIkezF9XCJcbitcdGxvY2FsIFZBTFVFPVwiJHsyfVwiXG4rXG4rXHRta2RpciAtcCBcIiR7VVNFUkRBVEFfRElSfS8ke0tFWX1cIlxuK1x0ZWNobyBcIiR7VkFMVUV9XCIgXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7S0VZfS92YWx1ZVwiXG4rfVxuK1xuKyMgU2VuZCBhIHNpbmdsZSBtZXNzYWdlIGFuZCBjYXB0dXJlIGl0IG9uIHRoZSBkZXN0aW5hdGlvbiBpbnRlcmZhY2VcbitmdW5jdGlvbiBzZW5kX2FuZF9jYXB0dXJlKCkge1xuK1x0cm0gLWYgXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rXHRsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDI2XG4rXHR3YWl0X2Zvcl9wb3J0IFwiJHtOQU1FU1BBQ0V9XCIgXCIke1BPUlR9XCIgXCIke0lQX1ZFUlNJT059XCJcbitcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfVwiIFx1MDAzZSAvZGV2L2ttc2dcbitcdGJ1c3l3YWl0IFwiJHtCVVNZV0FJVF9USU1FT1VUfVwiIHRlc3QgLXMgXCIke09VVFBVVF9GSUxFfVwiIHx8IHRydWVcbitcdHBraWxsX3NvY2F0XG4rXHR2YWxpZGF0ZV9tc2cgXCIke09VVFBVVF9GSUxFfVwiXG4rfVxuK1xuK2Z1bmN0aW9uIGV4cGVjdF9pbl9tc2coKSB7XG4rXHRsb2NhbCBXQU5URUQ9XCIkezF9XCJcbitcbitcdGlmICEgZ3JlcCAtcSAtLSBcIiR7V0FOVEVEfVwiIFwiJHtPVVRQVVRfRklMRX1cIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJyR7V0FOVEVEfScgbm90IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbitmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHtcbitcdGxvY2FsIFVOV0FOVEVEPVwiJHsxfVwiXG4rXG4rXHRpZiBncmVwIC1xIC0tIFwiJHtVTldBTlRFRH1cIiBcIiR7T1VUUFVUX0ZJTEV9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICcke1VOV0FOVEVEfScgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGNhdCBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitcdGZpXG4rfVxuK1xuKyMgRXZlcnkgd3JpdGUgcHVibGlzaGVzIGEgbmV3IHBheWxvYWQgYW5kIGZyZWVzIHRoZSBwcmV2aW91cyBvbmUuIEFuIGVtcHR5XG4rIyB2YWx1ZSBpcyBza2lwcGVkIHdoZW4gdGhlIHBheWxvYWQgaXMgZm9ybWF0dGVkLCBzbyB0aGlzIGFsc28gZHJpdmVzIHRoZVxuKyMgdGFyZ2V0IHRocm91Z2ggaGF2aW5nIG5vIHBheWxvYWQgYXQgYWxsLlxuK2Z1bmN0aW9uIGNodXJuX3ZhbHVlKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0lURVJBVElPTlN9XCIpXG4rXHRkb1xuK1x0XHRlY2hvIFwidmFsdWUke2l9XCIgXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZVwiXG4rXHRcdGVjaG8gXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZVwiXG4rXHRkb25lXG4rfVxuK1xuKyMgQ3JlYXRlIGFuZCBkZWxldGUgYSBrZXkgdW5kZXJuZWF0aCB0aGUgc2VuZGVyXG4rZnVuY3Rpb24gY2h1cm5fa2V5KCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0lURVJBVElPTlN9XCIpXG4rXHRkb1xuK1x0XHRta2RpciBcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9XCJcbitcdFx0ZWNobyBcInRyYW5zaWVudCR7aX1cIiBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfS92YWx1ZVwiXG4rXHRcdHJtZGlyIFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cIlxuK1x0ZG9uZVxuK31cbitcbisjIEtlZXAgdGhlIHRyYW5zbWl0IHBhdGggYnVzeSB3aGlsZSB0aGUgcGF5bG9hZCBpcyBiZWluZyByZXBsYWNlZFxuK2Z1bmN0aW9uIHNlbmRfbWVzc2FnZXMoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7SVRFUkFUSU9OU31cIilcbitcdGRvXG4rXHRcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfSAke2l9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0ZG9uZVxuK31cbitcbisjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvclxuK2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkge1xuK1x0bG9jYWwgUElEUz0oKVxuK1x0bG9jYWwgV09SS0VSXG4rXHRsb2NhbCBSRVQ9MFxuK1x0bG9jYWwgUElEXG4rXG4rXHRmb3IgV09SS0VSIGluIFwiJEBcIlxuK1x0ZG9cbitcdFx0XCIke1dPUktFUn1cIiBcdTAwMjZcbitcdFx0UElEUys9KFwiJCFcIilcbitcdGRvbmVcbitcbitcdCMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZ1xuK1x0IyB3b3JrZXIga2VlcHMgd3JpdGluZyB0byBjb25maWdmcyB3aGlsZSB0aGUgZXhpdCB0cmFwIGNsZWFucyBpdCB1cC5cbitcdGZvciBQSUQgaW4gXCIke1BJRFNbQF19XCJcbitcdGRvXG4rXHRcdHdhaXQgXCIke1BJRH1cIiB8fCBSRVQ9MVxuK1x0ZG9uZVxuK1xuK1x0aWYgW1sgXCIke1JFVH1cIiAtbmUgMCBdXVxuK1x0dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogdXNlcmRhdGEgdG9ydHVyZSB3b3JrZXIgZmFpbGVkXCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitcdGZpXG4rfVxuK1xuK2Z1bmN0aW9uIGNyZWF0ZV9idWxrX2tleXMoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7QlVMS19LRVlTfVwiKVxuK1x0ZG9cbitcdFx0d3JpdGVfa2V5IFwiYnVsayR7aX1cIiBcIiR7TE9OR19WQUxVRX1cIlxuK1x0ZG9uZVxuK31cbitcbitmdW5jdGlvbiBkZWxldGVfYnVsa19rZXlzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0JVTEtfS0VZU31cIilcbitcdGRvXG4rXHRcdHJtZGlyIFwiJHtVU0VSREFUQV9ESVJ9L2J1bGske2l9XCJcbitcdGRvbmVcbit9XG4rXG4rIyA9PT09PT09PT09ICNcbisjIFN0YXJ0IGhlcmUgI1xuKyMgPT09PT09PT09PSAjXG4rXG4rbW9kcHJvYmUgbmV0ZGV2c2ltIDJcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcbittb2Rwcm9iZSBuZXRjb25zb2xlIDJcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcbitcbitJUF9WRVJTSU9OPVwiaXB2NFwiXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXG4rT1VUUFVUX0ZJTEU9XCIvdG1wLyR7VEFSR0VUfVwiXG4rXG4rIyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXG4rY2hlY2tfZm9yX2RlcGVuZGVuY2llc1xuKyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxuK2VjaG8gXCI2IDVcIiBcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4rdHJhcCBjbGVhbnVwIEVYSVRcbisjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xuK3NldF9uZXR3b3JrIFwiJHtJUF9WRVJTSU9OfVwiXG4rIyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxuK2NyZWF0ZV9keW5hbWljX3RhcmdldFxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICMxXG4rIyBBIHZhbHVlIHdyaXR0ZW4gdG8gY29uZmlnZnMgcmVhY2hlcyB0aGUgZGVzdGluYXRpb25cbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7VVNFUkRBVEFfS0VZfVwiIFwiZmlyc3RcIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjMlxuKyMgVXBkYXRpbmcgdGhlIHZhbHVlIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBwYXlsb2FkXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke1VTRVJEQVRBX0tFWX1cIiBcInNlY29uZFwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09c2Vjb25kXCJcbitleHBlY3Rfbm90X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1maXJzdFwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzNcbisjIENsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnlcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK2VjaG8gXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZVwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9ub3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PVwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzRcbisjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5XG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke1VTRVJEQVRBX0tFWX1cIiBcInRoaXJkXCJcbitybWRpciBcIiR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX1cIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3Rfbm90X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1cIlxuK3JtIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICM1XG4rIyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LFxuKyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWRcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7Q0hVUk5fS0VZfVwiIFwiJHtVU0VSREFUQV9WQUxVRX1cIlxuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXG4rXG4rY3JlYXRlX2J1bGtfa2V5c1xuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXG4rZGVsZXRlX2J1bGtfa2V5c1xuK1xuK2V4aXQgXCIke2tzZnRfcGFzc31cIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6NDIuOTY0MTk5MDE2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMjQ3MzQwODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJDVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgbmV0Y29uc29sZS5jYCBwYXRjaC4gVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgUkNVIGZvciB0aGUgYHVzZXJkYXRhYCBwYXlsb2FkIGluIHRoZSBuZXRjb25zb2xlIHRhcmdldC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSDigJMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGxpa2VseSBzdWZmZXJlZCBmcm9tIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzIHdoZW4gdXBkYXRpbmcgYHVzZXJkYXRhYCB3aGlsZSBpdCB3YXMgYmVpbmcgdHJhbnNtaXR0ZWQuIE1ha2VzIHNlbnNlLiBUaGlzIG5ldyBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGByY3VgLCBgbGVuZ3RoYCwgYW5kIGEgZmxleGlibGUgYXJyYXkgYGRhdGFbXWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBhbGxvY2F0aW9uIGFuZCBkYXRhIHBvcHVsYXRpb24uIFRoZXkncmUgdXNpbmcgYGttYWxsb2NfZmxleGAgYW5kIGBzY25wcmludGZgLiBga21hbGxvY19mbGV4YCBpdHNlbGYgZG9lc24ndCB6ZXJvIG1lbW9yeSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgd3JpdHRlbiBpcyBpbml0aWFsaXplZC4gVGhlIGNvZGUgZG9lcyBgc2NucHJpbnRmYCB0byBwb3B1bGF0ZSB0aGUgYGRhdGFgIGZpZWxkLCBzbyB0aGUgc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZC4gR29vZCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGUgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIGV4cGVjdHMgbGF0ZXIuIFRoZSBjb2RlIHRoZW4gcmVjb3JkcyB0aGUgd3JpdHRlbiBsZW5ndGggaW4gYG5ldy1cdTAwM2VsZW5ndGhgLiBUaGlzIHNldHMgdXAgdGhlIGNyaXRpY2FsIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlIHBheWxvYWQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHRyYW5zbWl0IHBhdGhzLCBzcGVjaWZpY2FsbHkgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAuIEluIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgaXQgdXNlcyBgJXNgIG9uIGB1c2VyZGF0YS1cdTAwM2VkYXRhYCwgd2hpY2ggaXMgc2FmZSBiZWNhdXNlIGl0J3MgbnVsbC10ZXJtaW5hdGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZSBgc2VuZF9mcmFnbWVudGVkX2JvZHlgIGZ1bmN0aW9uIHVzZXMgdGhlIGB1c2VyZGF0YS1cdTAwM2VsZW5ndGhgIHZhbHVlLiBDcnVjaWFsbHksIHRoaXMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIGBvZmZzZXRgIGZyb20gYHNjbnByaW50ZmAsIHJlcHJlc2VudGluZyB0aGUgKmV4YWN0KiBudW1iZXIgb2YgYnl0ZXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGZ1bmN0aW9uLiBTbyB0aGUgZGF0YSBiZWluZyBzZW50IGlzIGFsbCBpbml0aWFsaXplZC4gSSdtIHNhdGlzZmllZC5cblxuTm93LCBhbiBvYnZpb3VzIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVha3MqPyBUaGUgYHJjdWAgaGVhZCBpcyBpbml0aWFsaXplZCBieSBga2ZyZWVfcmN1YCBpbnRlcm5hbGx5LCBidXQgaXMgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaGUgYGRhdGFbXWAgYXJyYXkgaXMgdGhlIG9ubHkgcGFydCBzZW50IG92ZXIgdGhlIG5ldHdvcmssIGFuZCB0aGUgY29kZSBlbnN1cmVzIGl0IG9ubHkgdHJhbnNtaXRzIHRoZSBpbml0aWFsaXplZCBieXRlcyBieSB1c2luZyB0aGUgbGVuZ3RoIGZpZWxkLiBObyBsZWFrIGhlcmUuXG5cblNvLCB0aGUgcHJpbWFyeSBvYmplY3RpdmUgaXMgdG8gZWxpbWluYXRlIHRoZSBVQUYvZGF0YSByYWNlLCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uIFRoZSBvcmlnaW5hbCBjb2RlJ3MgYHNwaW5fbG9ja19pcnFzYXZlYCBhbmQgYGtmcmVlYCBwYXR0ZXJuIHNjcmVhbXMgXCJwb3RlbnRpYWwgcHJvYmxlbS5cIiBJdCdzIHZlcnkgbGlrZWx5IEtBU0FOIHdvdWxkIGhhdmUgY2F1Z2h0IHRoaXMgcXVpY2tseS4gVGhlIFJDVSBhcHByb2FjaCBlZmZlY3RpdmVseSBlbGltaW5hdGVzIHRoaXMgcmFjZS4gSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgYSBnb29kIGZpeC5cblxuVGhlIGtleSB0byBlbnN1cmUgaXMgdGhlcmUgaXMgbm8gd2F5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLlxuXG5JJ2xsIGNoZWNrIGEgS01TQU4gc3BlY2lmaWMgdGhpbmcuXG5Eb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz9cblxuVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBrbWFsbG9jX2ZsZXhgLCB3aGljaCBkb2Vzbid0IHplcm8sIGFuZCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMuIFdlIGhhdmUgdG8gdmVyaWZ5IHRoYXQgdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgdGhlIGJ1ZmZlciBtYXRjaGVzIHRoZSBieXRlcyB3cml0dGVuIHRvIHRoZSBidWZmZXIuXG5UaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzdHJpbmcgd3JpdGluZyBhcmUgcmVsYXRlZCBieSBgbGVuYCBhbmQgYG9mZnNldGAuIGBsZW5gIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYGNhbGNfdXNlcmRhdGFfbGVuYCwgYW5kIGBvZmZzZXRgIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYHNjbnByaW50ZmAuXG5cblRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIGlzIHdyaXR0ZW4uIFRoZXJlIHNob3VsZCBiZSBhIG11dGV4IGZvciB0aGUgd3JpdGVycyBhbmQgcmVhZGVycy5cblRoZSBjb21tZW50IG1lbnRpb25zIHRoZSBzZXJpYWxpemF0aW9uIGJ5IGBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhgLlxuU28gdGhlIHNpemUgaXMgZXhhY3RseSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uXG5cbkV2ZW4gaWYgYGNhbGNfdXNlcmRhdGFfbGVuYCBhbmQgYHNjbnByaW50ZmAgZGlkbid0IGFncmVlIHBlcmZlY3RseSwgYG9mZnNldGAgaXMgdGhlIGFjdHVhbCBieXRlcyB3cml0dGVuLCBhbmQgYHVzZXJkYXRhLVx1MDAzZWxlbmd0aGAgaG9sZHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIHVzZWQsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMuIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCB1c2VzIHRoZSBudWxsIHRlcm1pbmF0b3IuIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAgdXNlcyBgdXNlcmRhdGEtXHUwMDNlbGVuZ3RoYCB3aGljaCBpcyBlcXVhbCB0byBgb2Zmc2V0YC5cblxuU28sIG5vLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJdCdzIHNhZmUuXG5ObyBLTVNBTiBpcyBuZWVkZWQuXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgYGttYWxsb2NfZmxleGAgbWFjcm8ganVzdCB0byBiZSAxMDAlIHN1cmUsIGJ1dCBJIGRvbid0IHNlZSBhbnl0aGluZy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGZpeGVzIGEgVUFGL2RhdGEgcmFjZSwgd2hpY2ggaXMgYSBLQVNBTiBkb21haW4gYnVnLlxuTm8gS01TQU4gaXMgbmVlZGVkLlxuXG5JIHdpbGwgc2V0IE5lZWRzS01TQU49ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDksIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjA2LjIxMTU0MjgxM1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXFx1MDAzZXVzZXJkYXRhYCB3aXRoIGFuIFJDVS1wcm90ZWN0ZWQgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIGluIHRoZSBuZXRjb25zb2xlIHRyYW5zbWl0IHBhdGguIFRoZSBuZXcgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NfZmxleGAsIHBvcHVsYXRlZCB1c2luZyBgc2NucHJpbnRmYCAod2hpY2ggbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcpLCBhbmQgaXRzIGV4YWN0IHdyaXR0ZW4gbGVuZ3RoIGlzIHJlY29yZGVkIGluIGBsZW5ndGhgLiBUaGUgdHJhbnNtaXQgcGF0aCB0aGVuIHJlYWRzIGVpdGhlciB2aWEgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIChzdG9wcGluZyBhdCB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBvciBieSBleHBsaWNpdGx5IHVzaW5nIHRoZSByZWNvcmRlZCBgbGVuZ3RoYC4gSW4gYm90aCBjYXNlcywgb25seSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5dGVzIGFyZSByZWFkIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAodXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMpIGFyZSBwZXJmZWN0bHkgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bnNhZmUgbG9ja2xlc3MgdXBkYXRlIG9mIGBudC1cXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowj48tr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 09:44:08 +0000 UTC FinishedAt: 2026-08-10 09:49:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "04e57db5-0ec1-4c0b-8ae9-151a4237b5f3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "userdatum_value_store", "userdatum_drop", "userdatum_make_item", "netconsole_target_release", "netconsole_write_ext" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9kcm9wJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9tYWtlX2l0ZW0mIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3dyaXRlX2V4dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuc2FmZSBsb2NrbGVzcyB1cGRhdGUgb2YgYG50LVx1MDAzZXVzZXJkYXRhYCB3aXRoIGFuIFJDVS1wcm90ZWN0ZWQgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIGluIHRoZSBuZXRjb25zb2xlIHRyYW5zbWl0IHBhdGguIFRoZSBuZXcgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NfZmxleGAsIHBvcHVsYXRlZCB1c2luZyBgc2NucHJpbnRmYCAod2hpY2ggbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcpLCBhbmQgaXRzIGV4YWN0IHdyaXR0ZW4gbGVuZ3RoIGlzIHJlY29yZGVkIGluIGBsZW5ndGhgLiBUaGUgdHJhbnNtaXQgcGF0aCB0aGVuIHJlYWRzIGVpdGhlciB2aWEgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIChzdG9wcGluZyBhdCB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBvciBieSBleHBsaWNpdGx5IHVzaW5nIHRoZSByZWNvcmRlZCBgbGVuZ3RoYC4gSW4gYm90aCBjYXNlcywgb25seSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5dGVzIGFyZSByZWFkIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAodXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMpIGFyZSBwZXJmZWN0bHkgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHByb3Blcmx5IHVzZSBSQ1Ugd2hlbiB1cGRhdGluZyBhbmQgcmVhZGluZyB0aGUgdXNlcmRhdGEgcGF5bG9hZCwgd2hpY2ggaXMgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMgYW5kIHVzZWQgZHVyaW5nIGV4dGVuZGVkIGNvbnNvbGUgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsL2RyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDA2N2Q5NTQzNGY3Mjg0NGE0OTdkZWI1OTcyMWU5ZDZlMzgzOGQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggMDM5MTMzMDIzMjhjYy4uYjM1OGU1YzM2NzM1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDEzICYjNDM7MTUxLDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAtIEZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkIG9mIGEgdGFyZ2V0LlxuJiM0MzsgKiBAcmN1Olx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuJiM0MzsgKiBAbGVuZ3RoOlx0TGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLlxuJiM0MzsgKiBAZGF0YTpcdEZvcm1hdHRlZCBcJiMzNDsga2V5PXZhbHVlXFxuXCYjMzQ7IGVudHJpZXMsIE5VTCB0ZXJtaW5hdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxuJiM0MzsgKiBAbGVuZ3RoIGRpc2FncmVlaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4mIzQzO1x0c2l6ZV90XHRcdFx0bGVuZ3RoO1xuJiM0MztcdGNoYXJcdFx0XHRkYXRhW107XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LlxuICAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG4gICogQGdyb3VwOlx0TGlua3MgdXMgaW50byB0aGUgY29uZmlnZnMgc3Vic3lzdGVtIGhpZXJhcmNoeS5cbiAgKiBAdXNlcmRhdGFfZ3JvdXA6XHRMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5XG4tICogQHVzZXJkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXG4tICogQHVzZXJkYXRhX2xlbmd0aDpcdFN0cmluZyBsZW5ndGggb2YgdXNlcmRhdGEuXG4mIzQzOyAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC5cbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuQEAgLTE5OCw4ICYjNDM7MjEyLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdGdyb3VwO1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0dXNlcmRhdGFfZ3JvdXA7XG4tXHRjaGFyXHRcdFx0KnVzZXJkYXRhO1xuLVx0c2l6ZV90XHRcdFx0dXNlcmRhdGFfbGVuZ3RoO1xuJiM0MztcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTtcbiBcdGNoYXJcdFx0XHRzeXNkYXRhW01BWF9FWFRSQURBVEFfRU5UUllfTEVOICogTUFYX1NZU0RBVEFfSVRFTVNdO1xuIFxuIFx0LyogYml0LXdpc2Ugd2l0aCBzeXNkYXRhX2ZlYXR1cmUgYml0cyAqL1xuQEAgLTEzNTEsMTIgJiM0MzsxMzY0LDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqb2xkO1xuIFx0c3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbi1cdGNoYXIgKm9sZF9idWYgPSBOVUxMO1xuLVx0Y2hhciAqbmV3X2J1ZiA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IG9mZnNldCA9IDA7XG4gXHRpbnQgbGVuO1xuIFxuQEAgLTEzNjgsOCAmIzQzOzEzODAsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xuIFx0aWYgKGxlbikge1xuLVx0XHRuZXdfYnVmID0ga21hbGxvYyhsZW4gJiM0MzsgMSwgR0ZQX0tFUk5FTCk7XG4tXHRcdGlmICghbmV3X2J1ZilcbiYjNDM7XHRcdG5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbkBAIC0xMzc5LDIyICYjNDM7MTM5MSwyMSBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHR1ZG1faXRlbSA9IHRvX3VzZXJkYXR1bShpdGVtKTtcbiBcdFx0LyogU2tpcCB1c2VyZGF0YSB3aXRoIG5vIHZhbHVlIHNldCAqL1xuIFx0XHRpZiAodWRtX2l0ZW0tXHUwMDNldmFsdWVbMF0pIHtcbi1cdFx0XHRvZmZzZXQgJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZuZXdfYnVmW29mZnNldF0sIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LFxuJiM0MztcdFx0XHRvZmZzZXQgJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZuZXctXHUwMDNlZGF0YVtvZmZzZXRdLFxuJiM0MztcdFx0XHRcdFx0ICAgIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LFxuIFx0XHRcdFx0XHQgICAgXCYjMzQ7ICVzPSVzXFxuXCYjMzQ7LCBpdGVtLVx1MDAzZWNpX25hbWUsXG4gXHRcdFx0XHRcdCAgICB1ZG1faXRlbS1cdTAwM2V2YWx1ZSk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdFdBUk5fT05fT05DRShvZmZzZXQgIT0gbGVuKTtcbiYjNDM7XHRpZiAobmV3KVxuJiM0MztcdFx0bmV3LVx1MDAzZWxlbmd0aCA9IG9mZnNldDtcbiBcbi1cdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdG9sZF9idWYgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi1cdG50LVx1MDAzZXVzZXJkYXRhID0gbmV3X2J1Zjtcbi1cdG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWUob2xkX2J1Zik7XG4mIzQzO1x0LyogV3JpdGVycyBhcmUgc2VyaWFsaXplZCBieSBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXguICovXG4mIzQzO1x0b2xkID0gcmN1X3JlcGxhY2VfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSwgbmV3LFxuJiM0MztcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpO1xuJiM0MztcdGtmcmVlX3JjdShvbGQsIHJjdSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTY4NCw3ICYjNDM7MTY5NSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4mIzQzO1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gXHRrZnJlZShudCk7XG4gfVxuIFxuQEAgLTIyMjcsMTQgJiM0MzsyMjM4LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4gXHRcdFx0XHQgICAgICBpbnQgbXNnX2xlbixcbi1cdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbilcbiYjNDM7XHRcdFx0XHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuICNlbmRpZlxuIFxuQEAgLTIyNTEsNyAmIzQzOzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpZiAodXNlcmRhdGEpXG4gXHRcdG1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG4gXHRcdFx0XHQgICAgIHNpemVvZihudC1cdTAwM2VidWYpIC0gbXNnX2xlbiwgXCYjMzQ7JXNcJiMzNDssXG4tXHRcdFx0XHQgICAgIHVzZXJkYXRhKTtcbiYjNDM7XHRcdFx0XHQgICAgIHVzZXJkYXRhLVx1MDAzZWRhdGEpO1xuIFxuIFx0aWYgKHN5c2RhdGEpXG4gXHRcdG1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG5AQCAtMjI3MSw3ICYjNDM7MjI4MSw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcbi1cdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbilcbiYjNDM7XHRcdFx0XHQgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xuQEAgLTIyODIsMTIgJiM0MzsyMjkzLDEyIEBAIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4gXHRzeXNkYXRhX3B0ciA9IG50LVx1MDAzZXN5c2RhdGE7XG4tXHR1c2VyZGF0YV9sZW4gPSBudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGg7XG4gI2VuZGlmXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHVzZXJkYXRhX2xlbiAhPSAwKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmICh1c2VyZGF0YSkge1xuJiM0MztcdFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXHUwMDNlZGF0YTtcbiYjNDM7XHRcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVx1MDAzZWxlbmd0aDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFzeXNkYXRhX3B0ciBcdTAwMjZcdTAwMjYgc3lzZGF0YV9sZW4gIT0gMCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMzY0LDcgJiM0MzsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuIFx0XHRcdFx0aW50IG1zZ19sZW4sXG4gXHRcdFx0XHRpbnQgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4pXG4mIzQzO1x0XHRcdFx0aW50IHN5c2RhdGFfbGVuLFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRpbnQgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW47XG4gXHRjb25zdCBjaGFyICptc2dib2R5O1xuQEAgLTIzOTMsNyAmIzQzOzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHQgKiB3aWxsIGJlIHJlcGxhY2VkXG4gXHQgKi9cbiBcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcbi1cdFx0XHQgICAgIHN5c2RhdGFfbGVuKTtcbiYjNDM7XHRcdFx0ICAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNDA4LDI1ICYjNDM7MjQyMCwzMyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gc3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdCAgICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XG4gXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xuIFx0aW50IHN5c2RhdGFfbGVuID0gMDtcbiBcdGludCBsZW47XG4gXG4mIzQzO1x0LyogS2VlcHMgdGhlIHBheWxvYWQgcGlja2VkIGJlbG93IGFsaXZlIHVudGlsIHRoZSBsYXN0IHNlbmRfdWRwKCkuICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiYjNDM7XHR1c2VyZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShudC1cdTAwM2V1c2VyZGF0YSk7XG4mIzQzO1x0aWYgKHVzZXJkYXRhKVxuJiM0MztcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuICNlbmRpZlxuIFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4gXHRcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpICYjNDM7IDE7XG4gXG4gXHRsZW4gPSB3Y3R4dC1cdTAwM2VsZW4gJiM0MzsgcmVsZWFzZV9sZW4gJiM0Mzsgc3lzZGF0YV9sZW4gJiM0MzsgdXNlcmRhdGFfbGVuO1xuIFx0aWYgKGxlbiBcdTAwM2M9IE1BWF9QUklOVF9DSFVOSylcbi1cdFx0cmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Zixcbi1cdFx0XHRcdFx0XHQgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbik7XG4mIzQzO1x0XHRzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0XHRcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gXG4tXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0ICAgc3lzZGF0YV9sZW4pO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuQEAgLTI2NjksNyAmIzQzOzI2ODksNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4mIzQzO1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gI2VuZGlmXG4gXHRrZnJlZShudCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5pbmRleCBiNTZjNzBiN2UyNzQyLi5mMDY3NGMwMDE3ZmM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuQEAgLTEzLDYgJiM0MzsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuJiM0MztcdG5ldGNvbnNfdXNlcmRhdGEuc2ggXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXG4gXG4gaW5jbHVkZSAuLi8uLi8uLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbkBAIC0wLDAgJiM0MzsxLDIyOSBAQFxuJiM0MzsjIS91c3IvYmluL2VudiBiYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC5cbiYjNDM7I1xuJiM0MzsjIFRoZSBmaXJzdCBwYXJ0IGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIHRoZSB0YXJnZXQgdHJhbnNtaXRzIGZvbGxvd3Mgd2hhdFxuJiM0MzsjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZVxuJiM0MzsjIHByZXZpb3VzIG9uZSwgY2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeSwgYW5kIHNvIGRvZXMgcmVtb3ZpbmcgdGhlXG4mIzQzOyMga2V5LlxuJiM0MzsjXG4mIzQzOyMgVGhlIHNlY29uZCBwYXJ0IHJld3JpdGVzIHZhbHVlcywgY3JlYXRlcyBhbmQgZGVsZXRlcyBrZXlzLCBhbmQgY2xlYXJzIHRoZVxuJiM0MzsjIHBheWxvYWQgZW50aXJlbHkgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIGtlZXBzXG4mIzQzOyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLFxuJiM0MzsjIG9uY2Ugd2l0aCBhIHBheWxvYWQgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiBhIHNpbmdsZSBwYWNrZXQgYW5kIG9uY2UgbGFyZ2VcbiYjNDM7IyBlbm91Z2ggdG8gYmUgZnJhZ21lbnRlZC5cbiYjNDM7I1xuJiM0MzsjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzO1xuJiM0MztzZXQgLWV1byBwaXBlZmFpbFxuJiM0MztcbiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSBcJiMzNDskKHJlYWRsaW5rIC1lIFwmIzM0OyR7QkFTSF9TT1VSQ0VbMF19XCYjMzQ7KVwmIzM0OylcbiYjNDM7XG4mIzQzO3NvdXJjZSBcJiMzNDske1NDUklQVERJUn1cJiMzNDsvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXG4mIzQzO1xuJiM0MzsjIE51bWJlciBvZiB0aW1lcyBlYWNoIHRvcnR1cmUgd29ya2VyIGxvb3BzXG4mIzQzO0lURVJBVElPTlM9JHsxOi0yMDB9XG4mIzQzO1xuJiM0MzsjIEtleXMgb3duZWQgYnkgZWFjaCB0b3J0dXJlIHdvcmtlci4gV29ya2VycyBkbyBub3Qgc2hhcmUga2V5cywgc28gYSBmYWlsaW5nXG4mIzQzOyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuXG4mIzQzO0NIVVJOX0tFWT1cJiMzNDtjaHVybmtleVwmIzM0O1xuJiM0MztUUkFOU0lFTlRfS0VZPVwmIzM0O3RyYW5zaWVudGtleVwmIzM0O1xuJiM0MzsjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTktcbiYjNDM7QlVMS19LRVlTPThcbiYjNDM7XG4mIzQzO1VTRVJEQVRBX0RJUj1cJiMzNDske05FVENPTlNfUEFUSH0vdXNlcmRhdGFcJiMzNDtcbiYjNDM7IyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU31cbiYjNDM7IyBlbnRyaWVzIG9mIHRoaXMgc2l6ZSBhcmUgZW5vdWdoIHRvIGZvcmNlIGZyYWdtZW50YXRpb25cbiYjNDM7TE9OR19WQUxVRT0kKHByaW50ZiAtLSAmIzM5O3YlLjBzJiMzOTsgezEuLjE5MH0pXG4mIzQzO1xuJiM0MztmdW5jdGlvbiB3cml0ZV9rZXkoKSB7XG4mIzQzO1x0bG9jYWwgS0VZPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBWQUxVRT1cJiMzNDskezJ9XCYjMzQ7XG4mIzQzO1xuJiM0MztcdG1rZGlyIC1wIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0tFWX1cJiMzNDtcbiYjNDM7XHRlY2hvIFwmIzM0OyR7VkFMVUV9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgU2VuZCBhIHNpbmdsZSBtZXNzYWdlIGFuZCBjYXB0dXJlIGl0IG9uIHRoZSBkZXN0aW5hdGlvbiBpbnRlcmZhY2VcbiYjNDM7ZnVuY3Rpb24gc2VuZF9hbmRfY2FwdHVyZSgpIHtcbiYjNDM7XHRybSAtZiBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0MztcbiYjNDM7XHRsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwMjZcbiYjNDM7XHR3YWl0X2Zvcl9wb3J0IFwmIzM0OyR7TkFNRVNQQUNFfVwmIzM0OyBcJiMzNDske1BPUlR9XCYjMzQ7IFwmIzM0OyR7SVBfVkVSU0lPTn1cJiMzNDtcbiYjNDM7XHRlY2hvIFwmIzM0OyR7TVNHfTogJHtUQVJHRVR9XCYjMzQ7IFx1MDAzZSAvZGV2L2ttc2dcbiYjNDM7XHRidXN5d2FpdCBcJiMzNDske0JVU1lXQUlUX1RJTUVPVVR9XCYjMzQ7IHRlc3QgLXMgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgfHwgdHJ1ZVxuJiM0MztcdHBraWxsX3NvY2F0XG4mIzQzO1x0dmFsaWRhdGVfbXNnIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGV4cGVjdF9pbl9tc2coKSB7XG4mIzQzO1x0bG9jYWwgV0FOVEVEPVwmIzM0OyR7MX1cJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgISBncmVwIC1xIC0tIFwmIzM0OyR7V0FOVEVEfVwmIzM0OyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAmIzM5OyR7V0FOVEVEfSYjMzk7IG5vdCBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRjYXQgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZXhpdCBcJiMzNDske2tzZnRfZmFpbH1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHtcbiYjNDM7XHRsb2NhbCBVTldBTlRFRD1cJiMzNDskezF9XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIGdyZXAgLXEgLS0gXCYjMzQ7JHtVTldBTlRFRH1cJiMzNDsgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJiMzOTske1VOV0FOVEVEfSYjMzk7IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGNhdCBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IFwmIzM0OyR7a3NmdF9mYWlsfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgRXZlcnkgd3JpdGUgcHVibGlzaGVzIGEgbmV3IHBheWxvYWQgYW5kIGZyZWVzIHRoZSBwcmV2aW91cyBvbmUuIEFuIGVtcHR5XG4mIzQzOyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGVcbiYjNDM7IyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuXG4mIzQzO2Z1bmN0aW9uIGNodXJuX3ZhbHVlKCkge1xuJiM0MztcdGxvY2FsIGlcbiYjNDM7XG4mIzQzO1x0Zm9yIGkgaW4gJChzZXEgXCYjMzQ7JHtJVEVSQVRJT05TfVwmIzM0OylcbiYjNDM7XHRkb1xuJiM0MztcdFx0ZWNobyBcJiMzNDt2YWx1ZSR7aX1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcJiMzNDtcbiYjNDM7XHRcdGVjaG8gXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgQ3JlYXRlIGFuZCBkZWxldGUgYSBrZXkgdW5kZXJuZWF0aCB0aGUgc2VuZGVyXG4mIzQzO2Z1bmN0aW9uIGNodXJuX2tleSgpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7SVRFUkFUSU9OU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdG1rZGlyIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9XCYjMzQ7XG4mIzQzO1x0XHRlY2hvIFwmIzM0O3RyYW5zaWVudCR7aX1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO1x0XHRybWRpciBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWRcbiYjNDM7ZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7SVRFUkFUSU9OU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JHtNU0d9OiAke1RBUkdFVH0gJHtpfVwmIzM0OyBcdTAwM2UgL2Rldi9rbXNnXG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvclxuJiM0MztmdW5jdGlvbiBydW5fd29ya2VycygpIHtcbiYjNDM7XHRsb2NhbCBQSURTPSgpXG4mIzQzO1x0bG9jYWwgV09SS0VSXG4mIzQzO1x0bG9jYWwgUkVUPTBcbiYjNDM7XHRsb2NhbCBQSURcbiYjNDM7XG4mIzQzO1x0Zm9yIFdPUktFUiBpbiBcJiMzNDskQFwmIzM0O1xuJiM0MztcdGRvXG4mIzQzO1x0XHRcJiMzNDske1dPUktFUn1cJiMzNDsgXHUwMDI2XG4mIzQzO1x0XHRQSURTJiM0Mzs9KFwmIzM0OyQhXCYjMzQ7KVxuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0IyBSZWFwIGV2ZXJ5IHdvcmtlciBiZWZvcmUgcmVwb3J0aW5nIGEgZmFpbHVyZSwgb3RoZXJ3aXNlIGEgc3Vydml2aW5nXG4mIzQzO1x0IyB3b3JrZXIga2VlcHMgd3JpdGluZyB0byBjb25maWdmcyB3aGlsZSB0aGUgZXhpdCB0cmFwIGNsZWFucyBpdCB1cC5cbiYjNDM7XHRmb3IgUElEIGluIFwmIzM0OyR7UElEU1tAXX1cJiMzNDtcbiYjNDM7XHRkb1xuJiM0MztcdFx0d2FpdCBcJiMzNDske1BJRH1cJiMzNDsgfHwgUkVUPTFcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdGlmIFtbIFwmIzM0OyR7UkVUfVwmIzM0OyAtbmUgMCBdXVxuJiM0MztcdHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogdXNlcmRhdGEgdG9ydHVyZSB3b3JrZXIgZmFpbGVkXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7QlVMS19LRVlTfVwmIzM0OylcbiYjNDM7XHRkb1xuJiM0MztcdFx0d3JpdGVfa2V5IFwmIzM0O2J1bGske2l9XCYjMzQ7IFwmIzM0OyR7TE9OR19WQUxVRX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0JVTEtfS0VZU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdHJtZGlyIFwmIzM0OyR7VVNFUkRBVEFfRElSfS9idWxrJHtpfVwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7IyBTdGFydCBoZXJlICNcbiYjNDM7IyA9PT09PT09PT09ICNcbiYjNDM7XG4mIzQzO21vZHByb2JlIG5ldGRldnNpbSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4mIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcbiYjNDM7SVBfVkVSU0lPTj1cJiMzNDtpcHY0XCYjMzQ7XG4mIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxuJiM0MztPVVRQVVRfRklMRT1cJiMzNDsvdG1wLyR7VEFSR0VUfVwmIzM0O1xuJiM0MztcbiYjNDM7IyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXG4mIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbiYjNDM7IyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXG4mIzQzO2VjaG8gXCYjMzQ7NiA1XCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xuJiM0MzsjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzXG4mIzQzO3NldF9uZXR3b3JrIFwmIzM0OyR7SVBfVkVSU0lPTn1cJiMzNDtcbiYjNDM7IyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxuJiM0MztjcmVhdGVfZHluYW1pY190YXJnZXRcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjMVxuJiM0MzsjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvblxuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0Mzt3cml0ZV9rZXkgXCYjMzQ7JHtVU0VSREFUQV9LRVl9XCYjMzQ7IFwmIzM0O2ZpcnN0XCYjMzQ7XG4mIzQzO3NlbmRfYW5kX2NhcHR1cmVcbiYjNDM7ZXhwZWN0X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3RcJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjMlxuJiM0MzsjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZFxuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0Mzt3cml0ZV9rZXkgXCYjMzQ7JHtVU0VSREFUQV9LRVl9XCYjMzQ7IFwmIzM0O3NlY29uZFwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9pbl9tc2cgXCYjMzQ7JHtVU0VSREFUQV9LRVl9PXNlY29uZFwmIzM0O1xuJiM0MztleHBlY3Rfbm90X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3RcJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjM1xuJiM0MzsjIENsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnlcbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ZWNobyBcdTAwM2UgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZVwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9ub3RfaW5fbXNnIFwmIzM0OyR7VVNFUkRBVEFfS0VZfT1cJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjNFxuJiM0MzsjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO3dyaXRlX2tleSBcJiMzNDske1VTRVJEQVRBX0tFWX1cJiMzNDsgXCYjMzQ7dGhpcmRcJiMzNDtcbiYjNDM7cm1kaXIgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfVwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9ub3RfaW5fbXNnIFwmIzM0OyR7VVNFUkRBVEFfS0VZfT1cJiMzNDtcbiYjNDM7cm0gXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDtcbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyMgVEVTVCAjNVxuJiM0MzsjIFRvcnR1cmUgdGhlIHBheWxvYWQgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsXG4mIzQzOyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWRcbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7d3JpdGVfa2V5IFwmIzM0OyR7Q0hVUk5fS0VZfVwmIzM0OyBcJiMzNDske1VTRVJEQVRBX1ZBTFVFfVwmIzM0O1xuJiM0MztydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuJiM0MztcbiYjNDM7Y3JlYXRlX2J1bGtfa2V5c1xuJiM0MztydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuJiM0MztkZWxldGVfYnVsa19rZXlzXG4mIzQzO1xuJiM0MztleGl0IFwmIzM0OyR7a3NmdF9wYXNzfVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJkYXR1bV92YWx1ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fbWFrZV9pdGVtJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV93cml0ZV9leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHByb3Blcmx5IHVzZSBSQ1Ugd2hlbiB1cGRhdGluZyBhbmQgcmVhZGluZyB0aGUgdXNlcmRhdGEgcGF5bG9hZCwgd2hpY2ggaXMgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMgYW5kIHVzZWQgZHVyaW5nIGV4dGVuZGVkIGNvbnNvbGUgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsL2RyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDA2N2Q5NTQzNGY3Mjg0NGE0OTdkZWI1OTcyMWU5ZDZlMzgzOGQ4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDAzOTEzMzAyMzI4Y2MuLmIzNThlNWMzNjczNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTE1MSwxMyAmIzQzOzE1MSwyNyBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAJU1RBVEVfREVBQ1RJVkFURUQsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC4KJiM0MzsgKiBAcmN1OglVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCiYjNDM7ICogQGxlbmd0aDoJTGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLgomIzQzOyAqIEBkYXRhOglGb3JtYXR0ZWQgJiMzNDsga2V5PXZhbHVlXG4mIzM0OyBlbnRyaWVzLCBOVUwgdGVybWluYXRlZC4KJiM0MzsgKgomIzQzOyAqIEltbXV0YWJsZSBvbmNlIHB1Ymxpc2hlZCwgc28gdGhlIHRyYW5zbWl0IHBhdGggbmV2ZXIgb2JzZXJ2ZXMgQGRhdGEgYW5kCiYjNDM7ICogQGxlbmd0aCBkaXNhZ3JlZWluZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7CiYjNDM7CXN0cnVjdCByY3VfaGVhZAkJcmN1OwomIzQzOwlzaXplX3QJCQlsZW5ndGg7CiYjNDM7CWNoYXIJCQlkYXRhW107CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuCiAgKiBAbGlzdDoJTGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuCiAgKiBAZ3JvdXA6CUxpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuCiAgKiBAdXNlcmRhdGFfZ3JvdXA6CUxpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHkKLSAqIEB1c2VyZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKLSAqIEB1c2VyZGF0YV9sZW5ndGg6CVN0cmluZyBsZW5ndGggb2YgdXNlcmRhdGEuCiYjNDM7ICogQHVzZXJkYXRhOgkJQ2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC4KICAqIEBzeXNkYXRhOgkJQ2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZAogICogQHN5c2RhdGFfZmllbGRzOglTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuCiAgKiBAbXNnY291bnRlcjoJTWVzc2FnZSBzZW50IGNvdW50ZXIuCkBAIC0xOTgsOCAmIzQzOzIxMiw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwogCXN0cnVjdCBjb25maWdfZ3JvdXAJZ3JvdXA7CiAJc3RydWN0IGNvbmZpZ19ncm91cAl1c2VyZGF0YV9ncm91cDsKLQljaGFyCQkJKnVzZXJkYXRhOwotCXNpemVfdAkJCXVzZXJkYXRhX2xlbmd0aDsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhOwogCWNoYXIJCQlzeXNkYXRhW01BWF9FWFRSQURBVEFfRU5UUllfTEVOICogTUFYX1NZU0RBVEFfSVRFTVNdOwogCiAJLyogYml0LXdpc2Ugd2l0aCBzeXNkYXRhX2ZlYXR1cmUgYml0cyAqLwpAQCAtMTM1MSwxMiAmIzQzOzEzNjQsMTEgQEAgc3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewomIzQzOwlzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDsKIAlzdHJ1Y3QgdXNlcmRhdHVtICp1ZG1faXRlbTsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0JY2hhciAqb2xkX2J1ZiA9IE5VTEw7Ci0JY2hhciAqbmV3X2J1ZiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb2Zmc2V0ID0gMDsKIAlpbnQgbGVuOwogCkBAIC0xMzY4LDggJiM0MzsxMzgwLDggQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAogCS8qIEFsbG9jYXRlIG5ldyBidWZmZXIgKi8KIAlpZiAobGVuKSB7Ci0JCW5ld19idWYgPSBrbWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuZXdfYnVmKQomIzQzOwkJbmV3ID0ga21hbGxvY19mbGV4KCpuZXcsIGRhdGEsIGxlbiAmIzQzOyAxKTsKJiM0MzsJCWlmICghbmV3KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMzc5LDIyICYjNDM7MTM5MSwyMSBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQl1ZG1faXRlbSA9IHRvX3VzZXJkYXR1bShpdGVtKTsKIAkJLyogU2tpcCB1c2VyZGF0YSB3aXRoIG5vIHZhbHVlIHNldCAqLwogCQlpZiAodWRtX2l0ZW0tJmd0O3ZhbHVlWzBdKSB7Ci0JCQlvZmZzZXQgJiM0Mzs9IHNjbnByaW50ZigmYW1wO25ld19idWZbb2Zmc2V0XSwgbGVuICYjNDM7IDEgLSBvZmZzZXQsCiYjNDM7CQkJb2Zmc2V0ICYjNDM7PSBzY25wcmludGYoJmFtcDtuZXctJmd0O2RhdGFbb2Zmc2V0XSwKJiM0MzsJCQkJCSAgICBsZW4gJiM0MzsgMSAtIG9mZnNldCwKIAkJCQkJICAgICYjMzQ7ICVzPSVzXG4mIzM0OywgaXRlbS0mZ3Q7Y2lfbmFtZSwKIAkJCQkJICAgIHVkbV9pdGVtLSZndDt2YWx1ZSk7CiAJCX0KIAl9CiAKIAlXQVJOX09OX09OQ0Uob2Zmc2V0ICE9IGxlbik7CiYjNDM7CWlmIChuZXcpCiYjNDM7CQluZXctJmd0O2xlbmd0aCA9IG9mZnNldDsKIAotCS8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3RhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKLQlvbGRfYnVmID0gbnQtJmd0O3VzZXJkYXRhOwotCW50LSZndDt1c2VyZGF0YSA9IG5ld19idWY7Ci0JbnQtJmd0O3VzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWUob2xkX2J1Zik7CiYjNDM7CS8qIFdyaXRlcnMgYXJlIHNlcmlhbGl6ZWQgYnkgZHluYW1pY19uZXRjb25zb2xlX211dGV4LiAqLwomIzQzOwlvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LSZndDt1c2VyZGF0YSwgbmV3LAomIzQzOwkJCQkgIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2R5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpOwomIzQzOwlrZnJlZV9yY3Uob2xkLCByY3UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjg0LDcgJiM0MzsxNjk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEpKTsKIAlrZnJlZShudCk7CiB9CiAKQEAgLTIyMjcsMTQgJiM0MzsyMjM4LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQkgICAgICBjb25zdCBjaGFyICptc2csCiAJCQkJICAgICAgaW50IG1zZ19sZW4sCi0JCQkJICAgICAgaW50IHJlbGVhc2VfbGVuKQomIzQzOwkJCQkgICAgICBpbnQgcmVsZWFzZV9sZW4sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSkKIHsKLQljb25zdCBjaGFyICp1c2VyZGF0YSA9IE5VTEw7CiAJY29uc3QgY2hhciAqc3lzZGF0YSA9IE5VTEw7CiAJY29uc3QgY2hhciAqcmVsZWFzZTsKIAogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKLQl1c2VyZGF0YSA9IG50LSZndDt1c2VyZGF0YTsKIAlzeXNkYXRhID0gbnQtJmd0O3N5c2RhdGE7CiAjZW5kaWYKIApAQCAtMjI1MSw3ICYjNDM7MjI2MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAlpZiAodXNlcmRhdGEpCiAJCW1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZigmYW1wO250LSZndDtidWZbbXNnX2xlbl0sCiAJCQkJICAgICBzaXplb2YobnQtJmd0O2J1ZikgLSBtc2dfbGVuLCAmIzM0OyVzJiMzNDssCi0JCQkJICAgICB1c2VyZGF0YSk7CiYjNDM7CQkJCSAgICAgdXNlcmRhdGEtJmd0O2RhdGEpOwogCiAJaWYgKHN5c2RhdGEpCiAJCW1zZ19sZW4gJiM0Mzs9IHNjbnByaW50ZigmYW1wO250LSZndDtidWZbbXNnX2xlbl0sCkBAIC0yMjcxLDcgJiM0MzsyMjgxLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKQogCiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCSBjb25zdCBjaGFyICptc2dib2R5X3B0ciwgaW50IGhlYWRlcl9sZW4sCi0JCQkJIGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKQomIzQzOwkJCQkgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4sCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpCiB7CiAJY29uc3QgY2hhciAqdXNlcmRhdGFfcHRyID0gTlVMTDsKIAljb25zdCBjaGFyICpzeXNkYXRhX3B0ciA9IE5VTEw7CkBAIC0yMjgyLDEyICYjNDM7MjI5MywxMiBAQCBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCWludCB1c2VyZGF0YV9sZW4gPSAwOwogCiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwotCXVzZXJkYXRhX3B0ciA9IG50LSZndDt1c2VyZGF0YTsKIAlzeXNkYXRhX3B0ciA9IG50LSZndDtzeXNkYXRhOwotCXVzZXJkYXRhX2xlbiA9IG50LSZndDt1c2VyZGF0YV9sZW5ndGg7CiAjZW5kaWYKLQlpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgJmFtcDsmYW1wOyB1c2VyZGF0YV9sZW4gIT0gMCkpCi0JCXJldHVybjsKJiM0MzsJaWYgKHVzZXJkYXRhKSB7CiYjNDM7CQl1c2VyZGF0YV9wdHIgPSB1c2VyZGF0YS0mZ3Q7ZGF0YTsKJiM0MzsJCXVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLSZndDtsZW5ndGg7CiYjNDM7CX0KIAogCWlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyICZhbXA7JmFtcDsgc3lzZGF0YV9sZW4gIT0gMCkpCiAJCXJldHVybjsKQEAgLTIzNjQsNyAmIzQzOzIzNzUsOCBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkJY29uc3QgY2hhciAqbXNnLAogCQkJCWludCBtc2dfbGVuLAogCQkJCWludCByZWxlYXNlX2xlbiwKLQkJCQlpbnQgc3lzZGF0YV9sZW4pCiYjNDM7CQkJCWludCBzeXNkYXRhX2xlbiwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKQogewogCWludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjsKIAljb25zdCBjaGFyICptc2dib2R5OwpAQCAtMjM5Myw3ICYjNDM7MjQwNSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkgKiB3aWxsIGJlIHJlcGxhY2VkCiAJICovCiAJc2VuZF9mcmFnbWVudGVkX2JvZHkobnQsIG1zZ2JvZHksIGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuLAotCQkJICAgICBzeXNkYXRhX2xlbik7CiYjNDM7CQkJICAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpOwogfQogCiAvKioKQEAgLTI0MDgsMjUgJiM0MzsyNDIwLDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIHN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCSAgICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KQogewomIzQzOwljb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMOwogCWludCB1c2VyZGF0YV9sZW4gPSAwOwogCWludCByZWxlYXNlX2xlbiA9IDA7CiAJaW50IHN5c2RhdGFfbGVuID0gMDsKIAlpbnQgbGVuOwogCiYjNDM7CS8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwogCXN5c2RhdGFfbGVuID0gcHJlcGFyZV9zeXNkYXRhKG50LCB3Y3R4dCk7Ci0JdXNlcmRhdGFfbGVuID0gbnQtJmd0O3VzZXJkYXRhX2xlbmd0aDsKJiM0MzsJdXNlcmRhdGEgPSByY3VfZGVyZWZlcmVuY2UobnQtJmd0O3VzZXJkYXRhKTsKJiM0MzsJaWYgKHVzZXJkYXRhKQomIzQzOwkJdXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtJmd0O2xlbmd0aDsKICNlbmRpZgogCWlmIChudC0mZ3Q7cmVsZWFzZSkKIAkJcmVsZWFzZV9sZW4gPSBzdHJsZW4oaW5pdF91dHNuYW1lKCktJmd0O3JlbGVhc2UpICYjNDM7IDE7CiAKIAlsZW4gPSB3Y3R4dC0mZ3Q7bGVuICYjNDM7IHJlbGVhc2VfbGVuICYjNDM7IHN5c2RhdGFfbGVuICYjNDM7IHVzZXJkYXRhX2xlbjsKIAlpZiAobGVuICZsdDs9IE1BWF9QUklOVF9DSFVOSykKLQkJcmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LSZndDtvdXRidWYsCi0JCQkJCQkgd2N0eHQtJmd0O2xlbiwgcmVsZWFzZV9sZW4pOwomIzQzOwkJc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtJmd0O291dGJ1Ziwgd2N0eHQtJmd0O2xlbiwKJiM0MzsJCQkJCSAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTsKJiM0MzsJZWxzZQomIzQzOwkJc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtJmd0O291dGJ1Ziwgd2N0eHQtJmd0O2xlbiwgcmVsZWFzZV9sZW4sCiYjNDM7CQkJCSAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpOwogCi0JcmV0dXJuIHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuLAotCQkJCSAgIHN5c2RhdGFfbGVuKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCkBAIC0yNjY5LDcgJiM0MzsyNjg5LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJbmV0cG9sbF9jbGVhbnVwKCZhbXA7bnQtJmd0O25wKTsKICNpZmRlZglDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCi0Ja2ZyZWUobnQtJmd0O3VzZXJkYXRhKTsKJiM0MzsJa2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LSZndDt1c2VyZGF0YSkpOwogI2VuZGlmCiAJa2ZyZWUobnQpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBURVNUX1BST0dTIDo9IFwKIAluZXRjb25zX3Jlc3VtZS5zaCBcCiAJbmV0Y29uc19zeXNkYXRhLnNoIFwKIAluZXRjb25zX3RvcnR1cmUuc2ggXAomIzQzOwluZXRjb25zX3VzZXJkYXRhLnNoIFwKICMgZW5kIG9mIFRFU1RfUFJPR1MKIAogaW5jbHVkZSAuLi8uLi8uLi9saWIubWsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoCkBAIC0wLDAgJiM0MzsxLDIyOSBAQAomIzQzOyMhL3Vzci9iaW4vZW52IGJhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7IyBFeGVyY2lzZSB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLgomIzQzOyMKJiM0MzsjIFRoZSBmaXJzdCBwYXJ0IGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIHRoZSB0YXJnZXQgdHJhbnNtaXRzIGZvbGxvd3Mgd2hhdAomIzQzOyMgY29uZmlnZnMgc2F5czogYSB2YWx1ZSBzaG93cyB1cCBpbiB0aGUgbmV4dCBtZXNzYWdlLCBhbiB1cGRhdGUgcmVwbGFjZXMgdGhlCiYjNDM7IyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZQomIzQzOyMga2V5LgomIzQzOyMKJiM0MzsjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGUKJiM0MzsjIHBheWxvYWQgZW50aXJlbHkgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIGtlZXBzCiYjNDM7IyBwaWNraW5nIHVwIHBheWxvYWRzIHRoYXQgYXJlIGJlaW5nIHJlcGxhY2VkIHVuZGVybmVhdGggaXQuIEl0IHJ1bnMgdHdpY2UsCiYjNDM7IyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlCiYjNDM7IyBlbm91Z2ggdG8gYmUgZnJhZ21lbnRlZC4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7c2V0IC1ldW8gcGlwZWZhaWwKJiM0MzsKJiM0MztTQ1JJUFRESVI9JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDspCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7JHtTQ1JJUFRESVJ9JiMzNDsvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoCiYjNDM7CiYjNDM7IyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wcwomIzQzO0lURVJBVElPTlM9JHsxOi0yMDB9CiYjNDM7CiYjNDM7IyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZwomIzQzOyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuCiYjNDM7Q0hVUk5fS0VZPSYjMzQ7Y2h1cm5rZXkmIzM0OwomIzQzO1RSQU5TSUVOVF9LRVk9JiMzNDt0cmFuc2llbnRrZXkmIzM0OwomIzQzOyMgTnVtYmVyIG9mIGtleXMgdXNlZCB0byBwdXNoIGEgbWVzc2FnZSBwYXN0IE1BWF9QUklOVF9DSFVOSwomIzQzO0JVTEtfS0VZUz04CiYjNDM7CiYjNDM7VVNFUkRBVEFfRElSPSYjMzQ7JHtORVRDT05TX1BBVEh9L3VzZXJkYXRhJiMzNDsKJiM0MzsjIFZhbHVlcyBhcmUgY2FwcGVkIGF0IE1BWF9FWFRSQURBVEFfVkFMVUVfTEVOKDIwMCkgYnl0ZXMsIHNvICR7QlVMS19LRVlTfQomIzQzOyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uCiYjNDM7TE9OR19WQUxVRT0kKHByaW50ZiAtLSAmIzM5O3YlLjBzJiMzOTsgezEuLjE5MH0pCiYjNDM7CiYjNDM7ZnVuY3Rpb24gd3JpdGVfa2V5KCkgewomIzQzOwlsb2NhbCBLRVk9JiMzNDskezF9JiMzNDsKJiM0MzsJbG9jYWwgVkFMVUU9JiMzNDskezJ9JiMzNDsKJiM0MzsKJiM0MzsJbWtkaXIgLXAgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9JiMzNDsKJiM0MzsJZWNobyAmIzM0OyR7VkFMVUV9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0tFWX0vdmFsdWUmIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlCiYjNDM7ZnVuY3Rpb24gc2VuZF9hbmRfY2FwdHVyZSgpIHsKJiM0MzsJcm0gLWYgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CiYjNDM7CWxpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmYW1wOwomIzQzOwl3YWl0X2Zvcl9wb3J0ICYjMzQ7JHtOQU1FU1BBQ0V9JiMzNDsgJiMzNDske1BPUlR9JiMzNDsgJiMzNDske0lQX1ZFUlNJT059JiMzNDsKJiM0MzsJZWNobyAmIzM0OyR7TVNHfTogJHtUQVJHRVR9JiMzNDsgJmd0OyAvZGV2L2ttc2cKJiM0MzsJYnVzeXdhaXQgJiMzNDske0JVU1lXQUlUX1RJTUVPVVR9JiMzNDsgdGVzdCAtcyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgfHwgdHJ1ZQomIzQzOwlwa2lsbF9zb2NhdAomIzQzOwl2YWxpZGF0ZV9tc2cgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGV4cGVjdF9pbl9tc2coKSB7CiYjNDM7CWxvY2FsIFdBTlRFRD0mIzM0OyR7MX0mIzM0OwomIzQzOwomIzQzOwlpZiAhIGdyZXAgLXEgLS0gJiMzNDske1dBTlRFRH0mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAmIzM5OyR7V0FOVEVEfSYjMzk7IG5vdCBmb3VuZCBpbiAke09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWNhdCAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAmIzM0OyR7a3NmdF9mYWlsfSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGV4cGVjdF9ub3RfaW5fbXNnKCkgewomIzQzOwlsb2NhbCBVTldBTlRFRD0mIzM0OyR7MX0mIzM0OwomIzQzOwomIzQzOwlpZiBncmVwIC1xIC0tICYjMzQ7JHtVTldBTlRFRH0mIzM0OyAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAmIzM5OyR7VU5XQU5URUR9JiMzOTsgZm91bmQgaW4gJHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQljYXQgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MzsjIEV2ZXJ5IHdyaXRlIHB1Ymxpc2hlcyBhIG5ldyBwYXlsb2FkIGFuZCBmcmVlcyB0aGUgcHJldmlvdXMgb25lLiBBbiBlbXB0eQomIzQzOyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGUKJiM0MzsjIHRhcmdldCB0aHJvdWdoIGhhdmluZyBubyBwYXlsb2FkIGF0IGFsbC4KJiM0MztmdW5jdGlvbiBjaHVybl92YWx1ZSgpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCWVjaG8gJiMzNDt2YWx1ZSR7aX0mIzM0OyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZSYjMzQ7CiYjNDM7CQllY2hvICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlJiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjIENyZWF0ZSBhbmQgZGVsZXRlIGEga2V5IHVuZGVybmVhdGggdGhlIHNlbmRlcgomIzQzO2Z1bmN0aW9uIGNodXJuX2tleSgpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCW1rZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0mIzM0OwomIzQzOwkJZWNobyAmIzM0O3RyYW5zaWVudCR7aX0mIzM0OyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0vdmFsdWUmIzM0OwomIzQzOwkJcm1kaXIgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWQKJiM0MztmdW5jdGlvbiBzZW5kX21lc3NhZ2VzKCkgewomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluICQoc2VxICYjMzQ7JHtJVEVSQVRJT05TfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJZWNobyAmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7aX0mIzM0OyAmZ3Q7IC9kZXYva21zZwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgUnVuIHRoZSB3b3JrZXJzIGNvbmN1cnJlbnRseSBhbmQgZmFpbCBpZiBhbnkgb2YgdGhlbSBoaXRzIGFuIGVycm9yCiYjNDM7ZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7CiYjNDM7CWxvY2FsIFBJRFM9KCkKJiM0MzsJbG9jYWwgV09SS0VSCiYjNDM7CWxvY2FsIFJFVD0wCiYjNDM7CWxvY2FsIFBJRAomIzQzOwomIzQzOwlmb3IgV09SS0VSIGluICYjMzQ7JEAmIzM0OwomIzQzOwlkbwomIzQzOwkJJiMzNDske1dPUktFUn0mIzM0OyAmYW1wOwomIzQzOwkJUElEUyYjNDM7PSgmIzM0OyQhJiMzNDspCiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJIyBSZWFwIGV2ZXJ5IHdvcmtlciBiZWZvcmUgcmVwb3J0aW5nIGEgZmFpbHVyZSwgb3RoZXJ3aXNlIGEgc3Vydml2aW5nCiYjNDM7CSMgd29ya2VyIGtlZXBzIHdyaXRpbmcgdG8gY29uZmlnZnMgd2hpbGUgdGhlIGV4aXQgdHJhcCBjbGVhbnMgaXQgdXAuCiYjNDM7CWZvciBQSUQgaW4gJiMzNDske1BJRFNbQF19JiMzNDsKJiM0MzsJZG8KJiM0MzsJCXdhaXQgJiMzNDske1BJRH0mIzM0OyB8fCBSRVQ9MQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlmIFtbICYjMzQ7JHtSRVR9JiMzNDsgLW5lIDAgXV0KJiM0MzsJdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZCYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBjcmVhdGVfYnVsa19rZXlzKCkgewomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluICQoc2VxICYjMzQ7JHtCVUxLX0tFWVN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQl3cml0ZV9rZXkgJiMzNDtidWxrJHtpfSYjMzQ7ICYjMzQ7JHtMT05HX1ZBTFVFfSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gZGVsZXRlX2J1bGtfa2V5cygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7QlVMS19LRVlTfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJcm1kaXIgJiMzNDske1VTRVJEQVRBX0RJUn0vYnVsayR7aX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgPT09PT09PT09PSAjCiYjNDM7IyBTdGFydCBoZXJlICMKJiM0MzsjID09PT09PT09PT0gIwomIzQzOwomIzQzO21vZHByb2JlIG5ldGRldnNpbSAyJmd0OyAvZGV2L251bGwgfHwgdHJ1ZQomIzQzO21vZHByb2JlIG5ldGNvbnNvbGUgMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0MzsKJiM0MztJUF9WRVJTSU9OPSYjMzQ7aXB2NCYjMzQ7CiYjNDM7IyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlCiYjNDM7T1VUUFVUX0ZJTEU9JiMzNDsvdG1wLyR7VEFSR0VUfSYjMzQ7CiYjNDM7CiYjNDM7IyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kCiYjNDM7Y2hlY2tfZm9yX2RlcGVuZGVuY2llcwomIzQzOyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KQomIzQzO2VjaG8gJiMzNDs2IDUmIzM0OyAmZ3Q7IC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdAomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7IyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXMKJiM0MztzZXRfbmV0d29yayAmIzM0OyR7SVBfVkVSU0lPTn0mIzM0OwomIzQzOyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGUKJiM0MztjcmVhdGVfZHluYW1pY190YXJnZXQKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjMQomIzQzOyMgQSB2YWx1ZSB3cml0dGVuIHRvIGNvbmZpZ2ZzIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uCiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0Mzt3cml0ZV9rZXkgJiMzNDske1VTRVJEQVRBX0tFWX0mIzM0OyAmIzM0O2ZpcnN0JiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT1maXJzdCYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzIKJiM0MzsjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZAomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtVU0VSREFUQV9LRVl9JiMzNDsgJiMzNDtzZWNvbmQmIzM0OwomIzQzO3NlbmRfYW5kX2NhcHR1cmUKJiM0MztleHBlY3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PXNlY29uZCYjMzQ7CiYjNDM7ZXhwZWN0X25vdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3QmIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICMzCiYjNDM7IyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MztlY2hvICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9L3ZhbHVlJiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X25vdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09JiMzNDsKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjNAomIzQzOyMgUmVtb3ZpbmcgdGhlIGtleSBkcm9wcyB0aGUgZW50cnkKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7VVNFUkRBVEFfS0VZfSYjMzQ7ICYjMzQ7dGhpcmQmIzM0OwomIzQzO3JtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfSYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PSYjMzQ7CiYjNDM7cm0gJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzUKJiM0MzsjIFRvcnR1cmUgdGhlIHBheWxvYWQgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsCiYjNDM7IyBmaXJzdCB1bmZyYWdtZW50ZWQgYW5kIHRoZW4gZnJhZ21lbnRlZAomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtDSFVSTl9LRVl9JiMzNDsgJiMzNDske1VTRVJEQVRBX1ZBTFVFfSYjMzQ7CiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXMKJiM0MzsKJiM0MztjcmVhdGVfYnVsa19rZXlzCiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXMKJiM0MztkZWxldGVfYnVsa19rZXlzCiYjNDM7CiYjNDM7ZXhpdCAmIzM0OyR7a3NmdF9wYXNzfSYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGRvZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGFuZCBhZGRzIGEgc2VsZi10ZXN0LCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCBpZiB0aG9zZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYXR0YWNrIHN1cmZhY2VzIG9yIG1vZGlmeSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIGEgd2F5IHRoYXTigJlzIHdvcnRoIGZ1enppbmcuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyBub3QganVzdCBhIHJlZmFjdG9yaW5nIG9yIGNsZWFudXAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCBhbmQsIG1vcmUgc2lnbmlmaWNhbnRseSwgY29udmVydHMgdGhlIGB1c2VyZGF0YWAgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHRvIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGhhbmRsZXMgaXRzIHVzZXIgZGF0YS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgcmFjZSBjb25kaXRpb24gdnVsbmVyYWJpbGl0aWVzLCBhbmQgdGh1cywgZnV6emluZyBpcyBhIHN0cm9uZyBjb25zaWRlcmF0aW9uLgoKTG9va2luZyBkZWVwZXIsIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB1cGRhdGVfdXNlcmRhdGFgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYC4gSXQgc2VlbXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgaW52b2x2ZWQgaW4gc2VuZGluZyBhbmQgbWFuYWdpbmcgdGhlIG5ldGNvbnNvbGUgbWVzc2FnZXMuIFRoZSBtb3N0IGludGVyZXN0aW5nIGZ1bmN0aW9uIGlzIGBzZW5kX2V4dF9tc2dfdWRwYCwgYXMgaXQgbm93IGluY2x1ZGVzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGl0IGlzIGJlaW5nIGd1YXJkZWQgd2l0aCBSQ1UgcHJvdGVjdGlvbi4gVGhpcyBpcyB0aGUgYXJlYSBvZiBpbnRlcmVzdC4KClRoZSBmYWN0IHRoYXQgYG5ldGNvbnNvbGVgIGlzIGEgbmV0d29yayBjb25zb2xlIGRyaXZlciBhbmQgY29uZmlndXJhYmxlIHZpYSBjb25maWdmcyBmdXJ0aGVyIGluY3JlYXNlcyBpdHMgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLCBwYXJ0aWN1bGFybHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgUkNVIHByb3RlY3Rpb24gb2YgdXNlcmRhdGEuIFRodXMsIGFueSByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIHdoYXQgSSB3aWxsIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4KCk5vdyBJIG5lZWQgdG8gcmVmaW5lIHRoZSBmb2N1cy4gSSBzZWUgdGhhdCB0aGUgYHVwZGF0ZV91c2VyZGF0YWAgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYCBhcmUgc3RhdGljLiBJIGtub3cgdGhhdCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgY2FsbGVkIGZyb20gYHdyaXRlX2V4dF9tc2dgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2V4dF93cml0ZWAuIFRoZXNlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtIGFyZSBpbXBvcnRhbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBmaWxlIHRvIHNlZSBob3cgZXhhY3RseSB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBkZXNpZ25pbmcgZWZmZWN0aXZlIGZ1enppbmcgY2FtcGFpZ25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV9leHRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgc2VuZF9leHRfbXNnX3VkcGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgc2VuZF9leHRfbXNnX3VkcGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhYm91dCBzZW5kaW5nIHNvbWUga2luZCBvZiBleHRlcm5hbCBtZXNzYWdlIG92ZXIgVURQLiBUaGUgJiMzNDtleHQmIzM0OyBwYXJ0IHN1Z2dlc3RzIGl0JiMzOTtzIG5vdCBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBwcm9jZXNzIG9yIG1vZHVsZSDigJMgaXQmIzM5O3MgZ29pbmcgKm91dCogc29tZXdoZXJlLiBVRFAgaW1wbGllcyBhIGNvbm5lY3Rpb25sZXNzLCBkYXRhZ3JhbS1iYXNlZCBwcm90b2NvbCwgd2hpY2ggZ2l2ZXMgdXMgc29tZSBpbml0aWFsIGFzc3VtcHRpb25zIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNvbW11bmljYXRpb246IHBvdGVudGlhbGx5IHVucmVsaWFibGUsIGZvY3VzZWQgb24gc3BlZWQsIGFuZCBsaWtlbHkgaGFuZGxpbmcgaW5kaXZpZHVhbCBwYWNrZXRzIG9mIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGluIHRoZXNlIG1lc3NhZ2VzLCB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyBzZW50LCBhbmQgd2h5IHRoaXMgbWV0aG9kIGlzIHRoZSBvbmUgY2hvc2VuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCBmaW5kIHNvbWUgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjb250ZXh0LiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGlzIG1ldGhvZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgY2FsbGVkLCBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW50ZW5kZWQgZGVzdGluYXRpb24gYW5kIHB1cnBvc2Ugb2YgdGhlIGNvbW11bmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM3ND1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MTEtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQxMjogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDEzLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MjA6c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjEtXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NzM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXHRcdGlmIChleHRlbmRlZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDkzOlx0XHRcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk0LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0Y29uc29sZV93cml0ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBuZXRjb25zb2xlX3dyaXRlYCwgd2hpY2ggSSByZWNvZ25pemUgYXMgdGhlIGVudHJ5IHBvaW50LiBOb3csIHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBhbGwgdGhlIGxvY2F0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlIHdoZXJlIGBuZXRjb25zb2xlX3dyaXRlYCBpcyBhY3R1YWxseSBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDUyPXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ2NzogKiBuZXRjb25zb2xlX3dyaXRlIC0gR2VuZXJpYyBmdW5jdGlvbiB0byBzZW5kIGEgbXNnIHRvIGFsbCB0YXJnZXRzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2OC0gKiBAd2N0eHQ6IG5iY29uIHdyaXRlIGNvbnRleHRcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ3Mi0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDczOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTAwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMi1cdFx0XHRcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMy17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwNDpcdG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIHRydWUpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDUtfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwNzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDgtXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwOS17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUxMDpcdG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTExLX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY5Nz1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTktXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9FWFRFTkRFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDA6XHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwMTpcdC53cml0ZV9hdG9taWMgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzAyLVx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjcwNj1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcwOC1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwOTpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MTA6XHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzExLVx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzY5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25zb2xlIFdyaXRlIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBUaG9zZSBzZWVtIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IHRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIHNlbmRpbmcgY29uc29sZSBvdXRwdXQgYWNyb3NzIHRoZSBuZXR3b3JrLiBCdXQgd2hhdCBhYm91dCBgdXBkYXRlX3VzZXJkYXRhYD8gTm93LCB0aGF0IG5hbWUuLi4gaXQmIzM5O3MgYmVnZ2luZyB0aGUgcXVlc3Rpb24sIHdoYXQgdXNlciBkYXRhIGlzIHRoYXQgZXZlbiByZWZlcnJpbmcgdG8/IElzIHRoaXMgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gdXBkYXRlIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgY29uc29sZSBpdHNlbGY/IElzIGl0IGEgd2F5IHRvIHVwZGF0ZSB0aGUgdXNlciBjb25maWcsIHBlcmhhcHMgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBkYXRhIHRoZSBjb25zb2xlIHNlbmRzIG9yIGRvZXNuJiMzOTt0PyBPciBpcyBpdCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBzaG91bGQgZGVmaW5pdGVseSBkaWcgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi4gVGhlIG5hbWluZyBjb252ZW50aW9uIGlzIHRocm93aW5nIG1lLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LiBJdCBjb3VsZCBiZSBjcml0aWNhbCB0byBob3cgd2UgbWFuYWdlIG9yIGN1c3RvbWl6ZSB0aGUgZGF0YSB0aGF0JiMzOTtzIGJlaW5nIHNlbnQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNDY9c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzY0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNjU6c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzY2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQxMz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MjYtXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Mjc6XHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI4LVx0c3Ryc2NweShvbGRfdmFsdWUsIHVkbS1cdTAwM2V2YWx1ZSwgc2l6ZW9mKG9sZF92YWx1ZSkpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDM0LVx0bnQgPSB1c2VyZGF0YV90b190YXJnZXQodWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MzU6XHRyZXQgPSB1cGRhdGVfdXNlcmRhdGEobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzYtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mjk9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzNy1cdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYzODpcdHVwZGF0ZV91c2VyZGF0YShudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzOS1cdGNvbmZpZ19pdGVtX3B1dChpdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipOYXZpZ2F0aW5nIENvbmZpZ0ZTIENhbGxiYWNrcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBgdXBkYXRlX3VzZXJkYXRhYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gdHdvIGtleSBwbGFjZXM6IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLiBUaG9zZSBuYW1lcyByaW5nIGEgYmVsbC4uLiB5ZXMsIHRoZXkmIzM5O3JlIGNvbmZpZ2ZzIGNhbGxiYWNrcy4gVGhhdCB0cmlnZ2VycyBhIGxpbmUgb2YgaW5xdWlyeS4gTm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZmlnZnMgb3BlcmF0aW9ucyBhdCBwbGF5IGhlcmUuIExldCBtZSB0cmFjZSBiYWNrIHRvIHRoZSBhY3R1YWwgY29uZmlnZnMgaW1wbGVtZW50YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBjYWxsYmFja3MuIFdoZXJlIGFyZSB0aGUgY29uZmlnZnMgb3BlcmF0aW9uIGRlZmluaXRpb25zPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGB1cGRhdGVfdXNlcmRhdGFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNjU9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDEzOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE0LVx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIFVzYWdlKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgdmFyaWFibGUgb3IgZGF0YSBzdHJ1Y3R1cmUgaXMgYmVpbmcgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIGFsbCBpbnN0YW5jZXMgd2hlcmUgaXQmIzM5O3MgYmVpbmcgcmVhZCBmcm9tLCB3cml0dGVuIHRvLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQsIG9yIHBvdGVudGlhbGx5IGluaXRpYWxpemVkLiBUaGUgZ29hbCBpcyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgbGlmZWN5Y2xlIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMsIG9wdGltaXphdGlvbnMsIG9yIGFyZWFzIGZvciByZWZhY3RvcmluZyBpZiBuZWVkZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiB1bmNvdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzY1PXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQxMzpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxNC1cdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czoKCioqVW52ZWlsaW5nIHRoZSBVc2FnZSoqCgpIbW0sIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgdGhpcyBzcGVjaWZpYyBlbGVtZW50IG9yIGZ1bmN0aW9uIGluIHVzZS4gSSB3YXMgbG9va2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IGRpcmVjdCBjYWxscyB0byBpdC4gKk9kZC4qIFBlcmhhcHMgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkIGF0IGFsbCwgYW5kIGl0JiMzOTtzIGRlYWQgY29kZS4gV2FpdCwgaG9sZCBvbi4uLiBjb3VsZCBpdCBiZSBoaWRkZW4gYXdheSBpbiBhIG1hY3JvIGRlZmluaXRpb24gc29tZXdoZXJlPyBUaGF0JiMzOTtzIGEgY2xhc3NpYyB0cmljay4gSXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGNhbGxlZCBidXQgaW5kaXJlY3RseSBpbnZva2VkIHRocm91Z2ggYSBtb3JlIGNvbXBsZXggbWFjcm8gZXhwYW5zaW9uLiBOZWVkIHRvIGNoZWNrIHRoYXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19BVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTQ3PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODA6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MjpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCB0YXNrbmFtZV9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTgzOkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHJlbGVhc2VfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NDpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjYyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjQ6Q09ORklHRlNfQVRUUigsIGV4dGVuZGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY1OkNPTkZJR0ZTX0FUVFIoLCBkZXZfbmFtZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NzpDT05GSUdGU19BVFRSKCwgcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Njg6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY5OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzA6Q09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MTpDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MjpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MzpDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRjb25zb2xlIENvbmZpZ0ZTIEludGVyYWN0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgQ09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7YCBkZWZpbml0ZWx5IGNyZWF0ZXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25maWdmcyBvcGVyYXRpb25zIG9uIG5ldGNvbnNvbGUgdXNlcmRhdGEuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiBuZXRjb25zb2xlIHRocm91Z2ggY29uZmlnZnM/CgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIHllcywgaXQgKnNob3VsZCogYmUgYWJsZSB0byBtb3VudCBjb25maWdmcyBhbmQgaW50ZXJhY3Qgd2l0aCBpdC4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBpcyBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCB0aGF0IG9wdGlvbiBleGlzdHMgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucyB0byBlbnN1cmUgc3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBmdXp6IHRoaXMgc3BlY2lmaWMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgbGluZSBvZiB0aGlua2luZywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbiBvZiBgTkVUQ09OU09MRV9EWU5BTUlDYCoqCgpBbHJpZ2h0LCBzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyB0aGUga2V5IHRoaW5nIEkmIzM5O20gZm9jdXNpbmcgb24gcmlnaHQgbm93LiBJdCYjMzk7cyB0aW1lIHRvIG1hcCBpdHMgZGVwZW5kZW5jaWVzLiBUaGF0IHNlZW1pbmdseSBpbm5vY2VudCB2YXJpYWJsZSBjb3VsZCBiZSBhIGxpbmNocGluIGluIHNvbWUgY29tcGxleCBjb25maWd1cmF0aW9uIHNjaGVtZSwgb3IgbWF5YmUgaXQmIzM5O3Mgc3VycHJpc2luZ2x5IHNpbXBsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyAqZW5hYmxlKiBpdCwgYW5kIHdoYXQgaXQgKmVuYWJsZXMqIGluIHR1cm4uIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlLCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBwb3NpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdGhlbHBcbiAzMzE6XHRcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cbiAzMzI6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbiAzMzU6XHRcdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbiAzMzc6XHRcdFx0XHQhKE5FVENPTlNPTEU9eSBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlM9bSlcbiAzMzg6XHRcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxuIDMzOTpcdFx0aGVscFxuIDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4gMzQ1Olx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG4gMzQ2Olx0XHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4gMzQ3Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbiAzNDg6XHRcdGRlZmF1bHQgblxuIDM0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0Y29uc29sZSBhbmQgVXNlcmRhdGEgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgTkVUQ09OU09MRV9EWU5BTUlDYCByZWxpZXMgb24gYE5FVENPTlNPTEVgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBlbmFibGUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgYW5hbHlzaXMuCgpJbml0aWFsbHksIGB1cGRhdGVfdXNlcmRhdGFgIHNlZW1lZCBsaWtlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZyBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYy4gSG93ZXZlciwgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgY2FsbGVkIGJ5IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExvb2tpbmcgZGVlcGVyLCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCB0aGVtc2VsdmVzIGFyZSBzdGF0aWMgYnV0IGFyZSB0aWVkIHRvIGBDT05GSUdGU19BVFRSYCBhbmQgYXJlIHVzZWQgaW4gYHVzZXJkYXR1bV9hdHRyX3ZhbHVlYCwgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gSGVuY2UsIEkmIzM5O2xsIGZvY3VzIG9uIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLgoKT24gdGhlIHRyYW5zbWlzc2lvbiBzaWRlLCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAuICBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dGAsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGlubGluZWQuICBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaXMgZGVmaW5pdGVseSBub3QgaW5saW5lZC4gIGBuZXRjb25zb2xlX3dyaXRlYCAqbWlnaHQqIGJlIGlubGluZWQsIGFzIGNvdWxkIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLgoKSSB3YXMgY29uc2lkZXJpbmcgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhcyBhIGdvb2QgZm9jdXMgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCYjMzk7cyBhIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2ssIHNvIGl0IGNvdWxkIGJlIGluIGEgaG90IHBhdGgsIGRlcGVuZGluZyBvbiBob3cgZnJlcXVlbnRseSBwcmludGtzIGFyZSBoYXBwZW5pbmcuIEhvd2V2ZXIsIHNpbmNlIHRoZSBnb2FsIGlzIHRvIGV4YW1pbmUgdGhlIHVzZXJkYXRhIFJDVSBjaGFuZ2VzLCB0aGUgcmVsZXZhbnQgY29kZSBpcyBzcGxpdCBiZXR3ZWVuIGB1cGRhdGVfdXNlcmRhdGFgIChjb25maWdmcyBzaWRlKSBhbmQgYHNlbmRfZXh0X21zZ191ZHBgIChjb25zb2xlIHdyaXRlIHNpZGUpLgoKVGhlcmVmb3JlLCBmb2N1c2luZyBvbiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCBjb3ZlcnMgdGhlIGNvbmZpZ2ZzIGFzcGVjdCBvZiB0aGlzIGFuYWx5c2lzLiBGb3IgdGhlIHRyYW5zbWl0IHBhdGgsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGJlY2F1c2UgYHNlbmRfZXh0X21zZ191ZHBgIGlzIHN0YXRpYywgcG90ZW50aWFsbHkgaW5saW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlIG5vdCBzdGF0aWMgc28gdGhhdCBpbmxpbmluZyBpcyBub3QgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNjU9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDEzOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE0LVx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLgoKKipBbmFseXppbmcgRnVuY3Rpb24gUG9pbnRlciBVc2FnZSoqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBhYm91dCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBCdXQsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIGJlaW5nIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciBwcm9iYWJseSB3b24mIzM5O3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHNvIHRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24gdG8ga2VlcCBpbiBtaW5kIGZvciBwZXJmb3JtYW5jZS4gTm93LCBJJiMzOTtsbCBzaGlmdCBteSBhdHRlbnRpb24gdG8gYHVzZXJkYXR1bV9kcm9wYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTYwNj1zdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjI4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Mjk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjMwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTItXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUzOlx0LmRyb3BfaXRlbVx0XHQ9IHVzZXJkYXR1bV9kcm9wLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25jdXJyZW5jeSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYHVzZXJkYXR1bV9kcm9wYCBpcyBkZWZpbml0ZWx5IHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtYWtlcyBpdCBhbiBpbnRlcmVzdGluZyBzeW1ib2wgdG8gZm9jdXMgb24uIFRoZW4gdGhlcmUmIzM5O3MgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCB3aGljaCBhbHNvIHNlZW1zIHRvIGhhdmUgdGhlIHNhbWUgdXNhZ2UgcGF0dGVybi4gR290IGl0LiBUaGVzZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYHNlbmRfZXh0X21zZ191ZHBgLiBJJiMzOTttIGN1cmlvdXMgaWYgaXQmIzM5O3MgaW5saW5lZC4gTm9wZSwgaXQmIzM5O3Mgc3RhdGljLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBgbmV0Y29uc29sZV93cml0ZWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGEgZnVuY3Rpb24gcG9pbnRlci4gTGV0JiMzOTtzIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMsIGFsb25nIHdpdGggYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBIb2xkIG9uLCB0aG91Z2guLi4gbG9va3MgbGlrZSBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgKmRvZXNuJiMzOTt0KiBjYWxsIGBzZW5kX2V4dF9tc2dfdWRwYCBkaXJlY3RseTsgaXQgY2FsbHMgYHNlbmRfbXNnX3VkcGAgaW5zdGVhZC4gQnV0IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgKmRvZXMqIGNhbGwgYG5ldGNvbnNvbGVfd3JpdGUod2N0eHQsIHRydWUpYCB3aGljaCB0aGVuIGNhbGxzIGBzZW5kX2V4dF9tc2dfdWRwYC4gVGhlcmVmb3JlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGEgc29saWQgZm9jdXMgc3ltYm9sLgoKT2theSwgbGV0JiMzOTtzIHJlY2FwIHdoYXQgd2UmIzM5O3ZlIGdvdC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgdXBkYXRlX3VzZXJkYXRhYCB0byB1c2UgYHJjdV9yZXBsYWNlX3BvaW50ZXJgIGFuZCBga2ZyZWVfcmN1YCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBjb25jdXJyZW50IGFjY2Vzcy4gYHNlbmRfZXh0X21zZ191ZHBgIGlzIHVwZGF0ZWQgdG8gdXNlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIHRoZSBmdW5jdGlvbnMgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLCBhbmQgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgIGFyZSBtb2RpZmllZCB0byB0YWtlIGB1c2VyZGF0YWAgYXMgYW4gYXJndW1lbnQsIGFuZCB0aGF0JiMzOTtzIGxpa2VseSBhIGNvbnNlcXVlbmNlIG9mIHRoZSBjb25jdXJyZW5jeSBjaGFuZ2VzLiBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAgYW5kIGBmcmVlX3BhcmFtX3RhcmdldGAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgcmN1X2FjY2Vzc19wb2ludGVyYC4KClNvIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgKmFuZCogYXJlICpub3QqIGlubGluZWQgKGJlY2F1c2UgdGhleSBhcmUgZWl0aGVyIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgdXNlZCBleHRlcm5hbGx5KToKIC0gYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAKIC0gYHVzZXJkYXR1bV9kcm9wYAogLSBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAKIC0gYGZyZWVfcGFyYW1fdGFyZ2V0YAogLSBgbmV0Y29uc29sZV93cml0ZV9leHRgCgpXYWl0Li4uIGBmcmVlX3BhcmFtX3RhcmdldGAgaXMgc3RhdGljLiBHb3R0YSBzZWUgd2hlcmUgdGhhdCYjMzk7cyBhY3R1YWxseSAqdXNlZCouLi4ganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYyMz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4NC0vKiBDbGVhbnVwIG5ldHBvbGwgZm9yIGdpdmVuIHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIGZyZWUgaXQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg1OnN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3MTU9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3ODYtXHRcdGxpc3RfZGVsKFx1MDAyNm50LVx1MDAzZWxpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3ODc6XHRcdGZyZWVfcGFyYW1fdGFyZ2V0KG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzg4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzk2PXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX25ldGNvbnNvbGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxNy1cdFx0bGlzdF9kZWwoXHUwMDI2bnQtXHUwMDNlbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgxODpcdFx0ZnJlZV9wYXJhbV90YXJnZXQobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFRhcmdldCBTeW1ib2xzIGZvciBQb3RlbnRpYWwgT3B0aW1pemF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgdGFyZ2V0IHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZnJlZV9wYXJhbV90YXJnZXRgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpvbmx5KiB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgZXhpdCBpbW1lZGlhdGVseSBzdHJpa2VzIG1lIGFzIGEgcmVkIGZsYWcuIEl0JiMzOTtzIG5vdCBhIHBhcnRpY3VsYXJseSBhY3RpdmUgcG9pbnQgaW4gdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lLCBtYWtpbmcgaXQgYSBwb29yIGNob2ljZSBmb3IgYW55IGtpbmQgb2YgcGVyZm9ybWFuY2UtY3JpdGljYWwgcHJvZmlsaW5nIG9yIGZvY3VzaW5nIGVmZm9ydHMuIEl0IGp1c3QgaXNuJiMzOTt0IGEgZ29vZCBmb2N1cyBzeW1ib2wsIGF0IGxlYXN0IG5vdCBpbiBhbnkgdHJhZGl0aW9uYWwgcGVyZm9ybWFuY2Ugc2Vuc2UuIEl0JiMzOTtzIHRvbyBsaW1pdGVkIGluIHNjb3BlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdXNlIGEgc3ltYm9sIGZvciBtZWFzdXJlbWVudCBtb3JlIG9mdGVuLgoKSW5zdGVhZCBvZiB0aGlzIGxpbWl0ZWQgZm9jdXMsIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGdvIGV4YW1pbmUgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgIG1vcmUgY2xvc2VseS4gTWF5YmUgdGhhdCBvbmUmIzM5O3MgZ290IGEgYmV0dGVyIHByb2ZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzU9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY5NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjk1LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzAzOlx0LnJlbGVhc2VcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkRpc3NlY3RpbmcgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgIGFuZCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCoqCgpPa2F5LCBzbyBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAuLi4gdGhhdCYjMzk7cyB0aGUgcmVsZWFzZSBjYWxsYmFjayBmb3IgY29uZmlnZnMuIFNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLCBhIGZvY3VzZWQgc3ltYm9sLiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuIEl0JiMzOTtzIGRlZmluZWQgdXNpbmcgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZSBiZWhpbmQgdGhhdCBtYWNybyAqc2hvdWxkKiBiZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gdmVyaWZ5IHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdGU19BVFRSYCB0byBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGF0IG1hY3JvIGV4cGFuZHMgdG8gYXZvaWQgYW55IG1pc3VuZGVyc3RhbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQ09ORklHRlNfQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29uZmlnZnMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmg9MTE1PXN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUge1xuLS1cbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjItXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmg6MTIzOiNkZWZpbmUgQ09ORklHRlNfQVRUUl9QRVJNKF9wZngsIF9uYW1lLCBfcGVybSlcdFx0XFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjQtc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTMxLVxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEzMjojZGVmaW5lIENPTkZJR0ZTX0FUVFIoX3BmeCwgX25hbWUpIENPTkZJR0ZTX0FUVFJfUEVSTShcdFxcXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTMzLVx0XHRfcGZ4LCBfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1JcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTM1LVxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEzNjojZGVmaW5lIENPTkZJR0ZTX0FUVFJfUk8oX3BmeCwgX25hbWUpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMzctc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTQzLVxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjE0NDojZGVmaW5lIENPTkZJR0ZTX0FUVFJfV08oX3BmeCwgX25hbWUpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xNDUtc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0Y29uc29sZSBNb2R1bGUgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgYG5ldGNvbnNvbGVgIG1vZHVsZSYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gRmlyc3QsIEkgc2VlIHRoYXQgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYCBpcyBjcmVhdGluZyBhIGB1c2VyZGF0dW1fYXR0cl92YWx1ZWAgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjb25maXJtZWQgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBpcyBleHBsaWNpdGx5IGRlZmluZWQgaW4gYG5ldGNvbnNvbGUuY2Ag4oCTIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG15IGFuYWx5c2lzLiBTcGVjaWZpY2FsbHksIGBzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClgIGlzIHRoZSBzaWduYXR1cmUuCgpNeSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiBpbml0aWFsIHJldmlldywgYXJlIGxvb2tpbmcgbGlrZToKCiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYAoqICAgYHVzZXJkYXR1bV9kcm9wYAoqICAgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgCiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBgdXBkYXRlX3VzZXJkYXRhYC4gSXQmIzM5O3MgbWFya2VkIGBzdGF0aWNgLCB3aGljaCBvZnRlbiBtZWFucyBpdCYjMzk7cyBhIGNyaXRpY2FsIGludGVybmFsIGZ1bmN0aW9uLiBJIGhhdmUgdG8gc2VlIGlmIGl0JiMzOTtzIGlubGluZWQuIEkgY2hlY2tlZCBpdHMgY29kZTsgaXQmIzM5O3MgYXJvdW5kIDQwIGxpbmVzLCBpbmNsdWRlcyBhbGxvY2F0aW9ucywgYW5kIGxvb3BzLCB3aGljaCBtYWtlcyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkLCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zIChgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCkuIFNvIEkmIzM5O20gYWRkaW5nIGB1cGRhdGVfdXNlcmRhdGFgIHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgcHJvdmlzaW9uYWxseSwganVzdCB0byBiZSBzYWZlLgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgYmUga2V5LCBmb3IgaW5zdGFuY2UsIGBzZW5kX2V4dF9tc2dfdWRwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBJdCYjMzk7cyBhYm91dCAyNSBsaW5lcy4gTWF5YmUgaXQmIzM5O3MgaW5saW5lZC4gSSBhbHNvIGxvb2tlZCBhdCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAgYW5kIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgZWFjaCBhYm91dCAzMCBhbmQgMjUgbGluZXMgcmVzcGVjdGl2ZWx5LgoKRm9yIG5vdywgSSYjMzk7bSBnb2luZyB3aXRoIHRoZXNlIG5vbi1zdGF0aWMvZnVuY3Rpb24gcG9pbnRlciBvbmVzOgoKKiAgIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgCiogICBgdXNlcmRhdHVtX2Ryb3BgCiogICBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAKKiAgIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAKYW5kIHRoZSBwb3RlbnRpYWxseSBrZXkgYHVwZGF0ZV91c2VyZGF0YWAuCgpMZXQgbWUgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5vdy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdGU19GU2Agb3B0aW9ucy4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaG93IGBDT05GSUdGU19GU2AgcmVsYXRlcyB0byBgTkVUQ09OU09MRV9EWU5BTUlDYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZS1FeGFtaW5pbmcgdGhlIEZvdW5kYXRpb246IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgcHJvYmxlbSBvciBzb2x1dGlvbiwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHJldmlzaXQgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgZWFzeSB0byBnZXQgY2F1Z2h0IHVwIGluIHRoZSBkZXRhaWxzIG9mIHRoZSBpbW1lZGlhdGUgdGFzayBhdCBoYW5kLCBidXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgdW5kZXJseWluZyBjb21wb25lbnRzIGlzIHBhcmFtb3VudC4gSSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGggdGhlc2UgZGVwZW5kZW5jaWVzIGZvciBhIHdoaWxlLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgZnJlc2ggbG9vaywgZXNwZWNpYWxseSB3aGVuIHRhY2tsaW5nIGEgbmV3IGNoYWxsZW5nZSBvciBhIHBhcnRpY3VsYXJseSBjb21wbGV4IHNlY3Rpb24gb2YgY29kZS4gRXZlbiBzZWVtaW5nbHkgbWlub3IgY2hhbmdlcyBvciB1cGRhdGVzIGluIGRlcGVuZGVuY3kgdmVyc2lvbnMgY2FuIGhhdmUgcmlwcGxlIGVmZmVjdHMsIGFuZCBpdCYjMzk7cyBiZXR0ZXIgdG8gYmUgcHJvYWN0aXZlIHRoYW4gcmVhY3RpdmUuIEkgd2FudCB0byBlbnN1cmUgbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGRpZmZlcmVudCBtb2R1bGVzIGlzIGFic29sdXRlbHkgY2xlYXIgYW5kIHVwLXRvLWRhdGUgYmVmb3JlIEkgcHJvY2VlZC4gVGhpcyByZXZpZXcgaXNu4oCZdCBqdXN0IGFib3V0IG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgKnRoZXJlKiwgYnV0IGFib3V0IGNvbmZpcm1pbmcgbXkgKnVuZGVyc3RhbmRpbmcqIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIHdpbGwgaW50ZXJhY3QgZHVyaW5nIHRoZSBuZXh0IHBoYXNlLiBUaW1lIGludmVzdGVkIGhlcmUgaXMgb2Z0ZW4gdGltZSBzYXZlZCBsYXRlciwgcHJldmVudGluZyB0aG9zZSBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgc2Vzc2lvbnMgY2F1c2VkIGJ5IG92ZXJsb29rZWQgbnVhbmNlcyBpbiB0aGUgZGVwZW5kZW5jeSBsYW5kc2NhcGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBYLCB0aGVuIFksIGFuZCBmaW5hbGx5IFosIHRyYWNpbmcgdGhlaXIgbGluZWFnZSBhbmQgaW50ZXJkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzM0Olx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuIDMzNTpcdFx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbiAzMzY6XHRcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBcXFxuIDMzNzpcdFx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuIDMzODpcdFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXG4gMzM5Olx0XHRoZWxwXG4gMzQwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XG4gMzQxOlx0XHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXG4gMzQyOlx0XHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXG4gMzQzOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgY29uc29sZSBtb2RpZmljYXRpb24sIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvd2FyZHMgbmVlZGluZyBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gYFNZU0ZTYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLCB1c3VhbGx5IGVuYWJsZWQuIEhvd2V2ZXIsIGBDT05GSUdGU19GU2AgaXMgZXhwbGljaXRseSByZXF1aXJlZCwgYW5kIHRoYXQmIzM5O3MgYSBrZXkgcGllY2UuCgpJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBidXQgdGhlIHJlYWwgdGVzdCBsaWVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hgLiBUaGlzIHRlc3QgdXNlcyBgbW9kcHJvYmUgbmV0ZGV2c2ltYCBhbmQgYG1vZHByb2JlIG5ldGNvbnNvbGVgLiBTbyB3aGlsZSBgTkVUREVWU0lNYCB3b3VsZCBiZSBhIGdyZWF0IGNvbnZlbmllbmNlIGZvciB0ZXN0aW5nIHRoaXMgbmV3IGZlYXR1cmUsIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IGZvciB0aGUgY29kZSBpdHNlbGYgdG8gY29tcGlsZS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIHRvIGtub3cgdGhlICYjMzQ7U3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZSYjMzQ7LiBCYXNlZCBvbiBteSBhbmFseXNpcywgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBhcmUgdGhlIGNvcmUgb3B0aW9ucywgYW5kIGNyaXRpY2FsbHksIGBDT05GSUdGU19GU2AgaXMgZXhwbGljaXRseSBuZWVkZWQgYnkgYE5FVENPTlNPTEVfRFlOQU1JQ2AuCgpUbyBiZSB0aG9yb3VnaCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgdGhpcyBmZWF0dXJlLiBJIHNlZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYHVzZXJkYXR1bV9kcm9wYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gVGhleSYjMzk7cmUgdGhlIGZvY3VzIG9mIHRoZSBjaGFuZ2VzLgoKT2theSwgbGV0JiMzOTtzIGFsc28gZXhhbWluZSBgdXNlcmRhdHVtX21ha2VfaXRlbWAsIHdoaWNoIGFsc28gYXBwZWFycyB0byBiZSBhIGNvbmZpZ2ZzIGNhbGxiYWNrLiBUaGF0IHJlaW5mb3JjZXMgdGhlIG5lZWQgZm9yIGBDT05GSUdGU19GU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJkYXR1bV9tYWtlX2l0ZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXR1bV90eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDY6c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA3LVx0XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTI6XHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjUzLVx0LmRyb3BfaXRlbVx0XHQ9IHVzZXJkYXR1bV9kcm9wLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgV3JpdGUgRnVuY3Rpb25zKioKCk9rYXksIGB1c2VyZGF0dW1fbWFrZV9pdGVtYCBkb2VzIHNlZW0gbGlrZSBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IGRhdGEgaXMgcGFzc2VkIGFuZCBoYW5kbGVkLCBhbmQgdGhhdCBzeW1ib2wgc2VlbXMgcmVsZXZhbnQuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgbmV0Y29uc29sZV93cml0ZV9leHRgLiBUaGlzIGV4dGVuZGVkIHdyaXRlIGZ1bmN0aW9uIGlzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLgoKVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIG1vZGlmaWVzIGBzZW5kX2V4dF9tc2dfdWRwYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBuZXRjb25zb2xlX3dyaXRlYCB3aGVuIGl0JiMzOTtzIGluIGl0cyBleHRlbmRlZCBtb2RlIOKAkyBtZWFuaW5nIGBleHRlbmRlZGAgaXMgc2V0IHRvIHRydWUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgICppdHNlbGYqIGNhbGxzIGBuZXRjb25zb2xlX3dyaXRlYCB3aXRoIHRoZSBgZXh0ZW5kZWRgIGZsYWcgc2V0LiBUaGlzIGNvbmZpcm1zIHRoYXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyB0aGUgdHJ1ZSBlbnRyeSBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIE15IHRob3VnaHQgcHJvY2VzcyBpcyB0aGF0IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuZGFtZW50YWwgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW5hZHZlcnRlbnRseSBhbHRlcmVkLiBUaGlzIHJvdXRpbmUgY2FsbHMgYG5ldGNvbnNvbGVfd3JpdGVgIHdpdGggdGhlIGBleHRlbmRlZGAgZmxhZyBzZXQgdG8gZmFsc2UsIG1lYW5pbmcgaXQmIzM5O3MgdGhlIGJhc2ljIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb24uCgpOb3csIHdpdGggYGV4dGVuZGVkPWZhbHNlYCwgYG5ldGNvbnNvbGVfd3JpdGVgIGNhbGxzIGBzZW5kX21zZ191ZHBgLCB3aGljaCBJIHRob3VnaHQsIGF0IGZpcnN0LCBkaWQgbm90IHVzZSB1c2VyIGRhdGEuIEJ1dCwgd2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayBgc2VuZF9tc2dfdWRwYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9tc2dfdWRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDIwPXN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDUyOnN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1My1cdFx0XHQgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ3Mz1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cdFx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTU6XHRcdFx0c2VuZF9tc2dfdWRwKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgJiMzNDtJJiMzNDsgaW4gdGhpcyBzaXR1YXRpb246CgoqKlJldmlld2luZyBgc2VuZF9tc2dfdWRwYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYHNlbmRfbXNnX3VkcGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjcml0aWNhbCBmdW5jdGlvbiBpcyByb2J1c3QgYW5kIGVmZmljaWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBvYnZpb3VzOiBhcmUgdGhlIGVycm9yIGNoZWNrcyBjb21wcmVoZW5zaXZlPyBBcmUgd2UgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIHByb3Blcmx5LCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBzb2NrZXQgZXJyb3JzLCBhbmQgbmV0d29yayBjb25uZWN0aXZpdHkgaXNzdWVzPyBCZXlvbmQgYmFzaWMgZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byBsb29rIGZvciBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLiBJcyB0aGlzIGZ1bmN0aW9uIGJsb2NraW5nLCBvciBpcyBpdCBub24tYmxvY2tpbmcgYW5kIHVzaW5nIGFwcHJvcHJpYXRlIG1lY2hhbmlzbXMgdG8gYXZvaWQgaG9sZGluZyB1cCB0aGUgY2FsbGluZyB0aHJlYWQ/IEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGF0YSBjb3B5IG1lY2hhbmlzbXMg4oCTIGFyZSB3ZSBtYWtpbmcgdW5uZWNlc3NhcnkgY29waWVzLCBhbmQgY2FuIHdlIGxldmVyYWdlIHplcm8tY29weSB0ZWNobmlxdWVzIHdoZXJlIGFwcHJvcHJpYXRlPyBQZXJmb3JtYW5jZSBpcyBhbHdheXMga2V5IHdpdGggVURQLCBzbyBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFja2V0aXphdGlvbiBhbmQgcmVhc3NlbWJseSBpZiB0aGlzIGFwcGxpY2F0aW9uIGhhbmRsZXMgZnJhZ21lbnRlZCBtZXNzYWdlcy4gRmluYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgcmVwb3J0aW5nIGFuZCBsb2dnaW5nLCBlbnN1cmluZyB3ZSYjMzk7cmUgcHJvdmlkaW5nIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkaWFnbm9zZSBwcm9ibGVtcyB3aXRob3V0IGxlYWtpbmcgc2Vuc2l0aXZlIGRhdGEuIEJhc2ljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhpcyBpcyBidWxsZXRwcm9vZiBhbmQgb3B0aW1hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NTI6XHRzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuMjQ1MzpcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuKVxuMjQ1NDpcdHtcbjI0NTU6XHRcdGNvbnN0IGNoYXIgKnRtcCA9IG1zZztcbjI0NTY6XHRcdGludCBmcmFnLCBsZWZ0ID0gbGVuO1xuMjQ1NzpcdFxuMjQ1ODpcdFx0d2hpbGUgKGxlZnQgXHUwMDNlIDApIHtcbjI0NTk6XHRcdFx0ZnJhZyA9IG1pbihsZWZ0LCBNQVhfUFJJTlRfQ0hVTkspO1xuMjQ2MDpcdFx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbjI0NjE6XHRcdFx0dG1wICYjNDM7PSBmcmFnO1xuMjQ2MjpcdFx0XHRsZWZ0IC09IGZyYWc7XG4yNDYzOlx0XHR9XG4yNDY0Olx0fVxuMjQ2NTpcdFxuMjQ2NjpcdC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUkNVIFByb3RlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgY2xlYXIgYHNlbmRfbXNnX3VkcGAgZG9lc24mIzM5O3QgdG91Y2ggYHVzZXJkYXRhYC4gVGhhdCBtZWFucyBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaXMgc2FmZSwgYW5kIHRoaXMgcGF0Y2ggKm9ubHkqIGltcGFjdHMgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYmVjb21lOiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYHVzZXJkYXR1bV9kcm9wYCwgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAsIGFuZCwgb2YgY291cnNlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc3dlZXAgdG8gc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgZ290IHR3ZWFrZWQuIEFoLCBgY2FsY191c2VyZGF0YV9sZW5gIGlzIHRoZXJlLCBidXQgdGhhdCYjMzk7cyBqdXN0IGZvciBjb250ZXh0LiBIb3dldmVyLCBgdXBkYXRlX3VzZXJkYXRhYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YCBhbGwgZ290IG1vZGlmaWVkLiBPa2F5LCBzbyBteSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgc3RpbGwgbG9vayBsaWtlIHRoZXkgY292ZXIgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGUgY2hhbmdlcy4KCk5vdywgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZml4aW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBUaGUgaW50ZW50IGlzIHRvIG1ha2UgdGhlIGNvcmUgbmV0Y29uc29sZSBkcml2ZXIgdXNlIFJDVSBwcm9wZXJseSB3aGVuIGl0IHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhpcyB1c2VyZGF0YSwgd2hpY2ggdGhlIHN5c3RlbSBhY2Nlc3NlcyB0aHJvdWdoIGNvbmZpZ2ZzIGFuZCB1dGlsaXplcyBkdXJpbmcgZXh0ZW5kZWQgY29uc29sZSB3cml0ZXMuIFNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUga2VybmVsL2RyaXZlciBjb2RlIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpHaXZlbiB0aGlzIGlzIGEgUkNVIGZpeCBhZmZlY3RpbmcgYSBjb3JlIGRyaXZlciwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBpcyB0aGUgZXhhY3QgbmFtZSwgc28gdGhlIG5hbWluZyBjb252ZW50aW9ucyBhcmUgY29ycmVjdC4KCk9oLCBhbmQgd2FpdCwgaXQgbG9va3MgbGlrZSBgQ09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7YCBjcmVhdGVzIGB1c2VyZGF0dW1fYXR0cl92YWx1ZWAgd2hpY2ggdXNlcyBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zaG93YC4KRG9lcyB0aGF0IG1lYW4gdGhlIG1hY3JvIGV4cGVjdHMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgb3IgZG9lcyBpdCAqZGVmaW5lKiBpdD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdGU19BVFRSYCBtYWNybyBkZWZpbml0aW9uIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb25maWdmcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjM6XHQjZGVmaW5lIENPTkZJR0ZTX0FUVFJfUEVSTShfcGZ4LCBfbmFtZSwgX3Blcm0pXHRcdFxcXG4gMTI0Olx0c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbiAxMjU6XHRcdC5jYV9uYW1lXHQ9IF9fc3RyaW5naWZ5KF9uYW1lKSxcdFx0XFxcbiAxMjY6XHRcdC5jYV9tb2RlXHQ9IF9wZXJtLFx0XHRcdFxcXG4gMTI3Olx0XHQuY2Ffb3duZXJcdD0gVEhJU19NT0RVTEUsXHRcdFx0XFxcbiAxMjg6XHRcdC5zaG93XHRcdD0gX3BmeCMjX25hbWUjI19zaG93LFx0XHRcXFxuIDEyOTpcdFx0LnN0b3JlXHRcdD0gX3BmeCMjX25hbWUjI19zdG9yZSxcdFx0XFxcbiAxMzA6XHR9XG4gMTMxOlx0XG4gMTMyOlx0I2RlZmluZSBDT05GSUdGU19BVFRSKF9wZngsIF9uYW1lKSBDT05GSUdGU19BVFRSX1BFUk0oXHRcXFxuIDEzMzpcdFx0XHRfcGZ4LCBfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1JcdFx0XFxcbiAxMzQ6XHQpXG4gMTM1Olx0XG4gMTM2Olx0I2RlZmluZSBDT05GSUdGU19BVFRSX1JPKF9wZngsIF9uYW1lKVx0XHRcdFxcXG4gMTM3Olx0c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1x0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzQKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBOYW1lIENvbnN0cnVjdGlvbiBhbmQgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gY29uZmlybWluZyB0aGUgZnVuY3Rpb24gbmFtZSBjb25zdHJ1Y3Rpb24gaGVyZS4gSSYjMzk7dmUgZ290IGAuc3RvcmUgPSBfcGZ4IyNfbmFtZSMjX3N0b3JlYC4gVGhhdCBtZWFucyBgX3BmeGAgaXMgYHVzZXJkYXR1bV9gIGFuZCBgX25hbWVgIGlzIGB2YWx1ZWAsIHNvIHRoZSBmdWxsIGZ1bmN0aW9uIG5hbWUgKnNob3VsZCogYmUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBvdGhlciBmdW5jdGlvbiBuYW1lcyBhcmUgZXhhY3RseSBhcyB0aGV5IHNob3VsZCBiZS4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0Y29uc29sZV93cml0ZV9leHRgLiBZZXAsIGZvdW5kIGl0OiBgc3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClgIGluIGBuZXRjb25zb2xlLmNgLiBHb29kLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYC4gQ29uZmlybWVkOiBgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pYCBpcyBhbHNvIGluIGBuZXRjb25zb2xlLmNgLgoKQWxyaWdodCwgb250byBgdXNlcmRhdHVtX2Ryb3BgLiBGb3VuZDogYHN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pYCBpcyBhbHNvIGNvcnJlY3RseSBkZWZpbmVkIGluIGBuZXRjb25zb2xlLmNgLgoKQW5kIGZpbmFsbHksIGB1c2VyZGF0dW1fbWFrZV9pdGVtYC4gWWVwLCB0aGF0IG9uZSYjMzk7cyB0aGVyZSB0b286IGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBjb25zdCBjaGFyICpuYW1lKWAgaXMgZGVmaW5lZCwgYXMgZXhwZWN0ZWQsIGluIGBuZXRjb25zb2xlLmNgLgoKT2theSwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZCwgSSBjYW4gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX21ha2VfaXRlbSYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX21ha2VfaXRlbSYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhbiB1bnNhZmUgbG9ja2xlc3MgdXBkYXRlIG9mIGBudC1cdTAwM2V1c2VyZGF0YWAgd2l0aCBhbiBSQ1UtcHJvdGVjdGVkIGBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YWAgdG8gZml4IGEgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZSBpbiB0aGUgbmV0Y29uc29sZSB0cmFuc21pdCBwYXRoLiBUaGUgbmV3IHBheWxvYWQgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX2ZsZXhgLCBwb3B1bGF0ZWQgdXNpbmcgYHNjbnByaW50ZmAgKHdoaWNoIG51bGwtdGVybWluYXRlcyB0aGUgc3RyaW5nKSwgYW5kIGl0cyBleGFjdCB3cml0dGVuIGxlbmd0aCBpcyByZWNvcmRlZCBpbiBgbGVuZ3RoYC4gVGhlIHRyYW5zbWl0IHBhdGggdGhlbiByZWFkcyBlaXRoZXIgdmlhIGAlc2AgZm9ybWF0IHNwZWNpZmllciAoc3RvcHBpbmcgYXQgdGhlIG51bGwgdGVybWluYXRvcikgb3IgYnkgZXhwbGljaXRseSB1c2luZyB0aGUgcmVjb3JkZWQgYGxlbmd0aGAuIEluIGJvdGggY2FzZXMsIG9ubHkgZXhwbGljaXRseSBpbml0aWFsaXplZCBieXRlcyBhcmUgcmVhZCBhbmQgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzKSBhcmUgcGVyZmVjdGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQwNjdkOTU0MzRmNzI4NDRhNDk3ZGViNTk3MjFlOWQ2ZTM4MzhkODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0NToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCAwMzkxMzMwMjMyOGNjLi5iMzU4ZTVjMzY3MzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0xNTEsMTMgJiM0MzsxNTEsMjcgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogCVNUQVRFX0RFQUNUSVZBVEVELAogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuCiYjNDM7ICogQHJjdToJVXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgomIzQzOyAqIEBsZW5ndGg6CUxlbmd0aCBvZiBAZGF0YSwgZXhjbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvci4KJiM0MzsgKiBAZGF0YToJRm9ybWF0dGVkICYjMzQ7IGtleT12YWx1ZVxuJiMzNDsgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuCiYjNDM7ICoKJiM0MzsgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZAomIzQzOyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuCiYjNDM7ICovCiYjNDM7c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgewomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKJiM0MzsJc2l6ZV90CQkJbGVuZ3RoOwomIzQzOwljaGFyCQkJZGF0YVtdOwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LgogICogQGxpc3Q6CUxpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LgogICogQGdyb3VwOglMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LgogICogQHVzZXJkYXRhX2dyb3VwOglMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5Ci0gKiBAdXNlcmRhdGE6CQlDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kCi0gKiBAdXNlcmRhdGFfbGVuZ3RoOglTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLgomIzQzOyAqIEB1c2VyZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuCiAgKiBAc3lzZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKICAqIEBzeXNkYXRhX2ZpZWxkczoJU3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLgogICogQG1zZ2NvdW50ZXI6CU1lc3NhZ2Ugc2VudCBjb3VudGVyLgpAQCAtMTk4LDggJiM0MzsyMTIsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogI2lmZGVmCUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwCWdyb3VwOwogCXN0cnVjdCBjb25maWdfZ3JvdXAJdXNlcmRhdGFfZ3JvdXA7Ci0JY2hhcgkJCSp1c2VyZGF0YTsKLQlzaXplX3QJCQl1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTsKIAljaGFyCQkJc3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTsKIAogCS8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi8KQEAgLTEzNTEsMTIgJiM0MzsxMzY0LDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAogc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm5ldyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7CiAJc3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwotCWNoYXIgKm9sZF9idWYgPSBOVUxMOwotCWNoYXIgKm5ld19idWYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9mZnNldCA9IDA7CiAJaW50IGxlbjsKIApAQCAtMTM2OCw4ICYjNDM7MTM4MCw4IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAKIAkvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyICovCiAJaWYgKGxlbikgewotCQluZXdfYnVmID0ga21hbGxvYyhsZW4gJiM0MzsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmV3X2J1ZikKJiM0MzsJCW5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gJiM0MzsgMSk7CiYjNDM7CQlpZiAoIW5ldykKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTM3OSwyMiAmIzQzOzEzOTEsMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJdWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7CiAJCS8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi8KIAkJaWYgKHVkbV9pdGVtLSZndDt2YWx1ZVswXSkgewotCQkJb2Zmc2V0ICYjNDM7PSBzY25wcmludGYoJmFtcDtuZXdfYnVmW29mZnNldF0sIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LAomIzQzOwkJCW9mZnNldCAmIzQzOz0gc2NucHJpbnRmKCZhbXA7bmV3LSZndDtkYXRhW29mZnNldF0sCiYjNDM7CQkJCQkgICAgbGVuICYjNDM7IDEgLSBvZmZzZXQsCiAJCQkJCSAgICAmIzM0OyAlcz0lc1xuJiMzNDssIGl0ZW0tJmd0O2NpX25hbWUsCiAJCQkJCSAgICB1ZG1faXRlbS0mZ3Q7dmFsdWUpOwogCQl9CiAJfQogCiAJV0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pOwomIzQzOwlpZiAobmV3KQomIzQzOwkJbmV3LSZndDtsZW5ndGggPSBvZmZzZXQ7CiAKLQkvKiBTd2l0Y2ggdG8gbmV3IGJ1ZmZlciBhbmQgZnJlZSBvbGQgYnVmZmVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0Jb2xkX2J1ZiA9IG50LSZndDt1c2VyZGF0YTsKLQludC0mZ3Q7dXNlcmRhdGEgPSBuZXdfYnVmOwotCW50LSZndDt1c2VyZGF0YV9sZW5ndGggPSBvZmZzZXQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCWtmcmVlKG9sZF9idWYpOwomIzQzOwkvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi8KJiM0MzsJb2xkID0gcmN1X3JlcGxhY2VfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEsIG5ldywKJiM0MzsJCQkJICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTsKJiM0MzsJa2ZyZWVfcmN1KG9sZCwgcmN1KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY4NCw3ICYjNDM7MTY5NSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlrZnJlZShudC0mZ3Q7dXNlcmRhdGEpOwomIzQzOwlrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtJmd0O3VzZXJkYXRhKSk7CiAJa2ZyZWUobnQpOwogfQogCkBAIC0yMjI3LDE0ICYjNDM7MjIzOCwxMyBAQCBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkJICAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJCSAgICAgIGludCBtc2dfbGVuLAotCQkJCSAgICAgIGludCByZWxlYXNlX2xlbikKJiM0MzsJCQkJICAgICAgaW50IHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpCiB7Ci0JY29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnJlbGVhc2U7CiAKICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCi0JdXNlcmRhdGEgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YSA9IG50LSZndDtzeXNkYXRhOwogI2VuZGlmCiAKQEAgLTIyNTEsNyAmIzQzOzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJaWYgKHVzZXJkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLAogCQkJCSAgICAgc2l6ZW9mKG50LSZndDtidWYpIC0gbXNnX2xlbiwgJiMzNDslcyYjMzQ7LAotCQkJCSAgICAgdXNlcmRhdGEpOwomIzQzOwkJCQkgICAgIHVzZXJkYXRhLSZndDtkYXRhKTsKIAogCWlmIChzeXNkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLApAQCAtMjI3MSw3ICYjNDM7MjI4MSw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZikKIAogc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQkgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLAotCQkJCSBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbikKJiM0MzsJCQkJIGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKQogewogCWNvbnN0IGNoYXIgKnVzZXJkYXRhX3B0ciA9IE5VTEw7CiAJY29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMOwpAQCAtMjI4MiwxMiAmIzQzOzIyOTMsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKLQl1c2VyZGF0YV9wdHIgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YV9wdHIgPSBudC0mZ3Q7c3lzZGF0YTsKLQl1c2VyZGF0YV9sZW4gPSBudC0mZ3Q7dXNlcmRhdGFfbGVuZ3RoOwogI2VuZGlmCi0JaWYgKFdBUk5fT05fT05DRSghdXNlcmRhdGFfcHRyICZhbXA7JmFtcDsgdXNlcmRhdGFfbGVuICE9IDApKQotCQlyZXR1cm47CiYjNDM7CWlmICh1c2VyZGF0YSkgewomIzQzOwkJdXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtJmd0O2RhdGE7CiYjNDM7CQl1c2VyZGF0YV9sZW4gPSB1c2VyZGF0YS0mZ3Q7bGVuZ3RoOwomIzQzOwl9CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFzeXNkYXRhX3B0ciAmYW1wOyZhbXA7IHN5c2RhdGFfbGVuICE9IDApKQogCQlyZXR1cm47CkBAIC0yMzY0LDcgJiM0MzsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnN0IGNoYXIgKm1zZywKIAkJCQlpbnQgbXNnX2xlbiwKIAkJCQlpbnQgcmVsZWFzZV9sZW4sCi0JCQkJaW50IHN5c2RhdGFfbGVuKQomIzQzOwkJCQlpbnQgc3lzZGF0YV9sZW4sCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSkKIHsKIAlpbnQgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW47CiAJY29uc3QgY2hhciAqbXNnYm9keTsKQEAgLTIzOTMsNyAmIzQzOzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJICogd2lsbCBiZSByZXBsYWNlZAogCSAqLwogCXNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbiwKLQkJCSAgICAgc3lzZGF0YV9sZW4pOwomIzQzOwkJCSAgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIH0KIAogLyoqCkBAIC0yNDA4LDI1ICYjNDM7MjQyMCwzMyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhID0gTlVMTDsKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAlpbnQgcmVsZWFzZV9sZW4gPSAwOwogCWludCBzeXNkYXRhX2xlbiA9IDA7CiAJaW50IGxlbjsKIAomIzQzOwkvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpOwotCXVzZXJkYXRhX2xlbiA9IG50LSZndDt1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWlmICh1c2VyZGF0YSkKJiM0MzsJCXVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLSZndDtsZW5ndGg7CiAjZW5kaWYKIAlpZiAobnQtJmd0O3JlbGVhc2UpCiAJCXJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLSZndDtyZWxlYXNlKSAmIzQzOyAxOwogCiAJbGVuID0gd2N0eHQtJmd0O2xlbiAmIzQzOyByZWxlYXNlX2xlbiAmIzQzOyBzeXNkYXRhX2xlbiAmIzQzOyB1c2VyZGF0YV9sZW47CiAJaWYgKGxlbiAmbHQ7PSBNQVhfUFJJTlRfQ0hVTkspCi0JCXJldHVybiBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLAotCQkJCQkJIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuKTsKJiM0MzsJCXNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sCiYjNDM7CQkJCQkgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIAotCXJldHVybiBzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLCB3Y3R4dC0mZ3Q7bGVuLCByZWxlYXNlX2xlbiwKLQkJCQkgICBzeXNkYXRhX2xlbik7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLApAQCAtMjY2OSw3ICYjNDM7MjY4OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpOwogCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwotCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEpKTsKICNlbmRpZgogCWtmcmVlKG50KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQpAQCAtMTMsNiAmIzQzOzEzLDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJbmV0Y29uc19yZXN1bWUuc2ggXAogCW5ldGNvbnNfc3lzZGF0YS5zaCBcCiAJbmV0Y29uc190b3J0dXJlLnNoIFwKJiM0MzsJbmV0Y29uc191c2VyZGF0YS5zaCBcCiAjIGVuZCBvZiBURVNUX1BST0dTCiAKIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaApAQCAtMCwwICYjNDM7MSwyMjkgQEAKJiM0MzsjIS91c3IvYmluL2VudiBiYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC4KJiM0MzsjCiYjNDM7IyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXQKJiM0MzsjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZQomIzQzOyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGUKJiM0MzsjIGtleS4KJiM0MzsjCiYjNDM7IyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlCiYjNDM7IyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwcwomIzQzOyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLAomIzQzOyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZQomIzQzOyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtZXVvIHBpcGVmYWlsCiYjNDM7CiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWUgJiMzNDske0JBU0hfU09VUkNFWzBdfSYjMzQ7KSYjMzQ7KQomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBURElSfSYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaAomIzQzOwomIzQzOyMgTnVtYmVyIG9mIHRpbWVzIGVhY2ggdG9ydHVyZSB3b3JrZXIgbG9vcHMKJiM0MztJVEVSQVRJT05TPSR7MTotMjAwfQomIzQzOwomIzQzOyMgS2V5cyBvd25lZCBieSBlYWNoIHRvcnR1cmUgd29ya2VyLiBXb3JrZXJzIGRvIG5vdCBzaGFyZSBrZXlzLCBzbyBhIGZhaWxpbmcKJiM0MzsjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLgomIzQzO0NIVVJOX0tFWT0mIzM0O2NodXJua2V5JiMzNDsKJiM0MztUUkFOU0lFTlRfS0VZPSYjMzQ7dHJhbnNpZW50a2V5JiMzNDsKJiM0MzsjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTksKJiM0MztCVUxLX0tFWVM9OAomIzQzOwomIzQzO1VTRVJEQVRBX0RJUj0mIzM0OyR7TkVUQ09OU19QQVRIfS91c2VyZGF0YSYjMzQ7CiYjNDM7IyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU30KJiM0MzsjIGVudHJpZXMgb2YgdGhpcyBzaXplIGFyZSBlbm91Z2ggdG8gZm9yY2UgZnJhZ21lbnRhdGlvbgomIzQzO0xPTkdfVkFMVUU9JChwcmludGYgLS0gJiMzOTt2JS4wcyYjMzk7IHsxLi4xOTB9KQomIzQzOwomIzQzO2Z1bmN0aW9uIHdyaXRlX2tleSgpIHsKJiM0MzsJbG9jYWwgS0VZPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CWxvY2FsIFZBTFVFPSYjMzQ7JHsyfSYjMzQ7CiYjNDM7CiYjNDM7CW1rZGlyIC1wICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7S0VZfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske1ZBTFVFfSYjMzQ7ICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7IyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZQomIzQzO2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7CiYjNDM7CXJtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOwlsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmFtcDsKJiM0MzsJd2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7JHtJUF9WRVJTSU9OfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSYjMzQ7ICZndDsgL2Rldi9rbXNnCiYjNDM7CWJ1c3l3YWl0ICYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfSYjMzQ7IHRlc3QgLXMgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7IHx8IHRydWUKJiM0MzsJcGtpbGxfc29jYXQKJiM0MzsJdmFsaWRhdGVfbXNnICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkgewomIzQzOwlsb2NhbCBXQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgISBncmVwIC1xIC0tICYjMzQ7JHtXQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1dBTlRFRH0mIzM5OyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQljYXQgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHsKJiM0MzsJbG9jYWwgVU5XQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgZ3JlcCAtcSAtLSAmIzM0OyR7VU5XQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1VOV0FOVEVEfSYjMzk7IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHkKJiM0MzsjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlCiYjNDM7IyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuCiYjNDM7ZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQllY2hvICYjMzQ7dmFsdWUke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWUmIzM0OwomIzQzOwkJZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXIKJiM0MztmdW5jdGlvbiBjaHVybl9rZXkoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQlta2RpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9JiMzNDsKJiM0MzsJCWVjaG8gJiMzNDt0cmFuc2llbnQke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlJiMzNDsKJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkCiYjNDM7ZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSAke2l9JiMzNDsgJmd0OyAvZGV2L2ttc2cKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvcgomIzQzO2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkgewomIzQzOwlsb2NhbCBQSURTPSgpCiYjNDM7CWxvY2FsIFdPUktFUgomIzQzOwlsb2NhbCBSRVQ9MAomIzQzOwlsb2NhbCBQSUQKJiM0MzsKJiM0MzsJZm9yIFdPUktFUiBpbiAmIzM0OyRAJiMzNDsKJiM0MzsJZG8KJiM0MzsJCSYjMzQ7JHtXT1JLRVJ9JiMzNDsgJmFtcDsKJiM0MzsJCVBJRFMmIzQzOz0oJiMzNDskISYjMzQ7KQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CSMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZwomIzQzOwkjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLgomIzQzOwlmb3IgUElEIGluICYjMzQ7JHtQSURTW0BdfSYjMzQ7CiYjNDM7CWRvCiYjNDM7CQl3YWl0ICYjMzQ7JHtQSUR9JiMzNDsgfHwgUkVUPTEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyR7UkVUfSYjMzQ7IC1uZSAwIF1dCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiB1c2VyZGF0YSB0b3J0dXJlIHdvcmtlciBmYWlsZWQmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7QlVMS19LRVlTfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJd3JpdGVfa2V5ICYjMzQ7YnVsayR7aX0mIzM0OyAmIzM0OyR7TE9OR19WQUxVRX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0JVTEtfS0VZU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9L2J1bGske2l9JiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjID09PT09PT09PT0gIwomIzQzOyMgU3RhcnQgaGVyZSAjCiYjNDM7IyA9PT09PT09PT09ICMKJiM0MzsKJiM0Mzttb2Rwcm9iZSBuZXRkZXZzaW0gMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0Mzttb2Rwcm9iZSBuZXRjb25zb2xlIDImZ3Q7IC9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7CiYjNDM7SVBfVkVSU0lPTj0mIzM0O2lwdjQmIzM0OwomIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZQomIzQzO09VVFBVVF9GSUxFPSYjMzQ7L3RtcC8ke1RBUkdFVH0mIzM0OwomIzQzOwomIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZAomIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXMKJiM0MzsjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSkKJiM0MztlY2hvICYjMzQ7NiA1JiMzNDsgJmd0OyAvcHJvYy9zeXMva2VybmVsL3ByaW50awomIzQzOyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXQKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzCiYjNDM7c2V0X25ldHdvcmsgJiMzNDske0lQX1ZFUlNJT059JiMzNDsKJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlCiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzEKJiM0MzsjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbgomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtVU0VSREFUQV9LRVl9JiMzNDsgJiMzNDtmaXJzdCYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3QmIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICMyCiYjNDM7IyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7VVNFUkRBVEFfS0VZfSYjMzQ7ICYjMzQ7c2Vjb25kJiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT1zZWNvbmQmIzM0OwomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0JiMzNDsKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjMwomIzQzOyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeQomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZSYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PSYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzQKJiM0MzsjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0Mzt3cml0ZV9rZXkgJiMzNDske1VTRVJEQVRBX0tFWX0mIzM0OyAmIzM0O3RoaXJkJiMzNDsKJiM0MztybWRpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0mIzM0OwomIzQzO3NlbmRfYW5kX2NhcHR1cmUKJiM0MztleHBlY3Rfbm90X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT0mIzM0OwomIzQzO3JtICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICM1CiYjNDM7IyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LAomIzQzOyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7Q0hVUk5fS0VZfSYjMzQ7ICYjMzQ7JHtVU0VSREFUQV9WQUxVRX0mIzM0OwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7CiYjNDM7Y3JlYXRlX2J1bGtfa2V5cwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7ZGVsZXRlX2J1bGtfa2V5cwomIzQzOwomIzQzO2V4aXQgJiMzNDske2tzZnRfcGFzc30mIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0OQoJCQkJCQkJb3V0cHV0OiAyMjEKCQkJCQkJCXRob3VnaHRzOiAxODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJDVSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBuZXRjb25zb2xlLmNgIHBhdGNoLiBUaGUgY29yZSBpZGVhIGlzIHRvIGludHJvZHVjZSBSQ1UgZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgdGFyZ2V0LiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlIOKAkyB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gbGlrZWx5IHN1ZmZlcmVkIGZyb20gdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMgd2hlbiB1cGRhdGluZyBgdXNlcmRhdGFgIHdoaWxlIGl0IHdhcyBiZWluZyB0cmFuc21pdHRlZC4gTWFrZXMgc2Vuc2UuIFRoaXMgbmV3IGBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YWAgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYHJjdWAsIGBsZW5ndGhgLCBhbmQgYSBmbGV4aWJsZSBhcnJheSBgZGF0YVtdYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBhbGxvY2F0aW9uIGFuZCBkYXRhIHBvcHVsYXRpb24uIFRoZXkmIzM5O3JlIHVzaW5nIGBrbWFsbG9jX2ZsZXhgIGFuZCBgc2NucHJpbnRmYC4gYGttYWxsb2NfZmxleGAgaXRzZWxmIGRvZXNuJiMzOTt0IHplcm8gbWVtb3J5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyB3cml0dGVuIGlzIGluaXRpYWxpemVkLiBUaGUgY29kZSBkb2VzIGBzY25wcmludGZgIHRvIHBvcHVsYXRlIHRoZSBgZGF0YWAgZmllbGQsIHNvIHRoZSBzdHJpbmcgaXMgbnVsbC10ZXJtaW5hdGVkLiBHb29kLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCB0aGUgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIGV4cGVjdHMgbGF0ZXIuIFRoZSBjb2RlIHRoZW4gcmVjb3JkcyB0aGUgd3JpdHRlbiBsZW5ndGggaW4gYG5ldy0mZ3Q7bGVuZ3RoYC4gVGhpcyBzZXRzIHVwIHRoZSBjcml0aWNhbCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gZm9yIHRoZSBwYXlsb2FkLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHRyYW5zbWl0IHBhdGhzLCBzcGVjaWZpY2FsbHkgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAuIEluIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgaXQgdXNlcyBgJXNgIG9uIGB1c2VyZGF0YS0mZ3Q7ZGF0YWAsIHdoaWNoIGlzIHNhZmUgYmVjYXVzZSBpdCYjMzk7cyBudWxsLXRlcm1pbmF0ZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAgZnVuY3Rpb24gdXNlcyB0aGUgYHVzZXJkYXRhLSZndDtsZW5ndGhgIHZhbHVlLiBDcnVjaWFsbHksIHRoaXMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIGBvZmZzZXRgIGZyb20gYHNjbnByaW50ZmAsIHJlcHJlc2VudGluZyB0aGUgKmV4YWN0KiBudW1iZXIgb2YgYnl0ZXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGZ1bmN0aW9uLiBTbyB0aGUgZGF0YSBiZWluZyBzZW50IGlzIGFsbCBpbml0aWFsaXplZC4gSSYjMzk7bSBzYXRpc2ZpZWQuCgpOb3csIGFuIG9idmlvdXMgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrcyo/IFRoZSBgcmN1YCBoZWFkIGlzIGluaXRpYWxpemVkIGJ5IGBrZnJlZV9yY3VgIGludGVybmFsbHksIGJ1dCBpcyBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIFRoZSBgZGF0YVtdYCBhcnJheSBpcyB0aGUgb25seSBwYXJ0IHNlbnQgb3ZlciB0aGUgbmV0d29yaywgYW5kIHRoZSBjb2RlIGVuc3VyZXMgaXQgb25seSB0cmFuc21pdHMgdGhlIGluaXRpYWxpemVkIGJ5dGVzIGJ5IHVzaW5nIHRoZSBsZW5ndGggZmllbGQuIE5vIGxlYWsgaGVyZS4KClNvLCB0aGUgcHJpbWFyeSBvYmplY3RpdmUgaXMgdG8gZWxpbWluYXRlIHRoZSBVQUYvZGF0YSByYWNlLCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGBzcGluX2xvY2tfaXJxc2F2ZWAgYW5kIGBrZnJlZWAgcGF0dGVybiBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIHByb2JsZW0uJiMzNDsgSXQmIzM5O3MgdmVyeSBsaWtlbHkgS0FTQU4gd291bGQgaGF2ZSBjYXVnaHQgdGhpcyBxdWlja2x5LiBUaGUgUkNVIGFwcHJvYWNoIGVmZmVjdGl2ZWx5IGVsaW1pbmF0ZXMgdGhpcyByYWNlLiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgYSBnb29kIGZpeC4KClRoZSBrZXkgdG8gZW5zdXJlIGlzIHRoZXJlIGlzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4KCkkmIzM5O2xsIGNoZWNrIGEgS01TQU4gc3BlY2lmaWMgdGhpbmcuCkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPwoKVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBrbWFsbG9jX2ZsZXhgLCB3aGljaCBkb2VzbiYjMzk7dCB6ZXJvLCBhbmQgdGhlIHNpemUgY2FsY3VsYXRpb25zLiBXZSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIHRoZSBidWZmZXIgbWF0Y2hlcyB0aGUgYnl0ZXMgd3JpdHRlbiB0byB0aGUgYnVmZmVyLgpUaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzdHJpbmcgd3JpdGluZyBhcmUgcmVsYXRlZCBieSBgbGVuYCBhbmQgYG9mZnNldGAuIGBsZW5gIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYGNhbGNfdXNlcmRhdGFfbGVuYCwgYW5kIGBvZmZzZXRgIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYHNjbnByaW50ZmAuCgpUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcyBpcyB3cml0dGVuLiBUaGVyZSBzaG91bGQgYmUgYSBtdXRleCBmb3IgdGhlIHdyaXRlcnMgYW5kIHJlYWRlcnMuClRoZSBjb21tZW50IG1lbnRpb25zIHRoZSBzZXJpYWxpemF0aW9uIGJ5IGBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhgLgpTbyB0aGUgc2l6ZSBpcyBleGFjdGx5IHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KCkV2ZW4gaWYgYGNhbGNfdXNlcmRhdGFfbGVuYCBhbmQgYHNjbnByaW50ZmAgZGlkbiYjMzk7dCBhZ3JlZSBwZXJmZWN0bHksIGBvZmZzZXRgIGlzIHRoZSBhY3R1YWwgYnl0ZXMgd3JpdHRlbiwgYW5kIGB1c2VyZGF0YS0mZ3Q7bGVuZ3RoYCBob2xkcyB0aGUgY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMgdXNlZCwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCByZWFkcy4gYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIHVzZXMgdGhlIG51bGwgdGVybWluYXRvci4gYHNlbmRfZnJhZ21lbnRlZF9ib2R5YCB1c2VzIGB1c2VyZGF0YS0mZ3Q7bGVuZ3RoYCB3aGljaCBpcyBlcXVhbCB0byBgb2Zmc2V0YC4KClNvLCBuby4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSXQmIzM5O3Mgc2FmZS4KTm8gS01TQU4gaXMgbmVlZGVkLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYGttYWxsb2NfZmxleGAgbWFjcm8ganVzdCB0byBiZSAxMDAlIHN1cmUsIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZml4ZXMgYSBVQUYvZGF0YSByYWNlLCB3aGljaCBpcyBhIEtBU0FOIGRvbWFpbiBidWcuCk5vIEtNU0FOIGlzIG5lZWRlZC4KCkkgd2lsbCBzZXQgTmVlZHNLTVNBTj1mYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NToyNy40MTIwMDgwMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg3OTk1NjU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcInVzZXJkYXR1bV9tYWtlX2l0ZW1cIixcbiAgICBcIm5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bnNhZmUgbG9ja2xlc3MgdXBkYXRlIG9mIGBudC1cXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjcuNDEyMDEyNDMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMxMDkwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MDY3ZDk1NDM0ZjcyODQ0YTQ5N2RlYjU5NzIxZTlkNmUzODM4ZDg0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbmluZGV4IDAzOTEzMzAyMzI4Y2MuLmIzNThlNWMzNjczNTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuQEAgLTE1MSwxMyArMTUxLDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcXG4gXFx0U1RBVEVfREVBQ1RJVkFURUQsXFxuIH07XFxuIFxcbisvKipcXG4rICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cXG4rICogQHJjdTpcXHRVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXFxuKyAqIEBsZW5ndGg6XFx0TGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLlxcbisgKiBAZGF0YTpcXHRGb3JtYXR0ZWQgXFxcIiBrZXk9dmFsdWVcXFxcblxcXCIgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXFxuKyAqXFxuKyAqIEltbXV0YWJsZSBvbmNlIHB1Ymxpc2hlZCwgc28gdGhlIHRyYW5zbWl0IHBhdGggbmV2ZXIgb2JzZXJ2ZXMgQGRhdGEgYW5kXFxuKyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXFxuKyAqL1xcbitzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuK1xcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdTtcXG4rXFx0c2l6ZV90XFx0XFx0XFx0bGVuZ3RoO1xcbitcXHRjaGFyXFx0XFx0XFx0ZGF0YVtdO1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LlxcbiAgKiBAbGlzdDpcXHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cXG4gICogQGdyb3VwOlxcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXFxuICAqIEB1c2VyZGF0YV9ncm91cDpcXHRMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5XFxuLSAqIEB1c2VyZGF0YTpcXHRcXHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXFxuLSAqIEB1c2VyZGF0YV9sZW5ndGg6XFx0U3RyaW5nIGxlbmd0aCBvZiB1c2VyZGF0YS5cXG4rICogQHVzZXJkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuXFxuICAqIEBzeXNkYXRhOlxcdFxcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcXG4gICogQHN5c2RhdGFfZmllbGRzOlxcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cXG4gICogQG1zZ2NvdW50ZXI6XFx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXFxuQEAgLTE5OCw4ICsyMTIsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiAjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIFxcdHN0cnVjdCBjb25maWdfZ3JvdXBcXHRncm91cDtcXG4gXFx0c3RydWN0IGNvbmZpZ19ncm91cFxcdHVzZXJkYXRhX2dyb3VwO1xcbi1cXHRjaGFyXFx0XFx0XFx0KnVzZXJkYXRhO1xcbi1cXHRzaXplX3RcXHRcXHRcXHR1c2VyZGF0YV9sZW5ndGg7XFxuK1xcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTtcXG4gXFx0Y2hhclxcdFxcdFxcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XFxuIFxcbiBcXHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXFxuQEAgLTEzNTEsMTIgKzEzNjQsMTEgQEAgc3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXG4gc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDtcXG4rXFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDtcXG4gXFx0c3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07XFxuIFxcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuLVxcdGNoYXIgKm9sZF9idWYgPSBOVUxMO1xcbi1cXHRjaGFyICpuZXdfYnVmID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IG9mZnNldCA9IDA7XFxuIFxcdGludCBsZW47XFxuIFxcbkBAIC0xMzY4LDggKzEzODAsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXG4gXFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xcbiBcXHRpZiAobGVuKSB7XFxuLVxcdFxcdG5ld19idWYgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpO1xcbi1cXHRcXHRpZiAoIW5ld19idWYpXFxuK1xcdFxcdG5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gKyAxKTtcXG4rXFx0XFx0aWYgKCFuZXcpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbkBAIC0xMzc5LDIyICsxMzkxLDIxIEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdHVkbV9pdGVtID0gdG9fdXNlcmRhdHVtKGl0ZW0pO1xcbiBcXHRcXHQvKiBTa2lwIHVzZXJkYXRhIHdpdGggbm8gdmFsdWUgc2V0ICovXFxuIFxcdFxcdGlmICh1ZG1faXRlbS1cXHUwMDNldmFsdWVbMF0pIHtcXG4tXFx0XFx0XFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcXHUwMDI2bmV3X2J1ZltvZmZzZXRdLCBsZW4gKyAxIC0gb2Zmc2V0LFxcbitcXHRcXHRcXHRvZmZzZXQgKz0gc2NucHJpbnRmKFxcdTAwMjZuZXctXFx1MDAzZWRhdGFbb2Zmc2V0XSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGxlbiArIDEgLSBvZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiICVzPSVzXFxcXG5cXFwiLCBpdGVtLVxcdTAwM2VjaV9uYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgdWRtX2l0ZW0tXFx1MDAzZXZhbHVlKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRXQVJOX09OX09OQ0Uob2Zmc2V0ICE9IGxlbik7XFxuK1xcdGlmIChuZXcpXFxuK1xcdFxcdG5ldy1cXHUwMDNlbGVuZ3RoID0gb2Zmc2V0O1xcbiBcXG4tXFx0LyogU3dpdGNoIHRvIG5ldyBidWZmZXIgYW5kIGZyZWUgb2xkIGJ1ZmZlciAqL1xcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbi1cXHRvbGRfYnVmID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi1cXHRudC1cXHUwMDNldXNlcmRhdGEgPSBuZXdfYnVmO1xcbi1cXHRudC1cXHUwMDNldXNlcmRhdGFfbGVuZ3RoID0gb2Zmc2V0O1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XFxuLVxcbi1cXHRrZnJlZShvbGRfYnVmKTtcXG4rXFx0LyogV3JpdGVycyBhcmUgc2VyaWFsaXplZCBieSBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXguICovXFxuK1xcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIobnQtXFx1MDAzZXVzZXJkYXRhLCBuZXcsXFxuK1xcdFxcdFxcdFxcdCAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTtcXG4rXFx0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTE2ODQsNyArMTY5NSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuIFxcbi1cXHRrZnJlZShudC1cXHUwMDNldXNlcmRhdGEpO1xcbitcXHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXFx1MDAzZXVzZXJkYXRhKSk7XFxuIFxcdGtmcmVlKG50KTtcXG4gfVxcbiBcXG5AQCAtMjIyNywxNCArMjIzOCwxMyBAQCBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgICBpbnQgbXNnX2xlbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcXG4ge1xcbi1cXHRjb25zdCBjaGFyICp1c2VyZGF0YSA9IE5VTEw7XFxuIFxcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICpyZWxlYXNlO1xcbiBcXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG4tXFx0dXNlcmRhdGEgPSBudC1cXHUwMDNldXNlcmRhdGE7XFxuIFxcdHN5c2RhdGEgPSBudC1cXHUwMDNlc3lzZGF0YTtcXG4gI2VuZGlmXFxuIFxcbkBAIC0yMjUxLDcgKzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdGlmICh1c2VyZGF0YSlcXG4gXFx0XFx0bXNnX2xlbiArPSBzY25wcmludGYoXFx1MDAyNm50LVxcdTAwM2VidWZbbXNnX2xlbl0sXFxuIFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKG50LVxcdTAwM2VidWYpIC0gbXNnX2xlbiwgXFxcIiVzXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICB1c2VyZGF0YSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgdXNlcmRhdGEtXFx1MDAzZWRhdGEpO1xcbiBcXG4gXFx0aWYgKHN5c2RhdGEpXFxuIFxcdFxcdG1zZ19sZW4gKz0gc2NucHJpbnRmKFxcdTAwMjZudC1cXHUwMDNlYnVmW21zZ19sZW5dLFxcbkBAIC0yMjcxLDcgKzIyODEsOCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRfcmVsZWFzZShjaGFyICpidWYpXFxuIFxcbiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxcbi1cXHRcXHRcXHRcXHQgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4pXFxuK1xcdFxcdFxcdFxcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcXG4ge1xcbiBcXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICpzeXNkYXRhX3B0ciA9IE5VTEw7XFxuQEAgLTIyODIsMTIgKzIyOTMsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XFxuIFxcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbi1cXHR1c2VyZGF0YV9wdHIgPSBudC1cXHUwMDNldXNlcmRhdGE7XFxuIFxcdHN5c2RhdGFfcHRyID0gbnQtXFx1MDAzZXN5c2RhdGE7XFxuLVxcdHVzZXJkYXRhX2xlbiA9IG50LVxcdTAwM2V1c2VyZGF0YV9sZW5ndGg7XFxuICNlbmRpZlxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgXFx1MDAyNlxcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmICh1c2VyZGF0YSkge1xcbitcXHRcXHR1c2VyZGF0YV9wdHIgPSB1c2VyZGF0YS1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXFx1MDAzZWxlbmd0aDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghc3lzZGF0YV9wdHIgXFx1MDAyNlxcdTAwMjYgc3lzZGF0YV9sZW4gIT0gMCkpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM2NCw3ICsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHRcXHRjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFxcdFxcdGludCBtc2dfbGVuLFxcbiBcXHRcXHRcXHRcXHRpbnQgcmVsZWFzZV9sZW4sXFxuLVxcdFxcdFxcdFxcdGludCBzeXNkYXRhX2xlbilcXG4rXFx0XFx0XFx0XFx0aW50IHN5c2RhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuIHtcXG4gXFx0aW50IGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuO1xcbiBcXHRjb25zdCBjaGFyICptc2dib2R5O1xcbkBAIC0yMzkzLDcgKzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdCAqIHdpbGwgYmUgcmVwbGFjZWRcXG4gXFx0ICovXFxuIFxcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcXG4tXFx0XFx0XFx0ICAgICBzeXNkYXRhX2xlbik7XFxuK1xcdFxcdFxcdCAgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI0MDgsMjUgKzI0MjAsMzMgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbiB7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSA9IE5VTEw7XFxuIFxcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xcbiBcXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xcbiBcXHRpbnQgc3lzZGF0YV9sZW4gPSAwO1xcbiBcXHRpbnQgbGVuO1xcbiBcXG4rXFx0LyogS2VlcHMgdGhlIHBheWxvYWQgcGlja2VkIGJlbG93IGFsaXZlIHVudGlsIHRoZSBsYXN0IHNlbmRfdWRwKCkuICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuIFxcdHN5c2RhdGFfbGVuID0gcHJlcGFyZV9zeXNkYXRhKG50LCB3Y3R4dCk7XFxuLVxcdHVzZXJkYXRhX2xlbiA9IG50LVxcdTAwM2V1c2VyZGF0YV9sZW5ndGg7XFxuK1xcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuK1xcdGlmICh1c2VyZGF0YSlcXG4rXFx0XFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXFx1MDAzZWxlbmd0aDtcXG4gI2VuZGlmXFxuIFxcdGlmIChudC1cXHUwMDNlcmVsZWFzZSlcXG4gXFx0XFx0cmVsZWFzZV9sZW4gPSBzdHJsZW4oaW5pdF91dHNuYW1lKCktXFx1MDAzZXJlbGVhc2UpICsgMTtcXG4gXFxuIFxcdGxlbiA9IHdjdHh0LVxcdTAwM2VsZW4gKyByZWxlYXNlX2xlbiArIHN5c2RhdGFfbGVuICsgdXNlcmRhdGFfbGVuO1xcbiBcXHRpZiAobGVuIFxcdTAwM2M9IE1BWF9QUklOVF9DSFVOSylcXG4tXFx0XFx0cmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVxcdTAwM2VvdXRidWYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB3Y3R4dC1cXHUwMDNlbGVuLCByZWxlYXNlX2xlbik7XFxuK1xcdFxcdHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVxcdTAwM2VvdXRidWYsIHdjdHh0LVxcdTAwM2VsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLCB3Y3R4dC1cXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XFxuIFxcbi1cXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXFx1MDAzZW91dGJ1Ziwgd2N0eHQtXFx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXFxuLVxcdFxcdFxcdFxcdCAgIHN5c2RhdGFfbGVuKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuQEAgLTI2NjksNyArMjY4OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiBcXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuICNpZmRlZlxcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG4tXFx0a2ZyZWUobnQtXFx1MDAzZXVzZXJkYXRhKTtcXG4rXFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVxcdTAwM2V1c2VyZGF0YSkpO1xcbiAjZW5kaWZcXG4gXFx0a2ZyZWUobnQpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRuZXRjb25zX3Jlc3VtZS5zaCBcXFxcXFxuIFxcdG5ldGNvbnNfc3lzZGF0YS5zaCBcXFxcXFxuIFxcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxcXFxuK1xcdG5ldGNvbnNfdXNlcmRhdGEuc2ggXFxcXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXFxuIFxcbiBpbmNsdWRlIC4uLy4uLy4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjExMzkwM2Y0Y2UxYzVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXFxuQEAgLTAsMCArMSwyMjkgQEBcXG4rIyEvdXNyL2Jpbi9lbnYgYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjIEV4ZXJjaXNlIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuXFxuKyNcXG4rIyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXRcXG4rIyBjb25maWdmcyBzYXlzOiBhIHZhbHVlIHNob3dzIHVwIGluIHRoZSBuZXh0IG1lc3NhZ2UsIGFuIHVwZGF0ZSByZXBsYWNlcyB0aGVcXG4rIyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZVxcbisjIGtleS5cXG4rI1xcbisjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGVcXG4rIyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwc1xcbisjIHBpY2tpbmcgdXAgcGF5bG9hZHMgdGhhdCBhcmUgYmVpbmcgcmVwbGFjZWQgdW5kZXJuZWF0aCBpdC4gSXQgcnVucyB0d2ljZSxcXG4rIyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlXFxuKyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuXFxuKyNcXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcXHUwMDNlXFxuK1xcbitzZXQgLWV1byBwaXBlZmFpbFxcbitcXG4rU0NSSVBURElSPSQoZGlybmFtZSBcXFwiJChyZWFkbGluayAtZSBcXFwiJHtCQVNIX1NPVVJDRVswXX1cXFwiKVxcXCIpXFxuK1xcbitzb3VyY2UgXFxcIiR7U0NSSVBURElSfVxcXCIvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXFxuK1xcbisjIE51bWJlciBvZiB0aW1lcyBlYWNoIHRvcnR1cmUgd29ya2VyIGxvb3BzXFxuK0lURVJBVElPTlM9JHsxOi0yMDB9XFxuK1xcbisjIEtleXMgb3duZWQgYnkgZWFjaCB0b3J0dXJlIHdvcmtlci4gV29ya2VycyBkbyBub3Qgc2hhcmUga2V5cywgc28gYSBmYWlsaW5nXFxuKyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuXFxuK0NIVVJOX0tFWT1cXFwiY2h1cm5rZXlcXFwiXFxuK1RSQU5TSUVOVF9LRVk9XFxcInRyYW5zaWVudGtleVxcXCJcXG4rIyBOdW1iZXIgb2Yga2V5cyB1c2VkIHRvIHB1c2ggYSBtZXNzYWdlIHBhc3QgTUFYX1BSSU5UX0NIVU5LXFxuK0JVTEtfS0VZUz04XFxuK1xcbitVU0VSREFUQV9ESVI9XFxcIiR7TkVUQ09OU19QQVRIfS91c2VyZGF0YVxcXCJcXG4rIyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU31cXG4rIyBlbnRyaWVzIG9mIHRoaXMgc2l6ZSBhcmUgZW5vdWdoIHRvIGZvcmNlIGZyYWdtZW50YXRpb25cXG4rTE9OR19WQUxVRT0kKHByaW50ZiAtLSAndiUuMHMnIHsxLi4xOTB9KVxcbitcXG4rZnVuY3Rpb24gd3JpdGVfa2V5KCkge1xcbitcXHRsb2NhbCBLRVk9XFxcIiR7MX1cXFwiXFxuK1xcdGxvY2FsIFZBTFVFPVxcXCIkezJ9XFxcIlxcbitcXG4rXFx0bWtkaXIgLXAgXFxcIiR7VVNFUkRBVEFfRElSfS8ke0tFWX1cXFwiXFxuK1xcdGVjaG8gXFxcIiR7VkFMVUV9XFxcIiBcXHUwMDNlIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlXFxcIlxcbit9XFxuK1xcbisjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlXFxuK2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7XFxuK1xcdHJtIC1mIFxcXCIke09VVFBVVF9GSUxFfVxcXCJcXG4rXFxuK1xcdGxpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvIFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAyNlxcbitcXHR3YWl0X2Zvcl9wb3J0IFxcXCIke05BTUVTUEFDRX1cXFwiIFxcXCIke1BPUlR9XFxcIiBcXFwiJHtJUF9WRVJTSU9OfVxcXCJcXG4rXFx0ZWNobyBcXFwiJHtNU0d9OiAke1RBUkdFVH1cXFwiIFxcdTAwM2UgL2Rldi9rbXNnXFxuK1xcdGJ1c3l3YWl0IFxcXCIke0JVU1lXQUlUX1RJTUVPVVR9XFxcIiB0ZXN0IC1zIFxcXCIke09VVFBVVF9GSUxFfVxcXCIgfHwgdHJ1ZVxcbitcXHRwa2lsbF9zb2NhdFxcbitcXHR2YWxpZGF0ZV9tc2cgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbit9XFxuK1xcbitmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkge1xcbitcXHRsb2NhbCBXQU5URUQ9XFxcIiR7MX1cXFwiXFxuK1xcbitcXHRpZiAhIGdyZXAgLXEgLS0gXFxcIiR7V0FOVEVEfVxcXCIgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAnJHtXQU5URUR9JyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRjYXQgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHtcXG4rXFx0bG9jYWwgVU5XQU5URUQ9XFxcIiR7MX1cXFwiXFxuK1xcbitcXHRpZiBncmVwIC1xIC0tIFxcXCIke1VOV0FOVEVEfVxcXCIgXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAnJHtVTldBTlRFRH0nIGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0Y2F0IFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHlcXG4rIyB2YWx1ZSBpcyBza2lwcGVkIHdoZW4gdGhlIHBheWxvYWQgaXMgZm9ybWF0dGVkLCBzbyB0aGlzIGFsc28gZHJpdmVzIHRoZVxcbisjIHRhcmdldCB0aHJvdWdoIGhhdmluZyBubyBwYXlsb2FkIGF0IGFsbC5cXG4rZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluICQoc2VxIFxcXCIke0lURVJBVElPTlN9XFxcIilcXG4rXFx0ZG9cXG4rXFx0XFx0ZWNobyBcXFwidmFsdWUke2l9XFxcIiBcXHUwMDNlIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXFxcIlxcbitcXHRcXHRlY2hvIFxcdTAwM2UgXFxcIiR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXJcXG4rZnVuY3Rpb24gY2h1cm5fa2V5KCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtJVEVSQVRJT05TfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdG1rZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVxcXCJcXG4rXFx0XFx0ZWNobyBcXFwidHJhbnNpZW50JHtpfVxcXCIgXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0vdmFsdWVcXFwiXFxuK1xcdFxcdHJtZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVxcXCJcXG4rXFx0ZG9uZVxcbit9XFxuK1xcbisjIEtlZXAgdGhlIHRyYW5zbWl0IHBhdGggYnVzeSB3aGlsZSB0aGUgcGF5bG9hZCBpcyBiZWluZyByZXBsYWNlZFxcbitmdW5jdGlvbiBzZW5kX21lc3NhZ2VzKCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtJVEVSQVRJT05TfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdGVjaG8gXFxcIiR7TVNHfTogJHtUQVJHRVR9ICR7aX1cXFwiIFxcdTAwM2UgL2Rldi9rbXNnXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyBSdW4gdGhlIHdvcmtlcnMgY29uY3VycmVudGx5IGFuZCBmYWlsIGlmIGFueSBvZiB0aGVtIGhpdHMgYW4gZXJyb3JcXG4rZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7XFxuK1xcdGxvY2FsIFBJRFM9KClcXG4rXFx0bG9jYWwgV09SS0VSXFxuK1xcdGxvY2FsIFJFVD0wXFxuK1xcdGxvY2FsIFBJRFxcbitcXG4rXFx0Zm9yIFdPUktFUiBpbiBcXFwiJEBcXFwiXFxuK1xcdGRvXFxuK1xcdFxcdFxcXCIke1dPUktFUn1cXFwiIFxcdTAwMjZcXG4rXFx0XFx0UElEUys9KFxcXCIkIVxcXCIpXFxuK1xcdGRvbmVcXG4rXFxuK1xcdCMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZ1xcbitcXHQjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLlxcbitcXHRmb3IgUElEIGluIFxcXCIke1BJRFNbQF19XFxcIlxcbitcXHRkb1xcbitcXHRcXHR3YWl0IFxcXCIke1BJRH1cXFwiIHx8IFJFVD0xXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlmIFtbIFxcXCIke1JFVH1cXFwiIC1uZSAwIF1dXFxuK1xcdHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogdXNlcmRhdGEgdG9ydHVyZSB3b3JrZXIgZmFpbGVkXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCBcXFwiJHtrc2Z0X2ZhaWx9XFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitmdW5jdGlvbiBjcmVhdGVfYnVsa19rZXlzKCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtCVUxLX0tFWVN9XFxcIilcXG4rXFx0ZG9cXG4rXFx0XFx0d3JpdGVfa2V5IFxcXCJidWxrJHtpfVxcXCIgXFxcIiR7TE9OR19WQUxVRX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rZnVuY3Rpb24gZGVsZXRlX2J1bGtfa2V5cygpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7QlVMS19LRVlTfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdHJtZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vYnVsayR7aX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyA9PT09PT09PT09ICNcXG4rIyBTdGFydCBoZXJlICNcXG4rIyA9PT09PT09PT09ICNcXG4rXFxuK21vZHByb2JlIG5ldGRldnNpbSAyXFx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxcbittb2Rwcm9iZSBuZXRjb25zb2xlIDJcXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXFxuK1xcbitJUF9WRVJTSU9OPVxcXCJpcHY0XFxcIlxcbisjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGVcXG4rT1VUUFVUX0ZJTEU9XFxcIi90bXAvJHtUQVJHRVR9XFxcIlxcbitcXG4rIyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcXG4rIyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXFxuK2VjaG8gXFxcIjYgNVxcXCIgXFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XFxuK3RyYXAgY2xlYW51cCBFWElUXFxuKyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzXFxuK3NldF9uZXR3b3JrIFxcXCIke0lQX1ZFUlNJT059XFxcIlxcbisjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlXFxuK2NyZWF0ZV9keW5hbWljX3RhcmdldFxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICMxXFxuKyMgQSB2YWx1ZSB3cml0dGVuIHRvIGNvbmZpZ2ZzIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtVU0VSREFUQV9LRVl9XFxcIiBcXFwiZmlyc3RcXFwiXFxuK3NlbmRfYW5kX2NhcHR1cmVcXG4rZXhwZWN0X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XFxcIlxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICMyXFxuKyMgVXBkYXRpbmcgdGhlIHZhbHVlIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBwYXlsb2FkXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtVU0VSREFUQV9LRVl9XFxcIiBcXFwic2Vjb25kXFxcIlxcbitzZW5kX2FuZF9jYXB0dXJlXFxuK2V4cGVjdF9pbl9tc2cgXFxcIiR7VVNFUkRBVEFfS0VZfT1zZWNvbmRcXFwiXFxuK2V4cGVjdF9ub3RfaW5fbXNnIFxcXCIke1VTRVJEQVRBX0tFWX09Zmlyc3RcXFwiXFxuK1xcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisjIFRFU1QgIzNcXG4rIyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5XFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK2VjaG8gXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZVxcXCJcXG4rc2VuZF9hbmRfY2FwdHVyZVxcbitleHBlY3Rfbm90X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PVxcXCJcXG4rXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyMgVEVTVCAjNFxcbisjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5XFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtVU0VSREFUQV9LRVl9XFxcIiBcXFwidGhpcmRcXFwiXFxuK3JtZGlyIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9XFxcIlxcbitzZW5kX2FuZF9jYXB0dXJlXFxuK2V4cGVjdF9ub3RfaW5fbXNnIFxcXCIke1VTRVJEQVRBX0tFWX09XFxcIlxcbitybSBcXFwiJHtPVVRQVVRfRklMRX1cXFwiXFxuK1xcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisjIFRFU1QgIzVcXG4rIyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LFxcbisjIGZpcnN0IHVuZnJhZ21lbnRlZCBhbmQgdGhlbiBmcmFnbWVudGVkXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK3dyaXRlX2tleSBcXFwiJHtDSFVSTl9LRVl9XFxcIiBcXFwiJHtVU0VSREFUQV9WQUxVRX1cXFwiXFxuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXFxuK1xcbitjcmVhdGVfYnVsa19rZXlzXFxuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXFxuK2RlbGV0ZV9idWxrX2tleXNcXG4rXFxuK2V4aXQgXFxcIiR7a3NmdF9wYXNzfVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjcuODg1ODU2MjU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTk1MDc3NDU4OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgICBcInVzZXJkYXR1bV9kcm9wXCIsXG4gICAgXCJ1c2VyZGF0dW1fbWFrZV9pdGVtXCIsXG4gICAgXCJuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlXCIsXG4gICAgXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDA2N2Q5NTQzNGY3Mjg0NGE0OTdkZWI1OTcyMWU5ZDZlMzgzOGQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ1OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCAwMzkxMzMwMjMyOGNjLi5iMzU4ZTVjMzY3MzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xNTEsMTMgKzE1MSwyNyBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuKy8qKlxuKyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4rICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbisgKiBAbGVuZ3RoOlx0TGVuZ3RoIG9mIEBkYXRhLCBleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yLlxuKyAqIEBkYXRhOlx0Rm9ybWF0dGVkIFwiIGtleT12YWx1ZVxcblwiIGVudHJpZXMsIE5VTCB0ZXJtaW5hdGVkLlxuKyAqXG4rICogSW1tdXRhYmxlIG9uY2UgcHVibGlzaGVkLCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBuZXZlciBvYnNlcnZlcyBAZGF0YSBhbmRcbisgKiBAbGVuZ3RoIGRpc2FncmVlaW5nLlxuKyAqL1xuK3N0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbitcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4rXHRzaXplX3RcdFx0XHRsZW5ndGg7XG4rXHRjaGFyXHRcdFx0ZGF0YVtdO1xuK307XG4rXG4gLyoqXG4gICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG4gICogQGxpc3Q6XHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cbiAgKiBAZ3JvdXA6XHRMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LlxuICAqIEB1c2VyZGF0YV9ncm91cDpcdExpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHlcbi0gKiBAdXNlcmRhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcbi0gKiBAdXNlcmRhdGFfbGVuZ3RoOlx0U3RyaW5nIGxlbmd0aCBvZiB1c2VyZGF0YS5cbisgKiBAdXNlcmRhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuXG4gICogQHN5c2RhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcbiAgKiBAc3lzZGF0YV9maWVsZHM6XHRTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuXG4gICogQG1zZ2NvdW50ZXI6XHRNZXNzYWdlIHNlbnQgY291bnRlci5cbkBAIC0xOTgsOCArMjEyLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdGdyb3VwO1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0dXNlcmRhdGFfZ3JvdXA7XG4tXHRjaGFyXHRcdFx0KnVzZXJkYXRhO1xuLVx0c2l6ZV90XHRcdFx0dXNlcmRhdGFfbGVuZ3RoO1xuK1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xuIFx0Y2hhclx0XHRcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XG4gXG4gXHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXG5AQCAtMTM1MSwxMiArMTM2NCwxMSBAQCBzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXG4gc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4rXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqbmV3ID0gTlVMTDtcbitcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7XG4gXHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG1faXRlbTtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuLVx0Y2hhciAqb2xkX2J1ZiA9IE5VTEw7XG4tXHRjaGFyICpuZXdfYnVmID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgb2Zmc2V0ID0gMDtcbiBcdGludCBsZW47XG4gXG5AQCAtMTM2OCw4ICsxMzgwLDggQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgKi9cbiBcdGlmIChsZW4pIHtcbi1cdFx0bmV3X2J1ZiA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7XG4tXHRcdGlmICghbmV3X2J1ZilcbitcdFx0bmV3ID0ga21hbGxvY19mbGV4KCpuZXcsIGRhdGEsIGxlbiArIDEpO1xuK1x0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbkBAIC0xMzc5LDIyICsxMzkxLDIxIEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHVkbV9pdGVtID0gdG9fdXNlcmRhdHVtKGl0ZW0pO1xuIFx0XHQvKiBTa2lwIHVzZXJkYXRhIHdpdGggbm8gdmFsdWUgc2V0ICovXG4gXHRcdGlmICh1ZG1faXRlbS1cdTAwM2V2YWx1ZVswXSkge1xuLVx0XHRcdG9mZnNldCArPSBzY25wcmludGYoXHUwMDI2bmV3X2J1ZltvZmZzZXRdLCBsZW4gKyAxIC0gb2Zmc2V0LFxuK1x0XHRcdG9mZnNldCArPSBzY25wcmludGYoXHUwMDI2bmV3LVx1MDAzZWRhdGFbb2Zmc2V0XSxcbitcdFx0XHRcdFx0ICAgIGxlbiArIDEgLSBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgICBcIiAlcz0lc1xcblwiLCBpdGVtLVx1MDAzZWNpX25hbWUsXG4gXHRcdFx0XHRcdCAgICB1ZG1faXRlbS1cdTAwM2V2YWx1ZSk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdFdBUk5fT05fT05DRShvZmZzZXQgIT0gbGVuKTtcbitcdGlmIChuZXcpXG4rXHRcdG5ldy1cdTAwM2VsZW5ndGggPSBvZmZzZXQ7XG4gXG4tXHQvKiBTd2l0Y2ggdG8gbmV3IGJ1ZmZlciBhbmQgZnJlZSBvbGQgYnVmZmVyICovXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4tXHRvbGRfYnVmID0gbnQtXHUwMDNldXNlcmRhdGE7XG4tXHRudC1cdTAwM2V1c2VyZGF0YSA9IG5ld19idWY7XG4tXHRudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGggPSBvZmZzZXQ7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cbi1cdGtmcmVlKG9sZF9idWYpO1xuK1x0LyogV3JpdGVycyBhcmUgc2VyaWFsaXplZCBieSBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXguICovXG4rXHRvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhLCBuZXcsXG4rXHRcdFx0XHQgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTtcbitcdGtmcmVlX3JjdShvbGQsIHJjdSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTY4NCw3ICsxNjk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGtmcmVlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSkpO1xuIFx0a2ZyZWUobnQpO1xuIH1cbiBcbkBAIC0yMjI3LDE0ICsyMjM4LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4gXHRcdFx0XHQgICAgICBpbnQgbXNnX2xlbixcbi1cdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbilcbitcdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4tXHRjb25zdCBjaGFyICp1c2VyZGF0YSA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICpzeXNkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnJlbGVhc2U7XG4gXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbi1cdHVzZXJkYXRhID0gbnQtXHUwMDNldXNlcmRhdGE7XG4gXHRzeXNkYXRhID0gbnQtXHUwMDNlc3lzZGF0YTtcbiAjZW5kaWZcbiBcbkBAIC0yMjUxLDcgKzIyNjEsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpZiAodXNlcmRhdGEpXG4gXHRcdG1zZ19sZW4gKz0gc2NucHJpbnRmKFx1MDAyNm50LVx1MDAzZWJ1Zlttc2dfbGVuXSxcbiBcdFx0XHRcdCAgICAgc2l6ZW9mKG50LVx1MDAzZWJ1ZikgLSBtc2dfbGVuLCBcIiVzXCIsXG4tXHRcdFx0XHQgICAgIHVzZXJkYXRhKTtcbitcdFx0XHRcdCAgICAgdXNlcmRhdGEtXHUwMDNlZGF0YSk7XG4gXG4gXHRpZiAoc3lzZGF0YSlcbiBcdFx0bXNnX2xlbiArPSBzY25wcmludGYoXHUwMDI2bnQtXHUwMDNlYnVmW21zZ19sZW5dLFxuQEAgLTIyNzEsNyArMjI4MSw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcbi1cdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbilcbitcdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbixcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuIFx0Y29uc3QgY2hhciAqdXNlcmRhdGFfcHRyID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGFfcHRyID0gTlVMTDtcbkBAIC0yMjgyLDEyICsyMjkzLDEyIEBAIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4gXHRzeXNkYXRhX3B0ciA9IG50LVx1MDAzZXN5c2RhdGE7XG4tXHR1c2VyZGF0YV9sZW4gPSBudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGg7XG4gI2VuZGlmXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2VyZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHVzZXJkYXRhX2xlbiAhPSAwKSlcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKHVzZXJkYXRhKSB7XG4rXHRcdHVzZXJkYXRhX3B0ciA9IHVzZXJkYXRhLVx1MDAzZWRhdGE7XG4rXHRcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVx1MDAzZWxlbmd0aDtcbitcdH1cbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyIFx1MDAyNlx1MDAyNiBzeXNkYXRhX2xlbiAhPSAwKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIzNjQsNyArMjM3NSw4IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdGludCBtc2dfbGVuLFxuIFx0XHRcdFx0aW50IHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0aW50IHN5c2RhdGFfbGVuKVxuK1x0XHRcdFx0aW50IHN5c2RhdGFfbGVuLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbiBcdGludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjtcbiBcdGNvbnN0IGNoYXIgKm1zZ2JvZHk7XG5AQCAtMjM5Myw3ICsyNDA1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0ICogd2lsbCBiZSByZXBsYWNlZFxuIFx0ICovXG4gXHRzZW5kX2ZyYWdtZW50ZWRfYm9keShudCwgbXNnYm9keSwgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW4sXG4tXHRcdFx0ICAgICBzeXNkYXRhX2xlbik7XG4rXHRcdFx0ICAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNDA4LDI1ICsyNDIwLDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFx0aW50IHJlbGVhc2VfbGVuID0gMDtcbiBcdGludCBzeXNkYXRhX2xlbiA9IDA7XG4gXHRpbnQgbGVuO1xuIFxuK1x0LyogS2VlcHMgdGhlIHBheWxvYWQgcGlja2VkIGJlbG93IGFsaXZlIHVudGlsIHRoZSBsYXN0IHNlbmRfdWRwKCkuICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbiBcdHN5c2RhdGFfbGVuID0gcHJlcGFyZV9zeXNkYXRhKG50LCB3Y3R4dCk7XG4tXHR1c2VyZGF0YV9sZW4gPSBudC1cdTAwM2V1c2VyZGF0YV9sZW5ndGg7XG4rXHR1c2VyZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShudC1cdTAwM2V1c2VyZGF0YSk7XG4rXHRpZiAodXNlcmRhdGEpXG4rXHRcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVx1MDAzZWxlbmd0aDtcbiAjZW5kaWZcbiBcdGlmIChudC1cdTAwM2VyZWxlYXNlKVxuIFx0XHRyZWxlYXNlX2xlbiA9IHN0cmxlbihpbml0X3V0c25hbWUoKS1cdTAwM2VyZWxlYXNlKSArIDE7XG4gXG4gXHRsZW4gPSB3Y3R4dC1cdTAwM2VsZW4gKyByZWxlYXNlX2xlbiArIHN5c2RhdGFfbGVuICsgdXNlcmRhdGFfbGVuO1xuIFx0aWYgKGxlbiBcdTAwM2M9IE1BWF9QUklOVF9DSFVOSylcbi1cdFx0cmV0dXJuIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Zixcbi1cdFx0XHRcdFx0XHQgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbik7XG4rXHRcdHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLFxuK1x0XHRcdFx0XHQgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7XG4rXHRlbHNlXG4rXHRcdHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcbitcdFx0XHRcdCAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xuIFxuLVx0cmV0dXJuIHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcbi1cdFx0XHRcdCAgIHN5c2RhdGFfbGVuKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuQEAgLTI2NjksNyArMjY4OSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbi1cdGtmcmVlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSkpO1xuICNlbmRpZlxuIFx0a2ZyZWUobnQpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldGNvbnNfcmVzdW1lLnNoIFxcXG4gXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcbiBcdG5ldGNvbnNfdG9ydHVyZS5zaCBcXFxuK1x0bmV0Y29uc191c2VyZGF0YS5zaCBcXFxuICMgZW5kIG9mIFRFU1RfUFJPR1NcbiBcbiBpbmNsdWRlIC4uLy4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjExMzkwM2Y0Y2UxYzVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaFxuQEAgLTAsMCArMSwyMjkgQEBcbisjIS91c3IvYmluL2VudiBiYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC5cbisjXG4rIyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXRcbisjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZVxuKyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGVcbisjIGtleS5cbisjXG4rIyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlXG4rIyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwc1xuKyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLFxuKyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZVxuKyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuXG4rI1xuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbitcbitzZXQgLWV1byBwaXBlZmFpbFxuK1xuK1NDUklQVERJUj0kKGRpcm5hbWUgXCIkKHJlYWRsaW5rIC1lIFwiJHtCQVNIX1NPVVJDRVswXX1cIilcIilcbitcbitzb3VyY2UgXCIke1NDUklQVERJUn1cIi8uLi9saWIvc2gvbGliX25ldGNvbnMuc2hcbitcbisjIE51bWJlciBvZiB0aW1lcyBlYWNoIHRvcnR1cmUgd29ya2VyIGxvb3BzXG4rSVRFUkFUSU9OUz0kezE6LTIwMH1cbitcbisjIEtleXMgb3duZWQgYnkgZWFjaCB0b3J0dXJlIHdvcmtlci4gV29ya2VycyBkbyBub3Qgc2hhcmUga2V5cywgc28gYSBmYWlsaW5nXG4rIyBjb25maWdmcyBvcGVyYXRpb24gbWVhbnMgYSByZWFsIHByb2JsZW0gYW5kIG5vdCBhIGxvc3QgcmFjZS5cbitDSFVSTl9LRVk9XCJjaHVybmtleVwiXG4rVFJBTlNJRU5UX0tFWT1cInRyYW5zaWVudGtleVwiXG4rIyBOdW1iZXIgb2Yga2V5cyB1c2VkIHRvIHB1c2ggYSBtZXNzYWdlIHBhc3QgTUFYX1BSSU5UX0NIVU5LXG4rQlVMS19LRVlTPThcbitcbitVU0VSREFUQV9ESVI9XCIke05FVENPTlNfUEFUSH0vdXNlcmRhdGFcIlxuKyMgVmFsdWVzIGFyZSBjYXBwZWQgYXQgTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4oMjAwKSBieXRlcywgc28gJHtCVUxLX0tFWVN9XG4rIyBlbnRyaWVzIG9mIHRoaXMgc2l6ZSBhcmUgZW5vdWdoIHRvIGZvcmNlIGZyYWdtZW50YXRpb25cbitMT05HX1ZBTFVFPSQocHJpbnRmIC0tICd2JS4wcycgezEuLjE5MH0pXG4rXG4rZnVuY3Rpb24gd3JpdGVfa2V5KCkge1xuK1x0bG9jYWwgS0VZPVwiJHsxfVwiXG4rXHRsb2NhbCBWQUxVRT1cIiR7Mn1cIlxuK1xuK1x0bWtkaXIgLXAgXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9XCJcbitcdGVjaG8gXCIke1ZBTFVFfVwiIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke0tFWX0vdmFsdWVcIlxuK31cbitcbisjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlXG4rZnVuY3Rpb24gc2VuZF9hbmRfY2FwdHVyZSgpIHtcbitcdHJtIC1mIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuK1x0bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCIke09VVFBVVF9GSUxFfVwiIFx1MDAyNlxuK1x0d2FpdF9mb3JfcG9ydCBcIiR7TkFNRVNQQUNFfVwiIFwiJHtQT1JUfVwiIFwiJHtJUF9WRVJTSU9OfVwiXG4rXHRlY2hvIFwiJHtNU0d9OiAke1RBUkdFVH1cIiBcdTAwM2UgL2Rldi9rbXNnXG4rXHRidXN5d2FpdCBcIiR7QlVTWVdBSVRfVElNRU9VVH1cIiB0ZXN0IC1zIFwiJHtPVVRQVVRfRklMRX1cIiB8fCB0cnVlXG4rXHRwa2lsbF9zb2NhdFxuK1x0dmFsaWRhdGVfbXNnIFwiJHtPVVRQVVRfRklMRX1cIlxuK31cbitcbitmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkge1xuK1x0bG9jYWwgV0FOVEVEPVwiJHsxfVwiXG4rXG4rXHRpZiAhIGdyZXAgLXEgLS0gXCIke1dBTlRFRH1cIiBcIiR7T1VUUFVUX0ZJTEV9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICcke1dBTlRFRH0nIG5vdCBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0Y2F0IFwiJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gZXhwZWN0X25vdF9pbl9tc2coKSB7XG4rXHRsb2NhbCBVTldBTlRFRD1cIiR7MX1cIlxuK1xuK1x0aWYgZ3JlcCAtcSAtLSBcIiR7VU5XQU5URUR9XCIgXCIke09VVFBVVF9GSUxFfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiAnJHtVTldBTlRFRH0nIGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbisjIEV2ZXJ5IHdyaXRlIHB1Ymxpc2hlcyBhIG5ldyBwYXlsb2FkIGFuZCBmcmVlcyB0aGUgcHJldmlvdXMgb25lLiBBbiBlbXB0eVxuKyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGVcbisjIHRhcmdldCB0aHJvdWdoIGhhdmluZyBubyBwYXlsb2FkIGF0IGFsbC5cbitmdW5jdGlvbiBjaHVybl92YWx1ZSgpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtJVEVSQVRJT05TfVwiKVxuK1x0ZG9cbitcdFx0ZWNobyBcInZhbHVlJHtpfVwiIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcIlxuK1x0XHRlY2hvIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWVcIlxuK1x0ZG9uZVxuK31cbitcbisjIENyZWF0ZSBhbmQgZGVsZXRlIGEga2V5IHVuZGVybmVhdGggdGhlIHNlbmRlclxuK2Z1bmN0aW9uIGNodXJuX2tleSgpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtJVEVSQVRJT05TfVwiKVxuK1x0ZG9cbitcdFx0bWtkaXIgXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwiXG4rXHRcdGVjaG8gXCJ0cmFuc2llbnQke2l9XCIgXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0vdmFsdWVcIlxuK1x0XHRybWRpciBcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9XCJcbitcdGRvbmVcbit9XG4rXG4rIyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWRcbitmdW5jdGlvbiBzZW5kX21lc3NhZ2VzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0lURVJBVElPTlN9XCIpXG4rXHRkb1xuK1x0XHRlY2hvIFwiJHtNU0d9OiAke1RBUkdFVH0gJHtpfVwiIFx1MDAzZSAvZGV2L2ttc2dcbitcdGRvbmVcbit9XG4rXG4rIyBSdW4gdGhlIHdvcmtlcnMgY29uY3VycmVudGx5IGFuZCBmYWlsIGlmIGFueSBvZiB0aGVtIGhpdHMgYW4gZXJyb3JcbitmdW5jdGlvbiBydW5fd29ya2VycygpIHtcbitcdGxvY2FsIFBJRFM9KClcbitcdGxvY2FsIFdPUktFUlxuK1x0bG9jYWwgUkVUPTBcbitcdGxvY2FsIFBJRFxuK1xuK1x0Zm9yIFdPUktFUiBpbiBcIiRAXCJcbitcdGRvXG4rXHRcdFwiJHtXT1JLRVJ9XCIgXHUwMDI2XG4rXHRcdFBJRFMrPShcIiQhXCIpXG4rXHRkb25lXG4rXG4rXHQjIFJlYXAgZXZlcnkgd29ya2VyIGJlZm9yZSByZXBvcnRpbmcgYSBmYWlsdXJlLCBvdGhlcndpc2UgYSBzdXJ2aXZpbmdcbitcdCMgd29ya2VyIGtlZXBzIHdyaXRpbmcgdG8gY29uZmlnZnMgd2hpbGUgdGhlIGV4aXQgdHJhcCBjbGVhbnMgaXQgdXAuXG4rXHRmb3IgUElEIGluIFwiJHtQSURTW0BdfVwiXG4rXHRkb1xuK1x0XHR3YWl0IFwiJHtQSUR9XCIgfHwgUkVUPTFcbitcdGRvbmVcbitcbitcdGlmIFtbIFwiJHtSRVR9XCIgLW5lIDAgXV1cbitcdHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZFwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbitmdW5jdGlvbiBjcmVhdGVfYnVsa19rZXlzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0JVTEtfS0VZU31cIilcbitcdGRvXG4rXHRcdHdyaXRlX2tleSBcImJ1bGske2l9XCIgXCIke0xPTkdfVkFMVUV9XCJcbitcdGRvbmVcbit9XG4rXG4rZnVuY3Rpb24gZGVsZXRlX2J1bGtfa2V5cygpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtCVUxLX0tFWVN9XCIpXG4rXHRkb1xuK1x0XHRybWRpciBcIiR7VVNFUkRBVEFfRElSfS9idWxrJHtpfVwiXG4rXHRkb25lXG4rfVxuK1xuKyMgPT09PT09PT09PSAjXG4rIyBTdGFydCBoZXJlICNcbisjID09PT09PT09PT0gI1xuK1xuK21vZHByb2JlIG5ldGRldnNpbSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4rbW9kcHJvYmUgbmV0Y29uc29sZSAyXHUwMDNlIC9kZXYvbnVsbCB8fCB0cnVlXG4rXG4rSVBfVkVSU0lPTj1cImlwdjRcIlxuKyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZVxuK09VVFBVVF9GSUxFPVwiL3RtcC8ke1RBUkdFVH1cIlxuK1xuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuK2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXNcbisjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSlcbitlY2hvIFwiNiA1XCIgXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrXG4rIyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxuK3RyYXAgY2xlYW51cCBFWElUXG4rIyBDcmVhdGUgb25lIG5hbWVzcGFjZSBhbmQgdHdvIGludGVyZmFjZXNcbitzZXRfbmV0d29yayBcIiR7SVBfVkVSU0lPTn1cIlxuKyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbitjcmVhdGVfZHluYW1pY190YXJnZXRcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjMVxuKyMgQSB2YWx1ZSB3cml0dGVuIHRvIGNvbmZpZ2ZzIHJlYWNoZXMgdGhlIGRlc3RpbmF0aW9uXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke1VTRVJEQVRBX0tFWX1cIiBcImZpcnN0XCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1maXJzdFwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzJcbisjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtVU0VSREFUQV9LRVl9XCIgXCJzZWNvbmRcIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PXNlY29uZFwiXG4rZXhwZWN0X25vdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09Zmlyc3RcIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICMzXG4rIyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5XG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitlY2hvIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0vdmFsdWVcIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3Rfbm90X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1cIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICM0XG4rIyBSZW1vdmluZyB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeVxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtVU0VSREFUQV9LRVl9XCIgXCJ0aGlyZFwiXG4rcm1kaXIgXCIke1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9XCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X25vdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09XCJcbitybSBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjNVxuKyMgVG9ydHVyZSB0aGUgcGF5bG9hZCB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCxcbisjIGZpcnN0IHVuZnJhZ21lbnRlZCBhbmQgdGhlbiBmcmFnbWVudGVkXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke0NIVVJOX0tFWX1cIiBcIiR7VVNFUkRBVEFfVkFMVUV9XCJcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuK1xuK2NyZWF0ZV9idWxrX2tleXNcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xuK2RlbGV0ZV9idWxrX2tleXNcbitcbitleGl0IFwiJHtrc2Z0X3Bhc3N9XCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjI3Ljg4NTg1Nzg0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNTI5MjcxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgYW5kIGFkZHMgYSBzZWxmLXRlc3QsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgaWYgdGhvc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGF0dGFjayBzdXJmYWNlcyBvciBtb2RpZnkgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBpbiBhIHdheSB0aGF04oCZcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIG5vdCBqdXN0IGEgcmVmYWN0b3Jpbmcgb3IgY2xlYW51cC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIGFuZCwgbW9yZSBzaWduaWZpY2FudGx5LCBjb252ZXJ0cyB0aGUgYHVzZXJkYXRhYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgdG8gYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgaGFuZGxlcyBpdHMgdXNlciBkYXRhLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIHJhY2UgY29uZGl0aW9uIHZ1bG5lcmFiaWxpdGllcywgYW5kIHRodXMsIGZ1enppbmcgaXMgYSBzdHJvbmcgY29uc2lkZXJhdGlvbi5cblxuTG9va2luZyBkZWVwZXIsIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB1cGRhdGVfdXNlcmRhdGFgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYC4gSXQgc2VlbXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgaW52b2x2ZWQgaW4gc2VuZGluZyBhbmQgbWFuYWdpbmcgdGhlIG5ldGNvbnNvbGUgbWVzc2FnZXMuIFRoZSBtb3N0IGludGVyZXN0aW5nIGZ1bmN0aW9uIGlzIGBzZW5kX2V4dF9tc2dfdWRwYCwgYXMgaXQgbm93IGluY2x1ZGVzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLiBJdCdzIGNsZWFyIHRoYXQgaXQgaXMgYmVpbmcgZ3VhcmRlZCB3aXRoIFJDVSBwcm90ZWN0aW9uLiBUaGlzIGlzIHRoZSBhcmVhIG9mIGludGVyZXN0LlxuXG5UaGUgZmFjdCB0aGF0IGBuZXRjb25zb2xlYCBpcyBhIG5ldHdvcmsgY29uc29sZSBkcml2ZXIgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgY29uZmlnZnMgZnVydGhlciBpbmNyZWFzZXMgaXRzIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSwgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIFJDVSBwcm90ZWN0aW9uIG9mIHVzZXJkYXRhLiBUaHVzLCBhbnkgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyB3aGF0IEkgd2lsbCBuZWVkIHRvIGJlIGZvY3VzZWQgb24uXG5cbk5vdyBJIG5lZWQgdG8gcmVmaW5lIHRoZSBmb2N1cy4gSSBzZWUgdGhhdCB0aGUgYHVwZGF0ZV91c2VyZGF0YWAgYW5kIGBzZW5kX2V4dF9tc2dfdWRwYCBhcmUgc3RhdGljLiBJIGtub3cgdGhhdCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgY2FsbGVkIGZyb20gYHdyaXRlX2V4dF9tc2dgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2V4dF93cml0ZWAuIFRoZXNlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtIGFyZSBpbXBvcnRhbnQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGZpbGUgdG8gc2VlIGhvdyBleGFjdGx5IHRoZXNlIGFyZSBiZWluZyBjYWxsZWQuIFRoYXQgd2lsbCBiZSB0aGUga2V5IHRvIGRlc2lnbmluZyBlZmZlY3RpdmUgZnV6emluZyBjYW1wYWlnbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NTozNi4xMzg3ODcyNDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMjAxNjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVfZXh0X3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MzYuMTk3MTEzNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2OTQzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgc2VuZF9leHRfbXNnX3VkcGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgc2VuZF9leHRfbXNnX3VkcGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHNlbmRpbmcgc29tZSBraW5kIG9mIGV4dGVybmFsIG1lc3NhZ2Ugb3ZlciBVRFAuIFRoZSBcImV4dFwiIHBhcnQgc3VnZ2VzdHMgaXQncyBub3QgaW50ZXJuYWwgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyBvciBtb2R1bGUg4oCTIGl0J3MgZ29pbmcgKm91dCogc29tZXdoZXJlLiBVRFAgaW1wbGllcyBhIGNvbm5lY3Rpb25sZXNzLCBkYXRhZ3JhbS1iYXNlZCBwcm90b2NvbCwgd2hpY2ggZ2l2ZXMgdXMgc29tZSBpbml0aWFsIGFzc3VtcHRpb25zIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGNvbW11bmljYXRpb246IHBvdGVudGlhbGx5IHVucmVsaWFibGUsIGZvY3VzZWQgb24gc3BlZWQsIGFuZCBsaWtlbHkgaGFuZGxpbmcgaW5kaXZpZHVhbCBwYWNrZXRzIG9mIGRhdGEuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBpbiB0aGVzZSBtZXNzYWdlcywgd2hlcmUgdGhleSdyZSBiZWluZyBzZW50LCBhbmQgd2h5IHRoaXMgbWV0aG9kIGlzIHRoZSBvbmUgY2hvc2VuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBkZWVwZXIgYW5kIGZpbmQgc29tZSByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIGNvbnRleHQuIEknbGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBhbmQgZG9jdW1lbnRhdGlvbiBhcm91bmQgdGhpcyBtZXRob2QgdG8gc2VlIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgY2FsbGVkLCBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW50ZW5kZWQgZGVzdGluYXRpb24gYW5kIHB1cnBvc2Ugb2YgdGhlIGNvbW11bmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NTo0MC4wOTQwNjAxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0OTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX2V4dF9tc2dfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM3ND1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQxMS0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQxMjogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQxMy0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDE5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDIwOnN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDczPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXFx0XFx0aWYgKGV4dGVuZGVkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDkzOlxcdFxcdFxcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjQwLjE0MjkxODkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjEwMTUzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldGNvbnNvbGVfd3JpdGVgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYG5ldGNvbnNvbGVfd3JpdGVgLCB3aGljaCBJIHJlY29nbml6ZSBhcyB0aGUgZW50cnkgcG9pbnQuIE5vdywgdG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGFsbCB0aGUgbG9jYXRpb25zIHdpdGhpbiB0aGUgY29kZWJhc2Ugd2hlcmUgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIGFjdHVhbGx5IGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MzUuNzUzMDc2NjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODYwNjgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ1Mj1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0Njc6ICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDY4LSAqIEB3Y3R4dDogbmJjb24gd3JpdGUgY29udGV4dFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzItICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NzM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDItXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwMy17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MDQ6XFx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDUtfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTA2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTA3OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTA5LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUxMDpcXHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2OTc9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTktXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwMDpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDE6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzAyLVxcdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjcwNj1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzA4LVxcdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDk6XFx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MTA6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MTEtXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MzYuMTAxNjg3NjU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MzIzODMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbnNvbGUgV3JpdGUgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBUaG9zZSBzZWVtIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IHRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIHNlbmRpbmcgY29uc29sZSBvdXRwdXQgYWNyb3NzIHRoZSBuZXR3b3JrLiBCdXQgd2hhdCBhYm91dCBgdXBkYXRlX3VzZXJkYXRhYD8gTm93LCB0aGF0IG5hbWUuLi4gaXQncyBiZWdnaW5nIHRoZSBxdWVzdGlvbiwgd2hhdCB1c2VyIGRhdGEgaXMgdGhhdCBldmVuIHJlZmVycmluZyB0bz8gSXMgdGhpcyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiB1cGRhdGUgcmVsYXRlZCB0byB0aGUgbmV0d29yayBjb25zb2xlIGl0c2VsZj8gSXMgaXQgYSB3YXkgdG8gdXBkYXRlIHRoZSB1c2VyIGNvbmZpZywgcGVyaGFwcyB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGRhdGEgdGhlIGNvbnNvbGUgc2VuZHMgb3IgZG9lc24ndD8gT3IgaXMgaXQgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIGRlZmluaXRlbHkgZGlnIGRlZXBlciBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyB0aHJvd2luZyBtZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVyYWN0LiBJdCBjb3VsZCBiZSBjcml0aWNhbCB0byBob3cgd2UgbWFuYWdlIG9yIGN1c3RvbWl6ZSB0aGUgZGF0YSB0aGF0J3MgYmVpbmcgc2VudCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjozOS41OTQ5MjgxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzAzOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV91c2VyZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNDY9c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNjU6c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQxMz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyNi1cXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDI3OlxcdC8qIFNuYXBzaG90IGZvciByb2xsYmFjayBpZiB1cGRhdGVfdXNlcmRhdGEoKSBmYWlscyBiZWxvdyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI4LVxcdHN0cnNjcHkob2xkX3ZhbHVlLCB1ZG0tXFx1MDAzZXZhbHVlLCBzaXplb2Yob2xkX3ZhbHVlKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzNC1cXHRudCA9IHVzZXJkYXRhX3RvX3RhcmdldCh1ZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MzU6XFx0cmV0ID0gdXBkYXRlX3VzZXJkYXRhKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzNi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2Mjk9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjM3LVxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Mzg6XFx0dXBkYXRlX3VzZXJkYXRhKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzOS1cXHRjb25maWdfaXRlbV9wdXQoaXRlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjM5LjY5NjYzNzU2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk1OTE2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ0ZTIENhbGxiYWNrcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgYHVwZGF0ZV91c2VyZGF0YWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEkgc2VlIHRoYXQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB0d28ga2V5IHBsYWNlczogYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIFRob3NlIG5hbWVzIHJpbmcgYSBiZWxsLi4uIHllcywgdGhleSdyZSBjb25maWdmcyBjYWxsYmFja3MuIFRoYXQgdHJpZ2dlcnMgYSBsaW5lIG9mIGlucXVpcnkuIE5vdyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ2ZzIG9wZXJhdGlvbnMgYXQgcGxheSBoZXJlLiBMZXQgbWUgdHJhY2UgYmFjayB0byB0aGUgYWN0dWFsIGNvbmZpZ2ZzIGltcGxlbWVudGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY2FsbGJhY2tzLiBXaGVyZSBhcmUgdGhlIGNvbmZpZ2ZzIG9wZXJhdGlvbiBkZWZpbml0aW9ucz8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYHVwZGF0ZV91c2VyZGF0YWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6NDMuMjkyNTU2NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODg0OTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzY1PXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQxMzpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTQtXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjQzLjQwMTQxMjk4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQyMDA3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXZlcnl3aGVyZSB0aGlzIHZhcmlhYmxlIG9yIGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCBtb2RpZmllZC4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb2NhdGUgYWxsIGluc3RhbmNlcyB3aGVyZSBpdCdzIGJlaW5nIHJlYWQgZnJvbSwgd3JpdHRlbiB0bywgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LCBvciBwb3RlbnRpYWxseSBpbml0aWFsaXplZC4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGxpZmVjeWNsZSBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzLCBvcHRpbWl6YXRpb25zLCBvciBhcmVhcyBmb3IgcmVmYWN0b3JpbmcgaWYgbmVlZGVkLiBMZXQncyBzZWUgd2hhdCB0aGUgSURFJ3Mgc2VhcmNoIGZ1bmN0aW9uIHVuY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjQ3LjI0MzQyNDU0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0MjYwMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmRhdHVtX3ZhbHVlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM2NT1zdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MTM6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE0LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo0Ny4zMDc4NTcxODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5ODYwNzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czpcblxuKipVbnZlaWxpbmcgdGhlIFVzYWdlKipcblxuSG1tLCBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIHRoaXMgc3BlY2lmaWMgZWxlbWVudCBvciBmdW5jdGlvbiBpbiB1c2UuIEkgd2FzIGxvb2tpbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgSSBkb24ndCBzZWUgYW55IGRpcmVjdCBjYWxscyB0byBpdC4gKk9kZC4qIFBlcmhhcHMgaXQncyBub3QgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgYXQgYWxsLCBhbmQgaXQncyBkZWFkIGNvZGUuIFdhaXQsIGhvbGQgb24uLi4gY291bGQgaXQgYmUgaGlkZGVuIGF3YXkgaW4gYSBtYWNybyBkZWZpbml0aW9uIHNvbWV3aGVyZT8gVGhhdCdzIGEgY2xhc3NpYyB0cmljay4gSXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGNhbGxlZCBidXQgaW5kaXJlY3RseSBpbnZva2VkIHRocm91Z2ggYSBtb3JlIGNvbXBsZXggbWFjcm8gZXhwYW5zaW9uLiBOZWVkIHRvIGNoZWNrIHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjUwLjgwNjQ2NjU2OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2OTM2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHRlNfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1NDc9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MDpDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODI6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgdGFza25hbWVfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODM6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgcmVsZWFzZV9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NDpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NjItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY0OkNPTkZJR0ZTX0FUVFIoLCBleHRlbmRlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjU6Q09ORklHRlNfQVRUUigsIGRldl9uYW1lKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Njc6Q09ORklHRlNfQVRUUigsIHJlbW90ZV9wb3J0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2ODpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY5OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjcwOkNPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjcxOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3MjpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzM6Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjUwLjkwMjE2NDcwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzY2Mzc2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRjb25zb2xlIENvbmZpZ0ZTIEludGVyYWN0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtgIGRlZmluaXRlbHkgY3JlYXRlcyBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29uZmlnZnMgb3BlcmF0aW9ucyBvbiBuZXRjb25zb2xlIHVzZXJkYXRhLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICpyZWFjaCogbmV0Y29uc29sZSB0aHJvdWdoIGNvbmZpZ2ZzP1xuXG5CYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIHllcywgaXQgKnNob3VsZCogYmUgYWJsZSB0byBtb3VudCBjb25maWdmcyBhbmQgaW50ZXJhY3Qgd2l0aCBpdC4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkIGlzIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IHRoYXQgb3B0aW9uIGV4aXN0cyBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zIHRvIGVuc3VyZSBzeXprYWxsZXIgY2FuIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBzcGVjaWZpYyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjU1LjY2ODU0NDA1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2ODYwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo1NS43MjcyMzY3ODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MTA3NzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgbGluZSBvZiB0aGlua2luZywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2AqKlxuXG5BbHJpZ2h0LCBzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyB0aGUga2V5IHRoaW5nIEknbSBmb2N1c2luZyBvbiByaWdodCBub3cuIEl0J3MgdGltZSB0byBtYXAgaXRzIGRlcGVuZGVuY2llcy4gVGhhdCBzZWVtaW5nbHkgaW5ub2NlbnQgdmFyaWFibGUgY291bGQgYmUgYSBsaW5jaHBpbiBpbiBzb21lIGNvbXBsZXggY29uZmlndXJhdGlvbiBzY2hlbWUsIG9yIG1heWJlIGl0J3Mgc3VycHJpc2luZ2x5IHNpbXBsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyAqZW5hYmxlKiBpdCwgYW5kIHdoYXQgaXQgKmVuYWJsZXMqIGluIHR1cm4uIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlLCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBwb3NpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo1OS4zNjgzMTY4NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdFxcdGhlbHBcXG4gMzMxOlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cXG4gMzMyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG4gMzM1OlxcdFxcdGJvb2wgXFxcIkR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1xcXCJcXG4gMzM2OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuIDMzNzpcXHRcXHRcXHRcXHQhKE5FVENPTlNPTEU9eSBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUz1tKVxcbiAzMzg6XFx0XFx0c2VsZWN0IFBSSU5US19FWEVDVVRJT05fQ1RYXFxuIDMzOTpcXHRcXHRoZWxwXFxuIDM0MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVjb25maWd1cmUgdGFyZ2V0XFxuIDM0MTpcXHRcXHQgIHBhcmFtZXRlcnMgKGludGVyZmFjZSwgSVAgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIE1BQyBhZGRyZXNzZXMpXFxuIDM0MjpcXHRcXHQgIGF0IHJ1bnRpbWUgdGhyb3VnaCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhwb3J0ZWQgdXNpbmcgY29uZmlnZnMuXFxuIDM0MzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzNDQ6XFx0XFxuIDM0NTpcXHRjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzQ2OlxcdFxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbiAzNDc6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXFxuIDM0ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6NTkuMzY4NDI1NTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NDQxNjA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGNvbnNvbGUgYW5kIFVzZXJkYXRhIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBORVRDT05TT0xFX0RZTkFNSUNgIHJlbGllcyBvbiBgTkVUQ09OU09MRWAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGVuYWJsZSBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBhbmFseXNpcy5cblxuSW5pdGlhbGx5LCBgdXBkYXRlX3VzZXJkYXRhYCBzZWVtZWQgbGlrZSBhIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcgYmVjYXVzZSBpdCdzIHN0YXRpYy4gSG93ZXZlciwgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBvciBjYWxsZWQgYnkgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTG9va2luZyBkZWVwZXIsIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgIHRoZW1zZWx2ZXMgYXJlIHN0YXRpYyBidXQgYXJlIHRpZWQgdG8gYENPTkZJR0ZTX0FUVFJgIGFuZCBhcmUgdXNlZCBpbiBgdXNlcmRhdHVtX2F0dHJfdmFsdWVgLCBtZWFuaW5nIHRoZXkncmUgbm90IGlubGluZWQuIEhlbmNlLCBJJ2xsIGZvY3VzIG9uIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLlxuXG5PbiB0aGUgdHJhbnNtaXNzaW9uIHNpZGUsIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyBjYWxsZWQgZnJvbSBgbmV0Y29uc29sZV93cml0ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0YCwgc28gaXQncyBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLiAgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGlzIGRlZmluaXRlbHkgbm90IGlubGluZWQuICBgbmV0Y29uc29sZV93cml0ZWAgKm1pZ2h0KiBiZSBpbmxpbmVkLCBhcyBjb3VsZCBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYW5kIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYC5cblxuSSB3YXMgY29uc2lkZXJpbmcgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhcyBhIGdvb2QgZm9jdXMgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCdzIGEgY29uc29sZSB3cml0ZSBjYWxsYmFjaywgc28gaXQgY291bGQgYmUgaW4gYSBob3QgcGF0aCwgZGVwZW5kaW5nIG9uIGhvdyBmcmVxdWVudGx5IHByaW50a3MgYXJlIGhhcHBlbmluZy4gSG93ZXZlciwgc2luY2UgdGhlIGdvYWwgaXMgdG8gZXhhbWluZSB0aGUgdXNlcmRhdGEgUkNVIGNoYW5nZXMsIHRoZSByZWxldmFudCBjb2RlIGlzIHNwbGl0IGJldHdlZW4gYHVwZGF0ZV91c2VyZGF0YWAgKGNvbmZpZ2ZzIHNpZGUpIGFuZCBgc2VuZF9leHRfbXNnX3VkcGAgKGNvbnNvbGUgd3JpdGUgc2lkZSkuXG5cblRoZXJlZm9yZSwgZm9jdXNpbmcgb24gYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAgY292ZXJzIHRoZSBjb25maWdmcyBhc3BlY3Qgb2YgdGhpcyBhbmFseXNpcy4gRm9yIHRoZSB0cmFuc21pdCBwYXRoLCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGJlY2F1c2UgYHNlbmRfZXh0X21zZ191ZHBgIGlzIHN0YXRpYywgcG90ZW50aWFsbHkgaW5saW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlIG5vdCBzdGF0aWMgc28gdGhhdCBpbmxpbmluZyBpcyBub3QgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjA5LjMxMjU5MjI1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NzA2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNjU9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDEyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDEzOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxNC1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MDkuNTk5MzAzODk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODY4NjE2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuXG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIFBvaW50ZXIgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBhYm91dCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBCdXQsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBiZWluZyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgcHJvYmFibHkgd29uJ3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHNvIHRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiB0byBrZWVwIGluIG1pbmQgZm9yIHBlcmZvcm1hbmNlLiBOb3csIEknbGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGB1c2VyZGF0dW1fZHJvcGAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MTMuODg2MTY3OTM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQ2MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fZHJvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MDY9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjI4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjI5OnN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NTE9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Mi1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUzOlxcdC5kcm9wX2l0ZW1cXHRcXHQ9IHVzZXJkYXR1bV9kcm9wLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjEzLjk1NDYzNTAzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODMyNDI1OTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmN1cnJlbmN5IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHVzZXJkYXR1bV9kcm9wYCBpcyBkZWZpbml0ZWx5IHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtYWtlcyBpdCBhbiBpbnRlcmVzdGluZyBzeW1ib2wgdG8gZm9jdXMgb24uIFRoZW4gdGhlcmUncyBgdXNlcmRhdHVtX21ha2VfaXRlbWAsIHdoaWNoIGFsc28gc2VlbXMgdG8gaGF2ZSB0aGUgc2FtZSB1c2FnZSBwYXR0ZXJuLiBHb3QgaXQuIFRoZXNlIGFyZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBzZW5kX2V4dF9tc2dfdWRwYC4gSSdtIGN1cmlvdXMgaWYgaXQncyBpbmxpbmVkLiBOb3BlLCBpdCdzIHN0YXRpYywgYW5kIGl0J3MgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBgbmV0Y29uc29sZV93cml0ZWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gQWgsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9leHRgIGlzIGEgZnVuY3Rpb24gcG9pbnRlci4gTGV0J3MgYWRkIHRoYXQgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgYWxvbmcgd2l0aCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIEhvbGQgb24sIHRob3VnaC4uLiBsb29rcyBsaWtlIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCAqZG9lc24ndCogY2FsbCBgc2VuZF9leHRfbXNnX3VkcGAgZGlyZWN0bHk7IGl0IGNhbGxzIGBzZW5kX21zZ191ZHBgIGluc3RlYWQuIEJ1dCBgbmV0Y29uc29sZV93cml0ZV9leHRgICpkb2VzKiBjYWxsIGBuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCB0cnVlKWAgd2hpY2ggdGhlbiBjYWxscyBgc2VuZF9leHRfbXNnX3VkcGAuIFRoZXJlZm9yZSwgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC5cblxuT2theSwgbGV0J3MgcmVjYXAgd2hhdCB3ZSd2ZSBnb3QuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYHVwZGF0ZV91c2VyZGF0YWAgdG8gdXNlIGByY3VfcmVwbGFjZV9wb2ludGVyYCBhbmQgYGtmcmVlX3JjdWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgY29uY3VycmVudCBhY2Nlc3MuIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyB1cGRhdGVkIHRvIHVzZSBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfZGVyZWZlcmVuY2VgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiB0aGUgZnVuY3Rpb25zIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgYHNlbmRfZnJhZ21lbnRlZF9ib2R5YCwgYW5kIGBzZW5kX21zZ19mcmFnbWVudGVkYCBhcmUgbW9kaWZpZWQgdG8gdGFrZSBgdXNlcmRhdGFgIGFzIGFuIGFyZ3VtZW50LCBhbmQgdGhhdCdzIGxpa2VseSBhIGNvbnNlcXVlbmNlIG9mIHRoZSBjb25jdXJyZW5jeSBjaGFuZ2VzLiBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAgYW5kIGBmcmVlX3BhcmFtX3RhcmdldGAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgcmN1X2FjY2Vzc19wb2ludGVyYC5cblxuU28gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCAqYW5kKiBhcmUgKm5vdCogaW5saW5lZCAoYmVjYXVzZSB0aGV5IGFyZSBlaXRoZXIgZnVuY3Rpb24gcG9pbnRlcnMgb3IgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBwb3RlbnRpYWxseSB1c2VkIGV4dGVybmFsbHkpOlxuIC0gYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWBcbiAtIGB1c2VyZGF0dW1fZHJvcGBcbiAtIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYFxuIC0gYGZyZWVfcGFyYW1fdGFyZ2V0YFxuIC0gYG5ldGNvbnNvbGVfd3JpdGVfZXh0YFxuXG5XYWl0Li4uIGBmcmVlX3BhcmFtX3RhcmdldGAgaXMgc3RhdGljLiBHb3R0YSBzZWUgd2hlcmUgdGhhdCdzIGFjdHVhbGx5ICp1c2VkKi4uLiBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjMyLjI3ODg5ODc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA2OTA3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnJlZV9wYXJhbV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODQtLyogQ2xlYW51cCBuZXRwb2xsIGZvciBnaXZlbiB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBmcmVlIGl0ICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODU6c3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjcxNT1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzg2LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZudC1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3ODc6XFx0XFx0ZnJlZV9wYXJhbV90YXJnZXQobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzg4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzk2PXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODE3LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZudC1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4MTg6XFx0XFx0ZnJlZV9wYXJhbV90YXJnZXQobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODE5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MzIuMzg5NTkzODM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTY5MDcyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgVGFyZ2V0IFN5bWJvbHMgZm9yIFBvdGVudGlhbCBPcHRpbWl6YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgdGFyZ2V0IHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBmcmVlX3BhcmFtX3RhcmdldGAuIFRoZSBmYWN0IHRoYXQgaXQncyAqb25seSogdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBhIHJlZCBmbGFnLiBJdCdzIG5vdCBhIHBhcnRpY3VsYXJseSBhY3RpdmUgcG9pbnQgaW4gdGhlIHN5c3RlbSdzIHJ1bnRpbWUsIG1ha2luZyBpdCBhIHBvb3IgY2hvaWNlIGZvciBhbnkga2luZCBvZiBwZXJmb3JtYW5jZS1jcml0aWNhbCBwcm9maWxpbmcgb3IgZm9jdXNpbmcgZWZmb3J0cy4gSXQganVzdCBpc24ndCBhIGdvb2QgZm9jdXMgc3ltYm9sLCBhdCBsZWFzdCBub3QgaW4gYW55IHRyYWRpdGlvbmFsIHBlcmZvcm1hbmNlIHNlbnNlLiBJdCdzIHRvbyBsaW1pdGVkIGluIHNjb3BlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdXNlIGEgc3ltYm9sIGZvciBtZWFzdXJlbWVudCBtb3JlIG9mdGVuLlxuXG5JbnN0ZWFkIG9mIHRoaXMgbGltaXRlZCBmb2N1cywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBnbyBleGFtaW5lIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCBtb3JlIGNsb3NlbHkuIE1heWJlIHRoYXQgb25lJ3MgZ290IGEgYmV0dGVyIHByb2ZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6NDUuNTU4NjY5ODM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzYzMjI0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzU9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY5NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMzpcXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Nzo0NS44OTQ5OTc0NzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5MDk3MzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipEaXNzZWN0aW5nIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAqKlxuXG5Pa2F5LCBzbyBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAuLi4gdGhhdCdzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGZvciBjb25maWdmcy4gU2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgZm9jdXNlZCBzeW1ib2wuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoYXQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXQncyBkZWZpbmVkIHVzaW5nIGBDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUgYmVoaW5kIHRoYXQgbWFjcm8gKnNob3VsZCogYmUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAsIGJ1dCBpdCdzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR0ZTX0FUVFJgIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBOZWVkIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoYXQgbWFjcm8gZXhwYW5kcyB0byBhdm9pZCBhbnkgbWlzdW5kZXJzdGFuZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6NTAuMjg1OTczMzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY4MjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQ09ORklHRlNfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jb25maWdmcy5oPTExNT1zdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjItXFxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEyMzojZGVmaW5lIENPTkZJR0ZTX0FUVFJfUEVSTShfcGZ4LCBfbmFtZSwgX3Blcm0pXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMjQtc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1xcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaC0xMzEtXFxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oOjEzMjojZGVmaW5lIENPTkZJR0ZTX0FUVFIoX3BmeCwgX25hbWUpIENPTkZJR0ZTX0FUVFJfUEVSTShcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9jb25maWdmcy5oLTEzMy1cXHRcXHRfcGZ4LCBfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1JcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTM1LVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaDoxMzY6I2RlZmluZSBDT05GSUdGU19BVFRSX1JPKF9wZngsIF9uYW1lKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTM3LXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIF9wZngjI2F0dHJfIyNfbmFtZSA9IHtcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTQzLVxcbmluY2x1ZGUvbGludXgvY29uZmlnZnMuaDoxNDQ6I2RlZmluZSBDT05GSUdGU19BVFRSX1dPKF9wZngsIF9uYW1lKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgtMTQ1LXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIF9wZngjI2F0dHJfIyNfbmFtZSA9IHtcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjUwLjM5MTY1OTk5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NDk1OTM4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0Y29uc29sZSBNb2R1bGUgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGBuZXRjb25zb2xlYCBtb2R1bGUncyBpbXBsZW1lbnRhdGlvbi4gRmlyc3QsIEkgc2VlIHRoYXQgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYCBpcyBjcmVhdGluZyBhIGB1c2VyZGF0dW1fYXR0cl92YWx1ZWAgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjb25maXJtZWQgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBpcyBleHBsaWNpdGx5IGRlZmluZWQgaW4gYG5ldGNvbnNvbGUuY2Ag4oCTIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbXkgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgYHN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KWAgaXMgdGhlIHNpZ25hdHVyZS5cblxuTXkgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gaW5pdGlhbCByZXZpZXcsIGFyZSBsb29raW5nIGxpa2U6XG5cbiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYFxuKiAgIGB1c2VyZGF0dW1fZHJvcGBcbiogICBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWBcbiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGB1cGRhdGVfdXNlcmRhdGFgLiBJdCdzIG1hcmtlZCBgc3RhdGljYCwgd2hpY2ggb2Z0ZW4gbWVhbnMgaXQncyBhIGNyaXRpY2FsIGludGVybmFsIGZ1bmN0aW9uLiBJIGhhdmUgdG8gc2VlIGlmIGl0J3MgaW5saW5lZC4gSSBjaGVja2VkIGl0cyBjb2RlOyBpdCdzIGFyb3VuZCA0MCBsaW5lcywgaW5jbHVkZXMgYWxsb2NhdGlvbnMsIGFuZCBsb29wcywgd2hpY2ggbWFrZXMgaXQgdW5saWtlbHkgdG8gYmUgaW5saW5lZCwgZXNwZWNpYWxseSBzaW5jZSBpdCdzIGNhbGxlZCBmcm9tIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zIChgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCkuIFNvIEknbSBhZGRpbmcgYHVwZGF0ZV91c2VyZGF0YWAgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBwcm92aXNpb25hbGx5LCBqdXN0IHRvIGJlIHNhZmUuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgYmUga2V5LCBmb3IgaW5zdGFuY2UsIGBzZW5kX2V4dF9tc2dfdWRwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfd3JpdGVgLiBJdCdzIGFib3V0IDI1IGxpbmVzLiBNYXliZSBpdCdzIGlubGluZWQuIEkgYWxzbyBsb29rZWQgYXQgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgIGFuZCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGVhY2ggYWJvdXQgMzAgYW5kIDI1IGxpbmVzIHJlc3BlY3RpdmVseS5cblxuRm9yIG5vdywgSSdtIGdvaW5nIHdpdGggdGhlc2Ugbm9uLXN0YXRpYy9mdW5jdGlvbiBwb2ludGVyIG9uZXM6XG5cbiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYFxuKiAgIGB1c2VyZGF0dW1fZHJvcGBcbiogICBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWBcbiogICBgbmV0Y29uc29sZV93cml0ZV9leHRgXG5hbmQgdGhlIHBvdGVudGlhbGx5IGtleSBgdXBkYXRlX3VzZXJkYXRhYC5cblxuTGV0IG1lIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBub3cuIEknbSBmb2N1c2luZyBvbiB0aGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kIGBDT05GSUdGU19GU2Agb3B0aW9ucy4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaG93IGBDT05GSUdGU19GU2AgcmVsYXRlcyB0byBgTkVUQ09OU09MRV9EWU5BTUlDYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6NTkuMjQxMjU3MTQxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjI4NTY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjU5LjMwNzU0ODE4NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTY4MzYzNDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmUtRXhhbWluaW5nIHRoZSBGb3VuZGF0aW9uOiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgcHJvYmxlbSBvciBzb2x1dGlvbiwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHJldmlzaXQgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBlYXN5IHRvIGdldCBjYXVnaHQgdXAgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGltbWVkaWF0ZSB0YXNrIGF0IGhhbmQsIGJ1dCBhIHNvbGlkIGdyYXNwIG9mIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgaXMgcGFyYW1vdW50LiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoZXNlIGRlcGVuZGVuY2llcyBmb3IgYSB3aGlsZSwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgZnJlc2ggbG9vaywgZXNwZWNpYWxseSB3aGVuIHRhY2tsaW5nIGEgbmV3IGNoYWxsZW5nZSBvciBhIHBhcnRpY3VsYXJseSBjb21wbGV4IHNlY3Rpb24gb2YgY29kZS4gRXZlbiBzZWVtaW5nbHkgbWlub3IgY2hhbmdlcyBvciB1cGRhdGVzIGluIGRlcGVuZGVuY3kgdmVyc2lvbnMgY2FuIGhhdmUgcmlwcGxlIGVmZmVjdHMsIGFuZCBpdCdzIGJldHRlciB0byBiZSBwcm9hY3RpdmUgdGhhbiByZWFjdGl2ZS4gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgbW9kdWxlcyBpcyBhYnNvbHV0ZWx5IGNsZWFyIGFuZCB1cC10by1kYXRlIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgcmV2aWV3IGlzbuKAmXQganVzdCBhYm91dCBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGlzICp0aGVyZSosIGJ1dCBhYm91dCBjb25maXJtaW5nIG15ICp1bmRlcnN0YW5kaW5nKiBvZiBob3cgdGhlc2UgY29tcG9uZW50cyB3aWxsIGludGVyYWN0IGR1cmluZyB0aGUgbmV4dCBwaGFzZS4gVGltZSBpbnZlc3RlZCBoZXJlIGlzIG9mdGVuIHRpbWUgc2F2ZWQgbGF0ZXIsIHByZXZlbnRpbmcgdGhvc2UgZnJ1c3RyYXRpbmcgZGVidWdnaW5nIHNlc3Npb25zIGNhdXNlZCBieSBvdmVybG9va2VkIG51YW5jZXMgaW4gdGhlIGRlcGVuZGVuY3kgbGFuZHNjYXBlLiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCB3aXRoIFgsIHRoZW4gWSwgYW5kIGZpbmFsbHkgWiwgdHJhY2luZyB0aGVpciBsaW5lYWdlIGFuZCBpbnRlcmRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjA0LjQ3NTkxNjI0M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzQ6XFx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xcbiAzMzU6XFx0XFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMzM3OlxcdFxcdFxcdFxcdCEoTkVUQ09OU09MRT15IFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTPW0pXFxuIDMzODpcXHRcXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcXG4gMzM5OlxcdFxcdGhlbHBcXG4gMzQwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcXG4gMzQxOlxcdFxcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcXG4gMzQyOlxcdFxcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cXG4gMzQzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjA0LjQ3NjAzMjYzM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTA2ODM3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBkZWFsaW5nIHdpdGggYSBuZXR3b3JrIGNvbnNvbGUgbW9kaWZpY2F0aW9uLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0b3dhcmRzIG5lZWRpbmcgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AuIGBTWVNGU2AgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiwgdXN1YWxseSBlbmFibGVkLiBIb3dldmVyLCBgQ09ORklHRlNfRlNgIGlzIGV4cGxpY2l0bHkgcmVxdWlyZWQsIGFuZCB0aGF0J3MgYSBrZXkgcGllY2UuXG5cbkknbSB0aGlua2luZywgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBidXQgdGhlIHJlYWwgdGVzdCBsaWVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hgLiBUaGlzIHRlc3QgdXNlcyBgbW9kcHJvYmUgbmV0ZGV2c2ltYCBhbmQgYG1vZHByb2JlIG5ldGNvbnNvbGVgLiBTbyB3aGlsZSBgTkVUREVWU0lNYCB3b3VsZCBiZSBhIGdyZWF0IGNvbnZlbmllbmNlIGZvciB0ZXN0aW5nIHRoaXMgbmV3IGZlYXR1cmUsIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0J3MgKmFic29sdXRlbHkqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvZGUgaXRzZWxmIHRvIGNvbXBpbGUuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnRzIHRvIGtub3cgdGhlIFwiU3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZVwiLiBCYXNlZCBvbiBteSBhbmFseXNpcywgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBhcmUgdGhlIGNvcmUgb3B0aW9ucywgYW5kIGNyaXRpY2FsbHksIGBDT05GSUdGU19GU2AgaXMgZXhwbGljaXRseSBuZWVkZWQgYnkgYE5FVENPTlNPTEVfRFlOQU1JQ2AuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgZGVmaW5lIHRoaXMgZmVhdHVyZS4gSSBzZWUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAsIGB1c2VyZGF0dW1fZHJvcGAsIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCwgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAuIFRoZXkncmUgdGhlIGZvY3VzIG9mIHRoZSBjaGFuZ2VzLlxuXG5Pa2F5LCBsZXQncyBhbHNvIGV4YW1pbmUgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCB3aGljaCBhbHNvIGFwcGVhcnMgdG8gYmUgYSBjb25maWdmcyBjYWxsYmFjay4gVGhhdCByZWluZm9yY2VzIHRoZSBuZWVkIGZvciBgQ09ORklHRlNfRlNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjExLjU4Mjg3NDExM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNzI4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJkYXR1bV9tYWtlX2l0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0dW1fdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjA2OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzZXJkYXR1bV9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MDctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUyOlxcdC5tYWtlX2l0ZW1cXHRcXHQ9IHVzZXJkYXR1bV9tYWtlX2l0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTMtXFx0LmRyb3BfaXRlbVxcdFxcdD0gdXNlcmRhdHVtX2Ryb3AsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjExLjg3MzYwODg5M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTk2NzU0NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBXcml0ZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBgdXNlcmRhdHVtX21ha2VfaXRlbWAgZG9lcyBzZWVtIGxpa2UgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhpcy4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGhvdyBkYXRhIGlzIHBhc3NlZCBhbmQgaGFuZGxlZCwgYW5kIHRoYXQgc3ltYm9sIHNlZW1zIHJlbGV2YW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgbmV0Y29uc29sZV93cml0ZV9leHRgLiBUaGlzIGV4dGVuZGVkIHdyaXRlIGZ1bmN0aW9uIGlzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLlxuXG5UaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyBgc2VuZF9leHRfbXNnX3VkcGAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbmV0Y29uc29sZV93cml0ZWAgd2hlbiBpdCdzIGluIGl0cyBleHRlbmRlZCBtb2RlIOKAkyBtZWFuaW5nIGBleHRlbmRlZGAgaXMgc2V0IHRvIHRydWUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgICppdHNlbGYqIGNhbGxzIGBuZXRjb25zb2xlX3dyaXRlYCB3aXRoIHRoZSBgZXh0ZW5kZWRgIGZsYWcgc2V0LiBUaGlzIGNvbmZpcm1zIHRoYXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBpcyB0aGUgdHJ1ZSBlbnRyeSBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRoYXQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgYXJlbid0IGluYWR2ZXJ0ZW50bHkgYWx0ZXJlZC4gVGhpcyByb3V0aW5lIGNhbGxzIGBuZXRjb25zb2xlX3dyaXRlYCB3aXRoIHRoZSBgZXh0ZW5kZWRgIGZsYWcgc2V0IHRvIGZhbHNlLCBtZWFuaW5nIGl0J3MgdGhlIGJhc2ljIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb24uXG5cbk5vdywgd2l0aCBgZXh0ZW5kZWQ9ZmFsc2VgLCBgbmV0Y29uc29sZV93cml0ZWAgY2FsbHMgYHNlbmRfbXNnX3VkcGAsIHdoaWNoIEkgdGhvdWdodCwgYXQgZmlyc3QsIGRpZCBub3QgdXNlIHVzZXIgZGF0YS4gQnV0LCB3YWl0LCBsZXQgbWUgZG91YmxlLWNoZWNrIGBzZW5kX21zZ191ZHBgIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTQ3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjE5LjA3MDM2NjkwNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MjY3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF9tc2dfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQyMD1zdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1MjpzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDUzLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NzM9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTU6XFx0XFx0XFx0c2VuZF9tc2dfdWRwKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLCB3Y3R4dC1cXHUwMDNlbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MTkuMTUzMDAwMTI1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDI5OTUyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgXCJJXCIgaW4gdGhpcyBzaXR1YXRpb246XG5cbioqUmV2aWV3aW5nIGBzZW5kX21zZ191ZHBgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBzZW5kX21zZ191ZHBgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24gaXMgcm9idXN0IGFuZCBlZmZpY2llbnQuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBvYnZpb3VzOiBhcmUgdGhlIGVycm9yIGNoZWNrcyBjb21wcmVoZW5zaXZlPyBBcmUgd2UgaGFuZGxpbmcgYWxsIHRoZSBlZGdlIGNhc2VzIHByb3Blcmx5LCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBzb2NrZXQgZXJyb3JzLCBhbmQgbmV0d29yayBjb25uZWN0aXZpdHkgaXNzdWVzPyBCZXlvbmQgYmFzaWMgZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byBsb29rIGZvciBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLiBJcyB0aGlzIGZ1bmN0aW9uIGJsb2NraW5nLCBvciBpcyBpdCBub24tYmxvY2tpbmcgYW5kIHVzaW5nIGFwcHJvcHJpYXRlIG1lY2hhbmlzbXMgdG8gYXZvaWQgaG9sZGluZyB1cCB0aGUgY2FsbGluZyB0aHJlYWQ/IEknbGwgYmUgc2NydXRpbml6aW5nIHRoZSBkYXRhIGNvcHkgbWVjaGFuaXNtcyDigJMgYXJlIHdlIG1ha2luZyB1bm5lY2Vzc2FyeSBjb3BpZXMsIGFuZCBjYW4gd2UgbGV2ZXJhZ2UgemVyby1jb3B5IHRlY2huaXF1ZXMgd2hlcmUgYXBwcm9wcmlhdGU/IFBlcmZvcm1hbmNlIGlzIGFsd2F5cyBrZXkgd2l0aCBVRFAsIHNvIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFja2V0aXphdGlvbiBhbmQgcmVhc3NlbWJseSBpZiB0aGlzIGFwcGxpY2F0aW9uIGhhbmRsZXMgZnJhZ21lbnRlZCBtZXNzYWdlcy4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciByZXBvcnRpbmcgYW5kIGxvZ2dpbmcsIGVuc3VyaW5nIHdlJ3JlIHByb3ZpZGluZyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZGlhZ25vc2UgcHJvYmxlbXMgd2l0aG91dCBsZWFraW5nIHNlbnNpdGl2ZSBkYXRhLiBCYXNpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoaXMgaXMgYnVsbGV0cHJvb2YgYW5kIG9wdGltYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MjQuOTU2MDAwMjE5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1MixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ1MjpcXHRzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbjI0NTM6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW4pXFxuMjQ1NDpcXHR7XFxuMjQ1NTpcXHRcXHRjb25zdCBjaGFyICp0bXAgPSBtc2c7XFxuMjQ1NjpcXHRcXHRpbnQgZnJhZywgbGVmdCA9IGxlbjtcXG4yNDU3OlxcdFxcbjI0NTg6XFx0XFx0d2hpbGUgKGxlZnQgXFx1MDAzZSAwKSB7XFxuMjQ1OTpcXHRcXHRcXHRmcmFnID0gbWluKGxlZnQsIE1BWF9QUklOVF9DSFVOSyk7XFxuMjQ2MDpcXHRcXHRcXHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcXG4yNDYxOlxcdFxcdFxcdHRtcCArPSBmcmFnO1xcbjI0NjI6XFx0XFx0XFx0bGVmdCAtPSBmcmFnO1xcbjI0NjM6XFx0XFx0fVxcbjI0NjQ6XFx0fVxcbjI0NjU6XFx0XFxuMjQ2NjpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MjQuOTU2MTgyNDM5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MDMzNTUyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFJDVSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIGNsZWFyIGBzZW5kX21zZ191ZHBgIGRvZXNuJ3QgdG91Y2ggYHVzZXJkYXRhYC4gVGhhdCBtZWFucyBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AgaXMgc2FmZSwgYW5kIHRoaXMgcGF0Y2ggKm9ubHkqIGltcGFjdHMgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE15IGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYmVjb21lOiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCwgYHVzZXJkYXR1bV9kcm9wYCwgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLCBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAsIGFuZCwgb2YgY291cnNlLCBgbmV0Y29uc29sZV93cml0ZV9leHRgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGdvdCB0d2Vha2VkLiBBaCwgYGNhbGNfdXNlcmRhdGFfbGVuYCBpcyB0aGVyZSwgYnV0IHRoYXQncyBqdXN0IGZvciBjb250ZXh0LiBIb3dldmVyLCBgdXBkYXRlX3VzZXJkYXRhYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YCBhbGwgZ290IG1vZGlmaWVkLiBPa2F5LCBzbyBteSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgc3RpbGwgbG9vayBsaWtlIHRoZXkgY292ZXIgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGUgY2hhbmdlcy5cblxuTm93LCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIFRoZSBpbnRlbnQgaXMgdG8gbWFrZSB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB1c2UgUkNVIHByb3Blcmx5IHdoZW4gaXQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGlzIHVzZXJkYXRhLCB3aGljaCB0aGUgc3lzdGVtIGFjY2Vzc2VzIHRocm91Z2ggY29uZmlnZnMgYW5kIHV0aWxpemVzIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gU28sIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwvZHJpdmVyIGNvZGUgdGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5HaXZlbiB0aGlzIGlzIGEgUkNVIGZpeCBhZmZlY3RpbmcgYSBjb3JlIGRyaXZlciwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGlzIHRoZSBleGFjdCBuYW1lLCBzbyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBjb3JyZWN0LlxuXG5PaCwgYW5kIHdhaXQsIGl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpO2AgY3JlYXRlcyBgdXNlcmRhdHVtX2F0dHJfdmFsdWVgIHdoaWNoIHVzZXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fdmFsdWVfc2hvd2AuXG5Eb2VzIHRoYXQgbWVhbiB0aGUgbWFjcm8gZXhwZWN0cyBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBvciBkb2VzIGl0ICpkZWZpbmUqIGl0PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR0ZTX0FUVFJgIG1hY3JvIGRlZmluaXRpb24gdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0ODozMy40NTk1NDE1MjRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvY29uZmlnZnMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjM6XFx0I2RlZmluZSBDT05GSUdGU19BVFRSX1BFUk0oX3BmeCwgX25hbWUsIF9wZXJtKVxcdFxcdFxcXFxcXG4gMTI0OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlIF9wZngjI2F0dHJfIyNfbmFtZSA9IHtcXHRcXFxcXFxuIDEyNTpcXHRcXHQuY2FfbmFtZVxcdD0gX19zdHJpbmdpZnkoX25hbWUpLFxcdFxcdFxcXFxcXG4gMTI2OlxcdFxcdC5jYV9tb2RlXFx0PSBfcGVybSxcXHRcXHRcXHRcXFxcXFxuIDEyNzpcXHRcXHQuY2Ffb3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcdFxcdFxcdFxcXFxcXG4gMTI4OlxcdFxcdC5zaG93XFx0XFx0PSBfcGZ4IyNfbmFtZSMjX3Nob3csXFx0XFx0XFxcXFxcbiAxMjk6XFx0XFx0LnN0b3JlXFx0XFx0PSBfcGZ4IyNfbmFtZSMjX3N0b3JlLFxcdFxcdFxcXFxcXG4gMTMwOlxcdH1cXG4gMTMxOlxcdFxcbiAxMzI6XFx0I2RlZmluZSBDT05GSUdGU19BVFRSKF9wZngsIF9uYW1lKSBDT05GSUdGU19BVFRSX1BFUk0oXFx0XFxcXFxcbiAxMzM6XFx0XFx0XFx0X3BmeCwgX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSXFx0XFx0XFxcXFxcbiAxMzQ6XFx0KVxcbiAxMzU6XFx0XFxuIDEzNjpcXHQjZGVmaW5lIENPTkZJR0ZTX0FUVFJfUk8oX3BmeCwgX25hbWUpXFx0XFx0XFx0XFxcXFxcbiAxMzc6XFx0c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgX3BmeCMjYXR0cl8jI19uYW1lID0ge1xcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6MzMuNDU5NjYxOTc0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDMzMDA2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1bmN0aW9uIE5hbWUgQ29uc3RydWN0aW9uIGFuZCBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlybWluZyB0aGUgZnVuY3Rpb24gbmFtZSBjb25zdHJ1Y3Rpb24gaGVyZS4gSSd2ZSBnb3QgYC5zdG9yZSA9IF9wZngjI19uYW1lIyNfc3RvcmVgLiBUaGF0IG1lYW5zIGBfcGZ4YCBpcyBgdXNlcmRhdHVtX2AgYW5kIGBfbmFtZWAgaXMgYHZhbHVlYCwgc28gdGhlIGZ1bGwgZnVuY3Rpb24gbmFtZSAqc2hvdWxkKiBiZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBvdGhlciBmdW5jdGlvbiBuYW1lcyBhcmUgZXhhY3RseSBhcyB0aGV5IHNob3VsZCBiZS4gTGV0J3Mgc2VlLi4uIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAuIFllcCwgZm91bmQgaXQ6IGBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCwgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KWAgaW4gYG5ldGNvbnNvbGUuY2AuIEdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAuIENvbmZpcm1lZDogYHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKWAgaXMgYWxzbyBpbiBgbmV0Y29uc29sZS5jYC5cblxuQWxyaWdodCwgb250byBgdXNlcmRhdHVtX2Ryb3BgLiBGb3VuZDogYHN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pYCBpcyBhbHNvIGNvcnJlY3RseSBkZWZpbmVkIGluIGBuZXRjb25zb2xlLmNgLlxuXG5BbmQgZmluYWxseSwgYHVzZXJkYXR1bV9tYWtlX2l0ZW1gLiBZZXAsIHRoYXQgb25lJ3MgdGhlcmUgdG9vOiBgc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgY29uc3QgY2hhciAqbmFtZSlgIGlzIGRlZmluZWQsIGFzIGV4cGVjdGVkLCBpbiBgbmV0Y29uc29sZS5jYC5cblxuT2theSwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLCBJIGNhbiBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDM0LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjQyLjUwMjk2NTMwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDM0NTg0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcInVzZXJkYXR1bV9tYWtlX2l0ZW1cIixcbiAgICBcIm5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHByb3Blcmx5IHVzZSBSQ1Ugd2hlbiB1cGRhdGluZyBhbmQgcmVhZGluZyB0aGUgdXNlcmRhdGEgcGF5bG9hZCwgd2hpY2ggaXMgYWNjZXNzaWJsZSB2aWEgY29uZmlnZnMgYW5kIHVzZWQgZHVyaW5nIGV4dGVuZGVkIGNvbnNvbGUgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsL2RyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgICBcInVzZXJkYXR1bV9kcm9wXCIsXG4gICAgXCJ1c2VyZGF0dW1fbWFrZV9pdGVtXCIsXG4gICAgXCJuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlXCIsXG4gICAgXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLiBJdCBtb2RpZmllcyB0aGUgY29yZSBuZXRjb25zb2xlIGRyaXZlciB0byBwcm9wZXJseSB1c2UgUkNVIHdoZW4gdXBkYXRpbmcgYW5kIHJlYWRpbmcgdGhlIHVzZXJkYXRhIHBheWxvYWQsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGFuZCB1c2VkIGR1cmluZyBleHRlbmRlZCBjb25zb2xlIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbC9kcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6NDIuOTYzMzIwOTI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI0ODI0MjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ4OjQyLjk2NDE5Njc1NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzI0NzM2MjIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXFx1MDAzZXVzZXJkYXRhYCB3aXRoIGFuIFJDVS1wcm90ZWN0ZWQgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIGluIHRoZSBuZXRjb25zb2xlIHRyYW5zbWl0IHBhdGguIFRoZSBuZXcgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NfZmxleGAsIHBvcHVsYXRlZCB1c2luZyBgc2NucHJpbnRmYCAod2hpY2ggbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcpLCBhbmQgaXRzIGV4YWN0IHdyaXR0ZW4gbGVuZ3RoIGlzIHJlY29yZGVkIGluIGBsZW5ndGhgLiBUaGUgdHJhbnNtaXQgcGF0aCB0aGVuIHJlYWRzIGVpdGhlciB2aWEgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIChzdG9wcGluZyBhdCB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBvciBieSBleHBsaWNpdGx5IHVzaW5nIHRoZSByZWNvcmRlZCBgbGVuZ3RoYC4gSW4gYm90aCBjYXNlcywgb25seSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5dGVzIGFyZSByZWFkIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAodXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMpIGFyZSBwZXJmZWN0bHkgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MDY3ZDk1NDM0ZjcyODQ0YTQ5N2RlYjU5NzIxZTlkNmUzODM4ZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDU6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IDAzOTEzMzAyMzI4Y2MuLmIzNThlNWMzNjczNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTE1MSwxMyArMTUxLDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cbisgKiBAcmN1Olx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuKyAqIEBsZW5ndGg6XHRMZW5ndGggb2YgQGRhdGEsIGV4Y2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IuXG4rICogQGRhdGE6XHRGb3JtYXR0ZWQgXCIga2V5PXZhbHVlXFxuXCIgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXG4rICpcbisgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxuKyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXG4rICovXG4rc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuK1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbitcdHNpemVfdFx0XHRcdGxlbmd0aDtcbitcdGNoYXJcdFx0XHRkYXRhW107XG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cbiAgKiBAbGlzdDpcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxuICAqIEBncm91cDpcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXG4gICogQHVzZXJkYXRhX2dyb3VwOlx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxuLSAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuLSAqIEB1c2VyZGF0YV9sZW5ndGg6XHRTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLlxuKyAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC5cbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuQEAgLTE5OCw4ICsyMTIsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHR1c2VyZGF0YV9ncm91cDtcbi1cdGNoYXJcdFx0XHQqdXNlcmRhdGE7XG4tXHRzaXplX3RcdFx0XHR1c2VyZGF0YV9sZW5ndGg7XG4rXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSBfX3JjdSAqdXNlcmRhdGE7XG4gXHRjaGFyXHRcdFx0c3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTtcbiBcbiBcdC8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi9cbkBAIC0xMzUxLDEyICsxMzY0LDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpuZXcgPSBOVUxMO1xuK1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDtcbiBcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbV9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4tXHRjaGFyICpvbGRfYnVmID0gTlVMTDtcbi1cdGNoYXIgKm5ld19idWYgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBvZmZzZXQgPSAwO1xuIFx0aW50IGxlbjtcbiBcbkBAIC0xMzY4LDggKzEzODAsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xuIFx0aWYgKGxlbikge1xuLVx0XHRuZXdfYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFuZXdfYnVmKVxuK1x0XHRuZXcgPSBrbWFsbG9jX2ZsZXgoKm5ldywgZGF0YSwgbGVuICsgMSk7XG4rXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuQEAgLTEzNzksMjIgKzEzOTEsMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0dWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7XG4gXHRcdC8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi9cbiBcdFx0aWYgKHVkbV9pdGVtLVx1MDAzZXZhbHVlWzBdKSB7XG4tXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXdfYnVmW29mZnNldF0sIGxlbiArIDEgLSBvZmZzZXQsXG4rXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXctXHUwMDNlZGF0YVtvZmZzZXRdLFxuK1x0XHRcdFx0XHQgICAgbGVuICsgMSAtIG9mZnNldCxcbiBcdFx0XHRcdFx0ICAgIFwiICVzPSVzXFxuXCIsIGl0ZW0tXHUwMDNlY2lfbmFtZSxcbiBcdFx0XHRcdFx0ICAgIHVkbV9pdGVtLVx1MDAzZXZhbHVlKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xuK1x0aWYgKG5ldylcbitcdFx0bmV3LVx1MDAzZWxlbmd0aCA9IG9mZnNldDtcbiBcbi1cdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdG9sZF9idWYgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi1cdG50LVx1MDAzZXVzZXJkYXRhID0gbmV3X2J1Zjtcbi1cdG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWUob2xkX2J1Zik7XG4rXHQvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi9cbitcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEsIG5ldyxcbitcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpO1xuK1x0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNjg0LDcgKzE2OTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuK1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gXHRrZnJlZShudCk7XG4gfVxuIFxuQEAgLTIyMjcsMTQgKzIyMzgsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdCAgICAgIGludCBtc2dfbGVuLFxuLVx0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxuK1x0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuICNlbmRpZlxuIFxuQEAgLTIyNTEsNyArMjI2MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGlmICh1c2VyZGF0YSlcbiBcdFx0bXNnX2xlbiArPSBzY25wcmludGYoXHUwMDI2bnQtXHUwMDNlYnVmW21zZ19sZW5dLFxuIFx0XHRcdFx0ICAgICBzaXplb2YobnQtXHUwMDNlYnVmKSAtIG1zZ19sZW4sIFwiJXNcIixcbi1cdFx0XHRcdCAgICAgdXNlcmRhdGEpO1xuK1x0XHRcdFx0ICAgICB1c2VyZGF0YS1cdTAwM2VkYXRhKTtcbiBcbiBcdGlmIChzeXNkYXRhKVxuIFx0XHRtc2dfbGVuICs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG5AQCAtMjI3MSw3ICsyMjgxLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLVx0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxuK1x0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xuQEAgLTIyODIsMTIgKzIyOTMsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YV9wdHIgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGFfcHRyID0gbnQtXHUwMDNlc3lzZGF0YTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiAjZW5kaWZcbi1cdGlmIChXQVJOX09OX09OQ0UoIXVzZXJkYXRhX3B0ciBcdTAwMjZcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxuLVx0XHRyZXR1cm47XG4rXHRpZiAodXNlcmRhdGEpIHtcbitcdFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXHUwMDNlZGF0YTtcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuK1x0fVxuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghc3lzZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHN5c2RhdGFfbGVuICE9IDApKVxuIFx0XHRyZXR1cm47XG5AQCAtMjM2NCw3ICsyMzc1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuIFx0XHRcdFx0aW50IG1zZ19sZW4sXG4gXHRcdFx0XHRpbnQgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4pXG4rXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4sXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuIFx0aW50IGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuO1xuIFx0Y29uc3QgY2hhciAqbXNnYm9keTtcbkBAIC0yMzkzLDcgKzI0MDUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHQgKiB3aWxsIGJlIHJlcGxhY2VkXG4gXHQgKi9cbiBcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcbi1cdFx0XHQgICAgIHN5c2RhdGFfbGVuKTtcbitcdFx0XHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTI0MDgsMjUgKzI0MjAsMzMgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIHN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XG4gXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xuIFx0aW50IHN5c2RhdGFfbGVuID0gMDtcbiBcdGludCBsZW47XG4gXG4rXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbitcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGlmICh1c2VyZGF0YSlcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuICNlbmRpZlxuIFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4gXHRcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpICsgMTtcbiBcbiBcdGxlbiA9IHdjdHh0LVx1MDAzZWxlbiArIHJlbGVhc2VfbGVuICsgc3lzZGF0YV9sZW4gKyB1c2VyZGF0YV9sZW47XG4gXHRpZiAobGVuIFx1MDAzYz0gTUFYX1BSSU5UX0NIVU5LKVxuLVx0XHRyZXR1cm4gc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLFxuLVx0XHRcdFx0XHRcdCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuKTtcbitcdFx0c2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sXG4rXHRcdFx0XHRcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcbitcdGVsc2VcbitcdFx0c2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gXG4tXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0ICAgc3lzZGF0YV9sZW4pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5AQCAtMjY2OSw3ICsyNjg5LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuK1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gI2VuZGlmXG4gXHRrZnJlZShudCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5pbmRleCBiNTZjNzBiN2UyNzQyLi5mMDY3NGMwMDE3ZmM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuQEAgLTEzLDYgKzEzLDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0bmV0Y29uc19yZXN1bWUuc2ggXFxcbiBcdG5ldGNvbnNfc3lzZGF0YS5zaCBcXFxuIFx0bmV0Y29uc190b3J0dXJlLnNoIFxcXG4rXHRuZXRjb25zX3VzZXJkYXRhLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuIFxuIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5AQCAtMCwwICsxLDIyOSBAQFxuKyMhL3Vzci9iaW4vZW52IGJhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rIyBFeGVyY2lzZSB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLlxuKyNcbisjIFRoZSBmaXJzdCBwYXJ0IGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIHRoZSB0YXJnZXQgdHJhbnNtaXRzIGZvbGxvd3Mgd2hhdFxuKyMgY29uZmlnZnMgc2F5czogYSB2YWx1ZSBzaG93cyB1cCBpbiB0aGUgbmV4dCBtZXNzYWdlLCBhbiB1cGRhdGUgcmVwbGFjZXMgdGhlXG4rIyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZVxuKyMga2V5LlxuKyNcbisjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGVcbisjIHBheWxvYWQgZW50aXJlbHkgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIGtlZXBzXG4rIyBwaWNraW5nIHVwIHBheWxvYWRzIHRoYXQgYXJlIGJlaW5nIHJlcGxhY2VkIHVuZGVybmVhdGggaXQuIEl0IHJ1bnMgdHdpY2UsXG4rIyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlXG4rIyBlbm91Z2ggdG8gYmUgZnJhZ21lbnRlZC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rU0NSSVBURElSPSQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiKVxuK1xuK3NvdXJjZSBcIiR7U0NSSVBURElSfVwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuK1xuKyMgTnVtYmVyIG9mIHRpbWVzIGVhY2ggdG9ydHVyZSB3b3JrZXIgbG9vcHNcbitJVEVSQVRJT05TPSR7MTotMjAwfVxuK1xuKyMgS2V5cyBvd25lZCBieSBlYWNoIHRvcnR1cmUgd29ya2VyLiBXb3JrZXJzIGRvIG5vdCBzaGFyZSBrZXlzLCBzbyBhIGZhaWxpbmdcbisjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLlxuK0NIVVJOX0tFWT1cImNodXJua2V5XCJcbitUUkFOU0lFTlRfS0VZPVwidHJhbnNpZW50a2V5XCJcbisjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTktcbitCVUxLX0tFWVM9OFxuK1xuK1VTRVJEQVRBX0RJUj1cIiR7TkVUQ09OU19QQVRIfS91c2VyZGF0YVwiXG4rIyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU31cbisjIGVudHJpZXMgb2YgdGhpcyBzaXplIGFyZSBlbm91Z2ggdG8gZm9yY2UgZnJhZ21lbnRhdGlvblxuK0xPTkdfVkFMVUU9JChwcmludGYgLS0gJ3YlLjBzJyB7MS4uMTkwfSlcbitcbitmdW5jdGlvbiB3cml0ZV9rZXkoKSB7XG4rXHRsb2NhbCBLRVk9XCIkezF9XCJcbitcdGxvY2FsIFZBTFVFPVwiJHsyfVwiXG4rXG4rXHRta2RpciAtcCBcIiR7VVNFUkRBVEFfRElSfS8ke0tFWX1cIlxuK1x0ZWNobyBcIiR7VkFMVUV9XCIgXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7S0VZfS92YWx1ZVwiXG4rfVxuK1xuKyMgU2VuZCBhIHNpbmdsZSBtZXNzYWdlIGFuZCBjYXB0dXJlIGl0IG9uIHRoZSBkZXN0aW5hdGlvbiBpbnRlcmZhY2VcbitmdW5jdGlvbiBzZW5kX2FuZF9jYXB0dXJlKCkge1xuK1x0cm0gLWYgXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rXHRsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDI2XG4rXHR3YWl0X2Zvcl9wb3J0IFwiJHtOQU1FU1BBQ0V9XCIgXCIke1BPUlR9XCIgXCIke0lQX1ZFUlNJT059XCJcbitcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfVwiIFx1MDAzZSAvZGV2L2ttc2dcbitcdGJ1c3l3YWl0IFwiJHtCVVNZV0FJVF9USU1FT1VUfVwiIHRlc3QgLXMgXCIke09VVFBVVF9GSUxFfVwiIHx8IHRydWVcbitcdHBraWxsX3NvY2F0XG4rXHR2YWxpZGF0ZV9tc2cgXCIke09VVFBVVF9GSUxFfVwiXG4rfVxuK1xuK2Z1bmN0aW9uIGV4cGVjdF9pbl9tc2coKSB7XG4rXHRsb2NhbCBXQU5URUQ9XCIkezF9XCJcbitcbitcdGlmICEgZ3JlcCAtcSAtLSBcIiR7V0FOVEVEfVwiIFwiJHtPVVRQVVRfRklMRX1cIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJyR7V0FOVEVEfScgbm90IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRjYXQgXCIke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCBcIiR7a3NmdF9mYWlsfVwiXG4rXHRmaVxuK31cbitcbitmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHtcbitcdGxvY2FsIFVOV0FOVEVEPVwiJHsxfVwiXG4rXG4rXHRpZiBncmVwIC1xIC0tIFwiJHtVTldBTlRFRH1cIiBcIiR7T1VUUFVUX0ZJTEV9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICcke1VOV0FOVEVEfScgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGNhdCBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitcdGZpXG4rfVxuK1xuKyMgRXZlcnkgd3JpdGUgcHVibGlzaGVzIGEgbmV3IHBheWxvYWQgYW5kIGZyZWVzIHRoZSBwcmV2aW91cyBvbmUuIEFuIGVtcHR5XG4rIyB2YWx1ZSBpcyBza2lwcGVkIHdoZW4gdGhlIHBheWxvYWQgaXMgZm9ybWF0dGVkLCBzbyB0aGlzIGFsc28gZHJpdmVzIHRoZVxuKyMgdGFyZ2V0IHRocm91Z2ggaGF2aW5nIG5vIHBheWxvYWQgYXQgYWxsLlxuK2Z1bmN0aW9uIGNodXJuX3ZhbHVlKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0lURVJBVElPTlN9XCIpXG4rXHRkb1xuK1x0XHRlY2hvIFwidmFsdWUke2l9XCIgXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZVwiXG4rXHRcdGVjaG8gXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZVwiXG4rXHRkb25lXG4rfVxuK1xuKyMgQ3JlYXRlIGFuZCBkZWxldGUgYSBrZXkgdW5kZXJuZWF0aCB0aGUgc2VuZGVyXG4rZnVuY3Rpb24gY2h1cm5fa2V5KCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0lURVJBVElPTlN9XCIpXG4rXHRkb1xuK1x0XHRta2RpciBcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9XCJcbitcdFx0ZWNobyBcInRyYW5zaWVudCR7aX1cIiBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfS92YWx1ZVwiXG4rXHRcdHJtZGlyIFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cIlxuK1x0ZG9uZVxuK31cbitcbisjIEtlZXAgdGhlIHRyYW5zbWl0IHBhdGggYnVzeSB3aGlsZSB0aGUgcGF5bG9hZCBpcyBiZWluZyByZXBsYWNlZFxuK2Z1bmN0aW9uIHNlbmRfbWVzc2FnZXMoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7SVRFUkFUSU9OU31cIilcbitcdGRvXG4rXHRcdGVjaG8gXCIke01TR306ICR7VEFSR0VUfSAke2l9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0ZG9uZVxuK31cbitcbisjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvclxuK2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkge1xuK1x0bG9jYWwgUElEUz0oKVxuK1x0bG9jYWwgV09SS0VSXG4rXHRsb2NhbCBSRVQ9MFxuK1x0bG9jYWwgUElEXG4rXG4rXHRmb3IgV09SS0VSIGluIFwiJEBcIlxuK1x0ZG9cbitcdFx0XCIke1dPUktFUn1cIiBcdTAwMjZcbitcdFx0UElEUys9KFwiJCFcIilcbitcdGRvbmVcbitcbitcdCMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZ1xuK1x0IyB3b3JrZXIga2VlcHMgd3JpdGluZyB0byBjb25maWdmcyB3aGlsZSB0aGUgZXhpdCB0cmFwIGNsZWFucyBpdCB1cC5cbitcdGZvciBQSUQgaW4gXCIke1BJRFNbQF19XCJcbitcdGRvXG4rXHRcdHdhaXQgXCIke1BJRH1cIiB8fCBSRVQ9MVxuK1x0ZG9uZVxuK1xuK1x0aWYgW1sgXCIke1JFVH1cIiAtbmUgMCBdXVxuK1x0dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogdXNlcmRhdGEgdG9ydHVyZSB3b3JrZXIgZmFpbGVkXCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitcdGZpXG4rfVxuK1xuK2Z1bmN0aW9uIGNyZWF0ZV9idWxrX2tleXMoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7QlVMS19LRVlTfVwiKVxuK1x0ZG9cbitcdFx0d3JpdGVfa2V5IFwiYnVsayR7aX1cIiBcIiR7TE9OR19WQUxVRX1cIlxuK1x0ZG9uZVxuK31cbitcbitmdW5jdGlvbiBkZWxldGVfYnVsa19rZXlzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gJChzZXEgXCIke0JVTEtfS0VZU31cIilcbitcdGRvXG4rXHRcdHJtZGlyIFwiJHtVU0VSREFUQV9ESVJ9L2J1bGske2l9XCJcbitcdGRvbmVcbit9XG4rXG4rIyA9PT09PT09PT09ICNcbisjIFN0YXJ0IGhlcmUgI1xuKyMgPT09PT09PT09PSAjXG4rXG4rbW9kcHJvYmUgbmV0ZGV2c2ltIDJcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcbittb2Rwcm9iZSBuZXRjb25zb2xlIDJcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcbitcbitJUF9WRVJTSU9OPVwiaXB2NFwiXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXG4rT1VUUFVUX0ZJTEU9XCIvdG1wLyR7VEFSR0VUfVwiXG4rXG4rIyBDaGVjayBmb3IgYmFzaWMgc3lzdGVtIGRlcGVuZGVuY3kgYW5kIGV4aXQgaWYgbm90IGZvdW5kXG4rY2hlY2tfZm9yX2RlcGVuZGVuY2llc1xuKyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxuK2VjaG8gXCI2IDVcIiBcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcbisjIFJlbW92ZSB0aGUgbmFtZXNwYWNlLCBpbnRlcmZhY2VzIGFuZCBuZXRjb25zb2xlIHRhcmdldCBvbiBleGl0XG4rdHJhcCBjbGVhbnVwIEVYSVRcbisjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xuK3NldF9uZXR3b3JrIFwiJHtJUF9WRVJTSU9OfVwiXG4rIyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxuK2NyZWF0ZV9keW5hbWljX3RhcmdldFxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICMxXG4rIyBBIHZhbHVlIHdyaXR0ZW4gdG8gY29uZmlnZnMgcmVhY2hlcyB0aGUgZGVzdGluYXRpb25cbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7VVNFUkRBVEFfS0VZfVwiIFwiZmlyc3RcIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjMlxuKyMgVXBkYXRpbmcgdGhlIHZhbHVlIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBwYXlsb2FkXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke1VTRVJEQVRBX0tFWX1cIiBcInNlY29uZFwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09c2Vjb25kXCJcbitleHBlY3Rfbm90X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1maXJzdFwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzNcbisjIENsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnlcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK2VjaG8gXHUwMDNlIFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZVwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9ub3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PVwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzRcbisjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5XG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbit3cml0ZV9rZXkgXCIke1VTRVJEQVRBX0tFWX1cIiBcInRoaXJkXCJcbitybWRpciBcIiR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX1cIlxuK3NlbmRfYW5kX2NhcHR1cmVcbitleHBlY3Rfbm90X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1cIlxuK3JtIFwiJHtPVVRQVVRfRklMRX1cIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICM1XG4rIyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LFxuKyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWRcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7Q0hVUk5fS0VZfVwiIFwiJHtVU0VSREFUQV9WQUxVRX1cIlxuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXG4rXG4rY3JlYXRlX2J1bGtfa2V5c1xuK3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzXG4rZGVsZXRlX2J1bGtfa2V5c1xuK1xuK2V4aXQgXCIke2tzZnRfcGFzc31cIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6NDIuOTY0MTk5MDE2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMjQ3MzQwODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFJDVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgbmV0Y29uc29sZS5jYCBwYXRjaC4gVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgUkNVIGZvciB0aGUgYHVzZXJkYXRhYCBwYXlsb2FkIGluIHRoZSBuZXRjb25zb2xlIHRhcmdldC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSDigJMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGxpa2VseSBzdWZmZXJlZCBmcm9tIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzIHdoZW4gdXBkYXRpbmcgYHVzZXJkYXRhYCB3aGlsZSBpdCB3YXMgYmVpbmcgdHJhbnNtaXR0ZWQuIE1ha2VzIHNlbnNlLiBUaGlzIG5ldyBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGByY3VgLCBgbGVuZ3RoYCwgYW5kIGEgZmxleGlibGUgYXJyYXkgYGRhdGFbXWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBhbGxvY2F0aW9uIGFuZCBkYXRhIHBvcHVsYXRpb24uIFRoZXkncmUgdXNpbmcgYGttYWxsb2NfZmxleGAgYW5kIGBzY25wcmludGZgLiBga21hbGxvY19mbGV4YCBpdHNlbGYgZG9lc24ndCB6ZXJvIG1lbW9yeSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgd3JpdHRlbiBpcyBpbml0aWFsaXplZC4gVGhlIGNvZGUgZG9lcyBgc2NucHJpbnRmYCB0byBwb3B1bGF0ZSB0aGUgYGRhdGFgIGZpZWxkLCBzbyB0aGUgc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZC4gR29vZCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGUgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIGV4cGVjdHMgbGF0ZXIuIFRoZSBjb2RlIHRoZW4gcmVjb3JkcyB0aGUgd3JpdHRlbiBsZW5ndGggaW4gYG5ldy1cdTAwM2VsZW5ndGhgLiBUaGlzIHNldHMgdXAgdGhlIGNyaXRpY2FsIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlIHBheWxvYWQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHRyYW5zbWl0IHBhdGhzLCBzcGVjaWZpY2FsbHkgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAuIEluIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgaXQgdXNlcyBgJXNgIG9uIGB1c2VyZGF0YS1cdTAwM2VkYXRhYCwgd2hpY2ggaXMgc2FmZSBiZWNhdXNlIGl0J3MgbnVsbC10ZXJtaW5hdGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZSBgc2VuZF9mcmFnbWVudGVkX2JvZHlgIGZ1bmN0aW9uIHVzZXMgdGhlIGB1c2VyZGF0YS1cdTAwM2VsZW5ndGhgIHZhbHVlLiBDcnVjaWFsbHksIHRoaXMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIGBvZmZzZXRgIGZyb20gYHNjbnByaW50ZmAsIHJlcHJlc2VudGluZyB0aGUgKmV4YWN0KiBudW1iZXIgb2YgYnl0ZXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGZ1bmN0aW9uLiBTbyB0aGUgZGF0YSBiZWluZyBzZW50IGlzIGFsbCBpbml0aWFsaXplZC4gSSdtIHNhdGlzZmllZC5cblxuTm93LCBhbiBvYnZpb3VzIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVha3MqPyBUaGUgYHJjdWAgaGVhZCBpcyBpbml0aWFsaXplZCBieSBga2ZyZWVfcmN1YCBpbnRlcm5hbGx5LCBidXQgaXMgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaGUgYGRhdGFbXWAgYXJyYXkgaXMgdGhlIG9ubHkgcGFydCBzZW50IG92ZXIgdGhlIG5ldHdvcmssIGFuZCB0aGUgY29kZSBlbnN1cmVzIGl0IG9ubHkgdHJhbnNtaXRzIHRoZSBpbml0aWFsaXplZCBieXRlcyBieSB1c2luZyB0aGUgbGVuZ3RoIGZpZWxkLiBObyBsZWFrIGhlcmUuXG5cblNvLCB0aGUgcHJpbWFyeSBvYmplY3RpdmUgaXMgdG8gZWxpbWluYXRlIHRoZSBVQUYvZGF0YSByYWNlLCB3aGljaCBpcyBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uIFRoZSBvcmlnaW5hbCBjb2RlJ3MgYHNwaW5fbG9ja19pcnFzYXZlYCBhbmQgYGtmcmVlYCBwYXR0ZXJuIHNjcmVhbXMgXCJwb3RlbnRpYWwgcHJvYmxlbS5cIiBJdCdzIHZlcnkgbGlrZWx5IEtBU0FOIHdvdWxkIGhhdmUgY2F1Z2h0IHRoaXMgcXVpY2tseS4gVGhlIFJDVSBhcHByb2FjaCBlZmZlY3RpdmVseSBlbGltaW5hdGVzIHRoaXMgcmFjZS4gSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgYSBnb29kIGZpeC5cblxuVGhlIGtleSB0byBlbnN1cmUgaXMgdGhlcmUgaXMgbm8gd2F5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLlxuXG5JJ2xsIGNoZWNrIGEgS01TQU4gc3BlY2lmaWMgdGhpbmcuXG5Eb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz9cblxuVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBrbWFsbG9jX2ZsZXhgLCB3aGljaCBkb2Vzbid0IHplcm8sIGFuZCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMuIFdlIGhhdmUgdG8gdmVyaWZ5IHRoYXQgdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgdGhlIGJ1ZmZlciBtYXRjaGVzIHRoZSBieXRlcyB3cml0dGVuIHRvIHRoZSBidWZmZXIuXG5UaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBzdHJpbmcgd3JpdGluZyBhcmUgcmVsYXRlZCBieSBgbGVuYCBhbmQgYG9mZnNldGAuIGBsZW5gIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYGNhbGNfdXNlcmRhdGFfbGVuYCwgYW5kIGBvZmZzZXRgIGlzIGNhbGN1bGF0ZWQgdXNpbmcgYHNjbnByaW50ZmAuXG5cblRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIGlzIHdyaXR0ZW4uIFRoZXJlIHNob3VsZCBiZSBhIG11dGV4IGZvciB0aGUgd3JpdGVycyBhbmQgcmVhZGVycy5cblRoZSBjb21tZW50IG1lbnRpb25zIHRoZSBzZXJpYWxpemF0aW9uIGJ5IGBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhgLlxuU28gdGhlIHNpemUgaXMgZXhhY3RseSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uXG5cbkV2ZW4gaWYgYGNhbGNfdXNlcmRhdGFfbGVuYCBhbmQgYHNjbnByaW50ZmAgZGlkbid0IGFncmVlIHBlcmZlY3RseSwgYG9mZnNldGAgaXMgdGhlIGFjdHVhbCBieXRlcyB3cml0dGVuLCBhbmQgYHVzZXJkYXRhLVx1MDAzZWxlbmd0aGAgaG9sZHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIHVzZWQsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMuIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCB1c2VzIHRoZSBudWxsIHRlcm1pbmF0b3IuIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAgdXNlcyBgdXNlcmRhdGEtXHUwMDNlbGVuZ3RoYCB3aGljaCBpcyBlcXVhbCB0byBgb2Zmc2V0YC5cblxuU28sIG5vLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJdCdzIHNhZmUuXG5ObyBLTVNBTiBpcyBuZWVkZWQuXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgYGttYWxsb2NfZmxleGAgbWFjcm8ganVzdCB0byBiZSAxMDAlIHN1cmUsIGJ1dCBJIGRvbid0IHNlZSBhbnl0aGluZy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGZpeGVzIGEgVUFGL2RhdGEgcmFjZSwgd2hpY2ggaXMgYSBLQVNBTiBkb21haW4gYnVnLlxuTm8gS01TQU4gaXMgbmVlZGVkLlxuXG5JIHdpbGwgc2V0IE5lZWRzS01TQU49ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDksIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjA2LjIxMTU0MjgxM1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5zYWZlIGxvY2tsZXNzIHVwZGF0ZSBvZiBgbnQtXFx1MDAzZXVzZXJkYXRhYCB3aXRoIGFuIFJDVS1wcm90ZWN0ZWQgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIGluIHRoZSBuZXRjb25zb2xlIHRyYW5zbWl0IHBhdGguIFRoZSBuZXcgcGF5bG9hZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NfZmxleGAsIHBvcHVsYXRlZCB1c2luZyBgc2NucHJpbnRmYCAod2hpY2ggbnVsbC10ZXJtaW5hdGVzIHRoZSBzdHJpbmcpLCBhbmQgaXRzIGV4YWN0IHdyaXR0ZW4gbGVuZ3RoIGlzIHJlY29yZGVkIGluIGBsZW5ndGhgLiBUaGUgdHJhbnNtaXQgcGF0aCB0aGVuIHJlYWRzIGVpdGhlciB2aWEgYCVzYCBmb3JtYXQgc3BlY2lmaWVyIChzdG9wcGluZyBhdCB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBvciBieSBleHBsaWNpdGx5IHVzaW5nIHRoZSByZWNvcmRlZCBgbGVuZ3RoYC4gSW4gYm90aCBjYXNlcywgb25seSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5dGVzIGFyZSByZWFkIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAodXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMpIGFyZSBwZXJmZWN0bHkgY292ZXJlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bnNhZmUgbG9ja2xlc3MgdXBkYXRlIG9mIGBudC1cXHUwMDNldXNlcmRhdGFgIHdpdGggYW4gUkNVLXByb3RlY3RlZCBgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGFgIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2UgaW4gdGhlIG5ldGNvbnNvbGUgdHJhbnNtaXQgcGF0aC4gVGhlIG5ldyBwYXlsb2FkIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19mbGV4YCwgcG9wdWxhdGVkIHVzaW5nIGBzY25wcmludGZgICh3aGljaCBudWxsLXRlcm1pbmF0ZXMgdGhlIHN0cmluZyksIGFuZCBpdHMgZXhhY3Qgd3JpdHRlbiBsZW5ndGggaXMgcmVjb3JkZWQgaW4gYGxlbmd0aGAuIFRoZSB0cmFuc21pdCBwYXRoIHRoZW4gcmVhZHMgZWl0aGVyIHZpYSBgJXNgIGZvcm1hdCBzcGVjaWZpZXIgKHN0b3BwaW5nIGF0IHRoZSBudWxsIHRlcm1pbmF0b3IpIG9yIGJ5IGV4cGxpY2l0bHkgdXNpbmcgdGhlIHJlY29yZGVkIGBsZW5ndGhgLiBJbiBib3RoIGNhc2VzLCBvbmx5IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHJlYWQgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoICh1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcykgYXJlIHBlcmZlY3RseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowj48tr[1] Phase: Succeeded StartedAt: 2026-08-10 09:49:18 +0000 UTC FinishedAt: 2026-08-10 09:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 09:49:18 +0000 UTC FinishedAt: 2026-08-10 09:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2] Phase: Succeeded StartedAt: 2026-08-10 09:49:18 +0000 UTC FinishedAt: 2026-08-10 13:36:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 09:49:18 +0000 UTC FinishedAt: 2026-08-10 13:36:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 09:49:18 +0000 UTC FinishedAt: 2026-08-10 09:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 09:49:18 +0000 UTC FinishedAt: 2026-08-10 09:49:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowj48tr/series-workflowj48tr-convert-artifact-3853063683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 09:49:28 +0000 UTC FinishedAt: 2026-08-10 10:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 09:49:28 +0000 UTC FinishedAt: 2026-08-10 10:08:35 +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:*ed51ca2d-8703-40da-89f4-2551c1b61e15,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-workflowj48tr/series-workflowj48tr-convert-artifact-3853063683/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": "6157adff-0870-4199-a2c8-7605bcb34015", "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-workflowj48tr/series-workflowj48tr-build-action-1943783025/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 09:49:28 +0000 UTC FinishedAt: 2026-08-10 10:08:25 +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:*ed51ca2d-8703-40da-89f4-2551c1b61e15,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-workflowj48tr/series-workflowj48tr-convert-artifact-3853063683/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": "6157adff-0870-4199-a2c8-7605bcb34015", "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-workflowj48tr/series-workflowj48tr-build-action-1943783025/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 10:08:35 +0000 UTC FinishedAt: 2026-08-10 10:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 10:08:35 +0000 UTC FinishedAt: 2026-08-10 10:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 10:08:35 +0000 UTC FinishedAt: 2026-08-10 10:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 10:08:35 +0000 UTC FinishedAt: 2026-08-10 10:08:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowj48tr/series-workflowj48tr-convert-artifact-2752986298/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 10:08:45 +0000 UTC FinishedAt: 2026-08-10 10:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 10:08:45 +0000 UTC FinishedAt: 2026-08-10 10:10:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6157adff-0870-4199-a2c8-7605bcb34015,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-workflowj48tr/series-workflowj48tr-build-action-1943783025/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-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 10:10:41 +0000 UTC FinishedAt: 2026-08-10 10:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 10:10:41 +0000 UTC FinishedAt: 2026-08-10 10:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 10:10:41 +0000 UTC FinishedAt: 2026-08-10 10:31:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 10:10:41 +0000 UTC FinishedAt: 2026-08-10 10:31:35 +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:*ed51ca2d-8703-40da-89f4-2551c1b61e15,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-workflowj48tr/series-workflowj48tr-convert-artifact-2752986298/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": "72e1eaa5-eecb-4a04-ac6f-bd6842b07bc8", "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-workflowj48tr/series-workflowj48tr-build-action-927329054/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 10:10:41 +0000 UTC FinishedAt: 2026-08-10 10:31:25 +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:*ed51ca2d-8703-40da-89f4-2551c1b61e15,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-workflowj48tr/series-workflowj48tr-convert-artifact-2752986298/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": "72e1eaa5-eecb-4a04-ac6f-bd6842b07bc8", "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-workflowj48tr/series-workflowj48tr-build-action-927329054/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 10:31:35 +0000 UTC FinishedAt: 2026-08-10 10:31:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 10:31:35 +0000 UTC FinishedAt: 2026-08-10 10:31:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 10:31:35 +0000 UTC FinishedAt: 2026-08-10 10:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 10:31:35 +0000 UTC FinishedAt: 2026-08-10 10:33:27 +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:*72e1eaa5-eecb-4a04-ac6f-bd6842b07bc8,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-workflowj48tr/series-workflowj48tr-build-action-927329054/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-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 10:33:37 +0000 UTC FinishedAt: 2026-08-10 13:36:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 10:33:37 +0000 UTC FinishedAt: 2026-08-10 13:36:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"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:*6157adff-0870-4199-a2c8-7605bcb34015,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*72e1eaa5-eecb-4a04-ac6f-bd6842b07bc8,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-workflowj48tr/series-workflowj48tr-build-action-1943783025/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-workflowj48tr/series-workflowj48tr-build-action-927329054/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 10:33:37 +0000 UTC FinishedAt: 2026-08-10 10:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 10:33:37 +0000 UTC FinishedAt: 2026-08-10 10:33:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"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-workflowj48tr/series-workflowj48tr-convert-artifact-4273333999/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 10:33:37 +0000 UTC FinishedAt: 2026-08-10 10:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 10:33:37 +0000 UTC FinishedAt: 2026-08-10 10:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 10:33:37 +0000 UTC FinishedAt: 2026-08-10 10:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 10:33:47 +0000 UTC FinishedAt: 2026-08-10 13:36:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj48tr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["userdatum_value_store","userdatum_drop","userdatum_make_item","netconsole_target_release","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"04e57db5-0ec1-4c0b-8ae9-151a4237b5f3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 10:33:47 +0000 UTC FinishedAt: 2026-08-10 13:36:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6157adff-0870-4199-a2c8-7605bcb34015,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*72e1eaa5-eecb-4a04-ac6f-bd6842b07bc8,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-workflowj48tr/series-workflowj48tr-build-action-1943783025/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-workflowj48tr/series-workflowj48tr-build-action-927329054/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-workflowj48tr/series-workflowj48tr-convert-artifact-4273333999/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,}