Name: series-workflow4f77w Phase: Succeeded StartedAt: 2026-08-28 19:02:30 +0000 UTC FinishedAt: 2026-08-28 22:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[0] Phase: Succeeded StartedAt: 2026-08-28 19:02:30 +0000 UTC FinishedAt: 2026-08-28 19:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 19:02:30 +0000 UTC FinishedAt: 2026-08-28 19:07:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "03fa3d4f-39a6-473c-a659-d81737c27d7a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_new_quota_goal", "damos_commit_quota_goals", "damon_commit_ctx", "damon_start", "damon_sysfs_add_schemes", "damos_sysfs_set_quota_scores" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgZ29hbCBjYWxjdWxhdGlvbiBsb2dpYyAoc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlIGxhc3QgUFNJIHRvdGFsIHNlbnRpbmVsIGFuZCBjb21taXR0aW5nIHRoZSBub2RlIElEIGZvciBlbGlnaWJsZSBtZW1vcnkgZ29hbHMpIGFuZCBtb3ZlcyBhIGdsb2JhbCBzeXNmcyByZWZyZXNoIGppZmZpZXMgdGltZXN0YW1wIHRvIHBlci1rZGFtb25kIHN0cnVjdCBpbnN0YW5jZXMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkOlxuMS4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0cyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSAoc3lzZnMgdXNlcyBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0dGluZykuXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cbjMuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgY2FsY3VsYXRpb25zIHdpdGhpbiBEQU1PTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjA1MzAwZTFjNWU0MDliMWMyYzEwZmU0NzY5NGU2MDQ2OTA5YTJlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uNzBlZTg1YjQxNDY0NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNjM1LDYgJiM0Mzs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbiYjNDM7XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiYjNDM7XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Z29hbC1cdTAwM2VsaXN0KTtcbiBcdHJldHVybiBnb2FsO1xuIH1cbkBAIC0xMTIyLDYgJiM0MzsxMTI0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuIFx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG4mIzQzO1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4mIzQzO1x0XHRkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExMzEsNiAmIzQzOzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbiBcdFx0ZHN0LVx1MDAzZW5pZCA9IHNyYy1cdTAwM2VuaWQ7XG4gXHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcbiYjNDM7XHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0xMTQzLDcgJiM0MzsxMTUxLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4tXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xuIFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xuIH1cbiBcbkBAIC0zMDE4LDcgJiM0MzszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiBcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbi1cdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4mIzQzO1x0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4mIzQzO1x0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxuJiM0MztcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtXG4mIzQzO1x0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTE3ODksNiAmIzQzOzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxuQEAgLTIyMTUsMTcgJiM0MzsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4gXHRyZXR1cm4gY3R4O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XG4gXG4gXHRpZiAoIXN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcylcbiBcdFx0cmV0dXJuIDA7XG4tXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcykpXG4mIzQzO1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7XG4mIzQzO1x0c3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MztcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCAmIzQzOzIyNzIsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4gXHR9XG4gXHRrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcbiBcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxuLVx0XHRqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiYjNDM7XHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuJiM0MztcdFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjY1NDQzYWJhMDMzMDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTc1MSwxOSAmIzQzOzc1MSwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuLVx0dTY0IGRzdF9sYXN0X3BzaV90b3RhbCA9IDA7XG4tXG4tXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdGRzdF9sYXN0X3BzaV90b3RhbCA9IGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWV0cmljLCBzcmMtXHUwMDNlbWV0cmljKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdGlmIChzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xuLVx0aWYgKGRzdF9sYXN0X3BzaV90b3RhbCBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XG4gXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbiYjNDM7XHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbmlkLCBzcmMtXHUwMDNlbmlkKTtcbkBAIC03ODcsNiAmIzQzOzc4NCwxMyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxuIFx0fTtcbiBcbiYjNDM7XHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4mIzQzO1x0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xuJiM0MztcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuJiM0MztcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuJiM0MztcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbiYjNDM7XHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxuJiM0MztcdFx0XHR9KTtcbiBcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiBcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjA1MzAwZTFjNWU0MDliMWMyYzEwZmU0NzY5NGU2MDQ2OTA5YTJlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjcwZWU4NWI0MTQ2NDYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTYzNSw2ICYjNDM7NjM1LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKAogCQlyZXR1cm4gTlVMTDsKIAlnb2FsLSZndDttZXRyaWMgPSBtZXRyaWM7CiAJZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlOwomIzQzOwlpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKJiM0MzsJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gVTY0X01BWDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2dvYWwtJmd0O2xpc3QpOwogCXJldHVybiBnb2FsOwogfQpAQCAtMTEyMiw2ICYjNDM7MTEyNCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewogCXN3aXRjaCAoZHN0LSZndDttZXRyaWMpIHsKJiM0MzsJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiYjNDM7CQlkc3QtJmd0O2xhc3RfcHNpX3RvdGFsID0gVTY0X01BWDsKJiM0MzsJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDoKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6CiAJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CkBAIC0xMTMxLDYgJiM0MzsxMTM2LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oCiAJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CiAJCWRzdC0mZ3Q7bWVtY2dfaWQgPSBzcmMtJmd0O21lbWNnX2lkOwogCQlicmVhazsKJiM0MzsJY2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDoKJiM0MzsJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMTQzLDcgJiM0MzsxMTUxLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiAJZHN0LSZndDt0YXJnZXRfdmFsdWUgPSBzcmMtJmd0O3RhcmdldF92YWx1ZTsKIAlpZiAoZHN0LSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJZHN0LSZndDtjdXJyZW50X3ZhbHVlID0gc3JjLSZndDtjdXJyZW50X3ZhbHVlOwotCS8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovCiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpOwogfQogCkBAIC0zMDE4LDcgJiM0MzszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiAJCW5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7Ci0JCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiYjNDM7CQkvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovCiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkKJiM0MzsJCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwomIzQzOwkJZWxzZQomIzQzOwkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0KJiM0MzsJCQkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiAJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDsKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jCkBAIC0xNzg5LDYgJiM0MzsxNzg5LDcgQEAgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgewogCXN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7CiAJc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4OwogCXVuc2lnbmVkIGludCByZWZyZXNoX21zOwomIzQzOwl1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzOwogfTsKIAogc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpCkBAIC0yMjE1LDE3ICYjNDM7MjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KAogCXJldHVybiBjdHg7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7Ci0KIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7CiAKIAlpZiAoIXN5c2ZzX2tkYW1vbmQtJmd0O3JlZnJlc2hfbXMpCiAJCXJldHVybiAwOwotCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzKSkKJiM0MzsJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzKSkKIAkJcmV0dXJuIDA7Ci0JZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKJiM0MzsJc3lzZnNfa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiAJCW1zZWNzX3RvX2ppZmZpZXMoc3lzZnNfa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcyk7CiAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDtkYW1vbl9zeXNmc19sb2NrKSkKQEAgLTIyNzMsOCAmIzQzOzIyNzIsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpCiAJfQogCWtkYW1vbmQtJmd0O2RhbW9uX2N0eCA9IGN0eDsKIAotCWRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPQotCQlqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcyk7CiYjNDM7CWtkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzOwomIzQzOwkJbXNlY3NfdG9famlmZmllcyhrZGFtb25kLSZndDtyZWZyZXNoX21zKTsKIAogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2ZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47CiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGF0YSA9IGtkYW1vbmQ7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU0NDNhYmEwMzMwMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtNzUxLDE5ICYjNDM7NzUxLDE2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCwKIAkJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwKIAkJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYykKIHsKLQl1NjQgZHN0X2xhc3RfcHNpX3RvdGFsID0gMDsKLQotCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpCi0JCWRzdF9sYXN0X3BzaV90b3RhbCA9IGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpOwogCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bWV0cmljLCBzcmMtJmd0O21ldHJpYyk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7dGFyZ2V0X3ZhbHVlLCBzcmMtJmd0O3RhcmdldF92YWx1ZSk7CiAJaWYgKHNyYy0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpCiAJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2N1cnJlbnRfdmFsdWUsIHNyYy0mZ3Q7Y3VycmVudF92YWx1ZSk7Ci0JaWYgKGRzdF9sYXN0X3BzaV90b3RhbCAmYW1wOyZhbXA7IHNyYy0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKLQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7CiAJc3dpdGNoIChkc3QtJmd0O21ldHJpYykgewomIzQzOwljYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzoKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2xhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDoKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6CiAJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O25pZCwgc3JjLSZndDtuaWQpOwpAQCAtNzg3LDYgJiM0Mzs3ODQsMTMgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCS5sYXN0X3BzaV90b3RhbCA9IDQ1NiwKIAl9OwogCiYjNDM7CWRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsICZhbXA7ZHN0LAomIzQzOwkJCSZhbXA7KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7CiYjNDM7CQkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUywKJiM0MzsJCQkudGFyZ2V0X3ZhbHVlID0gMjM0LAomIzQzOwkJCS5jdXJyZW50X3ZhbHVlID0gMzQ1LAomIzQzOwkJCS5sYXN0X3BzaV90b3RhbCA9IDU2NywKJiM0MzsJCQl9KTsKIAlkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCAmYW1wO2RzdCwKIAkJCSZhbXA7KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXsKIAkJCS5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDUzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBEQU1PTiBGdW5jdGlvbmFsaXR5ICZhbXA7IEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBhIHJlbGF0ZWQgS1VuaXQgdGVzdCBoZWFkZXIsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBMZXQmIzM5O3MgZGlnIGluOgoKRmlyc3RseSwgYG1tL2RhbW9uL2NvcmUuY2AgaGFzIHNvbWUgcXVvdGEgYW5kIFBTSS1yZWxhdGVkIG1vZGlmaWNhdGlvbnM6CgoqICAgSSBzZWUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBzZXR0aW5nIGBsYXN0X3BzaV90b3RhbGAgdG8gYFU2NF9NQVhgIHVuZGVyIGEgc3BlY2lmaWMgYG1ldHJpY2AgY29uZGl0aW9uIChgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCkuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG5ldyBlZGdlIGNhc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIFBTSSB2YWx1ZXMuIEFsc28gdGhlcmUgaXMgYSBgbmlkYCBiZWluZyBzZXQgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCB3aGVuIGBtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLgoqICAgVGhlIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBmdW5jdGlvbiBoYW5kbGVzIGNhc2VzIHdoZXJlIGBsYXN0X3BzaV90b3RhbGAgaXMgdW5pbml0aWFsaXplZC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLCBiZWNhdXNlIHRoZSBuZXcgY2hlY2sgZm9yIGBVNjRfTUFYYCBoZXJlIGNvdWxkIGJlIGhpZGluZyBzb21lIG5ldyBsb2dpYy4KClNlY29uZGx5LCBgbW0vZGFtb24vc3lzZnMuY2AgcmV2ZWFsczoKCiogICBUaGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyBnb2luZyBmcm9tIGEgZ2xvYmFsIGBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzYCB0byBhIHBlci1rZGFtb25kIGBzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIGludGVyYWN0aW9uIHdpdGggc3lzZnMgYW5kIGhvdyBpdCBtaWdodCBpbnRyb2R1Y2UgbmV3IHRpbWluZy9zeW5jaHJvbml6YXRpb24gaXNzdWVzLCB3aGljaCBjb3VsZCB0aGVuIGJlY29tZSBmdXp6aW5nIHRhcmdldHMuCiogICBJdCBhbHNvIG1vZGlmaWVzIHRoZSBmdW5jdGlvbnMgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYCBhbmQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzeXNmcyBhcmUgYmVpbmcgbW9kaWZpZWQuCgpGaW5hbGx5LCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBoYXMgdGVzdCB1cGRhdGVzLCB3aGljaCBpcyBnb29kLiBIb3dldmVyLCB0aGVzZSBhcmUgb2Z0ZW4ganVzdCB0aGUgdGlwIG9mIHRoZSBpY2ViZXJnLCBvciBhdCBsZWFzdCB0aGV5IHVzdWFsbHkgZG9uJiMzOTt0IHJlcHJlc2VudCB0aGUgZnVsbCBzY29wZSBvZiBwb3RlbnRpYWwgYnVncy4KCk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBEQU1PTiBhbmQgYWxsIGl0cyByZWxldmFudCBjb21wb25lbnRzIChzeXNmcywgUFNJLCBldGMuKS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IganVzdCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGRpcmVjdGx5KSB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBuZXcgbG9naWMgdW5kZXIgdGhlIGhvb2QsIGFuZCBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBvbGQgb25lLCBiZWNhdXNlIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBjaGFuZ2VkIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c2ZzIGZpbGVzIG1heSBiZWNvbWUgYSBmdXp6aW5nIHRhcmdldC4KCkJhc2VkIG9uIHRoaXMgaW5pdGlhbCByZXZpZXcsIEkmIzM5O2Qgc2F5IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFRoZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgdGhlIHBlci1rZGFtb25kIHN5c2ZzIG1vZGlmaWNhdGlvbiBhbmQgdGhlIGhhbmRsaW5nIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkaXJlY3RpdmVzLCBzdHJ1Y3R1cmVkIGZvciBzb21lb25lIHdpdGggYSBzb2xpZCBncmFzcCBvZiBrZXJuZWwgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byBEQU1PTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIERBTU9OIGNvZGViYXNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBvcHRpb25zIHJlbGF0aW5nIHRvIERBTU9OIGl0c2VsZiwgb2J2aW91c2x5IOKAkyBgREFNT05gLCBuYXR1cmFsbHkg4oCTIGJ1dCBhbHNvIHRoZSBzeXNmcyBpbnRlZ3JhdGlvbiwgYERBTU9OX1NZU0ZTYC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZXhwb3NlZCBhbmQgY29udHJvbGxlZC4gVGhlbiwgSSB3aWxsIGFsc28gY2hlY2sgdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBEQU1PTiBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdHMgdmFyaW91cyBjb21wb25lbnRzIGFyZSBlbmFibGVkIGFuZCBidWlsdC4gSXQmIzM5O3MgdGltZSB0byBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHBpdGZhbGxzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBvciBpbXByb3ZlbWVudHMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIE1ha2VmaWxlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgREFNT04gc3Vic3lzdGVtIHNob3VsZCByZXNpZGUsIGFuZCBpdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGNvbXBpbGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxhdGlvbiBmbGFncywgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IERBTU9OIG1vZHVsZXMgbWlnaHQgYmUgbGlua2VkIHRvZ2V0aGVyLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtb3JnYW5pemVkIGFuZCBjbGVhcmx5IGRvY3VtZW50cyB0aGUgYnVpbGQgcHJvY2Vzcy4gS25vd2luZyB0aGUgTWFrZWZpbGUgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgaW4tZGVwdGggaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBDb2RlIGZvciBRdW90YSBGZWF0dXJlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXMgYXJlIGF0IHBsYXkgaGVyZS4gTG9va2luZyBhdCBgY29yZS5jYCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCwgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gSXQmIzM5O3MgY2xlYXIgdGhvc2UgYXJlIGNlbnRyYWwgdG8gdGhlIHF1b3RhIG1hbmFnZW1lbnQuIEFuZCBJIHNlZSB0aGVzZSBtYWNyb3M6IGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLiBOb3cgdGhlIHByZXNlbmNlIG9mIGBQU0lgIGlzIGludHJpZ3VpbmcsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGF0LiBMZXQmIzM5O3MgbG9vayBmb3IgaG93IGBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsYCBpcyBkZXBlbmRlbnQgb24gd2hldGhlciBvciBub3QgYENPTkZJR19QU0lgIGlzIGRlZmluZWQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgb24gaG93IG1lbW9yeSBwcmVzc3VyZSBpcyBiZWluZyBjb25zaWRlcmVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mjc1NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9mZWVkX2xvb3BfbmV4dF9pbnB1dCh1bnNpZ25lZCBsb25nIGxhc3RfaW5wdXQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3ODctXG5tbS9kYW1vbi9jb3JlLmM6Mjc4ODpzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yNzg5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc5Ny1cbm1tL2RhbW9uL2NvcmUuYzoyNzk4OnN0YXRpYyBpbmxpbmUgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yNzk5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzAxNz1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMjYtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL2NvcmUuYzozMDI3Olx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xubW0vZGFtb24vY29yZS5jLTMwMjgtXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAyNzg1LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgc29tZXRoaW5nIHNpZ25pZmljYW50IGlzIGhhcHBlbmluZyB3aXRoIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvciBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGhlYXJ0IG9mIGEgcGFydGljdWxhciBhbGdvcml0aG0uIExldCYjMzk7cyBzZWUgaWYgaXQgZGVhbHMgd2l0aCB0aGUgbW9uaXRvcmluZyBwcm9jZXNzIGl0c2VsZiwgdGhlIGRhdGEgcHJvY2Vzc2luZywgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2Ygc2FtcGxpbmcgb3IgdHJpZ2dlcmluZyBldmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc25pcHBldCYjMzk7cyBpbW1lZGlhdGUgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIG92ZXJhbGwgREFNT04gZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdFx0XHRyZXR1cm4gbWF4KGxhc3RfaW5wdXQgLSBjb21wZW5zYXRpb24sIG1pbl9pbnB1dCk7XG4yNzgxOlx0XHRpZiAobGFzdF9pbnB1dCBcdTAwM2MgVUxPTkdfTUFYIC0gY29tcGVuc2F0aW9uKVxuMjc4MjpcdFx0XHRyZXR1cm4gbGFzdF9pbnB1dCAmIzQzOyBjb21wZW5zYXRpb247XG4yNzgzOlx0XHRyZXR1cm4gVUxPTkdfTUFYO1xuMjc4NDpcdH1cbjI3ODU6XHRcbjI3ODY6XHQjaWZkZWYgQ09ORklHX1BTSVxuMjc4NzpcdFxuMjc4ODpcdHN0YXRpYyB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxuMjc4OTpcdHtcbjI3OTA6XHRcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZwc2lfZGlzYWJsZWQpKVxuMjc5MTpcdFx0XHRyZXR1cm4gMDtcbjI3OTI6XHRcdHJldHVybiBkaXZfdTY0KHBzaV9zeXN0ZW0udG90YWxbUFNJX0FWR1NdW1BTSV9NRU0gKiAyXSxcbjI3OTM6XHRcdFx0XHROU0VDX1BFUl9VU0VDKTtcbjI3OTQ6XHR9XG4yNzk1Olx0XG4yNzk2Olx0I2Vsc2VcdC8qIENPTkZJR19QU0kgKi9cbjI3OTc6XHRcbjI3OTg6XHRzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG4yNzk5Olx0e1xuMjgwMDpcdFx0cmV0dXJuIDA7XG4yODAxOlx0fVxuMjgwMjpcdFxuMjgwMzpcdCNlbmRpZlx0LyogQ09ORklHX1BTSSAqL1xuMjgwNDpcdFxuMjgwNTpcdCNpZmRlZiBDT05GSUdfTlVNQVxuMjgwNjpcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbjI4MDc6XHR7XG4yODA4Olx0XHRyZXR1cm4gbmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKTtcbjI4MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IGFnYWluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSByZWNhbGwgdGhhdCBmaWxlIGJlaW5nIGEgZm9jYWwgcG9pbnQgZm9yIHNvbWUgcmVjZW50IG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBEQU1PTiDigJMgdGhhdCYjMzk7cyBEYXRhIEFjY2VzcyBNT05pdG9yLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIHRoYXQgYW55IGNoYW5nZXMgdGhlcmUgYXJlIGxpa2VseSB0byBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IGZpbGUgc2hlZHMgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMTA6XHRcdGVyciA9IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhjdHgsIHN5c19jdHgpO1xuMjIxMTpcdFx0aWYgKGVycikge1xuMjIxMjpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuMjIxMzpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjIxNDpcdFx0fVxuMjIxNTpcdFxuMjIxNjpcdFx0cmV0dXJuIGN0eDtcbjIyMTc6XHR9XG4yMjE4Olx0XG4yMjE5Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuMjIyMDpcdHtcbjIyMjE6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbjIyMjI6XHRcbjIyMjM6XHRcdGlmICghc3lzZnNfa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKVxuMjIyNDpcdFx0XHRyZXR1cm4gMDtcbjIyMjU6XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzKSlcbjIyMjY6XHRcdFx0cmV0dXJuIDA7XG4yMjI3Olx0XHRzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuMjIyODpcdFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4yMjI5Olx0XG4yMjMwOlx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4yMjMxOlx0XHRcdHJldHVybiAwO1xuMjIzMjpcdFx0aWYgKHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyMzM6XHRcdFx0Z290byBvdXQ7XG4yMjM0Olx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNTpcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMoc3lzZnNfa2RhbW9uZCk7XG4yMjM2Olx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNzpcdG91dDpcbjIyMzg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbjIyMzk6XHRcdHJldHVybiAwO1xuMjI0MDpcdH1cbjIyNDE6XHRcbjIyNDI6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4yMjQzOlx0e1xuMjI0NDpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuMjI0NTpcdFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqcmVwZWF0X2NhbGxfY29udHJvbDtcbjIyNDY6XHRcdGludCBlcnI7XG4yMjQ3Olx0XG4yMjQ4Olx0XHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxuMjI0OTpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjI1MDpcdFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xuMjI1MTpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjUzOlx0XG4yMjU0Olx0XHRpZiAoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjU1Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbjIyNTY6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcbjIyNTc6XHRcbjIyNTg6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjU5Olx0XHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4yMjYwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI2MTpcdFxuMjI2MjpcdFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbjIyNjM6XHRcdGlmIChJU19FUlIoY3R4KSkge1xuMjI2NDpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbjIyNjY6XHRcdH1cbjIyNjc6XHRcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xuMjI2ODpcdFx0aWYgKGVycikge1xuMjI2OTpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNzA6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyNzE6XHRcdFx0cmV0dXJuIGVycjtcbjIyNzI6XHRcdH1cbjIyNzM6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuMjI3NDpcdFxuMjI3NTpcdFx0a2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MztcbjIyNzY6XHRcdFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuMjI3NzpcdFxuMjI3ODpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuMjI3OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbjIyODA6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbjIyODE6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuMjI4MjpcdFx0aWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSlcbjIyODM6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjg0Olx0XHRyZXR1cm4gZXJyO1xuMjI4NTpcdH1cbjIyODY6XHRcbjIyODc6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI4ODpcdHtcbjIyODk6XHRcdGlmICgha2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIFJldmlldzogQSBGdXp6aW5nIFRhcmdldCBFbWVyZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21lIGtleSBhcmVhcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCBEQU1PTiBpcyBpbmRlZWQgYWNjZXNzaWJsZSBhbmQgZnV6emVkIHZpYSBzeXNmcyBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgZWFzeSB0byBnZXQgYXQsIGV2ZW4gaW4gUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWFsIGhhcmR3YXJlLiBJbXBvcnRhbnQgdG8gY29uc2lkZXIgLSB0aGUgREFNT04gcXVvdGEgZ29hbHMgKHRoaW5ncyBsaWtlIFBTSSBhbmQgTk9ERV9FTElHSUJMRV9NRU0pIGFyZSBjb25maWd1cmVkIHRocm91Z2ggc3lzZnMgYW5kIGFyZSBhY3RpdmVseSBtYW5hZ2VkIGJ5IGtkYW1vbmQgdGhyZWFkcy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZml4ZXMuIEkmIzM5O3ZlIG5vdGVkIHRocmVlIGtleSBhcmVhczoKCjEuICBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWA6IFRoaXMgcGF0Y2ggcHJldmVudHMgYSBiYWQgZGVsdGEgb24gdGhlIGZpcnN0IHJvdW5kIHdoZXJlIHRoZSBsYXN0XF9wc2lcX3RvdGFsIGlzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gb3Igc3RhdGUgbWFuYWdlbWVudCBpc3N1ZSB0aGF0IGNvdWxkIGJlIGV4cGxvaXRhYmxlIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgaW5wdXRzLgoyLiAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYDogVGhlIGZpeCBlbnN1cmVzIHRoYXQgYGRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWRgIGZvciBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgIGFuZCByZXNldHMgYGxhc3RfcHNpX3RvdGFsYCBmb3IgUFNJIGdvYWxzLiBUaGlzIGtpbmQgb2Ygb3BlcmF0aW9uIC0gZW5zdXJpbmcgdGhlIGNvcnJlY3Qgbm9kZSBJRCBhc3NpZ25tZW50IGFuZCByZXNldHRpbmcgYSBzdGF0ZSBjb3VudGVyIC0gaXMgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIEluY29ycmVjdCBub2RlIGFzc2lnbm1lbnQgYW5kIHN0YXRlIHByb2JsZW1zIGNhbiBiZSBlYXNpbHkgbWlzc2VkIGJ1dCBoYXZlIGEgbWFqb3IgZWZmZWN0LgozLiAgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYDogVGhpcyBjaGFuZ2UgbWFrZXMgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBwZXIta2RhbW9uZCBpbnN0ZWFkIG9mIGEgc2hhcmVkIGdsb2JhbCB2YXJpYWJsZS4gSSBzZWUgdGhlIHZhbHVlIGhlcmUgLSB0aGlzIGF2b2lkcyBpbnRlcmZlcmVuY2UgYmV0d2VlbiBtdWx0aXBsZSBrZGFtb25kcywgd2hpY2ggaXMgYSBiaWcgZGVhbCBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIHBvc3NpYmxlIHN0YXRlIGNvcnJ1cHRpb24gdGhhdCBhIGZ1enplciBjb3VsZCBkZWZpbml0ZWx5IHRyaWdnZXIuCgpHaXZlbiB0aGF0IHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBsb2dpYyBhbmQgaW52b2x2ZSBxdW90YSBnb2FscyBhbmQgc3lzZnMgaW50ZXJmYWNlcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYXJlYS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IGZ1bmN0aW9uczoKSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgZnVuY3Rpb25zIG1vZGlmaWVkIGFuZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIG1vZGlmaWVkIGNvZGUuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBJIG5lZWQgdG8gY2hlY2s6CgoqICAgYGRhbW9zX25ld19xdW90YV9nb2FsYCAoSXMgdGhpcyBleHBvcnRlZCBvciBub24tc3RhdGljPyBJbXBvcnRhbnQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLikKKiAgIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAKKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBhbmQgaXRzIGNhbGxpbmcgZnVuY3Rpb25zOiBgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXRgLCBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jb21taXRfY3R4YC4KCkkmIzM5O2xsIGFsc28gc2VhcmNoIGZvciB3aGVyZSBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFyZSBkZWNsYXJlZC9kZWZpbmVkIHdpdGhpbiBgbW0vZGFtb24vYCwgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2s7IEkmIzM5O2xsIHN0YXJ0IHdyaXRpbmcgYSBmdXp6ZXIgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTExNjk9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExODMtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE4NDpcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9kYW1vbi9scnVfc29ydC5jOjIzODpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDQtXHRcdFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICYjNDM7IDIpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVx0XHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXHUwMDNlbWV0cmljLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjItXHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzOD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTYtXHRcdCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg1NzpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU4LVx0XHRcdFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgREFNT04tcmVsYXRlZCBlbnRyeSBwb2ludHMgYW5kIG15IG1lbnRhbCByb2FkbWFwIGZvciBkaXZpbmcgZGVlcGVyOgoKKipJbml0aWFsIERBTU9OIEludmVzdGlnYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhvc2UgZnVuY3Rpb25zOiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBhbmQgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYC4gSSYjMzk7bSBjdXJpb3VzIHdoYXQga2luZCBvZiBpbnRlcmFjdGlvbnMgdGhlc2UgcmVwcmVzZW50LiBJ4oCZbSBndWVzc2luZyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBpbnZvbHZlcyBzZXR0aW5nIG9yIGFwcGx5aW5nIHNvbWUga2luZCBvZiByZXNvdXJjZSBsaW1pdHMgb3IgcXVvdGFzLCBsaWtlbHkgcmVsYXRlZCB0byBEQU1PTiYjMzk7cyBvcGVyYXRpb24uIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgcHJvYmFibHkgYSBjb250cm9sIGtub2IgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgREFNT04gY29yZSBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIHNvdW5kcyBpbnRyaWd1aW5nLi4uIG1heWJlIHJlbGF0ZWQgdG8gcmVwZWF0aW5nIGEgY2FsbCBvciBhY3Rpb24gYXMgcGFydCBvZiBEQU1PTiYjMzk7cyBtb25pdG9yaW5nIGxvb3AsIG9yIHBlcmhhcHMgZm9yIHNvbWUga2luZCBvZiB1c2VyIGludGVyYWN0aW9uIG1lY2hhbmlzbSB2aWEgc3lzZnMuCgpOb3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBzZXQgb2Ygc3lzZnMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgbmVlZCBhIGxpc3Qgb2YgYWxsIHRoZSBzeXNmcyBmaWxlcyBpdCBleHBvcnRzLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBmdWxsIHVzZXIgaW50ZXJmYWNlIHRoYXQgREFNT04gcHJlc2VudHMuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgbGV2ZWwgb2YgY29udHJvbCBhbmQgdGhlIGtpbmRzIG9mIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGtub2JzIHdlIGhhdmUgYXQgb3VyIGRpc3Bvc2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMjE5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDEtXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDI6c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMjQzLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODc9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTQtXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG5tbS9kYW1vbi9zeXNmcy5jOjIyOTU6XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5Ni1cdCAqL1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjM2Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM3MC1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxubW0vZGFtb24vc3lzZnMuYzoyMzcxOlx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Mi1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFF1b3RhIEdvYWxzIGFuZCBTeXNmcyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBEQU1PTiYjMzk7cyBpbnRlcm5hbHMgcmVsYXRlZCB0byBxdW90YSBnb2FscyBhbmQgaG93IHRoZXkgaW50ZXJmYWNlIHdpdGggc3lzZnMuIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG1tL2RhbW9uYCBkaXJlY3RvcnkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgaGVhZGVyIGZpbGU7IGl0JiMzOTtzIGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIG5hdmlnYXRpbmcga2VybmVsIGludGVybmFscyBsaWtlIHRoaXMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIG92ZXJ2aWV3IG9mIHRoZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byBvdXIgYXJlYXMgb2YgaW50ZXJlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfLipxdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTI4PWVudW0gZGFtb3NfYWN0aW9uIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQzLS8qKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE0NDogKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgbWV0cmljIHRvIGJlIHVzZWQgYXMgdGhlIGdvYWxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNDUtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTU5LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE2MDplbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjEtXHREQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNzMtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTc0OiAqIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIC0gREFNT1Mgc2NoZW1lIHF1b3RhIGF1dG8tdHVuaW5nIGdvYWwuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTc1LSAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5NS0gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTY6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5NzpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5OC1cdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMTYtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjE3OiAqIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciAtIEdvYWwtYmFzZWQgcXVvdGEgdHVuaW5nIGxvZ2ljLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIxOC0gKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjAtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjIxOmVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjIyLVx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNULFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjYtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjI3OiAqIHN0cnVjdCBkYW1vc19xdW90YSAtIENvbnRyb2xzIHRoZSBhZ2dyZXNzaXZlbmVzcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyOC0gKiBAcmVzZXRfaW50ZXJ2YWw6XHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzMtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Mjc0OnN0cnVjdCBkYW1vc19xdW90YSB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjc1LVx0dW5zaWduZWQgbG9uZyByZXNldF9pbnRlcnZhbDtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjc4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3OTpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI4MC1cdHVuc2lnbmVkIGxvbmcgZXN6O1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yODktLyogcHJpdmF0ZTogKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDoyOTA6XHQvKiBIZWFkIG9mIHF1b3RhIHR1bmluZyBnb2FscyAoXHUwMDI2ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yOTEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0zMzk9c3RydWN0IGRhbW9zX3dhdGVybWFya3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0zNjMtICogZGV0ZXJtaW5lZCB0aGUgcmVnaW9uIGFzIGVsaWdpYmxlIHRvIGFwcGx5IHRoZSBhY3Rpb24uICBUaGUgYWNjZXNzIHBhdHRlcm5cbmluY2x1ZGUvbGludXgvZGFtb24uaDozNjQ6ICogKFx1MDAyNnN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiksIHF1b3RhcyAoXHUwMDI2c3RydWN0IGRhbW9zX3F1b3RhKSwgd2F0ZXJtYXJrc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2NS0gKiAoXHUwMDI2c3RydWN0IGRhbW9zX3dhdGVybWFya3MpIGFuZCBmaWx0ZXJzIChcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyKSB0aGF0IGhhbmRsZWRcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTU0PXN0cnVjdCBkYW1vcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU1Ny1cdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTU4Olx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU1OS1cdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTU1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTkyLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk5MzojZGVmaW5lIGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIFxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShnb2FsLCBcdTAwMjYocXVvdGEpLVx1MDAzZWdvYWxzLCBsaXN0KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk5NS1cbmluY2x1ZGUvbGludXgvZGFtb24uaDo5OTY6I2RlZmluZSBkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZ29hbCwgbmV4dCwgcXVvdGEpIFxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGdvYWwsIG5leHQsIFx1MDAyNihxdW90YSktXHUwMDNlZ29hbHMsIGxpc3QpXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMzc9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMzk6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDA6XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDEtXHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQyOnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0Mzp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0NC1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDQ1PXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDctXHRcdFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQ4Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0OS1cdFx0XHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDUyPXZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDUzOmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUXVvdGEgR29hbCBNYW5hZ2VtZW50IGFuZCBTeXN0ZW0gRmlsZSBTeXN0ZW0gSW50ZXJhY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGFuZCBicmVhayBkb3duIHRoZSBxdW90YSBnb2FsIG1hbmFnZW1lbnQuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vc19hZGRfcXVvdGFfZ29hbGAsIGFuZCBgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIGNyZWF0aW5nLCBjb21taXR0aW5nLCBhZGRpbmcsIGFuZCBkZXN0cm95aW5nIHF1b3RhIGdvYWxzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCBpcyBrZXkuCgpOZXh0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGZpbGUgc3lzdGVtIGNvbnRleHQgcmVsYXRlcyB0byB0aGlzIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFueSBgc3lzX2N0eGAgYXBwbHkgb3IgY29tbWl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbnkgZnVuY3Rpb25zIHRoYXQgdXNlIGBkYW1vc19zeXNmc2Agb3IgYGRhbW9uX3N5c2ZzYCBpbiB0aGVpciBuYW1lLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBxdW90YSBnb2FscyBhcmUgcmVwcmVzZW50ZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBob3cgbW9kaWZpY2F0aW9ucyBhcmUgYXBwbGllZCBvciBjb21taXR0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzQ5OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTY6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE3LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoyMDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBrbWFsbG9jX29iaigqcmFuZ2UpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MzE9c3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zMy17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz00MD1zdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo0MzpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00NS1cdHVuc2lnbmVkIGxvbmcgbWluO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTU2PXN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjcte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXHR1bnNpZ25lZCBsb25nIG1heDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgxOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaikpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODQtfVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21pbl9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg3LVx0XHRfX0FUVFJfUldfTU9ERShtaW4sIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkwLVx0XHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0Olx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk2LX07XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk4LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTk6Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMjpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMy19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwNjpzdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNy1cdFx0Y2hhciAqbWVtY2dfcGF0aF9idWYsIGNoYXIgKnBhdGgpXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNC1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNTpcdFx0aWYgKGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEobWVtY2csIHBhdGgsIG1lbWNnX3BhdGgpKSB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzYtXHRcdFx0KmlkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjk6ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2Uge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTItXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mjg6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjktXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM0OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNzpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQxLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Njp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTE6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUyOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTc9dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24sXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwMj1zdGF0aWMgdm9pZCBkYW1vc19zeXNmc19yZWdpb25fcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24pXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA5PXN0YXRpYyBzc2l6ZV90IHN0YXJ0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI3PXN0YXRpYyBzc2l6ZV90IG5yX2FjY2Vzc2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyOS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMwOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzMTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzY9c3RhdGljIHNzaXplX3QgYWdlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVx0XHRfX0FUVFJfUk9fTU9ERShzdGFydCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZW5kX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ni1cdFx0X19BVFRSX1JPX01PREUoZW5kLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjktXHRcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVx0XHRfX0FUVFJfUk9fTU9ERShhZ2UsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc1LVx0XHRfX0FUVFJfUk9fTU9ERShzel9maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc4Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODI6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4My1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4ODpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA1OmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTk9c3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyLCAqbmV4dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDUtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDgtXHRcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1My19O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTgtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU5Olx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2MC19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzY2OnN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY3LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM3OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzgxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg3Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zOTI9c3RhdGljIHNzaXplX3Qgc3pfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozOTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTctXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwMT1zdGF0aWMgc3NpemVfdCBucl9hcHBsaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDA0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDEyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDE0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTk9c3RhdGljIHNzaXplX3Qgc3pfb3BzX2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDIzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDI0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00Mjg9c3RhdGljIHNzaXplX3QgcXRfZXhjZWVkc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzMtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NDY9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ1NT1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NjAtXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHMsIGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Njkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzEtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Mi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzQtXHRcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVx0XHRfX0FUVFJfUk9fTU9ERShzel90cmllZCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgwLVx0XHRfX0FUVFJfUk9fTU9ERShucl9hcHBsaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODMtXHRcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXHRcdF9fQVRUUl9ST19NT0RFKHN6X29wc19maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODktXHRcdF9fQVRUUl9ST19NT0RFKHF0X2V4Y2VlZHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkyLVx0XHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cdFx0X19BVFRSX1JXX01PREUobWF4X25yX3NuYXBzaG90cywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NzpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTg6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDM6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDQ6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNi1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA3LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA4OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc3RhdHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc3RhdHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTExOlx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUxMi1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTM6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQxOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDItXHRcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXHRpZiAoZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01OTM9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01OTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5OC1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02Mjc9c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjMxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MzItXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY1Mj1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1Ny1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjYxPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY2NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2Ni1cdGJvb2wgbWF0Y2hpbmc7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY3Nj1zdGF0aWMgc3NpemVfdCBhbGxvd19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cdGJvb2wgYWxsb3c7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwMi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVx0aW50IGxlbjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3Olx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzEwLVx0XHRcdGZpbHRlci1cdTAwM2VtZW1jZ19wYXRoID8gZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGggOiBcJiMzNDtcJiMzNDspO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXHRyZXR1cm4gbGVuO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzE3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cdHN0cnNjcHkocGF0aCwgYnVmLCBjb3VudCAmIzQzOyAxKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3Mjc6XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjgtXHRcdGtmcmVlKHBhdGgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MzItXHRmaWx0ZXItXHUwMDNlbWVtY2dfcGF0aCA9IHBhdGg7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzMzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczNC1cdHJldHVybiBjb3VudDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM3PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc0Nj1zdGF0aWMgc3NpemVfdCBhZGRyX3N0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1MS1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NjU9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2Ny17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MDQKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIE1vZHVsZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYG1tL2RhbW9uL3N5c2ZzLmNgIGV4cG9ydHMgYGRhbW9uX3N5c2ZzX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSB3YW50IHRvIHRyYWNlIHRoZSBpbnRlcmNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHN5bWJvbHMuIEZyb20gYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGEgY2x1c3RlciByZWxhdGVkIHRvIHF1b3RhIGdvYWxzIGFuZCBzY2hlbWUgY29tbWl0bWVudDogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9jb21taXRfc2NoZW1lc2AsIGFuZCBgZGFtb25fY29tbWl0X2N0eGAuIFBsdXMgdGhlIGNvcmUgYGRhbW9uX3N0YXJ0YCBmdW5jdGlvbi4KClRoZW4sIGZyb20gYG1tL2RhbW9uL3N5c2ZzLmNgLCBJJiMzOTttIG5vdGluZyBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIHdoaWNoIGlzIHN0YXRpYyBidXQgY2FsbGVkIHRocm91Z2ggYSBzeXNmcyB3cml0ZSwgYW5kIHRoZW4gYGRhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0X3N0b3JlYCwgYW5kIGBrZGFtb25kc19zdG9yZWAuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZXhwb3J0ZWQgb3IgbWFya2VkIG5vbi1zdGF0aWMgaW4gdGhvc2UgZmlsZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2Ugc3ltYm9scy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnRlcmFjdGlvbiBsaWVzLiBUaGVzZSBhcmUgdGhlIGhvb2tzIHRoYXQgdGhlIHN5c2ZzIGludGVyZmFjZSBpcyB1c2luZyB0byBjb250cm9sIGFuZCBjb25maWd1cmUgREFNT04mIzM5O3MgY29yZSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2ZzIGludGVyZmFjZSB0cmlnZ2VycyB0aGUgY29yZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3xeaW50IGRhbW9zX3xec3RydWN0IGRhbW9zXy4qZGFtb3NffF5zdHJ1Y3QgZGFtb25fLipkYW1vbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzAtICovXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxubW0vZGFtb24vY29yZS5jLTcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbm1tL2RhbW9uL2NvcmUuYy05OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTExMy1cbm1tL2RhbW9uL2NvcmUuYzoxMTQ6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG5tbS9kYW1vbi9jb3JlLmMtMTE1LVx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTYxLVxubW0vZGFtb24vY29yZS5jOjE2MjpzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxubW0vZGFtb24vY29yZS5jLTE2My17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxOD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI3LSAqL1xubW0vZGFtb24vY29yZS5jOjMyODpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxubW0vZGFtb24vY29yZS5jLTMyOS17XG4tLVxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbm1tL2RhbW9uL2NvcmUuYy00NzktXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTY4LVxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy01NzAtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG4tLVxubW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTc1Mz12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzc3LSAqL1xubW0vZGFtb24vY29yZS5jOjc3ODpzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtNzc5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODI5PXVuc2lnbmVkIGludCBkYW1vbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTgzMy1cbm1tL2RhbW9uL2NvcmUuYzo4MzQ6c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTgzNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTU9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDUwOmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxubW0vZGFtb24vY29yZS5jLTEwNTEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTQ3PXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTY4LSAqL1xubW0vZGFtb24vY29yZS5jOjExNjk6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE3MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTE4MTY9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NDQtICovXG5tbS9kYW1vbi9jb3JlLmM6MTg0NTppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xODQ2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg2NC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxODY1OmludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZClcbm1tL2RhbW9uL2NvcmUuYy0xODY2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTk2ND1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5ODAtICovXG5tbS9kYW1vbi9jb3JlLmM6MTk4MTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0xOTgyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA2MT1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDc2LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNzc6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0yMDc4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjExMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTEzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTE0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE2NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTY2OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTY3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzk2Mj1zdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTkzLSAqL1xubW0vZGFtb24vY29yZS5jOjM5OTQ6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jLTM5OTUtXHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE0LSAqL1xubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzoxNTppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTYtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKVxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjQ2OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA1LVx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTQ5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MDppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MS1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTEzPWJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTU6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xNi1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwPURFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xNS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xNy1cdFx0dW5zaWduZWQgbG9uZyBtaW4sXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0xMT1zdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2Uge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0yOD1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyB7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzMtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM1LXZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zNz1leHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDAtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Nj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzQ9c3RhdGljXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIzNi1cdHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTk2Mj1zdGF0aWNcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTYzOnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTY0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NzktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ0OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0NS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMDE9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNDg6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ5LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MDIKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFF1b3RhIEdvYWwgQW5hbHlzaXMgYW5kIEZ1enppbmcgUmVjb21tZW5kYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgYENPTkZJR19QU0lgIGFyZSBlc3NlbnRpYWwuIFNwZWNpZmljYWxseSwgYENPTkZJR19QU0lgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBlbmFibGVzIHJlYWxpc3RpYyBQU0ktYmFzZWQgcXVvdGEgZ29hbCB0ZXN0aW5nIHdpdGhpbiBEQU1PTiwgcGFydGljdWxhcmx5IGluIHRoZSBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbGAgZnVuY3Rpb24uIFdpdGhvdXQgUFNJLCB3ZSYjMzk7cmUgZXNzZW50aWFsbHkgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBnaXZlIHVzIG1lYW5pbmdmdWwgcmVzdWx0cy4gREFNT04gYW5kIERBTU9OX1NZU0ZTIGFyZSBjbGVhcmx5IG5lZWRlZCB0byBlbmFibGUgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZS4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gQWZ0ZXIgYSBxdWljayBzY2FuLCB0aGUgaW1wb3J0YW50IGZvY3VzIHN5bWJvbHMgYXJlOiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLiBEb3VibGUtY2hlY2tpbmcsIEkgY29uZmlybSB0aGF0IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFyZSBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgdmlzaWJsZSBpbiBib3RoIHRoZSBjb3JlIERBTU9OIGNvZGUgKGBtbS9kYW1vbi9jb3JlLmNgKSBhbmQgdGhlIGhlYWRlciBmaWxlIChgaW5jbHVkZS9saW51eC9kYW1vbi5oYCkuIFRoaXMgaXMgZ29vZDsgd2UgY2FuIHJlYWNoIHRoZW0uCgpOb3csIGZvciB0aGUgdmVyZGljdDogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCAoREFNT04pIGNvbWJpbmVkIHdpdGggYSBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbC1pbnRlcm5hbCBnb2FsIGNvbW1pdCBsb2dpYy4gVGhpcyBpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgcG90ZW50aWFsIGJ1Z3MuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKRmluYWxseSwgbGV0JiMzOTtzIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmF0aW9uYWxlIHRvIGp1c3RpZnkgZnV6emluZzogdGhpcyBpcyBEQU1PUyBxdW90YSBnb2FsIGluaXRpYWwgc3RhdGUgaGFuZGxpbmcgZm9yIHRoZSBQU0kgbWV0cmljLCBub2RlIGVsaWdpYmxlIG1lbW9yeSBnb2FsIG5pZCBjb3B5aW5nIG9uIGNvbW1pdCwgYW5kIHBlci1rZGFtb25kIHJlZnJlc2ggaW50ZXJ2YWwgdHJhY2tpbmcgaW4gdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gVGhhdCBjb3ZlcnMgc29tZSBpbnRlcmVzdGluZyB0aGluZ3MuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBhcyBsaXN0ZWQgYWJvdmUuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIGluY2x1ZGUgYFsmIzM0O0RBTU9OJiMzNDssICYjMzQ7REFNT05fU1lTRlMmIzM0OywgJiMzNDtQU0kmIzM0O11gLiBBbGwgc2V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtQU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19uZXdfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBNTSBjb3JlIGFuZCBzeXNmcyBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdCBiZWhhdmlvciBvZiBQU0kgYW5kIG5vZGUtZWxpZ2libGUtbWVtb3J5IERBTU9TIHF1b3RhIGdvYWxzLCBhbmQgY2hhbmdpbmcgZ2xvYmFsIHN5c2ZzIHVwZGF0ZSB0aW1pbmcgdG8gcGVyLWtkYW1vbmQgcmVmcmVzaCB0cmFja2luZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBydW50aW1lIGxvZ2ljIHBhdGhzIHZpYSBzeXNmcyBhbmQgREFNT04gQVBJcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBnb2FsIGNhbGN1bGF0aW9uIGxvZ2ljIChzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGFuZCBoYW5kbGluZyB0aGUgbGFzdCBQU0kgdG90YWwgc2VudGluZWwgYW5kIGNvbW1pdHRpbmcgdGhlIG5vZGUgSUQgZm9yIGVsaWdpYmxlIG1lbW9yeSBnb2FscykgYW5kIG1vdmVzIGEgZ2xvYmFsIHN5c2ZzIHJlZnJlc2ggamlmZmllcyB0aW1lc3RhbXAgdG8gcGVyLWtkYW1vbmQgc3RydWN0IGluc3RhbmNlcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGludHJvZHVjZWQ6XG4xLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3RzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIChzeXNmcyB1c2VzIHN0YW5kYXJkIHN0cmluZyBmb3JtYXR0aW5nKS5cbjIuIFRoZSBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIChlLmcuLCBgZGFtb25fc3lzZnNfa2RhbW9uZGAgdmlhIGBremFsbG9jX29iamAsIGV4cGxpY2l0IGZpZWxkIGluaXRpYWxpemF0aW9uIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbGApLlxuMy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBjYWxjdWxhdGlvbnMgd2l0aGluIERBTU9OLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MDUzMDBlMWM1ZTQwOWIxYzJjMTBmZTQ3Njk0ZTYwNDY5MDlhMmUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTk6MDQ6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uNzBlZTg1YjQxNDY0NiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNjM1LDYgJiM0Mzs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoCiAJCXJldHVybiBOVUxMOwogCWdvYWwtJmd0O21ldHJpYyA9IG1ldHJpYzsKIAlnb2FsLSZndDt0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7CiYjNDM7CWlmIChtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKQomIzQzOwkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7Z29hbC0mZ3Q7bGlzdCk7CiAJcmV0dXJuIGdvYWw7CiB9CkBAIC0xMTIyLDYgJiM0MzsxMTI0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpCiB7CiAJc3dpdGNoIChkc3QtJmd0O21ldHJpYykgewomIzQzOwljYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzoKJiM0MzsJCWRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDoKIAkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKQEAgLTExMzEsNiAmIzQzOzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigKIAkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKIAkJZHN0LSZndDttZW1jZ19pZCA9IHNyYy0mZ3Q7bWVtY2dfaWQ7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOgomIzQzOwkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTExNDMsNyAmIzQzOzExNTEsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKIAlkc3QtJmd0O3RhcmdldF92YWx1ZSA9IHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlOwogCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKQogCQlkc3QtJmd0O2N1cnJlbnRfdmFsdWUgPSBzcmMtJmd0O2N1cnJlbnRfdmFsdWU7Ci0JLyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi8KIAlkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7CiB9CiAKQEAgLTMwMTgsNyAmIzQzOzMwMjUsMTIgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLAogCQlicmVhazsKIAljYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzoKIAkJbm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTsKLQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLSZndDtsYXN0X3BzaV90b3RhbDsKJiM0MzsJCS8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi8KJiM0MzsJCWlmIChnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKQomIzQzOwkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBnb2FsLSZndDt0YXJnZXRfdmFsdWU7CiYjNDM7CQllbHNlCiYjNDM7CQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLQomIzQzOwkJCQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbDsKIAkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsOwogCQlicmVhazsKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTE3ODksNiAmIzQzOzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0czsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7CiAJdW5zaWduZWQgaW50IHJlZnJlc2hfbXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZCkKQEAgLTIyMTUsMTcgJiM0MzsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoCiAJcmV0dXJuIGN0eDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllczsKLQogc3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTsKIAogCWlmICghc3lzZnNfa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcykKIAkJcmV0dXJuIDA7Ci0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKQomIzQzOwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMpKQogCQlyZXR1cm4gMDsKLQlkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyAmIzQzOwomIzQzOwlzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKIAkJbXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLSZndDtyZWZyZXNoX21zKTsKIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmYW1wO2RhbW9uX3N5c2ZzX2xvY2spKQpAQCAtMjI3Myw4ICYjNDM7MjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAl9CiAJa2RhbW9uZC0mZ3Q7ZGFtb25fY3R4ID0gY3R4OwogCi0JZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9Ci0JCWppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLSZndDtyZWZyZXNoX21zKTsKJiM0MzsJa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiYjNDM7CQltc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwogCiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7Zm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAppbmRleCA0YTUzNmQ0MWNkYjJkLi42NTQ0M2FiYTAzMzAwIDEwMDY0NAotLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCkBAIC03NTEsMTkgJiM0Mzs3NTEsMTYgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewotCXU2NCBkc3RfbGFzdF9wc2lfdG90YWwgPSAwOwotCi0JaWYgKGRzdC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKLQkJZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LSZndDtsYXN0X3BzaV90b3RhbDsKIAlkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7CiAKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDttZXRyaWMsIHNyYy0mZ3Q7bWV0cmljKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDt0YXJnZXRfdmFsdWUsIHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKTsKIAlpZiAoc3JjLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7Y3VycmVudF92YWx1ZSwgc3JjLSZndDtjdXJyZW50X3ZhbHVlKTsKLQlpZiAoZHN0X2xhc3RfcHNpX3RvdGFsICZhbXA7JmFtcDsgc3JjLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKQotCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDtsYXN0X3BzaV90b3RhbCwgZHN0X2xhc3RfcHNpX3RvdGFsKTsKIAlzd2l0Y2ggKGRzdC0mZ3Q7bWV0cmljKSB7CiYjNDM7CWNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOgomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDoKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bmlkLCBzcmMtJmd0O25pZCk7CkBAIC03ODcsNiAmIzQzOzc4NCwxMyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkJLmxhc3RfcHNpX3RvdGFsID0gNDU2LAogCX07CiAKJiM0MzsJZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgJmFtcDtkc3QsCiYjNDM7CQkJJmFtcDsoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHsKJiM0MzsJCQkubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLAomIzQzOwkJCS50YXJnZXRfdmFsdWUgPSAyMzQsCiYjNDM7CQkJLmN1cnJlbnRfdmFsdWUgPSAzNDUsCiYjNDM7CQkJLmxhc3RfcHNpX3RvdGFsID0gNTY3LAomIzQzOwkJCX0pOwogCWRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsICZhbXA7ZHN0LAogCQkJJmFtcDsoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpewogCQkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNoYW5nZXMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9kYW1vbi9jb3JlLmNgLgoKSSBzZWUgc29tZSBrZXkgYWx0ZXJhdGlvbnMgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLiBJdCBhcHBlYXJzIHRoYXQgd2hlbiBgbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgLiBUaGF0JiMzOTtzIGEgZmxhZywgbGlrZWx5IGEgc2VudGluZWwgdmFsdWUgZm9yIHVuaW5pdGlhbGl6ZWQgb3IgYSBzcGVjaWFsIGNhc2UuIERpZ2dpbmcgZnVydGhlciBpbnRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigpYCwgdGhlIHNhbWUgYFU2NF9NQVhgIGFzc2lnbm1lbnQgaGFwcGVucyBmb3IgYGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGluIHRoZSBzYW1lIG1ldHJpYyBjYXNlIGFuZCB0aGVuIGZvciB0aGUgYERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQYCBpdCBqdXN0IGNvcGllcyB0aGUgYG5pZGAuIEZ1cnRoZXIgb24sIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgpYCByZW1vdmVzIGEgY29tbWVudCBhYm91dCBrZWVwaW5nIGBsYXN0X3BzaV90b3RhbGAgYXMgaXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBzdHJhdGVneS4gVGhpcyBpbXBsaWVzIGEgY2hhbmdlIGluIHRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyB2YXJpYWJsZSBhbmQgdGhlIHVwZGF0ZSBsb2dpYy4gTGFzdGx5LCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCBub3cgdXRpbGl6ZXMgdGhpcyBgbGFzdF9wc2lfdG90YWxgIHZhbHVlLiBXaGVuIGl0ICppcyogYFU2NF9NQVhgLCBpdCBhc3NpZ25zIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBkaXJlY3RseSBmcm9tIGBnb2FsLSZndDt0YXJnZXRfdmFsdWVgLiBPdGhlcndpc2UsIGl0IGNhbGN1bGF0ZXMgYGN1cnJlbnRfdmFsdWVgIGJ5IHN1YnRyYWN0aW5nIGBsYXN0X3BzaV90b3RhbGAgZnJvbSBgbm93X3BzaV90b3RhbGAsIGFuZCB0aGVuIHVwZGF0ZXMgYGxhc3RfcHNpX3RvdGFsYC4gVGhpcyBzbWVsbHMgbGlrZSBhbiBpc3N1ZSB3YWl0aW5nIHRvIGhhcHBlbiBpZiBub3QgY2FyZWZ1bGx5IGhhbmRsZWQuIFdlIGFyZSBlaXRoZXIgZGVhbGluZyB3aXRoIGFuIG92ZXJmbG93IGlzc3VlLCBhIHdyYXAtYXJvdW5kIGJ1Zywgb3IgYSBsb2dpYyBlcnJvciByZWxhdGVkIHRvIHRoZSBzcGVjaWFsIGluaXRpYWxpemF0aW9uLiBUaGlzIHNlY3Rpb24gaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgZnV6emluZyBzZXNzaW9uIHRvIGV4cGxvcmUgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBgVTY0X01BWGAgdXNhZ2UgYW5kIHRoZSBjYWxjdWxhdGlvbnMuCgpNb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLCBJIHNlZSBhIG5ldyBtZW1iZXIsIGB1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzYCwgYWRkZWQgdG8gYHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kYCwgYW5kIHRoZW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllc2AgaXMgcmVtb3ZlZCBhbmQgbm93IGl0JiMzOTtzIHBlciBpbnN0YW5jZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZmxleGlibGUgb3IgcGVyLWluc3RhbmNlIHJlZnJlc2ggc3RyYXRlZ3kuIEluIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKClgLCB0aGlzIG5ldyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB1c2luZyBgamlmZmllc2AgYW5kIGByZWZyZXNoX21zYC4gQW5kIHRoZW4gbGF0ZXIgaW4gYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKClgIGl0JiMzOTtzIHVzZWQuIFRoaXMgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgaG93IGBkYW1vbl9zeXNmc19rZGFtb25kYCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCBsYXRlci4KCkZpbmFsbHksIHRoZSB1bml0IHRlc3RzIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgIGhhdmUgYmVlbiB1cGRhdGVkLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCBkb2VzbiYjMzk7dCB0ZWxsIG1lICpob3cqIHRoZXkmIzM5O3ZlIGJlZW4gdXBkYXRlZC4gQXJlIHRoZXkgdGVzdGluZyB0aGUgbmV3IGxvZ2ljPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB0ZXN0IGNhc2VzIHRoZW1zZWx2ZXMgdG8gZXZhbHVhdGUgdGhlaXIgdGhvcm91Z2huZXNzIGluIHJlbGF0aW9uIHRvIHRoZXNlIGNoYW5nZXMuCgpCZWZvcmUgSSBqdW1wIHRvIGEgY29uY2x1c2lvbiwgSSBuZWVkIHRvIHJlYWQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFyb3VuZCBsaW5lIDE3ODksIHRvIHNlZSBob3cgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGFsbG9jYXRlZCBhbmQgaG93IHRoZSByZWZyZXNoIGxvZ2ljIGltcGFjdHMgaXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBuZXcgcmVmcmVzaCBsb2dpYyBpcyBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgb3IgaW5jb3JyZWN0IHRpbWluZy4gSSYjMzk7bGwgbG9vayBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgcmVsYXRlZCB0byB0aGlzIG5ldyB2YXJpYWJsZSBpbiB0aGUgaW5zdGFuY2UgYWxsb2NhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgamlmZmllc2AgdXNhZ2UgYXMgd2VsbC4KCkJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgYFU2NF9NQVhgIGFuZCB0aGUgY2FsY3VsYXRpb25zIGludm9sdmluZyBgbGFzdF9wc2lfdG90YWxgLCBhcmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZm9yIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMuY2AgYXJlIGFsc28gd29ydGggY2xvc2VyIGV4YW1pbmF0aW9uLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHN0cnVjdCBhbmQgdGhlIHRpbWluZyBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODU6XHQgKi9cbjE3ODY6XHRcbjE3ODc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4xNzg4Olx0XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuMTc4OTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcbjE3OTA6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX2N0eDtcbjE3OTE6XHRcdHVuc2lnbmVkIGludCByZWZyZXNoX21zO1xuMTc5MjpcdFx0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcbjE3OTM6XHR9O1xuMTc5NDpcdFxuMTc5NTpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxuMTc5NjpcdHtcbjE3OTc6XHRcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCk7XG4xNzk4Olx0fVxuMTc5OTpcdFxuMTgwMDpcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZF9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbjE4MDE6XHR7XG4xODAyOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuMTgwMzpcdFx0aW50IGVycjtcbjE4MDQ6XHRcbjE4MDU6XHRcdGNvbnRleHRzID0gZGFtb25fc3lzZnNfY29udGV4dHNfYWxsb2MoKTtcbjE4MDY6XHRcdGlmICghY29udGV4dHMpXG4xODA3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTgwODpcdFxuMTgwOTpcdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2Y29udGV4dHMtXHUwMDNla29iaixcbjE4MTA6XHRcdFx0XHRcdTAwMjZkYW1vbl9zeXNmc19jb250ZXh0c19rdHlwZSwgXHUwMDI2a2RhbW9uZC1cdTAwM2Vrb2JqLFxuMTgxMTpcdFx0XHRcdFwmIzM0O2NvbnRleHRzXCYjMzQ7KTtcbjE4MTI6XHRcdGlmIChlcnIpIHtcbjE4MTM6XHRcdFx0a29iamVjdF9wdXQoXHUwMDI2Y29udGV4dHMtXHUwMDNla29iaik7XG4xODE0Olx0XHRcdHJldHVybiBlcnI7XG4xODE1Olx0XHR9XG4xODE2Olx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzID0gY29udGV4dHM7XG4xODE3Olx0XG4xODE4Olx0XHRyZXR1cm4gZXJyO1xuMTgxOTpcdH1cbjE4MjA6XHRcbjE4MjE6XHRzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4xODIyOlx0e1xuMTgyMzpcdFx0ZGFtb25fc3lzZnNfY29udGV4dHNfcm1fZGlycyhrZGFtb25kLVx1MDAzZWNvbnRleHRzKTtcbjE4MjQ6XHRcdGtvYmplY3RfcHV0KFx1MDAyNmtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNla29iaik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBjYWxjdWxhdGVzIHF1b3RhIGdvYWxzLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgdGFyZ2V0IHNpemUgb3IgY291bnQgb2YgcGFnZXMgd2UmIzM5O3JlIGFpbWluZyBmb3Igd2l0aGluIGEgbW9uaXRvcmluZyByZWdpb24sIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBxdW90YSBjb25zdHJhaW50cy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgYmFzZWQgb24gc29tZSBmaXhlZCBwZXJjZW50YWdlLCBkeW5hbWljIGNhbGN1bGF0aW9ucywgb3IgYSBjb21iaW5hdGlvbi4gVGhlICYjMzQ7bmV3JiMzNDsgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gY29tcHV0aW5nIHRoZSB0YXJnZXQgYWZ0ZXIgc29tZSBjaGFuZ2UgaW4gbWVtb3J5IHByZXNzdXJlIG9yIHRoZSBEQU1PTiBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBsb29rIGZvciBpbnB1dCB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBwYXJhbWV0ZXJzIGxpa2U6CgoqICAgQ3VycmVudCBxdW90YSBsaW1pdAoqICAgQ3VycmVudCBtb25pdG9yZWQgcmVnaW9uIHNpemUKKiAgIFBvc3NpYmxlIGFkanVzdG1lbnRzIGJhc2VkIG9uIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQvb3IgREFNT04mIzM5O3MgZmVlZGJhY2suCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIHNjZW5hcmlvcywgaWYgaXQgZXhpc3RzLCB0byBlbnN1cmUgaXQgaGFuZGxlcyBib3VuZGFyeSBjb25kaXRpb25zIHdlbGwuIE15IG9iamVjdGl2ZSBpcyB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBxdW90YS1yZWxhdGVkIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIERBTU9OIG1hY2hpbmVyeSwgc3BlY2lmaWNhbGx5IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGxvb3BzLiBJJiMzOTttIGtlZW4gb24gZmluZGluZyB0aGUgY29yZSBsb2dpYyB0byBzZWUgaG93IGl0IGJhbGFuY2VzIGFjY3VyYWN5IG9mIG1vbml0b3Jpbmcgd2l0aCBhbnkgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MjU6XHR9XG4gNjI2Olx0XG4gNjI3Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuIDYyODpcdFx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbiA2Mjk6XHRcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXG4gNjMwOlx0e1xuIDYzMTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4gNjMyOlx0XG4gNjMzOlx0XHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xuIDYzNDpcdFx0aWYgKCFnb2FsKVxuIDYzNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2MzY6XHRcdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuIDYzNzpcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XG4gNjM4Olx0XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiA2Mzk6XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4gNjQwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZnb2FsLVx1MDAzZWxpc3QpO1xuIDY0MTpcdFx0cmV0dXJuIGdvYWw7XG4gNjQyOlx0fVxuIDY0MzpcdFxuIDY0NDpcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbiA2NDU6XHR7XG4gNjQ2Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmctXHUwMDNlbGlzdCwgXHUwMDI2cS1cdTAwM2Vnb2Fscyk7XG4gNjQ3Olx0fVxuIDY0ODpcdFxuIDY0OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2RlbF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDY1MDpcdHtcbiA2NTE6XHRcdGxpc3RfZGVsKFx1MDAyNmctXHUwMDNlbGlzdCk7XG4gNjUyOlx0fVxuIDY1MzpcdFxuIDY1NDpcdHN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwIGludG8gYGRhbW9zX3F1b3RhX2dvYWxgKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIOKAkyBldmVyeSBzaW5nbGUgZmllbGQgd2l0aGluIGl0IGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgKnVzZWQqIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJJiMzOTttIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGRlY2xhcmF0aW9uczsgSSB3YW50IHRoZSByZWFsLXdvcmxkIHVzYWdlIHBhdHRlcm5zLiBBcmUgdGhlc2UgZmllbGRzIHJlYWQ/IE1vZGlmaWVkPyBJbiB3aGF0IGNvbnRleHRzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXM/IEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgZGVmaW5pdGlvbiB3aXRoIGFsbCB0aGUgcGxhY2VzIGl0JiMzOTtzIHJlZmVyZW5jZWQsIHRyYWNpbmcgZXZlcnkgcGF0aC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIHN0cnVjdCwgaXRzIHB1cnBvc2UsIGFuZCBpdHMgaW5mbHVlbmNlIG9uIHRoZSBzeXN0ZW0uIE5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayBob3cgdGhlIHF1b3RhIGdvYWxzIGFyZSBzZXQgYW5kIGFwcGxpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vc19xdW90YV9nb2FsIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYwPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTUtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTk2OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTctXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgQ29yZTogRXhhbWluaW5nIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OJiMzOTtzIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbnRlcmZhY2VzIGFyZSBkZWZpbmVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgc2VjdGlvbiBiZWNhdXNlIEkgcmVjYWxsIGl0IGNvbnRhaW5pbmcgY3JpdGljYWwgZGVjbGFyYXRpb25zIHJlbGF0aW5nIHRvLi4uIHdlbGwsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGEgYml0LiBJcyBpdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciB0aGUgbW9uaXRvcmluZyBhZ2VudHMgdGhlbXNlbHZlcywgb3IgcGVyaGFwcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG1vbml0b3Jpbmcgc2Vzc2lvbj8gSXQgbWlnaHQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlICphY2Nlc3NfcmVjb3JkKiBzdHJ1Y3R1cmUuIEl0IGlzLCBzbyB0aGlzIHdpbGwgZGV0YWlsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhY2Nlc3Mgb2YgYSBtZW1vcnkgcmVnaW9uLiBBbmQgdGhlIERBTU9OIG1vbml0b3Jpbmcgc2Vzc2lvbiB3b3VsZCB1dGlsaXplIHRoZXNlIHJlY29yZHMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYSBtb25pdG9yaW5nIHNlc3Npb24gaXMgaW5pdGlhbGl6ZWQgYW5kIGhvdyB0aGVzZSBhZ2VudCBzdHJ1Y3R1cmVzIGludGVncmF0ZSB3aXRoIHRoZSBvdmVyYWxsIGZyYW1ld29yay4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhY2Nlc3MgZGF0YSBpcyBjYXB0dXJlZCBhbmQgaW50ZXJwcmV0ZWQgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgaG93IEkgd291bGQgaW1wbGVtZW50IGFjY2Vzcy1hd2FyZSBtZW1vcnkgb3B0aW1pemF0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZnJhbWV3b3JrIHByb3ZpZGVzIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB0byBvcHRpbWl6ZSBtZW1vcnkgbWFuYWdlbWVudC4gSSByZWFsbHkgbmVlZCB0byBnZXQgdGhlIGxheW91dCBvZiB0aGlzIHN0dWZmIHNvIEkgY2FuIG1vdmUgZm9yd2FyZCBpbiBteSBjdXJyZW50IHJlc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0ICogSWYgQG1ldHJpYyBpcyBEQU1PU19RVU9UQV9OT0RFX01FTV97VVNFRCxGUkVFfV9CUCwgQG5pZCByZXByZXNlbnRzIHRoZSBub2RlXG4gMTkxOlx0ICogaWQgb2YgdGhlIHRhcmdldCBub2RlIHRvIGFjY291bnQgdGhlIHVzZWQvZnJlZSBtZW1vcnkuXG4gMTkyOlx0ICpcbiAxOTM6XHQgKiBJZiBAbWV0cmljIGlzIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfe1VTRUQsRlJFRX1fQlAsIEBuaWQgYW5kIEBtZW1jZ19pZFxuIDE5NDpcdCAqIHJlcHJlc2VudHMgdGhlIG5vZGUgaWQgYW5kIHRoZSBjZ3JvdXAgdG8gYWNjb3VudCB0aGUgdXNlZCBtZW1vcnkgZm9yLlxuIDE5NTpcdCAqL1xuIDE5NjpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcbiAxOTc6XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xuIDE5ODpcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG4gMTk5Olx0XHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XG4gMjAwOlx0XHQvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqL1xuIDIwMTpcdFx0dW5pb24ge1xuIDIwMjpcdFx0XHRzdHJ1Y3Qge1xuIDIwMzpcdFx0XHRcdGludCBuaWQ7XG4gMjA0Olx0XHRcdFx0dTY0IG1lbWNnX2lkO1xuIDIwNTpcdFx0XHR9O1xuIDIwNjpcdC8qIHByaXZhdGU6ICovXG4gMjA3Olx0XHRcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXG4gMjA4Olx0XHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbiAyMDk6XHRcbiAyMTA6XHRcdH07XG4gMjExOlx0LyogcHJpdmF0ZTogKi9cbiAyMTI6XHRcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gMjEzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gMjE0Olx0fTtcbiAyMTU6XHRcbiAyMTY6XHQvKipcbiAyMTc6XHQgKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgLSBHb2FsLWJhc2VkIHF1b3RhIHR1bmluZyBsb2dpYy5cbiAyMTg6XHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxuIDIxOTpcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMOlx0QWltIHplcm8gcXVvdGEgYXNhcC5cbiAyMjA6XHQgKi9cbiAyMjE6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xuIDIyMjpcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNULFxuIDIyMzpcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcbiAyMjQ6XHR9O1xuIDIyNTpcdFxuIDIyNjpcdC8qKlxuIDIyNzpcdCAqIHN0cnVjdCBkYW1vc19xdW90YSAtIENvbnRyb2xzIHRoZSBhZ2dyZXNzaXZlbmVzcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxuIDIyODpcdCAqIEByZXNldF9pbnRlcnZhbDpcdENoYXJnZSByZXNldCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuXG4gMjI5Olx0ICogQG1zOlx0XHRcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RydWN0dXJlIGBkYW1vc19xdW90YV9nb2FsYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYC4gSSBzZWUgdGhlIGtleSBtZW1iZXJzOiBgbWV0cmljYCwgYHRhcmdldF92YWx1ZWAsIGBjdXJyZW50X3ZhbHVlYCwgYW5kIHRoZW4gdGhpcyB1bmlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdlIGhhdmUgZWl0aGVyIGEgbm9kZSBJRCBhbmQgbWVtY2cgSUQgcGFpciwgb3IgYSBgbGFzdF9wc2lfdG90YWxgIHZhbHVlIGluIHRoZXJlLiBDbGVhcmx5IGRlc2lnbmVkIGZvciBzb21lIGtpbmQgb2YgcmVzb3VyY2UgcXVvdGEgbWFuYWdlbWVudC4gQmVmb3JlIEkgZ28gdG9vIGZhciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHN0cnVjdHVyZS4KCk15IG5leHQgbW92ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBkYW1vc19xdW90YV9nb2FsYCBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCB1c2VkLCBvciBmcmVlZC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYGRhbW9zX25ld19xdW90YV9nb2FsYCAoYXNzdW1pbmcgdGhpcyBpcyBob3cgaXTigJlzIGFsbG9jYXRlZCBvciBjb25zdHJ1Y3RlZCksIGFuZCBhbHNvIGEgZ2VuZXJpYyBzZWFyY2ggZm9yIHRoZSBzdHJ1Y3R1cmUgbmFtZSBpdHNlbGYsIGBkYW1vc19xdW90YV9nb2FsYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIHVuaW9uIGlzIGxpa2VseSBiZWluZyB1c2VkIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfbmV3X3F1b3RhX2dvYWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMzc9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMzk6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDAtXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02MjYtXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy02MjgtXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTY5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjExODQ6XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTE4NS1cdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXHRcdHJldHVybiAtRUlOVkFMO1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTIzOS1cdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQzOlx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVx0XHRcdDEwMDAwIC0gYWN0aXZlX21lbV9icCAmIzQzOyAyKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVx0XHRcdFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ0Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTI0NS1cdFx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjE6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChzeXNmc19nb2FsLVx1MDAzZW1ldHJpYyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYyLVx0XHRcdFx0c3lzZnNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Mzg9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVx0XHQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cdFx0XHRcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE2MS1cdFx0Z290byBmcmVlX291dDtcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxNjI6XHRxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTYzLVx0XHRcdHByb21vdGUgPyBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQIDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcXVvdGEgZ29hbHMgYW5kIGN1cnJlbnQgdmFsdWVzIGFyZSBiZWluZyBzZXQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0LiBUaGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBudWFuY2VzIG9yIG9wdGltaXphdGlvbnMgdG8gdW5jb3ZlciBoZXJlIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgaW4gbXkgY3VycmVudCBwcm9qZWN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBmbHVjdHVhdGlvbnMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzIOKAkyBlbnN1cmluZyB0aGUgcXVvdGEgbWFuYWdlbWVudCBpcyByb2J1c3QgYW5kIGVmZmljaWVudC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIHRoaXMgYXJlYSBhcmUgc29saWQgYmVmb3JlIGJ1aWxkaW5nIG9uIHRvcCBvZiB0aGVtLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMTU6XHR9XG4zMDE2Olx0XG4zMDE3Olx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMzAxODpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuMzAxOTpcdHtcbjMwMjA6XHRcdHU2NCBub3dfcHNpX3RvdGFsO1xuMzAyMTpcdFxuMzAyMjpcdFx0c3dpdGNoIChnb2FsLVx1MDAzZW1ldHJpYykge1xuMzAyMzpcdFx0Y2FzZSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlxuMzAyNDpcdFx0XHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgKi9cbjMwMjU6XHRcdFx0YnJlYWs7XG4zMDI2Olx0XHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbjMwMjc6XHRcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbjMwMjg6XHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuMzAyOTpcdFx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxuMzAzMDpcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMzAzMTpcdFx0XHRlbHNlXG4zMDMyOlx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtXG4zMDMzOlx0XHRcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuMzAzNDpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbjMwMzU6XHRcdFx0YnJlYWs7XG4zMDM2Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4zMDM3Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4zMDM4Olx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbjMwMzk6XHRcdFx0YnJlYWs7XG4zMDQwOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjMwNDE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMzA0MjpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xuMzA0MzpcdFx0XHRicmVhaztcbjMwNDQ6XHRcdGNhc2UgREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUDpcbjMwNDU6XHRcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxuMzA0NjpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbjMwNDc6XHRcdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuMzA0ODpcdFx0XHRicmVhaztcbjMwNDk6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4zMDUwOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxuMzA1MTpcdFx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuMzA1MjpcdFx0XHRicmVhaztcbjMwNTM6XHRcdGRlZmF1bHQ6XG4zMDU0Olx0XHRcdGJyZWFrO1xuMzA1NTpcdFx0fVxuMzA1NjpcdH1cbjMwNTc6XHRcbjMwNTg6XHQvKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXG4zMDU5Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9TIFF1b3RhIEdvYWwgSW5pdGlhbGl6YXRpb24gYW5kIFVwZGF0ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsYCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBJdCBzZWVtZWQgbGlrZSBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIHByZXZpb3VzbHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaXNzdWVzLCBwYXJ0aWN1bGFybHkgaWYgYGttYWxsb2NgIHdhcyBpbnZvbHZlZCwgd2hpY2ggaXQgd2FzLiBJIHdhcyBzZWVpbmcgdGhhdCBpdCBjb3VsZCBlaXRoZXIgYmUgemVybyBvciB1bmluaXRpYWxpemVkLiBUaGF0IG1hZGUgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHN1YnRyYWN0aW9ucyB3aXRoIHplcm8gaW4gcHJpb3IgY2FsY3VsYXRpb25zLgoKQWgsIEkgc2VlLiBXaXRoIHRoZSBwYXRjaCwgYGttYWxsb2Nfb2JqKCpnb2FsKWAgaXMgdXNlZCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBmb2xsb3dlZCBieSBjb25kaXRpb25hbCBpbml0aWFsaXphdGlvbiBvZiBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYYCBvbmx5IGlmIHRoZSBtZXRyaWMgaXMgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIFRoZSBjb21taXQgZnVuY3Rpb24gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbHNvIHNldHMgYGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYYCBmb3IgdGhhdCBzYW1lIG1ldHJpYy4gVGhpcyBtYWtlcyBzZW5zZS4KClRoZW4gSSBjb25zaWRlcmVkIGBzeXNmcy5jYC4gSSBub3RpY2VkIGBkYW1vbl9zeXNmc19rZGFtb25kYCBub3cgaGFzIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaW4gcGxhY2Ugb2YgYSBnbG9iYWwsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlLiBBbmQgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBzYWZlLiBJbiBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGBrZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllc2AgaXMgc2V0IHVzaW5nIGBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcylgLiBUaGF0IGxvb2tzIHNvbGlkIGFuZCBhcyBleHBlY3RlZC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgb3RoZXIgbWV0cmljcyBhcmUgaGFuZGxlZCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIHVuaW9uIGZpZWxkcyBsaWtlIGBuaWRgIGFuZCBgbWVtY2dfaWRgIGFyZSBpbml0aWFsaXplZCBhbG9uZ3NpZGUgYGxhc3RfcHNpX3RvdGFsYCB3aXRoIHJlc3BlY3QgdG8gb3RoZXIgbWV0cmljcy4gSSBzaG91bGQgcmV2aWV3IGFsbCB0aGUgY2FsbHMgdG8gYGRhbW9zX25ld19xdW90YV9nb2FsYCB0byB2ZXJpZnkgdGhlc2UgaW5pdGlhbGl6YXRpb25zIGFyZSBjb25zaXN0ZW50IGFuZCByb2J1c3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsfGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTExMTA9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMi1cbm1tL2RhbW9uL2NvcmUuYzoxMTIzOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExMjQtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExNDYtXG5tbS9kYW1vbi9jb3JlLmM6MTE0NzpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTQ4LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTUzLVx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jOjExNTQ6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE1NS19XG4tLVxubW0vZGFtb24vY29yZS5jLTExNTctLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTE1ODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTExNTktICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjgtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2OTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMTcwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ni1cdFx0aWYgKHNyY19nb2FsKVxubW0vZGFtb24vY29yZS5jOjExNzc6XHRcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTExODMtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE4NDpcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTg3LVx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjExODg6XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMTE4OS1cdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTExOTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjAwLVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjEyMDE6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyMDItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9kYW1vbi9scnVfc29ydC5jOjIzODpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDQtXHRcdFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICYjNDM7IDIpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVx0XHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXHUwMDNlbWV0cmljLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjItXHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MTgtXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTE5Olx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1My17XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU0Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1NS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1My1cdFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2Fscyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTQ6XHRcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1NS1cdFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVx0XHQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cdFx0XHRcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjYtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY3Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZWAuIFJpZ2h0LCB0aGF0JiMzOTtzIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBob3cgREFNT04gaGFuZGxlcyBxdW90YSBzY29yaW5nIHRocm91Z2ggc3lzZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgcXVvdGEgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgREFNT04gY29tcG9uZW50cy4gSSBleHBlY3QgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBxdW90YSBsaW1pdHMgYXJlIGRlZmluZWQsIGhvdyBzY29yaW5nIGxvZ2ljIGlzIGFwcGxpZWQsIGFuZCBob3cgcmVzdWx0cyBhcmUgZXhwb3NlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgaW1wbGVtZW50aW5nIGEgcXVvdGEgc3lzdGVtIHdpdGhpbiBhIG1vbml0b3JpbmcgZnJhbWV3b3JrLiBJJiMzOTttIGdvaW5nIGluIHdpdGggYSBoeXBvdGhlc2lzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgc2NvcmluZyBwYXJhbWV0ZXJzIGFyZSB1cGRhdGVkIGJhc2VkIG9uIHVzZXIgaW5wdXQsIGFuZCBpdCBzZXRzIHRoZSBzdGFnZSBmb3IgdGhlIG1vbml0b3JpbmcgZnJhbWV3b3JrIHRvIHN0YXJ0IG9ic2VydmluZyB0aGUgcmVzb3VyY2UgdXNhZ2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg0NzpcdHN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuMjg0ODpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxuMjg0OTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuMjg1MDpcdHtcbjI4NTE6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuMjg1MjpcdFx0aW50IGksIGVycjtcbjI4NTM6XHRcbjI4NTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c2ZzX2dvYWxzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuMjg1NTpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XG4yODU2Olx0XHRcdFx0c3lzZnNfZ29hbHMtXHUwMDNlZ29hbHNfYXJyW2ldO1xuMjg1NzpcdFxuMjg1ODpcdFx0XHRpZiAoIXN5c2ZzX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKVxuMjg1OTpcdFx0XHRcdGNvbnRpbnVlO1xuMjg2MDpcdFxuMjg2MTpcdFx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cdTAwM2VtZXRyaWMsXG4yODYyOlx0XHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4yODYzOlx0XHRcdGlmICghZ29hbClcbjI4NjQ6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4NjU6XHRcdFx0c3dpdGNoIChzeXNmc19nb2FsLVx1MDAzZW1ldHJpYykge1xuMjg2NjpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XG4yODY3Olx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuMjg2ODpcdFx0XHRcdGJyZWFrO1xuMjg2OTpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4yODcwOlx0XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbjI4NzE6XHRcdFx0XHRnb2FsLVx1MDAzZW5pZCA9IHN5c2ZzX2dvYWwtXHUwMDNlbmlkO1xuMjg3MjpcdFx0XHRcdGJyZWFrO1xuMjg3MzpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjI4NzQ6XHRcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG4yODc1Olx0XHRcdFx0ZXJyID0gZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChcbjI4NzY6XHRcdFx0XHRcdFx0c3lzZnNfZ29hbC1cdTAwM2VwYXRoLCBcdTAwMjZnb2FsLVx1MDAzZW1lbWNnX2lkKTtcbjI4Nzc6XHRcdFx0XHRpZiAoZXJyKSB7XG4yODc4Olx0XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZ29hbCk7XG4yODc5Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjg4MDpcdFx0XHRcdH1cbjI4ODE6XHRcdFx0XHRnb2FsLVx1MDAzZW5pZCA9IHN5c2ZzX2dvYWwtXHUwMDNlbmlkO1xuMjg4MjpcdFx0XHRcdGJyZWFrO1xuMjg4MzpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxuMjg4NDpcdFx0XHRcdGdvYWwtXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cdTAwM2VuaWQ7XG4yODg1Olx0XHRcdFx0YnJlYWs7XG4yODg2Olx0XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Njc1CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9TIFF1b3RhIEdvYWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZWAsIHdlJiMzOTtyZSBjcmVhdGluZyBhIG5ldyBxdW90YSBnb2FsIGJhc2VkIG9uIHRoZSBgc3lzZnNfZ29hbGAgZGF0YS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB1cGRhdGluZyBob3cgd2UgaGFuZGxlIHNwZWNpZmljIHF1b3RhIG1ldHJpY3MsIG5hbWVseSB0aG9zZSByZWxhdGVkIHRvIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGFuZCBub2RlLWVsaWdpYmxlIG1lbW9yeS4gSSBzZWUgdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGlzIGNydWNpYWwsIGNvcHlpbmcgdmFsdWVzLCBhbmQgdGhlbiBjYWxsaW5nIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlIGtleSBjaGFuZ2VzOiAgYGxhc3RfcHNpX3RvdGFsYCBpcyBpbml0aWFsaXplZCB3aXRoIGBVNjRfTUFYYCB3aGVuIGNvbW1pdHRpbmcgb3IgY3JlYXRpbmcgZ29hbHMgZm9yIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCBgbmlkYCBiZWluZyBjb21taXR0ZWQgdG8gZHN0IGZvciBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLiAgVGhlIHVwZGF0ZSBpbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoYXQgaW5pdGlhbCBQU0kgZGF0YS4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB3ZSYjMzk7cmUgY29weWluZyBkYXRhIG91dC4gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSYjMzk7cmUgdXNpbmcgc3RhbmRhcmQgc3lzZnMgcmVhZHMvd3JpdGVzIGZvciBEQU1PTiwgc28gc3RyaW5nIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcgYXJlIGJlaW5nIHVzZWQuIE5vIGRpcmVjdCBzdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHByZXZpb3VzIGxvZ2ljYWwgaXNzdWUgd2l0aCBQU0kgdG90YWwgcXVvdGEgYnkgaW5pdGlhbGl6aW5nIG9yIGNvcHlpbmcgdGhlIGBuaWRgIGZpZWxkLiBObyBLTVNBTiBhbGVydHMgaGVyZS4KClRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBjbGFzc2ljIEtNU0FOICYjMzQ7cmVkIGZsYWdzLiYjMzQ7IEtNU0FOIGZsYWdzIGNvZGUgdGhhdCBzZW5kcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGFsbG9jYXRlcyBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgaGFzIHBvdGVudGlhbCBidWZmZXIgYWNjZXNzIGlzc3VlcyBmcm9tIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpCYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGUgY2hhbmdlczoKCjEuICBUaGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG9zc2libHkgdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICBDb25kaXRpb25hbCBsb2dpYyBzZWVtcyBzYWZlLCBhcyB0aGUgUFNJIHRvdGFsIHF1b3RhIGlzc3VlIGlzIHNwZWNpZmljYWxseSBmaXhlZCBpbiB0aGUgcGF0Y2guCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGlzIHNvdW5kLiBFdmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgYWxsb2NhdGVkIG1lbW9yeSB1c2VzIHplcm8tYWxsb2NhdG9ycy4KNC4gIE5vIGJ1ZmZlciBhY2Nlc3MgaXNzdWVzLiBUaGUgY2hhbmdlcyBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uLCBzbyB0aGUgY2hhbmNlIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGlzIHZlcnkgbG93LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBgZmFsc2VgLgoKSGVyZSYjMzk7cyBteSByYXRpb25hbGUgZm9yIGZvcm11bGF0aW5nIGEgY29tcGxldGUgYEtNU0FOUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9TIHF1b3RhIGdvYWwgaGFuZGxpbmcuIEl0JiMzOTtzIGZvY3VzZWQgb24gdGhlIGludGVybmFsIHF1b3RhIGNhbGN1bGF0aW9uIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIHdpdGhpbiBEQU1PTiBhbmQgaG93IHdlIGhhbmRsZSBzeXNmcyBhdHRyaWJ1dGVzLiBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHRoaW5ncyBsaWtlIGlvY3RsLCBuZXRsaW5rLCBvciBCUEYgb3V0cHV0cykuIE1lbW9yeSBhbGxvY2F0aW9ucyB1c2UgYGt6YWxsb2Nfb2JqYCwgYW5kIG5ldyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBleHBvc2VkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQuIFdlJiMzOTtyZSBnb29kIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGdvYWwgY2FsY3VsYXRpb24gbG9naWMgKHNwZWNpZmljYWxseSBpbml0aWFsaXppbmcgYW5kIGhhbmRsaW5nIHRoZSBsYXN0IFBTSSB0b3RhbCBzZW50aW5lbCBhbmQgY29tbWl0dGluZyB0aGUgbm9kZSBJRCBmb3IgZWxpZ2libGUgbWVtb3J5IGdvYWxzKSBhbmQgbW92ZXMgYSBnbG9iYWwgc3lzZnMgcmVmcmVzaCBqaWZmaWVzIHRpbWVzdGFtcCB0byBwZXIta2RhbW9uZCBzdHJ1Y3QgaW5zdGFuY2VzLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZDpcbjEuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgKHN5c2ZzIHVzZXMgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdHRpbmcpLlxuMi4gVGhlIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKGUuZy4sIGBkYW1vbl9zeXNmc19rZGFtb25kYCB2aWEgYGt6YWxsb2Nfb2JqYCwgZXhwbGljaXQgZmllbGQgaW5pdGlhbGl6YXRpb24gaW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCkuXG4zLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgZ29hbCBjYWxjdWxhdGlvbiBsb2dpYyAoc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlIGxhc3QgUFNJIHRvdGFsIHNlbnRpbmVsIGFuZCBjb21taXR0aW5nIHRoZSBub2RlIElEIGZvciBlbGlnaWJsZSBtZW1vcnkgZ29hbHMpIGFuZCBtb3ZlcyBhIGdsb2JhbCBzeXNmcyByZWZyZXNoIGppZmZpZXMgdGltZXN0YW1wIHRvIHBlci1rZGFtb25kIHN0cnVjdCBpbnN0YW5jZXMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkOlxuMS4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0cyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSAoc3lzZnMgdXNlcyBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0dGluZykuXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cbjMuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgY2FsY3VsYXRpb25zIHdpdGhpbiBEQU1PTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6MTQuMTk0ODI2NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE4OTE2MDMwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJQU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBnb2FsIGNhbGN1bGF0aW9uIGxvZ2ljIChzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGFuZCBoYW5kbGluZyB0aGUgbGFzdCBQU0kgdG90YWwgc2VudGluZWwgYW5kIGNvbW1pdHRpbmcgdGhlIG5vZGUgSUQgZm9yIGVsaWdpYmxlIG1lbW9yeSBnb2FscykgYW5kIG1vdmVzIGEgZ2xvYmFsIHN5c2ZzIHJlZnJlc2ggamlmZmllcyB0aW1lc3RhbXAgdG8gcGVyLWtkYW1vbmQgc3RydWN0IGluc3RhbmNlcy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZDpcXG4xLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3RzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIChzeXNmcyB1c2VzIHN0YW5kYXJkIHN0cmluZyBmb3JtYXR0aW5nKS5cXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cXG4zLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgTU0gY29yZSBhbmQgc3lzZnMgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb21taXQgYmVoYXZpb3Igb2YgUFNJIGFuZCBub2RlLWVsaWdpYmxlLW1lbW9yeSBEQU1PUyBxdW90YSBnb2FscywgYW5kIGNoYW5naW5nIGdsb2JhbCBzeXNmcyB1cGRhdGUgdGltaW5nIHRvIHBlci1rZGFtb25kIHJlZnJlc2ggdHJhY2tpbmcuIFRoZXNlIGFyZSByZWFjaGFibGUgcnVudGltZSBsb2dpYyBwYXRocyB2aWEgc3lzZnMgYW5kIERBTU9OIEFQSXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjE0LjE5NDgzNDE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE5ODE4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MDUzMDBlMWM1ZTQwOWIxYzJjMTBmZTQ3Njk0ZTYwNDY5MDlhMmUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjcwZWU4NWI0MTQ2NDYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPSBtZXRyaWM7XFxuIFxcdGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcXG4rXFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxuK1xcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmdvYWwtXFx1MDAzZWxpc3QpO1xcbiBcXHRyZXR1cm4gZ29hbDtcXG4gfVxcbkBAIC0xMTIyLDYgKzExMjQsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4ge1xcbiBcXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuK1xcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbitcXHRcXHRkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbiBcXHRcXHRkc3QtXFx1MDAzZW5pZCA9IHNyYy1cXHUwMDNlbmlkO1xcbkBAIC0xMTMxLDYgKzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0XFx0ZHN0LVxcdTAwM2VuaWQgPSBzcmMtXFx1MDAzZW5pZDtcXG4gXFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbitcXHRcXHRkc3QtXFx1MDAzZW5pZCA9IHNyYy1cXHUwMDNlbmlkO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMTE0Myw3ICsxMTUxLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuIFxcdGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuIFxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbiBcXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxuLVxcdC8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovXFxuIFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4gfVxcbiBcXG5AQCAtMzAxOCw3ICszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbiBcXHRcXHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbi1cXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO1xcbitcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuK1xcdFxcdGlmIChnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxcbitcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cXG4rXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuIFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXFxuQEAgLTE3ODksNiArMTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xcbiBcXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbkBAIC0yMjE1LDE3ICsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuIFxcdHJldHVybiBjdHg7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xcbiBcXG4gXFx0aWYgKCFzeXNmc19rZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxcbitcXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgK1xcbitcXHRzeXNmc19rZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xcbiBcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbiBcXG4gXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG5AQCAtMjI3Myw4ICsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbiBcXHR9XFxuIFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4gXFxuLVxcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxcbi1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4rXFx0a2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcXG4rXFx0XFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4gXFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCA0YTUzNmQ0MWNkYjJkLi42NTQ0M2FiYTAzMzAwIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC03NTEsMTkgKzc1MSwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuIHtcXG4tXFx0dTY0IGRzdF9sYXN0X3BzaV90b3RhbCA9IDA7XFxuLVxcbi1cXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbi1cXHRcXHRkc3RfbGFzdF9wc2lfdG90YWwgPSBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO1xcbiBcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XFxuIFxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtZXRyaWMsIHNyYy1cXHUwMDNlbWV0cmljKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuIFxcdGlmIChzcmMtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbi1cXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFxcdTAwMjZcXHUwMDI2IHNyYy1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4tXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XFxuIFxcdHN3aXRjaCAoZHN0LVxcdTAwM2VtZXRyaWMpIHtcXG4rXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG5AQCAtNzg3LDYgKzc4NCwxMyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxcbiBcXHR9O1xcbiBcXG4rXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4rXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xcbitcXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbitcXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxcbitcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDM0NSxcXG4rXFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbitcXHRcXHRcXHR9KTtcXG4gXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxuIFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDoxNC41OTc2NzQwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTExNzI5MDQxNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfbmV3X3F1b3RhX2dvYWxcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MDUzMDBlMWM1ZTQwOWIxYzJjMTBmZTQ3Njk0ZTYwNDY5MDlhMmUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTk6MDQ6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjcwZWU4NWI0MTQ2NDYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTYzNSw2ICs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbitcdGlmIChtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuK1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4gXHRyZXR1cm4gZ29hbDtcbiB9XG5AQCAtMTEyMiw2ICsxMTI0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuIFx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG4rXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbitcdFx0ZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExMzEsNiArMTEzNiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbiBcdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xuIFx0XHRicmVhaztcbitcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4rXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTExNDMsNyArMTE1MSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0ZHN0LVx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cdTAwM2V0YXJnZXRfdmFsdWU7XG4gXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIFx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuLVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbiB9XG4gXG5AQCAtMzAxOCw3ICszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiBcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbi1cdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4rXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbitcdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbitcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbitcdFx0ZWxzZVxuK1x0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuK1x0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTE3ODksNiArMTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7XG4gXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcbitcdHVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7XG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZClcbkBAIC0yMjE1LDE3ICsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4gXHRyZXR1cm4gY3R4O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XG4gXG4gXHRpZiAoIXN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcylcbiBcdFx0cmV0dXJuIDA7XG4tXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcykpXG4rXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcykpXG4gXHRcdHJldHVybiAwO1xuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgK1xuK1x0c3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xuIFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4gXG4gXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG5AQCAtMjI3Myw4ICsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuIFx0fVxuIFx0a2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggPSBjdHg7XG4gXG4tXHRkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbitcdGtkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjY1NDQzYWJhMDMzMDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTc1MSwxOSArNzUxLDE2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiB7XG4tXHR1NjQgZHN0X2xhc3RfcHNpX3RvdGFsID0gMDtcbi1cbi1cdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbi1cdFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuIFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xuIFxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZXRyaWMsIHNyYy1cdTAwM2VtZXRyaWMpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2V0YXJnZXRfdmFsdWUsIHNyYy1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuIFx0aWYgKHNyYy1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXHUwMDNlY3VycmVudF92YWx1ZSk7XG4tXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFx1MDAyNlx1MDAyNiBzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbi1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCwgZHN0X2xhc3RfcHNpX3RvdGFsKTtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcbiBcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xuQEAgLTc4Nyw2ICs3ODQsMTMgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcbiBcdH07XG4gXG4rXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4rXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XG4rXHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbitcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuK1x0XHRcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxuK1x0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcbitcdFx0XHR9KTtcbiBcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiBcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6MTQuNTk3Njc1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjQ3Njk4OTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgREFNT04gRnVuY3Rpb25hbGl0eSBcdTAwMjYgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBhIHJlbGF0ZWQgS1VuaXQgdGVzdCBoZWFkZXIsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBMZXQncyBkaWcgaW46XG5cbkZpcnN0bHksIGBtbS9kYW1vbi9jb3JlLmNgIGhhcyBzb21lIHF1b3RhIGFuZCBQU0ktcmVsYXRlZCBtb2RpZmljYXRpb25zOlxuXG4qICAgSSBzZWUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBzZXR0aW5nIGBsYXN0X3BzaV90b3RhbGAgdG8gYFU2NF9NQVhgIHVuZGVyIGEgc3BlY2lmaWMgYG1ldHJpY2AgY29uZGl0aW9uIChgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCkuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG5ldyBlZGdlIGNhc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIFBTSSB2YWx1ZXMuIEFsc28gdGhlcmUgaXMgYSBgbmlkYCBiZWluZyBzZXQgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCB3aGVuIGBtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLlxuKiAgIFRoZSBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24gaGFuZGxlcyBjYXNlcyB3aGVyZSBgbGFzdF9wc2lfdG90YWxgIGlzIHVuaW5pdGlhbGl6ZWQuIE15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZywgYmVjYXVzZSB0aGUgbmV3IGNoZWNrIGZvciBgVTY0X01BWGAgaGVyZSBjb3VsZCBiZSBoaWRpbmcgc29tZSBuZXcgbG9naWMuXG5cblNlY29uZGx5LCBgbW0vZGFtb24vc3lzZnMuY2AgcmV2ZWFsczpcblxuKiAgIFRoZSBjcnVjaWFsIGNoYW5nZSBoZXJlIGlzIGdvaW5nIGZyb20gYSBnbG9iYWwgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIHRvIGEgcGVyLWtkYW1vbmQgYHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHN5c2ZzIGFuZCBob3cgaXQgbWlnaHQgaW50cm9kdWNlIG5ldyB0aW1pbmcvc3luY2hyb25pemF0aW9uIGlzc3Vlcywgd2hpY2ggY291bGQgdGhlbiBiZWNvbWUgZnV6emluZyB0YXJnZXRzLlxuKiAgIEl0IGFsc28gbW9kaWZpZXMgdGhlIGZ1bmN0aW9ucyBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIGFuZCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN5c2ZzIGFyZSBiZWluZyBtb2RpZmllZC5cblxuRmluYWxseSwgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgaGFzIHRlc3QgdXBkYXRlcywgd2hpY2ggaXMgZ29vZC4gSG93ZXZlciwgdGhlc2UgYXJlIG9mdGVuIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgb3IgYXQgbGVhc3QgdGhleSB1c3VhbGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBzY29wZSBvZiBwb3RlbnRpYWwgYnVncy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIERBTU9OIGFuZCBhbGwgaXRzIHJlbGV2YW50IGNvbXBvbmVudHMgKHN5c2ZzLCBQU0ksIGV0Yy4pLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgKG9yIGp1c3QgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBkaXJlY3RseSkgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGxvZ2ljIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgb2xkIG9uZSwgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IHRoZSBjaGFuZ2VkIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c2ZzIGZpbGVzIG1heSBiZWNvbWUgYSBmdXp6aW5nIHRhcmdldC5cblxuQmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSdkIHNheSB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGUgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoZSBwZXIta2RhbW9uZCBzeXNmcyBtb2RpZmljYXRpb24gYW5kIHRoZSBoYW5kbGluZyBvZiB1bmluaXRpYWxpemVkIHZhbHVlcywgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjI3LjA3NDY2OTE2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEwNTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDoyNy4xMjE3ODAwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMTIxNTA1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkaXJlY3RpdmVzLCBzdHJ1Y3R1cmVkIGZvciBzb21lb25lIHdpdGggYSBzb2xpZCBncmFzcCBvZiBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBEQU1PTiBjb2RlYmFzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIG9wdGlvbnMgcmVsYXRpbmcgdG8gREFNT04gaXRzZWxmLCBvYnZpb3VzbHkg4oCTIGBEQU1PTmAsIG5hdHVyYWxseSDigJMgYnV0IGFsc28gdGhlIHN5c2ZzIGludGVncmF0aW9uLCBgREFNT05fU1lTRlNgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBleHBvc2VkIGFuZCBjb250cm9sbGVkLiBUaGVuLCBJIHdpbGwgYWxzbyBjaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIERBTU9OIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0cyB2YXJpb3VzIGNvbXBvbmVudHMgYXJlIGVuYWJsZWQgYW5kIGJ1aWx0LiBJdCdzIHRpbWUgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBvciBpbXByb3ZlbWVudHMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDozMy4yMzM5MzI3MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDozMy4yMzQwMjAzMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODgyNjQ0MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBEQU1PTiBzdWJzeXN0ZW0gc2hvdWxkIHJlc2lkZSwgYW5kIGl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBjb21waWxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxhdGlvbiBmbGFncywgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IERBTU9OIG1vZHVsZXMgbWlnaHQgYmUgbGlua2VkIHRvZ2V0aGVyLiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgZG9jdW1lbnRzIHRoZSBidWlsZCBwcm9jZXNzLiBLbm93aW5nIHRoZSBNYWtlZmlsZSB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSBpbi1kZXB0aCBpbnZlc3RpZ2F0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjM2LjExNjY2NzM1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjM2LjExNjc0NzY0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1MDgwMjkzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlIENvZGUgZm9yIFF1b3RhIEZlYXR1cmVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXMgYXJlIGF0IHBsYXkgaGVyZS4gTG9va2luZyBhdCBgY29yZS5jYCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCwgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gSXQncyBjbGVhciB0aG9zZSBhcmUgY2VudHJhbCB0byB0aGUgcXVvdGEgbWFuYWdlbWVudC4gQW5kIEkgc2VlIHRoZXNlIG1hY3JvczogYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgYW5kIGBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUGAuIE5vdyB0aGUgcHJlc2VuY2Ugb2YgYFBTSWAgaXMgaW50cmlndWluZywgc28gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhhdC4gTGV0J3MgbG9vayBmb3IgaG93IGBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsYCBpcyBkZXBlbmRlbnQgb24gd2hldGhlciBvciBub3QgYENPTkZJR19QU0lgIGlzIGRlZmluZWQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgb24gaG93IG1lbW9yeSBwcmVzc3VyZSBpcyBiZWluZyBjb25zaWRlcmVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDo0NC42MjQ3ODAxMzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzAyOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI3NTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQodW5zaWduZWQgbG9uZyBsYXN0X2lucHV0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3ODctXFxubW0vZGFtb24vY29yZS5jOjI3ODg6c3RhdGljIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTI3ODkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3OTctXFxubW0vZGFtb24vY29yZS5jOjI3OTg6c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzk5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDE3PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDI2LVxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbm1tL2RhbW9uL2NvcmUuYzozMDI3OlxcdFxcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxubW0vZGFtb24vY29yZS5jLTMwMjgtXFx0XFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDo0NC42NzE0OTA1NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzNDc4MTkwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAyNzg1LiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgd2l0aCBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvciBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBoZWFydCBvZiBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtLiBMZXQncyBzZWUgaWYgaXQgZGVhbHMgd2l0aCB0aGUgbW9uaXRvcmluZyBwcm9jZXNzIGl0c2VsZiwgdGhlIGRhdGEgcHJvY2Vzc2luZywgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2Ygc2FtcGxpbmcgb3IgdHJpZ2dlcmluZyBldmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc25pcHBldCdzIGltbWVkaWF0ZSBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IHRpZXMgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDo1NS4wMTkzMTgwMDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzgwOlxcdFxcdFxcdHJldHVybiBtYXgobGFzdF9pbnB1dCAtIGNvbXBlbnNhdGlvbiwgbWluX2lucHV0KTtcXG4yNzgxOlxcdFxcdGlmIChsYXN0X2lucHV0IFxcdTAwM2MgVUxPTkdfTUFYIC0gY29tcGVuc2F0aW9uKVxcbjI3ODI6XFx0XFx0XFx0cmV0dXJuIGxhc3RfaW5wdXQgKyBjb21wZW5zYXRpb247XFxuMjc4MzpcXHRcXHRyZXR1cm4gVUxPTkdfTUFYO1xcbjI3ODQ6XFx0fVxcbjI3ODU6XFx0XFxuMjc4NjpcXHQjaWZkZWYgQ09ORklHX1BTSVxcbjI3ODc6XFx0XFxuMjc4ODpcXHRzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcXG4yNzg5OlxcdHtcXG4yNzkwOlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2cHNpX2Rpc2FibGVkKSlcXG4yNzkxOlxcdFxcdFxcdHJldHVybiAwO1xcbjI3OTI6XFx0XFx0cmV0dXJuIGRpdl91NjQocHNpX3N5c3RlbS50b3RhbFtQU0lfQVZHU11bUFNJX01FTSAqIDJdLFxcbjI3OTM6XFx0XFx0XFx0XFx0TlNFQ19QRVJfVVNFQyk7XFxuMjc5NDpcXHR9XFxuMjc5NTpcXHRcXG4yNzk2OlxcdCNlbHNlXFx0LyogQ09ORklHX1BTSSAqL1xcbjI3OTc6XFx0XFxuMjc5ODpcXHRzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxuMjc5OTpcXHR7XFxuMjgwMDpcXHRcXHRyZXR1cm4gMDtcXG4yODAxOlxcdH1cXG4yODAyOlxcdFxcbjI4MDM6XFx0I2VuZGlmXFx0LyogQ09ORklHX1BTSSAqL1xcbjI4MDQ6XFx0XFxuMjgwNTpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG4yODA2OlxcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcXG4yODA3OlxcdHtcXG4yODA4OlxcdFxcdHJldHVybiBuaWQgXFx1MDAzYyAwIHx8IG5pZCBcXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSk7XFxuMjgwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjU1LjAxOTc1Mzk0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTEzMDM1ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBtZW1vcnkgbWFuYWdlbWVudCBhZ2Fpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgcmVjYWxsIHRoYXQgZmlsZSBiZWluZyBhIGZvY2FsIHBvaW50IGZvciBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gREFNT04g4oCTIHRoYXQncyBEYXRhIEFjY2VzcyBNT05pdG9yLCByaWdodD8gSSdtIGJldHRpbmcgdGhhdCBhbnkgY2hhbmdlcyB0aGVyZSBhcmUgbGlrZWx5IHRvIGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBMZXQncyBzZWUgaWYgdGhhdCBmaWxlIHNoZWRzIHNvbWUgbGlnaHQgb24gdGhlIGlzc3VlLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6NTkuNTMyNzkyMjQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTA6XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKGN0eCwgc3lzX2N0eCk7XFxuMjIxMTpcXHRcXHRpZiAoZXJyKSB7XFxuMjIxMjpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbjIyMTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yMjE0OlxcdFxcdH1cXG4yMjE1OlxcdFxcbjIyMTY6XFx0XFx0cmV0dXJuIGN0eDtcXG4yMjE3OlxcdH1cXG4yMjE4OlxcdFxcbjIyMTk6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxcbjIyMjA6XFx0e1xcbjIyMjE6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xcbjIyMjI6XFx0XFxuMjIyMzpcXHRcXHRpZiAoIXN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpXFxuMjIyNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjI1OlxcdFxcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzeXNmc19rZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcykpXFxuMjIyNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjI3OlxcdFxcdHN5c2ZzX2tkYW1vbmQtXFx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXFxuMjIyODpcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbjIyMjk6XFx0XFxuMjIzMDpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjIyMzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMjpcXHRcXHRpZiAoc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjIzMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjM0OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNTpcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG4yMjM2OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNzpcXHRvdXQ6XFxuMjIzODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjIyMzk6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MDpcXHR9XFxuMjI0MTpcXHRcXG4yMjQyOlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4yMjQzOlxcdHtcXG4yMjQ0OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4yMjQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XFxuMjI0NjpcXHRcXHRpbnQgZXJyO1xcbjIyNDc6XFx0XFxuMjI0ODpcXHRcXHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxcbjIyNDk6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yMjUwOlxcdFxcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cXG4yMjUxOlxcdFxcdGlmIChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlbnIgIT0gMSlcXG4yMjUyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyNTM6XFx0XFxuMjI1NDpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KVxcbjIyNTU6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMjU2OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IE5VTEw7XFxuMjI1NzpcXHRcXG4yMjU4OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI1OTpcXHRcXHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXFxuMjI2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMjYxOlxcdFxcbjIyNjI6XFx0XFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0pO1xcbjIyNjM6XFx0XFx0aWYgKElTX0VSUihjdHgpKSB7XFxuMjI2NDpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjY1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGN0eCk7XFxuMjI2NjpcXHRcXHR9XFxuMjI2NzpcXHRcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxuMjI2ODpcXHRcXHRpZiAoZXJyKSB7XFxuMjI2OTpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjcwOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMjI3MTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIyNzI6XFx0XFx0fVxcbjIyNzM6XFx0XFx0a2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xcbjIyNzQ6XFx0XFxuMjI3NTpcXHRcXHRrZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xcbjIyNzY6XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4yMjc3OlxcdFxcbjIyNzg6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcXG4yMjc5OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbjIyODA6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4yMjgxOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXFxuMjI4MzpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg0OlxcdFxcdHJldHVybiBlcnI7XFxuMjI4NTpcXHR9XFxuMjI4NjpcXHRcXG4yMjg3OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI4ODpcXHR7XFxuMjI4OTpcXHRcXHRpZiAoIWtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6NTkuNTMyOTg1MzY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2NTg0NDY2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBBIEZ1enppbmcgVGFyZ2V0IEVtZXJnZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21lIGtleSBhcmVhcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IERBTU9OIGlzIGluZGVlZCBhY2Nlc3NpYmxlIGFuZCBmdXp6ZWQgdmlhIHN5c2ZzIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLiBUaGF0J3Mgc3RhbmRhcmQgYW5kIGVhc3kgdG8gZ2V0IGF0LCBldmVuIGluIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lhbCBoYXJkd2FyZS4gSW1wb3J0YW50IHRvIGNvbnNpZGVyIC0gdGhlIERBTU9OIHF1b3RhIGdvYWxzICh0aGluZ3MgbGlrZSBQU0kgYW5kIE5PREVfRUxJR0lCTEVfTUVNKSBhcmUgY29uZmlndXJlZCB0aHJvdWdoIHN5c2ZzIGFuZCBhcmUgYWN0aXZlbHkgbWFuYWdlZCBieSBrZGFtb25kIHRocmVhZHMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBjYW4gcG90ZW50aWFsbHkgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaXhlcy4gSSd2ZSBub3RlZCB0aHJlZSBrZXkgYXJlYXM6XG5cbjEuICBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWA6IFRoaXMgcGF0Y2ggcHJldmVudHMgYSBiYWQgZGVsdGEgb24gdGhlIGZpcnN0IHJvdW5kIHdoZXJlIHRoZSBsYXN0XFxfcHNpXFxfdG90YWwgaXMgdW5pbml0aWFsaXplZC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3VlIHRoYXQgY291bGQgYmUgZXhwbG9pdGFibGUgd2l0aCBjYXJlZnVsbHkgY3JhZnRlZCBpbnB1dHMuXG4yLiAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYDogVGhlIGZpeCBlbnN1cmVzIHRoYXQgYGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkYCBmb3IgYERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQYCBhbmQgcmVzZXRzIGBsYXN0X3BzaV90b3RhbGAgZm9yIFBTSSBnb2Fscy4gVGhpcyBraW5kIG9mIG9wZXJhdGlvbiAtIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG5vZGUgSUQgYXNzaWdubWVudCBhbmQgcmVzZXR0aW5nIGEgc3RhdGUgY291bnRlciAtIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nLiBJbmNvcnJlY3Qgbm9kZSBhc3NpZ25tZW50IGFuZCBzdGF0ZSBwcm9ibGVtcyBjYW4gYmUgZWFzaWx5IG1pc3NlZCBidXQgaGF2ZSBhIG1ham9yIGVmZmVjdC5cbjMuICBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gOiBUaGlzIGNoYW5nZSBtYWtlcyBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIHBlci1rZGFtb25kIGluc3RlYWQgb2YgYSBzaGFyZWQgZ2xvYmFsIHZhcmlhYmxlLiBJIHNlZSB0aGUgdmFsdWUgaGVyZSAtIHRoaXMgYXZvaWRzIGludGVyZmVyZW5jZSBiZXR3ZWVuIG11bHRpcGxlIGtkYW1vbmRzLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgcG9zc2libGUgc3RhdGUgY29ycnVwdGlvbiB0aGF0IGEgZnV6emVyIGNvdWxkIGRlZmluaXRlbHkgdHJpZ2dlci5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gbG9naWMgYW5kIGludm9sdmUgcXVvdGEgZ29hbHMgYW5kIHN5c2ZzIGludGVyZmFjZXMsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgcmVsZXZhbnQgZnVuY3Rpb25zOlxuSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBmdW5jdGlvbnMgbW9kaWZpZWQgYW5kIGZ1bmN0aW9ucyB0aGF0IGNhbGwgZGlyZWN0bHkgaW50byB0aGUgbW9kaWZpZWQgY29kZS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIEkgbmVlZCB0byBjaGVjazpcblxuKiAgIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgKElzIHRoaXMgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYz8gSW1wb3J0YW50IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4pXG4qICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYFxuKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBhbmQgaXRzIGNhbGxpbmcgZnVuY3Rpb25zOiBgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXRgLCBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jb21taXRfY3R4YC5cblxuSSdsbCBhbHNvIHNlYXJjaCBmb3Igd2hlcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhcmUgZGVjbGFyZWQvZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2AsIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rOyBJJ2xsIHN0YXJ0IHdyaXRpbmcgYSBmdXp6ZXIgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MDkuMTkxNDM0NjM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MjYtXFxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTYyOC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTY5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODMtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjExODQ6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE4NS1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM4OlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzOS1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0NC1cXHRcXHRcXHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgKyAyKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVxcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVxcdFxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjE6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Mi1cXHRcXHRcXHRcXHRzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzOD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Ni1cXHRcXHQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU3OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTgtXFx0XFx0XFx0XFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjA5LjIzODE0ODQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MTAxNTY4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aG9zZSBEQU1PTi1yZWxhdGVkIGVudHJ5IHBvaW50cyBhbmQgbXkgbWVudGFsIHJvYWRtYXAgZm9yIGRpdmluZyBkZWVwZXI6XG5cbioqSW5pdGlhbCBEQU1PTiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aG9zZSBmdW5jdGlvbnM6IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGFuZCBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gLiBJJ20gY3VyaW91cyB3aGF0IGtpbmQgb2YgaW50ZXJhY3Rpb25zIHRoZXNlIHJlcHJlc2VudC4gSeKAmW0gZ3Vlc3NpbmcgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgaW52b2x2ZXMgc2V0dGluZyBvciBhcHBseWluZyBzb21lIGtpbmQgb2YgcmVzb3VyY2UgbGltaXRzIG9yIHF1b3RhcywgbGlrZWx5IHJlbGF0ZWQgdG8gREFNT04ncyBvcGVyYXRpb24uIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgcHJvYmFibHkgYSBjb250cm9sIGtub2IgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgREFNT04gY29yZSBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIHNvdW5kcyBpbnRyaWd1aW5nLi4uIG1heWJlIHJlbGF0ZWQgdG8gcmVwZWF0aW5nIGEgY2FsbCBvciBhY3Rpb24gYXMgcGFydCBvZiBEQU1PTidzIG1vbml0b3JpbmcgbG9vcCwgb3IgcGVyaGFwcyBmb3Igc29tZSBraW5kIG9mIHVzZXIgaW50ZXJhY3Rpb24gbWVjaGFuaXNtIHZpYSBzeXNmcy5cblxuTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgc2V0IG9mIHN5c2ZzIGVudHJ5IHBvaW50cyB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgYSBsaXN0IG9mIGFsbCB0aGUgc3lzZnMgZmlsZXMgaXQgZXhwb3J0cywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZnVsbCB1c2VyIGludGVyZmFjZSB0aGF0IERBTU9OIHByZXNlbnRzLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIGxldmVsIG9mIGNvbnRyb2wgYW5kIHRoZSBraW5kcyBvZiBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdG8gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGtub2JzIHdlIGhhdmUgYXQgb3VyIGRpc3Bvc2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjEyLjg0ODMwOTAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY1OTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjIxOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDEtXFxubW0vZGFtb24vc3lzZnMuYzoyMjQyOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDMte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjg3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTQtXFx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4IGluIG5leHRcXG5tbS9kYW1vbi9zeXNmcy5jOjIyOTU6XFx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXFxubW0vZGFtb24vc3lzZnMuYy0yMjk2LVxcdCAqL1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzYzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNzAtXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfT046XFxubW0vZGFtb24vc3lzZnMuYzoyMzcxOlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Mi1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjEyLjg5NDk3NjA4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg2MTE5OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgREFNT04ncyBRdW90YSBHb2FscyBhbmQgU3lzZnMgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIERBTU9OJ3MgaW50ZXJuYWxzIHJlbGF0ZWQgdG8gcXVvdGEgZ29hbHMgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHN5c2ZzLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGhlYWRlciBmaWxlOyBpdCdzIGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIG5hdmlnYXRpbmcga2VybmVsIGludGVybmFscyBsaWtlIHRoaXMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIG91ciBhcmVhcyBvZiBpbnRlcmVzdC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MTUuMTgxMDk4NDY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ4MjE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc18uKnF1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTI4PWVudW0gZGFtb3NfYWN0aW9uIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNDMtLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE0NDogKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgbWV0cmljIHRvIGJlIHVzZWQgYXMgdGhlIGdvYWxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQ1LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTU5LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNjA6ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE2MS1cXHREQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE3My0vKipcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTc0OiAqIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIC0gREFNT1Mgc2NoZW1lIHF1b3RhIGF1dG8tdHVuaW5nIGdvYWwuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE3NS0gKiBAbWV0cmljOlxcdFxcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk1LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTY6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTc6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5OC1cXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMTYtLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIxNzogKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgLSBHb2FsLWJhc2VkIHF1b3RhIHR1bmluZyBsb2dpYy5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjE4LSAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q6XFx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMC0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjIxOmVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMi1cXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjI2LS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoyMjc6ICogc3RydWN0IGRhbW9zX3F1b3RhIC0gQ29udHJvbHMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyOC0gKiBAcmVzZXRfaW50ZXJ2YWw6XFx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzMtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3NDpzdHJ1Y3QgZGFtb3NfcXVvdGEge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzUtXFx0dW5zaWduZWQgbG9uZyByZXNldF9pbnRlcnZhbDtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzgtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3OTpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjgwLVxcdHVuc2lnbmVkIGxvbmcgZXN6O1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI4OS0vKiBwcml2YXRlOiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoyOTA6XFx0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yOTEtXFx0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0zMzk9c3RydWN0IGRhbW9zX3dhdGVybWFya3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2My0gKiBkZXRlcm1pbmVkIHRoZSByZWdpb24gYXMgZWxpZ2libGUgdG8gYXBwbHkgdGhlIGFjdGlvbi4gIFRoZSBhY2Nlc3MgcGF0dGVyblxcbmluY2x1ZGUvbGludXgvZGFtb24uaDozNjQ6ICogKFxcdTAwMjZzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pLCBxdW90YXMgKFxcdTAwMjZzdHJ1Y3QgZGFtb3NfcXVvdGEpLCB3YXRlcm1hcmtzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2NS0gKiAoXFx1MDAyNnN0cnVjdCBkYW1vc193YXRlcm1hcmtzKSBhbmQgZmlsdGVycyAoXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIpIHRoYXQgaGFuZGxlZFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTU1ND1zdHJ1Y3QgZGFtb3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU1Ny1cXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo1NTg6XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC01NTktXFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTk1NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fc3pfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTkyLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5OTM6I2RlZmluZSBkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSBcXFxcXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk5NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGdvYWwsIFxcdTAwMjYocXVvdGEpLVxcdTAwM2Vnb2FscywgbGlzdClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk1LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5OTY6I2RlZmluZSBkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZ29hbCwgbmV4dCwgcXVvdGEpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnb2FsLCBuZXh0LCBcXHUwMDI2KHF1b3RhKS1cXHUwMDNlZ29hbHMsIGxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzNz12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDM5OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0MDpcXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0MS1cXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDI6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0Mzp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDQtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNDU9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQ3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0OS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTI9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDUzOmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MTUuMjI2NTg2ODYxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjEzNjI0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFF1b3RhIEdvYWwgTWFuYWdlbWVudCBhbmQgU3lzdGVtIEZpbGUgU3lzdGVtIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIGJyZWFrIGRvd24gdGhlIHF1b3RhIGdvYWwgbWFuYWdlbWVudC4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9zX2FkZF9xdW90YV9nb2FsYCwgYW5kIGBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWxgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gY3JlYXRpbmcsIGNvbW1pdHRpbmcsIGFkZGluZywgYW5kIGRlc3Ryb3lpbmcgcXVvdGEgZ29hbHMuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGludGVyYWN0IGlzIGtleS5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBmaWxlIHN5c3RlbSBjb250ZXh0IHJlbGF0ZXMgdG8gdGhpcyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGFueSBgc3lzX2N0eGAgYXBwbHkgb3IgY29tbWl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIGFueSBmdW5jdGlvbnMgdGhhdCB1c2UgYGRhbW9zX3N5c2ZzYCBvciBgZGFtb25fc3lzZnNgIGluIHRoZWlyIG5hbWUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaG93IHRoZXNlIHF1b3RhIGdvYWxzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGhvdyBtb2RpZmljYXRpb25zIGFyZSBhcHBsaWVkIG9yIGNvbW1pdHRlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjAyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjE3LjU4Nzk1MzIxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MjExNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzQ5OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDpERUZJTkVfTVVURVgoZGFtb25fc3lzZnNfbG9jayk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xNS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE3LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTkte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjIwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBrbWFsbG9jX29iaigqcmFuZ2UpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTIxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MzE9c3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTMzLXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zNi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTQwPXN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNDIte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo0NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTQ1LVxcdHVuc2lnbmVkIGxvbmcgbWluO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NTY9c3RhdGljIHNzaXplX3QgbWF4X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTU4LXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo1OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NjA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTY1PXN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjcte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTcwLVxcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODE6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MzpcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODQtfVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjg2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg3LVxcdFxcdF9fQVRUUl9SV19NT0RFKG1pbiwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTAtXFx0XFx0X19BVFRSX1JXX01PREUobWF4LCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYXR0cnNbXSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MzpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05NS1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk2LX07XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTc6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc191bF9yYW5nZSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTk6Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDA6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMjpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc191bF9yYW5nZV9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAzLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA2OnN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNy1cXHRcXHRjaGFyICptZW1jZ19wYXRoX2J1ZiwgY2hhciAqcGF0aClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTc6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZClcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTM0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNTpcXHRcXHRpZiAoZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShtZW1jZywgcGF0aCwgbWVtY2dfcGF0aCkpIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzYtXFx0XFx0XFx0KmlkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC04LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjk6ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTEwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjExOnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTItXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjE3OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTgtXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MjI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdWxfcmFuZ2Vfa3R5cGU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yNy1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyODpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyB7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzEtXFx0aW50IG5yO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM3OmV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzk6aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0MDpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0MzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00NC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQ2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUyOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTc9dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1ODpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01OS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjYxOmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZXNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2MS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24sXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjAyPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3JlZ2lvbl9ybV9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDM6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDk9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMTg9c3RhdGljIHNzaXplX3QgZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI3PXN0YXRpYyBzc2l6ZV90IG5yX2FjY2Vzc2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzNj1zdGF0aWMgc3NpemVfdCBhZ2Vfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzOC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzOTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNDU9c3RhdGljIHNzaXplX3Qgc3pfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0ODpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NDpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1OC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2My1cXHRcXHRfX0FUVFJfUk9fTU9ERShzdGFydCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ni1cXHRcXHRfX0FUVFJfUk9fTU9ERShlbmQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl9hY2Nlc3NlcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Mi1cXHRcXHRfX0FUVFJfUk9fTU9ERShhZ2UsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3pfZmlsdGVyX3Bhc3NlZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc1LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3NzpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzg6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzk6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZW5kX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX25yX2FjY2Vzc2VzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MjpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zel9maWx0ZXJfcGFzc2VkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgzLVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NC19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODU6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODc6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg4OlxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODktXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkwOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTEtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA1OmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwOC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTk9c3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzI3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzI5OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzMxOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyLCAqbmV4dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQyOnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0My17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NDpcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0NS19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ3OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OC1cXHRcXHRfX0FUVFJfUk9fTU9ERSh0b3RhbF9ieXRlcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTE6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUyLVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1My19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTQ6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTc6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTgtXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU5OlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzYwLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNjY6c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNzg6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqZGFtb25fc3lzZnNfc3RhdHNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODEtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM4Mz1zdGF0aWMgc3NpemVfdCBucl90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4OC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zOTI9c3RhdGljIHNzaXplX3Qgc3pfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTctXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDAxPXN0YXRpYyBzc2l6ZV90IG5yX2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MDMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDA2LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxMD1zdGF0aWMgc3NpemVfdCBzel9hcHBsaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDEyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDEzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDE0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQxNS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTk9c3RhdGljIHNzaXplX3Qgc3pfb3BzX2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDI0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQyOD1zdGF0aWMgc3NpemVfdCBxdF9leGNlZWRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDMwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDMxOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDMyOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQzMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00Mzc9c3RhdGljIHNzaXplX3QgbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDM5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0Mi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NDY9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0OC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDU1PXN0YXRpYyBzc2l6ZV90IG1heF9ucl9zbmFwc2hvdHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDU3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2MC1cXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHMsIGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNm1heF9ucl9zbmFwc2hvdHMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDY4OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3N0YXRzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2OS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MDpcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3MS19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Mi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDczOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfdHJpZWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NC1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl90cmllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Ny1cXHRcXHRfX0FUVFJfUk9fTU9ERShzel90cmllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3OC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgwLVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX2FwcGxpZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X2FwcGxpZWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4My1cXHRcXHRfX0FUVFJfUk9fTU9ERShzel9hcHBsaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg2LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X29wc19maWx0ZXJfcGFzc2VkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODktXFx0XFx0X19BVFRSX1JPX01PREUocXRfZXhjZWVkcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDkxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfc25hcHNob3RzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTItXFx0XFx0X19BVFRSX1JPX01PREUobnJfc25hcHNob3RzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTUtXFx0XFx0X19BVFRSX1JXX01PREUobWF4X25yX3NuYXBzaG90cywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zdGF0c19hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTg6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3RyaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk5OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMjpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfb3BzX2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDM6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDQ6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3NuYXBzaG90c19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbWF4X25yX3NuYXBzaG90c19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNi1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MDctfTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA4OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc3RhdHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zdGF0c19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTExOlxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTEyLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMzpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUxNC19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMwLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDE6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDItXFx0XFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlcjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDY6XFx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXFx0aWYgKGZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01OTM9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5OC1cXHRpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02Mjc9c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Mjkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MzItXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY1Mj1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1Ny1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NjE9c3RhdGljIHNzaXplX3QgbWF0Y2hpbmdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjYzLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjY0OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjY1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjY2LVxcdGJvb2wgbWF0Y2hpbmc7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njc2PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjc4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njc5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjgwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY4NT1zdGF0aWMgc3NpemVfdCBhbGxvd19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02OTAtXFx0Ym9vbCBhbGxvdztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MDA9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwMi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwMzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNS1cXHRpbnQgbGVuO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNzpcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDgtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTAtXFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2VtZW1jZ19wYXRoID8gZmlsdGVyLVxcdTAwM2VtZW1jZ19wYXRoIDogXFxcIlxcXCIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTE6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzEyLVxcdHJldHVybiBsZW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzE1PXN0YXRpYyBzc2l6ZV90IG1lbWNnX3BhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzE3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzIwLVxcdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjYtXFx0c3Ryc2NweShwYXRoLCBidWYsIGNvdW50ICsgMSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcyNzpcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyOC1cXHRcXHRrZnJlZShwYXRoKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MzItXFx0ZmlsdGVyLVxcdTAwM2VtZW1jZ19wYXRoID0gcGF0aDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzMzOlxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczNC1cXHRyZXR1cm4gY291bnQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM3PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Mzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzQ2PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzQ4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQ5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzUxLVxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc1Nj1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1OC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc1OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc2MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NjU9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzY3LXtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MTcuNjM2ODgwNDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3NDE0ODcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gTW9kdWxlIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYG1tL2RhbW9uL3N5c2ZzLmNgIGV4cG9ydHMgYGRhbW9uX3N5c2ZzX2luaXRgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgaW50ZXJjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLlxuXG5JJ20gdGhpbmtpbmcsIGxldCdzIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHN5bWJvbHMuIEZyb20gYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGEgY2x1c3RlciByZWxhdGVkIHRvIHF1b3RhIGdvYWxzIGFuZCBzY2hlbWUgY29tbWl0bWVudDogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9jb21taXRfc2NoZW1lc2AsIGFuZCBgZGFtb25fY29tbWl0X2N0eGAuIFBsdXMgdGhlIGNvcmUgYGRhbW9uX3N0YXJ0YCBmdW5jdGlvbi5cblxuVGhlbiwgZnJvbSBgbW0vZGFtb24vc3lzZnMuY2AsIEknbSBub3RpbmcgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCB3aGljaCBpcyBzdGF0aWMgYnV0IGNhbGxlZCB0aHJvdWdoIGEgc3lzZnMgd3JpdGUsIGFuZCB0aGVuIGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdF9zdG9yZWAsIGFuZCBga2RhbW9uZHNfc3RvcmVgLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJIG5lZWQgdG8gc2VlIHdoYXQncyBiZWluZyBleHBvcnRlZCBvciBtYXJrZWQgbm9uLXN0YXRpYyBpbiB0aG9zZSBmaWxlcy4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIHN5bWJvbHMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnRlcmFjdGlvbiBsaWVzLiBUaGVzZSBhcmUgdGhlIGhvb2tzIHRoYXQgdGhlIHN5c2ZzIGludGVyZmFjZSBpcyB1c2luZyB0byBjb250cm9sIGFuZCBjb25maWd1cmUgREFNT04ncyBjb3JlIG9wZXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIHRyaWdnZXJzIHRoZSBjb3JlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDA0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjIyLjIxMTAzMjA2N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2ODkwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBkYW1vbl98XmludCBkYW1vc198XnN0cnVjdCBkYW1vc18uKmRhbW9zX3xec3RydWN0IGRhbW9uXy4qZGFtb25fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMy1cXG5tbS9kYW1vbi9jb3JlLmM6MTE0OnN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbm1tL2RhbW9uL2NvcmUuYy0xMTUtXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjEtXFxubW0vZGFtb24vY29yZS5jOjE2MjpzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0xNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxOD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjctICovXFxubW0vZGFtb24vY29yZS5jOjMyODpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzctICovXFxubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01NjgtXFxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtNTcwLVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MjYtXFxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTYyOC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NTM9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzc3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3Nzg6c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy03Nzkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgyOT11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMy1cXG5tbS9kYW1vbi9jb3JlLmM6ODM0OnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDE1PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA1MDppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTA1MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE0Nz1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTY4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTY5OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTcwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODE2PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NDQtICovXFxubW0vZGFtb24vY29yZS5jOjE4NDU6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4NDYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NjQtICovXFxubW0vZGFtb24vY29yZS5jOjE4NjU6aW50IGRhbW9uX25yX3J1bm5pbmdfY3R4cyh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0xODY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTY0PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTgwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTgxOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTgyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDYxPWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA3Ni0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA3NzppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0yMDc4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTEyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTEzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjExNC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE2NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjE2NjppbnQgZGFtb3Nfd2FsayhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vc193YWxrX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIxNjcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM5NjI9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTkzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozOTk0OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk5NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNC0gKi9cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjE1OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTYtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApXFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ1LVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6NDY6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDQ6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE0OS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTUwOmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTM9Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwPURFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE4LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTExPXN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xNi1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxNzpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mjg9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzUtdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTQ2PXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE5NjI9c3RhdGljXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NjM6c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICpkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTY0LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjc5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjgwOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ1LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMDE9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNDctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNDg6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0OS1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MjIuMjU5NzI1OTM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTgzNTg0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFF1b3RhIEdvYWwgQW5hbHlzaXMgYW5kIEZ1enppbmcgUmVjb21tZW5kYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYW5kIGBDT05GSUdfUFNJYCBhcmUgZXNzZW50aWFsLiBTcGVjaWZpY2FsbHksIGBDT05GSUdfUFNJYCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5hYmxlcyByZWFsaXN0aWMgUFNJLWJhc2VkIHF1b3RhIGdvYWwgdGVzdGluZyB3aXRoaW4gREFNT04sIHBhcnRpY3VsYXJseSBpbiB0aGUgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxgIGZ1bmN0aW9uLiBXaXRob3V0IFBTSSwgd2UncmUgZXNzZW50aWFsbHkgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGF0J3Mgbm90IGdvaW5nIHRvIGdpdmUgdXMgbWVhbmluZ2Z1bCByZXN1bHRzLiBEQU1PTiBhbmQgREFNT05fU1lTRlMgYXJlIGNsZWFybHkgbmVlZGVkIHRvIGVuYWJsZSB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgc2NhbiwgdGhlIGltcG9ydGFudCBmb2N1cyBzeW1ib2xzIGFyZTogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYC4gRG91YmxlLWNoZWNraW5nLCBJIGNvbmZpcm0gdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIHZpc2libGUgaW4gYm90aCB0aGUgY29yZSBEQU1PTiBjb2RlIChgbW0vZGFtb24vY29yZS5jYCkgYW5kIHRoZSBoZWFkZXIgZmlsZSAoYGluY2x1ZGUvbGludXgvZGFtb24uaGApLiBUaGlzIGlzIGdvb2Q7IHdlIGNhbiByZWFjaCB0aGVtLlxuXG5Ob3csIGZvciB0aGUgdmVyZGljdDogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IChEQU1PTikgY29tYmluZWQgd2l0aCBhIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsLWludGVybmFsIGdvYWwgY29tbWl0IGxvZ2ljLiBUaGlzIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBwb3RlbnRpYWwgYnVncy4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuXG5cbkZpbmFsbHksIGxldCdzIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmF0aW9uYWxlIHRvIGp1c3RpZnkgZnV6emluZzogdGhpcyBpcyBEQU1PUyBxdW90YSBnb2FsIGluaXRpYWwgc3RhdGUgaGFuZGxpbmcgZm9yIHRoZSBQU0kgbWV0cmljLCBub2RlIGVsaWdpYmxlIG1lbW9yeSBnb2FsIG5pZCBjb3B5aW5nIG9uIGNvbW1pdCwgYW5kIHBlci1rZGFtb25kIHJlZnJlc2ggaW50ZXJ2YWwgdHJhY2tpbmcgaW4gdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gVGhhdCBjb3ZlcnMgc29tZSBpbnRlcmVzdGluZyB0aGluZ3MuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBhcyBsaXN0ZWQgYWJvdmUuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIGluY2x1ZGUgYFtcIkRBTU9OXCIsIFwiREFNT05fU1lTRlNcIiwgXCJQU0lcIl1gLiBBbGwgc2V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5MDIsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjA2LjI0MzMxMzA5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzk5NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlBTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBNTSBjb3JlIGFuZCBzeXNmcyBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdCBiZWhhdmlvciBvZiBQU0kgYW5kIG5vZGUtZWxpZ2libGUtbWVtb3J5IERBTU9TIHF1b3RhIGdvYWxzLCBhbmQgY2hhbmdpbmcgZ2xvYmFsIHN5c2ZzIHVwZGF0ZSB0aW1pbmcgdG8gcGVyLWtkYW1vbmQgcmVmcmVzaCB0cmFja2luZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBydW50aW1lIGxvZ2ljIHBhdGhzIHZpYSBzeXNmcyBhbmQgREFNT04gQVBJcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlBTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBNTSBjb3JlIGFuZCBzeXNmcyBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdCBiZWhhdmlvciBvZiBQU0kgYW5kIG5vZGUtZWxpZ2libGUtbWVtb3J5IERBTU9TIHF1b3RhIGdvYWxzLCBhbmQgY2hhbmdpbmcgZ2xvYmFsIHN5c2ZzIHVwZGF0ZSB0aW1pbmcgdG8gcGVyLWtkYW1vbmQgcmVmcmVzaCB0cmFja2luZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBydW50aW1lIGxvZ2ljIHBhdGhzIHZpYSBzeXNmcyBhbmQgREFNT04gQVBJcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDY6MDYuMzI2NzIwMDY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc1OTY5ODE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjA2LjMyNzMwMTE3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk5NzU5MTEwNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgZ29hbCBjYWxjdWxhdGlvbiBsb2dpYyAoc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlIGxhc3QgUFNJIHRvdGFsIHNlbnRpbmVsIGFuZCBjb21taXR0aW5nIHRoZSBub2RlIElEIGZvciBlbGlnaWJsZSBtZW1vcnkgZ29hbHMpIGFuZCBtb3ZlcyBhIGdsb2JhbCBzeXNmcyByZWZyZXNoIGppZmZpZXMgdGltZXN0YW1wIHRvIHBlci1rZGFtb25kIHN0cnVjdCBpbnN0YW5jZXMuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGludHJvZHVjZWQ6XFxuMS4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0cyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSAoc3lzZnMgdXNlcyBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0dGluZykuXFxuMi4gVGhlIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKGUuZy4sIGBkYW1vbl9zeXNmc19rZGFtb25kYCB2aWEgYGt6YWxsb2Nfb2JqYCwgZXhwbGljaXQgZmllbGQgaW5pdGlhbGl6YXRpb24gaW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCkuXFxuMy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBjYWxjdWxhdGlvbnMgd2l0aGluIERBTU9OLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjA1MzAwZTFjNWU0MDliMWMyYzEwZmU0NzY5NGU2MDQ2OTA5YTJlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi43MGVlODViNDE0NjQ2IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC02MzUsNiArNjM1LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuIFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XG4rXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbitcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZnb2FsLVx1MDAzZWxpc3QpO1xuIFx0cmV0dXJuIGdvYWw7XG4gfVxuQEAgLTExMjIsNiArMTEyNCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxuIFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbkBAIC0xMTMxLDYgKzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbiBcdFx0ZHN0LVx1MDAzZW5pZCA9IHNyYy1cdTAwM2VuaWQ7XG4gXHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxuK1x0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0xMTQzLDcgKzExNTEsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBcdGRzdC1cdTAwM2V0YXJnZXRfdmFsdWUgPSBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuIFx0aWYgKGRzdC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbiBcdFx0ZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXHUwMDNlY3VycmVudF92YWx1ZTtcbi1cdC8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovXG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4gfVxuIFxuQEAgLTMwMTgsNyArMzAyNSwxMiBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gXHRcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4tXHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuK1x0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4rXHRcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG4rXHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG4rXHRcdGVsc2VcbitcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cbitcdFx0XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4gXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xNzg5LDYgKzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyArMjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuIFx0cmV0dXJuIGN0eDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcztcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xuIFxuIFx0aWYgKCFzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxuK1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCArMjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4rXHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXG4rXHRcdG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiBcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCA0YTUzNmQ0MWNkYjJkLi42NTQ0M2FiYTAzMzAwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC03NTEsMTkgKzc1MSwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuLVx0dTY0IGRzdF9sYXN0X3BzaV90b3RhbCA9IDA7XG4tXG4tXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdGRzdF9sYXN0X3BzaV90b3RhbCA9IGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWV0cmljLCBzcmMtXHUwMDNlbWV0cmljKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdGlmIChzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xuLVx0aWYgKGRzdF9sYXN0X3BzaV90b3RhbCBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XG4gXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbitcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbmlkLCBzcmMtXHUwMDNlbmlkKTtcbkBAIC03ODcsNiArNzg0LDEzIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHQubGFzdF9wc2lfdG90YWwgPSA0NTYsXG4gXHR9O1xuIFxuK1x0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuK1x0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xuK1x0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4rXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbitcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbitcdFx0XHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXG4rXHRcdFx0fSk7XG4gXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4gXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcbiBcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjA2LjMyNzMwMzg2N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU3MzExODE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY2hhbmdlcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYC5cblxuSSBzZWUgc29tZSBrZXkgYWx0ZXJhdGlvbnMgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLiBJdCBhcHBlYXJzIHRoYXQgd2hlbiBgbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byBgVTY0X01BWGAuIFRoYXQncyBhIGZsYWcsIGxpa2VseSBhIHNlbnRpbmVsIHZhbHVlIGZvciB1bmluaXRpYWxpemVkIG9yIGEgc3BlY2lhbCBjYXNlLiBEaWdnaW5nIGZ1cnRoZXIgaW50byBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oKWAsIHRoZSBzYW1lIGBVNjRfTUFYYCBhc3NpZ25tZW50IGhhcHBlbnMgZm9yIGBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWxgIGluIHRoZSBzYW1lIG1ldHJpYyBjYXNlIGFuZCB0aGVuIGZvciB0aGUgYERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQYCBpdCBqdXN0IGNvcGllcyB0aGUgYG5pZGAuIEZ1cnRoZXIgb24sIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgpYCByZW1vdmVzIGEgY29tbWVudCBhYm91dCBrZWVwaW5nIGBsYXN0X3BzaV90b3RhbGAgYXMgaXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBzdHJhdGVneS4gVGhpcyBpbXBsaWVzIGEgY2hhbmdlIGluIHRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyB2YXJpYWJsZSBhbmQgdGhlIHVwZGF0ZSBsb2dpYy4gTGFzdGx5LCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCBub3cgdXRpbGl6ZXMgdGhpcyBgbGFzdF9wc2lfdG90YWxgIHZhbHVlLiBXaGVuIGl0ICppcyogYFU2NF9NQVhgLCBpdCBhc3NpZ25zIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGRpcmVjdGx5IGZyb20gYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYC4gT3RoZXJ3aXNlLCBpdCBjYWxjdWxhdGVzIGBjdXJyZW50X3ZhbHVlYCBieSBzdWJ0cmFjdGluZyBgbGFzdF9wc2lfdG90YWxgIGZyb20gYG5vd19wc2lfdG90YWxgLCBhbmQgdGhlbiB1cGRhdGVzIGBsYXN0X3BzaV90b3RhbGAuIFRoaXMgc21lbGxzIGxpa2UgYW4gaXNzdWUgd2FpdGluZyB0byBoYXBwZW4gaWYgbm90IGNhcmVmdWxseSBoYW5kbGVkLiBXZSBhcmUgZWl0aGVyIGRlYWxpbmcgd2l0aCBhbiBvdmVyZmxvdyBpc3N1ZSwgYSB3cmFwLWFyb3VuZCBidWcsIG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgc3BlY2lhbCBpbml0aWFsaXphdGlvbi4gVGhpcyBzZWN0aW9uIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGZ1enppbmcgc2Vzc2lvbiB0byBleHBsb3JlIHBvdGVudGlhbCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgYFU2NF9NQVhgIHVzYWdlIGFuZCB0aGUgY2FsY3VsYXRpb25zLlxuXG5Nb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLCBJIHNlZSBhIG5ldyBtZW1iZXIsIGB1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzYCwgYWRkZWQgdG8gYHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kYCwgYW5kIHRoZW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllc2AgaXMgcmVtb3ZlZCBhbmQgbm93IGl0J3MgcGVyIGluc3RhbmNlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmRzIGEgbW9yZSBmbGV4aWJsZSBvciBwZXItaW5zdGFuY2UgcmVmcmVzaCBzdHJhdGVneS4gSW4gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKWAsIHRoaXMgbmV3IHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHVzaW5nIGBqaWZmaWVzYCBhbmQgYHJlZnJlc2hfbXNgLiBBbmQgdGhlbiBsYXRlciBpbiBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4oKWAgaXQncyB1c2VkLiBUaGlzIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgaG93IGBkYW1vbl9zeXNmc19rZGFtb25kYCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCBsYXRlci5cblxuRmluYWxseSwgdGhlIHVuaXQgdGVzdHMgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgaGF2ZSBiZWVuIHVwZGF0ZWQuIFRoYXQncyBnb29kLCBidXQgaXQgZG9lc24ndCB0ZWxsIG1lICpob3cqIHRoZXkndmUgYmVlbiB1cGRhdGVkLiBBcmUgdGhleSB0ZXN0aW5nIHRoZSBuZXcgbG9naWM/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgdGVzdCBjYXNlcyB0aGVtc2VsdmVzIHRvIGV2YWx1YXRlIHRoZWlyIHRob3JvdWdobmVzcyBpbiByZWxhdGlvbiB0byB0aGVzZSBjaGFuZ2VzLlxuXG5CZWZvcmUgSSBqdW1wIHRvIGEgY29uY2x1c2lvbiwgSSBuZWVkIHRvIHJlYWQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFyb3VuZCBsaW5lIDE3ODksIHRvIHNlZSBob3cgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGFsbG9jYXRlZCBhbmQgaG93IHRoZSByZWZyZXNoIGxvZ2ljIGltcGFjdHMgaXQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIG5ldyByZWZyZXNoIGxvZ2ljIGlzIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvcnJlY3QgdGltaW5nLiBJJ2xsIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIHJlbGF0ZWQgdG8gdGhpcyBuZXcgdmFyaWFibGUgaW4gdGhlIGluc3RhbmNlIGFsbG9jYXRpb24uIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgamlmZmllc2AgdXNhZ2UgYXMgd2VsbC5cblxuQmFzZWQgb24gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgY2hhbmdlcyBpbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHVzZSBvZiBgVTY0X01BWGAgYW5kIHRoZSBjYWxjdWxhdGlvbnMgaW52b2x2aW5nIGBsYXN0X3BzaV90b3RhbGAsIGFyZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBmb3IgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBhcmUgYWxzbyB3b3J0aCBjbG9zZXIgZXhhbWluYXRpb24sIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgZGFtb25fc3lzZnNfa2RhbW9uZGAgc3RydWN0IGFuZCB0aGUgdGltaW5nIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjoyNC45MDA0MjU1NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4NTpcXHQgKi9cXG4xNzg2OlxcdFxcbjE3ODc6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQge1xcbjE3ODg6XFx0XFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4xNzg5OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XFxuMTc5MDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7XFxuMTc5MTpcXHRcXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcXG4xNzkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7XFxuMTc5MzpcXHR9O1xcbjE3OTQ6XFx0XFxuMTc5NTpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZClcXG4xNzk2OlxcdHtcXG4xNzk3OlxcdFxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCk7XFxuMTc5ODpcXHR9XFxuMTc5OTpcXHRcXG4xODAwOlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZF9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4xODAxOlxcdHtcXG4xODAyOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XFxuMTgwMzpcXHRcXHRpbnQgZXJyO1xcbjE4MDQ6XFx0XFxuMTgwNTpcXHRcXHRjb250ZXh0cyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FsbG9jKCk7XFxuMTgwNjpcXHRcXHRpZiAoIWNvbnRleHRzKVxcbjE4MDc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTgwODpcXHRcXG4xODA5OlxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZjb250ZXh0cy1cXHUwMDNla29iaixcXG4xODEwOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9zeXNmc19jb250ZXh0c19rdHlwZSwgXFx1MDAyNmtkYW1vbmQtXFx1MDAzZWtvYmosXFxuMTgxMTpcXHRcXHRcXHRcXHRcXFwiY29udGV4dHNcXFwiKTtcXG4xODEyOlxcdFxcdGlmIChlcnIpIHtcXG4xODEzOlxcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZjb250ZXh0cy1cXHUwMDNla29iaik7XFxuMTgxNDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE4MTU6XFx0XFx0fVxcbjE4MTY6XFx0XFx0a2RhbW9uZC1cXHUwMDNlY29udGV4dHMgPSBjb250ZXh0cztcXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0cmV0dXJuIGVycjtcXG4xODE5OlxcdH1cXG4xODIwOlxcdFxcbjE4MjE6XFx0c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbjE4MjI6XFx0e1xcbjE4MjM6XFx0XFx0ZGFtb25fc3lzZnNfY29udGV4dHNfcm1fZGlycyhrZGFtb25kLVxcdTAwM2Vjb250ZXh0cyk7XFxuMTgyNDpcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2a2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWtvYmopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjoyNC45MDA3Mzk5NjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ0ODA4NjA3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9zX25ld19xdW90YV9nb2FsYCoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gY2FsY3VsYXRlcyBxdW90YSBnb2Fscy4gVGhpcyBmdW5jdGlvbidzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgdGFyZ2V0IHNpemUgb3IgY291bnQgb2YgcGFnZXMgd2UncmUgYWltaW5nIGZvciB3aXRoaW4gYSBtb25pdG9yaW5nIHJlZ2lvbiwgZXNwZWNpYWxseSByZWxhdGVkIHRvIHF1b3RhIGNvbnN0cmFpbnRzLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0J3MgYmFzZWQgb24gc29tZSBmaXhlZCBwZXJjZW50YWdlLCBkeW5hbWljIGNhbGN1bGF0aW9ucywgb3IgYSBjb21iaW5hdGlvbi4gVGhlIFwibmV3XCIgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIGNvbXB1dGluZyB0aGUgdGFyZ2V0IGFmdGVyIHNvbWUgY2hhbmdlIGluIG1lbW9yeSBwcmVzc3VyZSBvciB0aGUgREFNT04gcGFyYW1ldGVycy4gSSdsbCBsb29rIGZvciBpbnB1dCB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIHBhcmFtZXRlcnMgbGlrZTpcblxuKiAgIEN1cnJlbnQgcXVvdGEgbGltaXRcbiogICBDdXJyZW50IG1vbml0b3JlZCByZWdpb24gc2l6ZVxuKiAgIFBvc3NpYmxlIGFkanVzdG1lbnRzIGJhc2VkIG9uIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQvb3IgREFNT04ncyBmZWVkYmFjay5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIHNjZW5hcmlvcywgaWYgaXQgZXhpc3RzLCB0byBlbnN1cmUgaXQgaGFuZGxlcyBib3VuZGFyeSBjb25kaXRpb25zIHdlbGwuIE15IG9iamVjdGl2ZSBpcyB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBxdW90YS1yZWxhdGVkIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIERBTU9OIG1hY2hpbmVyeSwgc3BlY2lmaWNhbGx5IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGxvb3BzLiBJJ20ga2VlbiBvbiBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIHRvIHNlZSBob3cgaXQgYmFsYW5jZXMgYWNjdXJhY3kgb2YgbW9uaXRvcmluZyB3aXRoIGFueSBwZXJmb3JtYW5jZSBvdmVyaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDY6MzkuMzgxNjA1OTQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI1OlxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbiA2Mjg6XFx0XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxuIDYyOTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcXG4gNjMwOlxcdHtcXG4gNjMxOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xcbiA2MzQ6XFx0XFx0aWYgKCFnb2FsKVxcbiA2MzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDYzNjpcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPSBtZXRyaWM7XFxuIDYzNzpcXHRcXHRnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XFxuIDYzODpcXHRcXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4gNjM5OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4gNjQwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZnb2FsLVxcdTAwM2VsaXN0KTtcXG4gNjQxOlxcdFxcdHJldHVybiBnb2FsO1xcbiA2NDI6XFx0fVxcbiA2NDM6XFx0XFxuIDY0NDpcXHR2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxuIDY0NTpcXHR7XFxuIDY0NjpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZnLVxcdTAwM2VsaXN0LCBcXHUwMDI2cS1cXHUwMDNlZ29hbHMpO1xcbiA2NDc6XFx0fVxcbiA2NDg6XFx0XFxuIDY0OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNjUwOlxcdHtcXG4gNjUxOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZnLVxcdTAwM2VsaXN0KTtcXG4gNjUyOlxcdH1cXG4gNjUzOlxcdFxcbiA2NTQ6XFx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjozOS4zODE4NTU5MDdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5MTkzMzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXAgaW50byBgZGFtb3NfcXVvdGFfZ29hbGAqKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoaXMgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGFyY2hpdGVjdHVyZSDigJMgZXZlcnkgc2luZ2xlIGZpZWxkIHdpdGhpbiBpdCBhbmQsIGNydWNpYWxseSwgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgZGVjbGFyYXRpb25zOyBJIHdhbnQgdGhlIHJlYWwtd29ybGQgdXNhZ2UgcGF0dGVybnMuIEFyZSB0aGVzZSBmaWVsZHMgcmVhZD8gTW9kaWZpZWQ/IEluIHdoYXQgY29udGV4dHM/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcz8gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGRlZmluaXRpb24gd2l0aCBhbGwgdGhlIHBsYWNlcyBpdCdzIHJlZmVyZW5jZWQsIHRyYWNpbmcgZXZlcnkgcGF0aC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIHN0cnVjdCwgaXRzIHB1cnBvc2UsIGFuZCBpdHMgaW5mbHVlbmNlIG9uIHRoZSBzeXN0ZW0uIE5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayBob3cgdGhlIHF1b3RhIGdvYWxzIGFyZSBzZXQgYW5kIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjQxLjY3Mzc5Mzc1NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3ODk0MTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYwPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5NS0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTk2OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LVxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjo0NC41NTI3NDMyMzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE1NTU0MDA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvcmU6IEV4YW1pbmluZyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5Ni4gSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04ncyBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJmYWNlcyBhcmUgZGVmaW5lZC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgc2VjdGlvbiBiZWNhdXNlIEkgcmVjYWxsIGl0IGNvbnRhaW5pbmcgY3JpdGljYWwgZGVjbGFyYXRpb25zIHJlbGF0aW5nIHRvLi4uIHdlbGwsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGEgYml0LiBJcyBpdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciB0aGUgbW9uaXRvcmluZyBhZ2VudHMgdGhlbXNlbHZlcywgb3IgcGVyaGFwcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG1vbml0b3Jpbmcgc2Vzc2lvbj8gSXQgbWlnaHQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlICphY2Nlc3NfcmVjb3JkKiBzdHJ1Y3R1cmUuIEl0IGlzLCBzbyB0aGlzIHdpbGwgZGV0YWlsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhY2Nlc3Mgb2YgYSBtZW1vcnkgcmVnaW9uLiBBbmQgdGhlIERBTU9OIG1vbml0b3Jpbmcgc2Vzc2lvbiB3b3VsZCB1dGlsaXplIHRoZXNlIHJlY29yZHMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhIG1vbml0b3Jpbmcgc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBhbmQgaG93IHRoZXNlIGFnZW50IHN0cnVjdHVyZXMgaW50ZWdyYXRlIHdpdGggdGhlIG92ZXJhbGwgZnJhbWV3b3JrLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYWNjZXNzIGRhdGEgaXMgY2FwdHVyZWQgYW5kIGludGVycHJldGVkIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBJIHdvdWxkIGltcGxlbWVudCBhY2Nlc3MtYXdhcmUgbWVtb3J5IG9wdGltaXphdGlvbnMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGZyYW1ld29yayBwcm92aWRlcyBkYXRhIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3B0aW1pemUgbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IHRoZSBsYXlvdXQgb2YgdGhpcyBzdHVmZiBzbyBJIGNhbiBtb3ZlIGZvcndhcmQgaW4gbXkgY3VycmVudCByZXNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjQ4LjcwODI4OTIyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHQgKiBJZiBAbWV0cmljIGlzIERBTU9TX1FVT1RBX05PREVfTUVNX3tVU0VELEZSRUV9X0JQLCBAbmlkIHJlcHJlc2VudHMgdGhlIG5vZGVcXG4gMTkxOlxcdCAqIGlkIG9mIHRoZSB0YXJnZXQgbm9kZSB0byBhY2NvdW50IHRoZSB1c2VkL2ZyZWUgbWVtb3J5LlxcbiAxOTI6XFx0ICpcXG4gMTkzOlxcdCAqIElmIEBtZXRyaWMgaXMgREFNT1NfUVVPVEFfTk9ERV9NRU1DR197VVNFRCxGUkVFfV9CUCwgQG5pZCBhbmQgQG1lbWNnX2lkXFxuIDE5NDpcXHQgKiByZXByZXNlbnRzIHRoZSBub2RlIGlkIGFuZCB0aGUgY2dyb3VwIHRvIGFjY291bnQgdGhlIHVzZWQgbWVtb3J5IGZvci5cXG4gMTk1OlxcdCAqL1xcbiAxOTY6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbiAxOTc6XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuIDE5ODpcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG4gMTk5OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcXG4gMjAwOlxcdFxcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXFxuIDIwMTpcXHRcXHR1bmlvbiB7XFxuIDIwMjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyMDM6XFx0XFx0XFx0XFx0aW50IG5pZDtcXG4gMjA0OlxcdFxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gMjA1OlxcdFxcdFxcdH07XFxuIDIwNjpcXHQvKiBwcml2YXRlOiAqL1xcbiAyMDc6XFx0XFx0XFx0LyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi9cXG4gMjA4OlxcdFxcdFxcdHU2NCBsYXN0X3BzaV90b3RhbDtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0XFx0fTtcXG4gMjExOlxcdC8qIHByaXZhdGU6ICovXFxuIDIxMjpcXHRcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiAyMTM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiAyMTQ6XFx0fTtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0LyoqXFxuIDIxNzpcXHQgKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgLSBHb2FsLWJhc2VkIHF1b3RhIHR1bmluZyBsb2dpYy5cXG4gMjE4OlxcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q6XFx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxcbiAyMTk6XFx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUw6XFx0QWltIHplcm8gcXVvdGEgYXNhcC5cXG4gMjIwOlxcdCAqL1xcbiAyMjE6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4gMjIyOlxcdFxcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVCxcXG4gMjIzOlxcdFxcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxuIDIyNDpcXHR9O1xcbiAyMjU6XFx0XFxuIDIyNjpcXHQvKipcXG4gMjI3OlxcdCAqIHN0cnVjdCBkYW1vc19xdW90YSAtIENvbnRyb2xzIHRoZSBhZ2dyZXNzaXZlbmVzcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxcbiAyMjg6XFx0ICogQHJlc2V0X2ludGVydmFsOlxcdENoYXJnZSByZXNldCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuXFxuIDIyOTpcXHQgKiBAbXM6XFx0XFx0XFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjQ4LjcwODM5Mzk5N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA4MzY4Njk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0cnVjdHVyZSBgZGFtb3NfcXVvdGFfZ29hbGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgLiBJIHNlZSB0aGUga2V5IG1lbWJlcnM6IGBtZXRyaWNgLCBgdGFyZ2V0X3ZhbHVlYCwgYGN1cnJlbnRfdmFsdWVgLCBhbmQgdGhlbiB0aGlzIHVuaW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2UgaGF2ZSBlaXRoZXIgYSBub2RlIElEIGFuZCBtZW1jZyBJRCBwYWlyLCBvciBhIGBsYXN0X3BzaV90b3RhbGAgdmFsdWUgaW4gdGhlcmUuIENsZWFybHkgZGVzaWduZWQgZm9yIHNvbWUga2luZCBvZiByZXNvdXJjZSBxdW90YSBtYW5hZ2VtZW50LiBCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZS4gSSBuZWVkIHRvIGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgZGFtb3NfcXVvdGFfZ29hbGAgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgdXNlZCwgb3IgZnJlZWQuIEknbGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYGRhbW9zX25ld19xdW90YV9nb2FsYCAoYXNzdW1pbmcgdGhpcyBpcyBob3cgaXTigJlzIGFsbG9jYXRlZCBvciBjb25zdHJ1Y3RlZCksIGFuZCBhbHNvIGEgZ2VuZXJpYyBzZWFyY2ggZm9yIHRoZSBzdHJ1Y3R1cmUgbmFtZSBpdHNlbGYsIGBkYW1vc19xdW90YV9nb2FsYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIHVuaW9uIGlzIGxpa2VseSBiZWluZyB1c2VkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA3OjA3Ljc5MjA4NDE1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNzY2OTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzNz12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDM5OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0MC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyNi1cXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNjk9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE4My1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTE4NDpcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVxcdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVxcdFxcdFxcdDEwMDAwIC0gYWN0aXZlX21lbV9icCArIDIpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYyLVxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVxcdFxcdCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cXHRcXHRcXHRcXHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTYxLVxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE2MjpcXHRxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE2My1cXHRcXHRcXHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA3OjEwLjA5OTc2MjA4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTQxODEyNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gREFNT04gUXVvdGEgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcXVvdGEgZ29hbHMgYW5kIGN1cnJlbnQgdmFsdWVzIGFyZSBiZWluZyBzZXQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0LiBUaGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBudWFuY2VzIG9yIG9wdGltaXphdGlvbnMgdG8gdW5jb3ZlciBoZXJlIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgaW4gbXkgY3VycmVudCBwcm9qZWN0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGZsdWN0dWF0aW9ucyBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMg4oCTIGVuc3VyaW5nIHRoZSBxdW90YSBtYW5hZ2VtZW50IGlzIHJvYnVzdCBhbmQgZWZmaWNpZW50LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29yZSBtZWNoYW5pY3Mgb2YgdGhpcyBhcmVhIGFyZSBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgb24gdG9wIG9mIHRoZW0uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzUxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDc6MjEuNTE3ODkzNDE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAxNSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAxNTpcXHR9XFxuMzAxNjpcXHRcXG4zMDE3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4zMDE4OlxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuMzAxOTpcXHR7XFxuMzAyMDpcXHRcXHR1NjQgbm93X3BzaV90b3RhbDtcXG4zMDIxOlxcdFxcbjMwMjI6XFx0XFx0c3dpdGNoIChnb2FsLVxcdTAwM2VtZXRyaWMpIHtcXG4zMDIzOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXG4zMDI0OlxcdFxcdFxcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgKi9cXG4zMDI1OlxcdFxcdFxcdGJyZWFrO1xcbjMwMjY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxuMzAyNzpcXHRcXHRcXHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbjMwMjg6XFx0XFx0XFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xcbjMwMjk6XFx0XFx0XFx0aWYgKGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXFxuMzAzMDpcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlO1xcbjMwMzE6XFx0XFx0XFx0ZWxzZVxcbjMwMzI6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbjMwMzM6XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuMzAzNDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxuMzAzNTpcXHRcXHRcXHRicmVhaztcXG4zMDM2OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4zMDM3OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG4zMDM4OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxuMzAzOTpcXHRcXHRcXHRicmVhaztcXG4zMDQwOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbjMwNDE6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuMzA0MjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG4zMDQzOlxcdFxcdFxcdGJyZWFrO1xcbjMwNDQ6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQOlxcbjMwNDU6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XFxuMzA0NjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxuMzA0NzpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuMzA0ODpcXHRcXHRcXHRicmVhaztcXG4zMDQ5OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XFxuMzA1MDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxuMzA1MTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbjMwNTI6XFx0XFx0XFx0YnJlYWs7XFxuMzA1MzpcXHRcXHRkZWZhdWx0OlxcbjMwNTQ6XFx0XFx0XFx0YnJlYWs7XFxuMzA1NTpcXHRcXHR9XFxuMzA1NjpcXHR9XFxuMzA1NzpcXHRcXG4zMDU4OlxcdC8qIFJldHVybiB0aGUgaGlnaGVzdCBzY29yZSBzaW5jZSBpdCBtYWtlcyBzY2hlbWVzIGxlYXN0IGFnZ3Jlc3NpdmUgKi9cXG4zMDU5OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDc6MjEuNTE4MDkwODU2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzU5MTc4NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT1MgUXVvdGEgR29hbCBJbml0aWFsaXphdGlvbiBhbmQgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWxgIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAuIEl0IHNlZW1lZCBsaWtlIGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgcHJldmlvdXNseSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpc3N1ZXMsIHBhcnRpY3VsYXJseSBpZiBga21hbGxvY2Agd2FzIGludm9sdmVkLCB3aGljaCBpdCB3YXMuIEkgd2FzIHNlZWluZyB0aGF0IGl0IGNvdWxkIGVpdGhlciBiZSB6ZXJvIG9yIHVuaW5pdGlhbGl6ZWQuIFRoYXQgbWFkZSBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgc3VidHJhY3Rpb25zIHdpdGggemVybyBpbiBwcmlvciBjYWxjdWxhdGlvbnMuXG5cbkFoLCBJIHNlZS4gV2l0aCB0aGUgcGF0Y2gsIGBrbWFsbG9jX29iaigqZ29hbClgIGlzIHVzZWQgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCwgZm9sbG93ZWQgYnkgY29uZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gb2YgYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYYCBvbmx5IGlmIHRoZSBtZXRyaWMgaXMgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIFRoZSBjb21taXQgZnVuY3Rpb24gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbHNvIHNldHMgYGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVhgIGZvciB0aGF0IHNhbWUgbWV0cmljLiBUaGlzIG1ha2VzIHNlbnNlLlxuXG5UaGVuIEkgY29uc2lkZXJlZCBgc3lzZnMuY2AuIEkgbm90aWNlZCBgZGFtb25fc3lzZnNfa2RhbW9uZGAgbm93IGhhcyBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGluIHBsYWNlIG9mIGEgZ2xvYmFsLCB3aGljaCBpcyBhIGdvb2QgbW92ZS4gQW5kIGBkYW1vbl9zeXNmc19rZGFtb25kYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgc2FmZS4gSW4gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBga2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllc2AgaXMgc2V0IHVzaW5nIGBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpYC4gVGhhdCBsb29rcyBzb2xpZCBhbmQgYXMgZXhwZWN0ZWQuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgb3RoZXIgbWV0cmljcyBhcmUgaGFuZGxlZCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdW5pb24gZmllbGRzIGxpa2UgYG5pZGAgYW5kIGBtZW1jZ19pZGAgYXJlIGluaXRpYWxpemVkIGFsb25nc2lkZSBgbGFzdF9wc2lfdG90YWxgIHdpdGggcmVzcGVjdCB0byBvdGhlciBtZXRyaWNzLiBJIHNob3VsZCByZXZpZXcgYWxsIHRoZSBjYWxscyB0byBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHRvIHZlcmlmeSB0aGVzZSBpbml0aWFsaXphdGlvbnMgYXJlIGNvbnNpc3RlbnQgYW5kIHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNzozMi44NzcyNzMyNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDI4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsfGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyNi1cXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExMTA9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTIyLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTIzOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTI0LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTE0NzpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE0OC1cXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNTMtXFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTU0OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE1NS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1Ny0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTE1ODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTU5LSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTY4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTY5OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTcwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTc2LVxcdFxcdGlmIChzcmNfZ29hbClcXG5tbS9kYW1vbi9jb3JlLmM6MTE3NzpcXHRcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTg0OlxcdFxcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTExODUtXFx0XFx0XFx0XFx0c3JjX2dvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE4Ny1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6MTE4ODpcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTg5LVxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExOTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMDAtXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjEyMDE6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTIwMi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVxcdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVxcdFxcdFxcdDEwMDAwIC0gYWN0aXZlX21lbV9icCArIDIpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYyLVxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg5ND1pbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTE4LVxcdFxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkxOTpcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIFxcdTAwMjZxdW90YSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjAtXFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnF1b3RhKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzUzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU0OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU1LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzOD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1My1cXHRcXHQgKiBXaGVuIG5yX3NyY19nb2FscyBpcyBzbWFsbGVyIHRoYW4gZHN0X2dvYWxzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTQ6XFx0XFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1NS1cXHRcXHQgKiBNYWtlIGl0IGtmcmVlKCktYWJsZS5cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVxcdFxcdCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cXHRcXHRcXHRcXHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjYtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg2NzpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDc6MzIuOTI1NzA2NjhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI5ODcwNTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlYC4gUmlnaHQsIHRoYXQncyBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBob3cgREFNT04gaGFuZGxlcyBxdW90YSBzY29yaW5nIHRocm91Z2ggc3lzZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgcXVvdGEgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgREFNT04gY29tcG9uZW50cy4gSSBleHBlY3QgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBxdW90YSBsaW1pdHMgYXJlIGRlZmluZWQsIGhvdyBzY29yaW5nIGxvZ2ljIGlzIGFwcGxpZWQsIGFuZCBob3cgcmVzdWx0cyBhcmUgZXhwb3NlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgaW1wbGVtZW50aW5nIGEgcXVvdGEgc3lzdGVtIHdpdGhpbiBhIG1vbml0b3JpbmcgZnJhbWV3b3JrLiBJJ20gZ29pbmcgaW4gd2l0aCBhIGh5cG90aGVzaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBzY29yaW5nIHBhcmFtZXRlcnMgYXJlIHVwZGF0ZWQgYmFzZWQgb24gdXNlciBpbnB1dCwgYW5kIGl0IHNldHMgdGhlIHN0YWdlIGZvciB0aGUgbW9uaXRvcmluZyBmcmFtZXdvcmsgdG8gc3RhcnQgb2JzZXJ2aW5nIHRoZSByZXNvdXJjZSB1c2FnZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNzozNi4yMjQ0MTYxMDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQ3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODQ3OlxcdHN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbjI4NDg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpzeXNmc19nb2FscyxcXG4yODQ5OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuMjg1MDpcXHR7XFxuMjg1MTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4yODUyOlxcdFxcdGludCBpLCBlcnI7XFxuMjg1MzpcXHRcXG4yODU0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNmc19nb2Fscy1cXHUwMDNlbnI7IGkrKykge1xcbjI4NTU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKnN5c2ZzX2dvYWwgPVxcbjI4NTY6XFx0XFx0XFx0XFx0c3lzZnNfZ29hbHMtXFx1MDAzZWdvYWxzX2FycltpXTtcXG4yODU3OlxcdFxcbjI4NTg6XFx0XFx0XFx0aWYgKCFzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpXFxuMjg1OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODYwOlxcdFxcbjI4NjE6XFx0XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG4yODYyOlxcdFxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuMjg2MzpcXHRcXHRcXHRpZiAoIWdvYWwpXFxuMjg2NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODY1OlxcdFxcdFxcdHN3aXRjaCAoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljKSB7XFxuMjg2NjpcXHRcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxuMjg2NzpcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG4yODY4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4Njk6XFx0XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbjI4NzA6XFx0XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbjI4NzE6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cXHUwMDNlbmlkO1xcbjI4NzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg3MzpcXHRcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG4yODc0OlxcdFxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxcbjI4NzU6XFx0XFx0XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChcXG4yODc2OlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXBhdGgsIFxcdTAwMjZnb2FsLVxcdTAwM2VtZW1jZ19pZCk7XFxuMjg3NzpcXHRcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjg3ODpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZ29hbCk7XFxuMjg3OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4ODA6XFx0XFx0XFx0XFx0fVxcbjI4ODE6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cXHUwMDNlbmlkO1xcbjI4ODI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg4MzpcXHRcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbjI4ODQ6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cXHUwMDNlbmlkO1xcbjI4ODU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg4NjpcXHRcXHRcXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNzozNi4yMjQ1NzczMDNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg2MTgwNjAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9TIFF1b3RhIEdvYWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmVgLCB3ZSdyZSBjcmVhdGluZyBhIG5ldyBxdW90YSBnb2FsIGJhc2VkIG9uIHRoZSBgc3lzZnNfZ29hbGAgZGF0YS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB1cGRhdGluZyBob3cgd2UgaGFuZGxlIHNwZWNpZmljIHF1b3RhIG1ldHJpY3MsIG5hbWVseSB0aG9zZSByZWxhdGVkIHRvIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGFuZCBub2RlLWVsaWdpYmxlIG1lbW9yeS4gSSBzZWUgdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGlzIGNydWNpYWwsIGNvcHlpbmcgdmFsdWVzLCBhbmQgdGhlbiBjYWxsaW5nIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlIGtleSBjaGFuZ2VzOiAgYGxhc3RfcHNpX3RvdGFsYCBpcyBpbml0aWFsaXplZCB3aXRoIGBVNjRfTUFYYCB3aGVuIGNvbW1pdHRpbmcgb3IgY3JlYXRpbmcgZ29hbHMgZm9yIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCBgbmlkYCBiZWluZyBjb21taXR0ZWQgdG8gZHN0IGZvciBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLiAgVGhlIHVwZGF0ZSBpbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoYXQgaW5pdGlhbCBQU0kgZGF0YS5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIEknbSBsb29raW5nIGZvciB3aGVyZSB3ZSdyZSBjb3B5aW5nIGRhdGEgb3V0LiBJJ20gc2VlaW5nIHRoYXQgd2UncmUgdXNpbmcgc3RhbmRhcmQgc3lzZnMgcmVhZHMvd3JpdGVzIGZvciBEQU1PTiwgc28gc3RyaW5nIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcgYXJlIGJlaW5nIHVzZWQuIE5vIGRpcmVjdCBzdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHByZXZpb3VzIGxvZ2ljYWwgaXNzdWUgd2l0aCBQU0kgdG90YWwgcXVvdGEgYnkgaW5pdGlhbGl6aW5nIG9yIGNvcHlpbmcgdGhlIGBuaWRgIGZpZWxkLiBObyBLTVNBTiBhbGVydHMgaGVyZS5cblxuVG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIEkgbmVlZCB0byBjaGVjayBmb3IgdGhlIGNsYXNzaWMgS01TQU4gXCJyZWQgZmxhZ3MuXCIgS01TQU4gZmxhZ3MgY29kZSB0aGF0IHNlbmRzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYywgYWxsb2NhdGVzIGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBoYXMgcG90ZW50aWFsIGJ1ZmZlciBhY2Nlc3MgaXNzdWVzIGZyb20gdW5pbml0aWFsaXplZCBieXRlcy5cblxuQmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhlIGNoYW5nZXM6XG5cbjEuICBUaGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG9zc2libHkgdW5pbml0aWFsaXplZCBmaWVsZHMuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgc2VlbXMgc2FmZSwgYXMgdGhlIFBTSSB0b3RhbCBxdW90YSBpc3N1ZSBpcyBzcGVjaWZpY2FsbHkgZml4ZWQgaW4gdGhlIHBhdGNoLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgc291bmQuIEV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZXMgemVyby1hbGxvY2F0b3JzLlxuNC4gIE5vIGJ1ZmZlciBhY2Nlc3MgaXNzdWVzLiBUaGUgY2hhbmdlcyBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uLCBzbyB0aGUgY2hhbmNlIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGlzIHZlcnkgbG93LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAuXG5cbkhlcmUncyBteSByYXRpb25hbGUgZm9yIGZvcm11bGF0aW5nIGEgY29tcGxldGUgYEtNU0FOUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9TIHF1b3RhIGdvYWwgaGFuZGxpbmcuIEl0J3MgZm9jdXNlZCBvbiB0aGUgaW50ZXJuYWwgcXVvdGEgY2FsY3VsYXRpb24gYW5kIHNjaGVkdWxpbmcgbG9naWMgd2l0aGluIERBTU9OIGFuZCBob3cgd2UgaGFuZGxlIHN5c2ZzIGF0dHJpYnV0ZXMuIE5vIGtlcm5lbC10by11c2VyIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCAodGhpbmdzIGxpa2UgaW9jdGwsIG5ldGxpbmssIG9yIEJQRiBvdXRwdXRzKS4gTWVtb3J5IGFsbG9jYXRpb25zIHVzZSBga3phbGxvY19vYmpgLCBhbmQgbmV3IGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudC4gV2UncmUgZ29vZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njc1LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA3OjQ2LjA4NjM4Nzk0M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGdvYWwgY2FsY3VsYXRpb24gbG9naWMgKHNwZWNpZmljYWxseSBpbml0aWFsaXppbmcgYW5kIGhhbmRsaW5nIHRoZSBsYXN0IFBTSSB0b3RhbCBzZW50aW5lbCBhbmQgY29tbWl0dGluZyB0aGUgbm9kZSBJRCBmb3IgZWxpZ2libGUgbWVtb3J5IGdvYWxzKSBhbmQgbW92ZXMgYSBnbG9iYWwgc3lzZnMgcmVmcmVzaCBqaWZmaWVzIHRpbWVzdGFtcCB0byBwZXIta2RhbW9uZCBzdHJ1Y3QgaW5zdGFuY2VzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkOlxcbjEuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgKHN5c2ZzIHVzZXMgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdHRpbmcpLlxcbjIuIFRoZSBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIChlLmcuLCBgZGFtb25fc3lzZnNfa2RhbW9uZGAgdmlhIGBremFsbG9jX29iamAsIGV4cGxpY2l0IGZpZWxkIGluaXRpYWxpemF0aW9uIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbGApLlxcbjMuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgY2FsY3VsYXRpb25zIHdpdGhpbiBEQU1PTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBnb2FsIGNhbGN1bGF0aW9uIGxvZ2ljIChzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGFuZCBoYW5kbGluZyB0aGUgbGFzdCBQU0kgdG90YWwgc2VudGluZWwgYW5kIGNvbW1pdHRpbmcgdGhlIG5vZGUgSUQgZm9yIGVsaWdpYmxlIG1lbW9yeSBnb2FscykgYW5kIG1vdmVzIGEgZ2xvYmFsIHN5c2ZzIHJlZnJlc2ggamlmZmllcyB0aW1lc3RhbXAgdG8gcGVyLWtkYW1vbmQgc3RydWN0IGluc3RhbmNlcy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZDpcXG4xLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3RzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIChzeXNmcyB1c2VzIHN0YW5kYXJkIHN0cmluZyBmb3JtYXR0aW5nKS5cXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cXG4zLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 19:02:30 +0000 UTC FinishedAt: 2026-08-28 19:07:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "PSI" ], "series_id": "03fa3d4f-39a6-473c-a659-d81737c27d7a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_new_quota_goal", "damos_commit_quota_goals", "damon_commit_ctx", "damon_start", "damon_sysfs_add_schemes", "damos_sysfs_set_quota_scores" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgZ29hbCBjYWxjdWxhdGlvbiBsb2dpYyAoc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlIGxhc3QgUFNJIHRvdGFsIHNlbnRpbmVsIGFuZCBjb21taXR0aW5nIHRoZSBub2RlIElEIGZvciBlbGlnaWJsZSBtZW1vcnkgZ29hbHMpIGFuZCBtb3ZlcyBhIGdsb2JhbCBzeXNmcyByZWZyZXNoIGppZmZpZXMgdGltZXN0YW1wIHRvIHBlci1rZGFtb25kIHN0cnVjdCBpbnN0YW5jZXMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkOlxuMS4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0cyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSAoc3lzZnMgdXNlcyBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0dGluZykuXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cbjMuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgY2FsY3VsYXRpb25zIHdpdGhpbiBEQU1PTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjA1MzAwZTFjNWU0MDliMWMyYzEwZmU0NzY5NGU2MDQ2OTA5YTJlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uNzBlZTg1YjQxNDY0NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNjM1LDYgJiM0Mzs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbiYjNDM7XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiYjNDM7XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Z29hbC1cdTAwM2VsaXN0KTtcbiBcdHJldHVybiBnb2FsO1xuIH1cbkBAIC0xMTIyLDYgJiM0MzsxMTI0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuIFx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG4mIzQzO1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4mIzQzO1x0XHRkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExMzEsNiAmIzQzOzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbiBcdFx0ZHN0LVx1MDAzZW5pZCA9IHNyYy1cdTAwM2VuaWQ7XG4gXHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcbiYjNDM7XHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0xMTQzLDcgJiM0MzsxMTUxLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4tXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xuIFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xuIH1cbiBcbkBAIC0zMDE4LDcgJiM0MzszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiBcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbi1cdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4mIzQzO1x0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4mIzQzO1x0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxuJiM0MztcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtXG4mIzQzO1x0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTE3ODksNiAmIzQzOzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxuQEAgLTIyMTUsMTcgJiM0MzsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4gXHRyZXR1cm4gY3R4O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XG4gXG4gXHRpZiAoIXN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcylcbiBcdFx0cmV0dXJuIDA7XG4tXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcykpXG4mIzQzO1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7XG4mIzQzO1x0c3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MztcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCAmIzQzOzIyNzIsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4gXHR9XG4gXHRrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcbiBcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxuLVx0XHRqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiYjNDM7XHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuJiM0MztcdFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjY1NDQzYWJhMDMzMDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTc1MSwxOSAmIzQzOzc1MSwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuLVx0dTY0IGRzdF9sYXN0X3BzaV90b3RhbCA9IDA7XG4tXG4tXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdGRzdF9sYXN0X3BzaV90b3RhbCA9IGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWV0cmljLCBzcmMtXHUwMDNlbWV0cmljKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdGlmIChzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xuLVx0aWYgKGRzdF9sYXN0X3BzaV90b3RhbCBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XG4gXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbiYjNDM7XHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbmlkLCBzcmMtXHUwMDNlbmlkKTtcbkBAIC03ODcsNiAmIzQzOzc4NCwxMyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxuIFx0fTtcbiBcbiYjNDM7XHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4mIzQzO1x0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xuJiM0MztcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuJiM0MztcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuJiM0MztcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbiYjNDM7XHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxuJiM0MztcdFx0XHR9KTtcbiBcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiBcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjA1MzAwZTFjNWU0MDliMWMyYzEwZmU0NzY5NGU2MDQ2OTA5YTJlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjcwZWU4NWI0MTQ2NDYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTYzNSw2ICYjNDM7NjM1LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKAogCQlyZXR1cm4gTlVMTDsKIAlnb2FsLSZndDttZXRyaWMgPSBtZXRyaWM7CiAJZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlOwomIzQzOwlpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKJiM0MzsJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gVTY0X01BWDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2dvYWwtJmd0O2xpc3QpOwogCXJldHVybiBnb2FsOwogfQpAQCAtMTEyMiw2ICYjNDM7MTEyNCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewogCXN3aXRjaCAoZHN0LSZndDttZXRyaWMpIHsKJiM0MzsJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiYjNDM7CQlkc3QtJmd0O2xhc3RfcHNpX3RvdGFsID0gVTY0X01BWDsKJiM0MzsJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDoKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6CiAJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CkBAIC0xMTMxLDYgJiM0MzsxMTM2LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oCiAJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CiAJCWRzdC0mZ3Q7bWVtY2dfaWQgPSBzcmMtJmd0O21lbWNnX2lkOwogCQlicmVhazsKJiM0MzsJY2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDoKJiM0MzsJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMTQzLDcgJiM0MzsxMTUxLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiAJZHN0LSZndDt0YXJnZXRfdmFsdWUgPSBzcmMtJmd0O3RhcmdldF92YWx1ZTsKIAlpZiAoZHN0LSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJZHN0LSZndDtjdXJyZW50X3ZhbHVlID0gc3JjLSZndDtjdXJyZW50X3ZhbHVlOwotCS8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovCiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpOwogfQogCkBAIC0zMDE4LDcgJiM0MzszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiAJCW5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7Ci0JCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiYjNDM7CQkvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovCiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWCkKJiM0MzsJCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlOwomIzQzOwkJZWxzZQomIzQzOwkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0KJiM0MzsJCQkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiAJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDsKIAkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmMKaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jCkBAIC0xNzg5LDYgJiM0MzsxNzg5LDcgQEAgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgewogCXN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7CiAJc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4OwogCXVuc2lnbmVkIGludCByZWZyZXNoX21zOwomIzQzOwl1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzOwogfTsKIAogc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpCkBAIC0yMjE1LDE3ICYjNDM7MjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KAogCXJldHVybiBjdHg7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7Ci0KIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7CiAKIAlpZiAoIXN5c2ZzX2tkYW1vbmQtJmd0O3JlZnJlc2hfbXMpCiAJCXJldHVybiAwOwotCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzKSkKJiM0MzsJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzKSkKIAkJcmV0dXJuIDA7Ci0JZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKJiM0MzsJc3lzZnNfa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiAJCW1zZWNzX3RvX2ppZmZpZXMoc3lzZnNfa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcyk7CiAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDtkYW1vbl9zeXNmc19sb2NrKSkKQEAgLTIyNzMsOCAmIzQzOzIyNzIsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpCiAJfQogCWtkYW1vbmQtJmd0O2RhbW9uX2N0eCA9IGN0eDsKIAotCWRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPQotCQlqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcyk7CiYjNDM7CWtkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzOwomIzQzOwkJbXNlY3NfdG9famlmZmllcyhrZGFtb25kLSZndDtyZWZyZXNoX21zKTsKIAogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2ZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47CiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGF0YSA9IGtkYW1vbmQ7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU0NDNhYmEwMzMwMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtNzUxLDE5ICYjNDM7NzUxLDE2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCwKIAkJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwKIAkJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYykKIHsKLQl1NjQgZHN0X2xhc3RfcHNpX3RvdGFsID0gMDsKLQotCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpCi0JCWRzdF9sYXN0X3BzaV90b3RhbCA9IGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWw7CiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpOwogCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bWV0cmljLCBzcmMtJmd0O21ldHJpYyk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7dGFyZ2V0X3ZhbHVlLCBzcmMtJmd0O3RhcmdldF92YWx1ZSk7CiAJaWYgKHNyYy0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpCiAJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2N1cnJlbnRfdmFsdWUsIHNyYy0mZ3Q7Y3VycmVudF92YWx1ZSk7Ci0JaWYgKGRzdF9sYXN0X3BzaV90b3RhbCAmYW1wOyZhbXA7IHNyYy0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKLQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7CiAJc3dpdGNoIChkc3QtJmd0O21ldHJpYykgewomIzQzOwljYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzoKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2xhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDoKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6CiAJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O25pZCwgc3JjLSZndDtuaWQpOwpAQCAtNzg3LDYgJiM0Mzs3ODQsMTMgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCS5sYXN0X3BzaV90b3RhbCA9IDQ1NiwKIAl9OwogCiYjNDM7CWRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsICZhbXA7ZHN0LAomIzQzOwkJCSZhbXA7KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7CiYjNDM7CQkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUywKJiM0MzsJCQkudGFyZ2V0X3ZhbHVlID0gMjM0LAomIzQzOwkJCS5jdXJyZW50X3ZhbHVlID0gMzQ1LAomIzQzOwkJCS5sYXN0X3BzaV90b3RhbCA9IDU2NywKJiM0MzsJCQl9KTsKIAlkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCAmYW1wO2RzdCwKIAkJCSZhbXA7KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXsKIAkJCS5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDUzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBEQU1PTiBGdW5jdGlvbmFsaXR5ICZhbXA7IEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBhIHJlbGF0ZWQgS1VuaXQgdGVzdCBoZWFkZXIsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBMZXQmIzM5O3MgZGlnIGluOgoKRmlyc3RseSwgYG1tL2RhbW9uL2NvcmUuY2AgaGFzIHNvbWUgcXVvdGEgYW5kIFBTSS1yZWxhdGVkIG1vZGlmaWNhdGlvbnM6CgoqICAgSSBzZWUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBzZXR0aW5nIGBsYXN0X3BzaV90b3RhbGAgdG8gYFU2NF9NQVhgIHVuZGVyIGEgc3BlY2lmaWMgYG1ldHJpY2AgY29uZGl0aW9uIChgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCkuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG5ldyBlZGdlIGNhc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIFBTSSB2YWx1ZXMuIEFsc28gdGhlcmUgaXMgYSBgbmlkYCBiZWluZyBzZXQgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCB3aGVuIGBtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLgoqICAgVGhlIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBmdW5jdGlvbiBoYW5kbGVzIGNhc2VzIHdoZXJlIGBsYXN0X3BzaV90b3RhbGAgaXMgdW5pbml0aWFsaXplZC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLCBiZWNhdXNlIHRoZSBuZXcgY2hlY2sgZm9yIGBVNjRfTUFYYCBoZXJlIGNvdWxkIGJlIGhpZGluZyBzb21lIG5ldyBsb2dpYy4KClNlY29uZGx5LCBgbW0vZGFtb24vc3lzZnMuY2AgcmV2ZWFsczoKCiogICBUaGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyBnb2luZyBmcm9tIGEgZ2xvYmFsIGBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzYCB0byBhIHBlci1rZGFtb25kIGBzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIGludGVyYWN0aW9uIHdpdGggc3lzZnMgYW5kIGhvdyBpdCBtaWdodCBpbnRyb2R1Y2UgbmV3IHRpbWluZy9zeW5jaHJvbml6YXRpb24gaXNzdWVzLCB3aGljaCBjb3VsZCB0aGVuIGJlY29tZSBmdXp6aW5nIHRhcmdldHMuCiogICBJdCBhbHNvIG1vZGlmaWVzIHRoZSBmdW5jdGlvbnMgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYCBhbmQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzeXNmcyBhcmUgYmVpbmcgbW9kaWZpZWQuCgpGaW5hbGx5LCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBoYXMgdGVzdCB1cGRhdGVzLCB3aGljaCBpcyBnb29kLiBIb3dldmVyLCB0aGVzZSBhcmUgb2Z0ZW4ganVzdCB0aGUgdGlwIG9mIHRoZSBpY2ViZXJnLCBvciBhdCBsZWFzdCB0aGV5IHVzdWFsbHkgZG9uJiMzOTt0IHJlcHJlc2VudCB0aGUgZnVsbCBzY29wZSBvZiBwb3RlbnRpYWwgYnVncy4KCk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBEQU1PTiBhbmQgYWxsIGl0cyByZWxldmFudCBjb21wb25lbnRzIChzeXNmcywgUFNJLCBldGMuKS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IganVzdCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGRpcmVjdGx5KSB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBuZXcgbG9naWMgdW5kZXIgdGhlIGhvb2QsIGFuZCBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBvbGQgb25lLCBiZWNhdXNlIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBjaGFuZ2VkIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c2ZzIGZpbGVzIG1heSBiZWNvbWUgYSBmdXp6aW5nIHRhcmdldC4KCkJhc2VkIG9uIHRoaXMgaW5pdGlhbCByZXZpZXcsIEkmIzM5O2Qgc2F5IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFRoZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgdGhlIHBlci1rZGFtb25kIHN5c2ZzIG1vZGlmaWNhdGlvbiBhbmQgdGhlIGhhbmRsaW5nIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkaXJlY3RpdmVzLCBzdHJ1Y3R1cmVkIGZvciBzb21lb25lIHdpdGggYSBzb2xpZCBncmFzcCBvZiBrZXJuZWwgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byBEQU1PTiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIERBTU9OIGNvZGViYXNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBvcHRpb25zIHJlbGF0aW5nIHRvIERBTU9OIGl0c2VsZiwgb2J2aW91c2x5IOKAkyBgREFNT05gLCBuYXR1cmFsbHkg4oCTIGJ1dCBhbHNvIHRoZSBzeXNmcyBpbnRlZ3JhdGlvbiwgYERBTU9OX1NZU0ZTYC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZXhwb3NlZCBhbmQgY29udHJvbGxlZC4gVGhlbiwgSSB3aWxsIGFsc28gY2hlY2sgdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBEQU1PTiBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdHMgdmFyaW91cyBjb21wb25lbnRzIGFyZSBlbmFibGVkIGFuZCBidWlsdC4gSXQmIzM5O3MgdGltZSB0byBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHBpdGZhbGxzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBvciBpbXByb3ZlbWVudHMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIE1ha2VmaWxlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgREFNT04gc3Vic3lzdGVtIHNob3VsZCByZXNpZGUsIGFuZCBpdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGNvbXBpbGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxhdGlvbiBmbGFncywgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IERBTU9OIG1vZHVsZXMgbWlnaHQgYmUgbGlua2VkIHRvZ2V0aGVyLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtb3JnYW5pemVkIGFuZCBjbGVhcmx5IGRvY3VtZW50cyB0aGUgYnVpbGQgcHJvY2Vzcy4gS25vd2luZyB0aGUgTWFrZWZpbGUgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgaW4tZGVwdGggaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBDb2RlIGZvciBRdW90YSBGZWF0dXJlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXMgYXJlIGF0IHBsYXkgaGVyZS4gTG9va2luZyBhdCBgY29yZS5jYCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCwgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gSXQmIzM5O3MgY2xlYXIgdGhvc2UgYXJlIGNlbnRyYWwgdG8gdGhlIHF1b3RhIG1hbmFnZW1lbnQuIEFuZCBJIHNlZSB0aGVzZSBtYWNyb3M6IGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLiBOb3cgdGhlIHByZXNlbmNlIG9mIGBQU0lgIGlzIGludHJpZ3VpbmcsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGF0LiBMZXQmIzM5O3MgbG9vayBmb3IgaG93IGBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsYCBpcyBkZXBlbmRlbnQgb24gd2hldGhlciBvciBub3QgYENPTkZJR19QU0lgIGlzIGRlZmluZWQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgb24gaG93IG1lbW9yeSBwcmVzc3VyZSBpcyBiZWluZyBjb25zaWRlcmVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mjc1NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9mZWVkX2xvb3BfbmV4dF9pbnB1dCh1bnNpZ25lZCBsb25nIGxhc3RfaW5wdXQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3ODctXG5tbS9kYW1vbi9jb3JlLmM6Mjc4ODpzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yNzg5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc5Ny1cbm1tL2RhbW9uL2NvcmUuYzoyNzk4OnN0YXRpYyBpbmxpbmUgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yNzk5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzAxNz1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMjYtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL2NvcmUuYzozMDI3Olx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xubW0vZGFtb24vY29yZS5jLTMwMjgtXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAyNzg1LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgc29tZXRoaW5nIHNpZ25pZmljYW50IGlzIGhhcHBlbmluZyB3aXRoIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvciBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGhlYXJ0IG9mIGEgcGFydGljdWxhciBhbGdvcml0aG0uIExldCYjMzk7cyBzZWUgaWYgaXQgZGVhbHMgd2l0aCB0aGUgbW9uaXRvcmluZyBwcm9jZXNzIGl0c2VsZiwgdGhlIGRhdGEgcHJvY2Vzc2luZywgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2Ygc2FtcGxpbmcgb3IgdHJpZ2dlcmluZyBldmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc25pcHBldCYjMzk7cyBpbW1lZGlhdGUgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIG92ZXJhbGwgREFNT04gZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdFx0XHRyZXR1cm4gbWF4KGxhc3RfaW5wdXQgLSBjb21wZW5zYXRpb24sIG1pbl9pbnB1dCk7XG4yNzgxOlx0XHRpZiAobGFzdF9pbnB1dCBcdTAwM2MgVUxPTkdfTUFYIC0gY29tcGVuc2F0aW9uKVxuMjc4MjpcdFx0XHRyZXR1cm4gbGFzdF9pbnB1dCAmIzQzOyBjb21wZW5zYXRpb247XG4yNzgzOlx0XHRyZXR1cm4gVUxPTkdfTUFYO1xuMjc4NDpcdH1cbjI3ODU6XHRcbjI3ODY6XHQjaWZkZWYgQ09ORklHX1BTSVxuMjc4NzpcdFxuMjc4ODpcdHN0YXRpYyB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxuMjc4OTpcdHtcbjI3OTA6XHRcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZwc2lfZGlzYWJsZWQpKVxuMjc5MTpcdFx0XHRyZXR1cm4gMDtcbjI3OTI6XHRcdHJldHVybiBkaXZfdTY0KHBzaV9zeXN0ZW0udG90YWxbUFNJX0FWR1NdW1BTSV9NRU0gKiAyXSxcbjI3OTM6XHRcdFx0XHROU0VDX1BFUl9VU0VDKTtcbjI3OTQ6XHR9XG4yNzk1Olx0XG4yNzk2Olx0I2Vsc2VcdC8qIENPTkZJR19QU0kgKi9cbjI3OTc6XHRcbjI3OTg6XHRzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG4yNzk5Olx0e1xuMjgwMDpcdFx0cmV0dXJuIDA7XG4yODAxOlx0fVxuMjgwMjpcdFxuMjgwMzpcdCNlbmRpZlx0LyogQ09ORklHX1BTSSAqL1xuMjgwNDpcdFxuMjgwNTpcdCNpZmRlZiBDT05GSUdfTlVNQVxuMjgwNjpcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbjI4MDc6XHR7XG4yODA4Olx0XHRyZXR1cm4gbmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKTtcbjI4MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IGFnYWluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSByZWNhbGwgdGhhdCBmaWxlIGJlaW5nIGEgZm9jYWwgcG9pbnQgZm9yIHNvbWUgcmVjZW50IG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBEQU1PTiDigJMgdGhhdCYjMzk7cyBEYXRhIEFjY2VzcyBNT05pdG9yLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIHRoYXQgYW55IGNoYW5nZXMgdGhlcmUgYXJlIGxpa2VseSB0byBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IGZpbGUgc2hlZHMgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMTA6XHRcdGVyciA9IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhjdHgsIHN5c19jdHgpO1xuMjIxMTpcdFx0aWYgKGVycikge1xuMjIxMjpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuMjIxMzpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjIxNDpcdFx0fVxuMjIxNTpcdFxuMjIxNjpcdFx0cmV0dXJuIGN0eDtcbjIyMTc6XHR9XG4yMjE4Olx0XG4yMjE5Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuMjIyMDpcdHtcbjIyMjE6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbjIyMjI6XHRcbjIyMjM6XHRcdGlmICghc3lzZnNfa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKVxuMjIyNDpcdFx0XHRyZXR1cm4gMDtcbjIyMjU6XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzKSlcbjIyMjY6XHRcdFx0cmV0dXJuIDA7XG4yMjI3Olx0XHRzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuMjIyODpcdFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4yMjI5Olx0XG4yMjMwOlx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4yMjMxOlx0XHRcdHJldHVybiAwO1xuMjIzMjpcdFx0aWYgKHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyMzM6XHRcdFx0Z290byBvdXQ7XG4yMjM0Olx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNTpcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMoc3lzZnNfa2RhbW9uZCk7XG4yMjM2Olx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNzpcdG91dDpcbjIyMzg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbjIyMzk6XHRcdHJldHVybiAwO1xuMjI0MDpcdH1cbjIyNDE6XHRcbjIyNDI6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4yMjQzOlx0e1xuMjI0NDpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuMjI0NTpcdFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqcmVwZWF0X2NhbGxfY29udHJvbDtcbjIyNDY6XHRcdGludCBlcnI7XG4yMjQ3Olx0XG4yMjQ4Olx0XHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxuMjI0OTpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjI1MDpcdFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xuMjI1MTpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjUzOlx0XG4yMjU0Olx0XHRpZiAoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjU1Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbjIyNTY6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcbjIyNTc6XHRcbjIyNTg6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjU5Olx0XHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4yMjYwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI2MTpcdFxuMjI2MjpcdFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbjIyNjM6XHRcdGlmIChJU19FUlIoY3R4KSkge1xuMjI2NDpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbjIyNjY6XHRcdH1cbjIyNjc6XHRcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xuMjI2ODpcdFx0aWYgKGVycikge1xuMjI2OTpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNzA6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyNzE6XHRcdFx0cmV0dXJuIGVycjtcbjIyNzI6XHRcdH1cbjIyNzM6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuMjI3NDpcdFxuMjI3NTpcdFx0a2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MztcbjIyNzY6XHRcdFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuMjI3NzpcdFxuMjI3ODpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuMjI3OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbjIyODA6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbjIyODE6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuMjI4MjpcdFx0aWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSlcbjIyODM6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjg0Olx0XHRyZXR1cm4gZXJyO1xuMjI4NTpcdH1cbjIyODY6XHRcbjIyODc6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI4ODpcdHtcbjIyODk6XHRcdGlmICgha2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIFJldmlldzogQSBGdXp6aW5nIFRhcmdldCBFbWVyZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21lIGtleSBhcmVhcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCBEQU1PTiBpcyBpbmRlZWQgYWNjZXNzaWJsZSBhbmQgZnV6emVkIHZpYSBzeXNmcyBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgZWFzeSB0byBnZXQgYXQsIGV2ZW4gaW4gUUVNVSBvciBHQ0Ugd2l0aG91dCBzcGVjaWFsIGhhcmR3YXJlLiBJbXBvcnRhbnQgdG8gY29uc2lkZXIgLSB0aGUgREFNT04gcXVvdGEgZ29hbHMgKHRoaW5ncyBsaWtlIFBTSSBhbmQgTk9ERV9FTElHSUJMRV9NRU0pIGFyZSBjb25maWd1cmVkIHRocm91Z2ggc3lzZnMgYW5kIGFyZSBhY3RpdmVseSBtYW5hZ2VkIGJ5IGtkYW1vbmQgdGhyZWFkcy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZml4ZXMuIEkmIzM5O3ZlIG5vdGVkIHRocmVlIGtleSBhcmVhczoKCjEuICBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWA6IFRoaXMgcGF0Y2ggcHJldmVudHMgYSBiYWQgZGVsdGEgb24gdGhlIGZpcnN0IHJvdW5kIHdoZXJlIHRoZSBsYXN0XF9wc2lcX3RvdGFsIGlzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gb3Igc3RhdGUgbWFuYWdlbWVudCBpc3N1ZSB0aGF0IGNvdWxkIGJlIGV4cGxvaXRhYmxlIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgaW5wdXRzLgoyLiAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYDogVGhlIGZpeCBlbnN1cmVzIHRoYXQgYGRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWRgIGZvciBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgIGFuZCByZXNldHMgYGxhc3RfcHNpX3RvdGFsYCBmb3IgUFNJIGdvYWxzLiBUaGlzIGtpbmQgb2Ygb3BlcmF0aW9uIC0gZW5zdXJpbmcgdGhlIGNvcnJlY3Qgbm9kZSBJRCBhc3NpZ25tZW50IGFuZCByZXNldHRpbmcgYSBzdGF0ZSBjb3VudGVyIC0gaXMgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIEluY29ycmVjdCBub2RlIGFzc2lnbm1lbnQgYW5kIHN0YXRlIHByb2JsZW1zIGNhbiBiZSBlYXNpbHkgbWlzc2VkIGJ1dCBoYXZlIGEgbWFqb3IgZWZmZWN0LgozLiAgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYDogVGhpcyBjaGFuZ2UgbWFrZXMgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBwZXIta2RhbW9uZCBpbnN0ZWFkIG9mIGEgc2hhcmVkIGdsb2JhbCB2YXJpYWJsZS4gSSBzZWUgdGhlIHZhbHVlIGhlcmUgLSB0aGlzIGF2b2lkcyBpbnRlcmZlcmVuY2UgYmV0d2VlbiBtdWx0aXBsZSBrZGFtb25kcywgd2hpY2ggaXMgYSBiaWcgZGVhbCBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIHBvc3NpYmxlIHN0YXRlIGNvcnJ1cHRpb24gdGhhdCBhIGZ1enplciBjb3VsZCBkZWZpbml0ZWx5IHRyaWdnZXIuCgpHaXZlbiB0aGF0IHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBNTSBsb2dpYyBhbmQgaW52b2x2ZSBxdW90YSBnb2FscyBhbmQgc3lzZnMgaW50ZXJmYWNlcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYXJlYS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IGZ1bmN0aW9uczoKSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgZnVuY3Rpb25zIG1vZGlmaWVkIGFuZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIG1vZGlmaWVkIGNvZGUuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBJIG5lZWQgdG8gY2hlY2s6CgoqICAgYGRhbW9zX25ld19xdW90YV9nb2FsYCAoSXMgdGhpcyBleHBvcnRlZCBvciBub24tc3RhdGljPyBJbXBvcnRhbnQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLikKKiAgIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAKKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBhbmQgaXRzIGNhbGxpbmcgZnVuY3Rpb25zOiBgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXRgLCBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jb21taXRfY3R4YC4KCkkmIzM5O2xsIGFsc28gc2VhcmNoIGZvciB3aGVyZSBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFyZSBkZWNsYXJlZC9kZWZpbmVkIHdpdGhpbiBgbW0vZGFtb24vYCwgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2s7IEkmIzM5O2xsIHN0YXJ0IHdyaXRpbmcgYSBmdXp6ZXIgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTExNjk9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExODMtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE4NDpcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9kYW1vbi9scnVfc29ydC5jOjIzODpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDQtXHRcdFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICYjNDM7IDIpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVx0XHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXHUwMDNlbWV0cmljLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjItXHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzOD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTYtXHRcdCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg1NzpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU4LVx0XHRcdFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgREFNT04tcmVsYXRlZCBlbnRyeSBwb2ludHMgYW5kIG15IG1lbnRhbCByb2FkbWFwIGZvciBkaXZpbmcgZGVlcGVyOgoKKipJbml0aWFsIERBTU9OIEludmVzdGlnYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhvc2UgZnVuY3Rpb25zOiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBhbmQgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYC4gSSYjMzk7bSBjdXJpb3VzIHdoYXQga2luZCBvZiBpbnRlcmFjdGlvbnMgdGhlc2UgcmVwcmVzZW50LiBJ4oCZbSBndWVzc2luZyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBpbnZvbHZlcyBzZXR0aW5nIG9yIGFwcGx5aW5nIHNvbWUga2luZCBvZiByZXNvdXJjZSBsaW1pdHMgb3IgcXVvdGFzLCBsaWtlbHkgcmVsYXRlZCB0byBEQU1PTiYjMzk7cyBvcGVyYXRpb24uIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgcHJvYmFibHkgYSBjb250cm9sIGtub2IgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgREFNT04gY29yZSBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIHNvdW5kcyBpbnRyaWd1aW5nLi4uIG1heWJlIHJlbGF0ZWQgdG8gcmVwZWF0aW5nIGEgY2FsbCBvciBhY3Rpb24gYXMgcGFydCBvZiBEQU1PTiYjMzk7cyBtb25pdG9yaW5nIGxvb3AsIG9yIHBlcmhhcHMgZm9yIHNvbWUga2luZCBvZiB1c2VyIGludGVyYWN0aW9uIG1lY2hhbmlzbSB2aWEgc3lzZnMuCgpOb3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBzZXQgb2Ygc3lzZnMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgbmVlZCBhIGxpc3Qgb2YgYWxsIHRoZSBzeXNmcyBmaWxlcyBpdCBleHBvcnRzLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBmdWxsIHVzZXIgaW50ZXJmYWNlIHRoYXQgREFNT04gcHJlc2VudHMuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgbGV2ZWwgb2YgY29udHJvbCBhbmQgdGhlIGtpbmRzIG9mIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGtub2JzIHdlIGhhdmUgYXQgb3VyIGRpc3Bvc2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMjE5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDEtXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDI6c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMjQzLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODc9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTQtXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG5tbS9kYW1vbi9zeXNmcy5jOjIyOTU6XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5Ni1cdCAqL1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjM2Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM3MC1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxubW0vZGFtb24vc3lzZnMuYzoyMzcxOlx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Mi1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFF1b3RhIEdvYWxzIGFuZCBTeXNmcyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBEQU1PTiYjMzk7cyBpbnRlcm5hbHMgcmVsYXRlZCB0byBxdW90YSBnb2FscyBhbmQgaG93IHRoZXkgaW50ZXJmYWNlIHdpdGggc3lzZnMuIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG1tL2RhbW9uYCBkaXJlY3RvcnkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgaGVhZGVyIGZpbGU7IGl0JiMzOTtzIGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIG5hdmlnYXRpbmcga2VybmVsIGludGVybmFscyBsaWtlIHRoaXMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIG92ZXJ2aWV3IG9mIHRoZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byBvdXIgYXJlYXMgb2YgaW50ZXJlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfLipxdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTI4PWVudW0gZGFtb3NfYWN0aW9uIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQzLS8qKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE0NDogKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgbWV0cmljIHRvIGJlIHVzZWQgYXMgdGhlIGdvYWxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNDUtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTU5LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE2MDplbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNjEtXHREQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNzMtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTc0OiAqIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIC0gREFNT1Mgc2NoZW1lIHF1b3RhIGF1dG8tdHVuaW5nIGdvYWwuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTc1LSAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5NS0gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTY6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5NzpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5OC1cdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMTYtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjE3OiAqIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciAtIEdvYWwtYmFzZWQgcXVvdGEgdHVuaW5nIGxvZ2ljLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIxOC0gKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjAtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjIxOmVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjIyLVx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNULFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjYtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjI3OiAqIHN0cnVjdCBkYW1vc19xdW90YSAtIENvbnRyb2xzIHRoZSBhZ2dyZXNzaXZlbmVzcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyOC0gKiBAcmVzZXRfaW50ZXJ2YWw6XHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzMtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Mjc0OnN0cnVjdCBkYW1vc19xdW90YSB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjc1LVx0dW5zaWduZWQgbG9uZyByZXNldF9pbnRlcnZhbDtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjc4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3OTpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciBnb2FsX3R1bmVyO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI4MC1cdHVuc2lnbmVkIGxvbmcgZXN6O1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yODktLyogcHJpdmF0ZTogKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDoyOTA6XHQvKiBIZWFkIG9mIHF1b3RhIHR1bmluZyBnb2FscyAoXHUwMDI2ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yOTEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0zMzk9c3RydWN0IGRhbW9zX3dhdGVybWFya3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0zNjMtICogZGV0ZXJtaW5lZCB0aGUgcmVnaW9uIGFzIGVsaWdpYmxlIHRvIGFwcGx5IHRoZSBhY3Rpb24uICBUaGUgYWNjZXNzIHBhdHRlcm5cbmluY2x1ZGUvbGludXgvZGFtb24uaDozNjQ6ICogKFx1MDAyNnN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiksIHF1b3RhcyAoXHUwMDI2c3RydWN0IGRhbW9zX3F1b3RhKSwgd2F0ZXJtYXJrc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2NS0gKiAoXHUwMDI2c3RydWN0IGRhbW9zX3dhdGVybWFya3MpIGFuZCBmaWx0ZXJzIChcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyKSB0aGF0IGhhbmRsZWRcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTU0PXN0cnVjdCBkYW1vcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU1Ny1cdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTU4Olx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU1OS1cdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTU1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9zel9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTkyLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjk5MzojZGVmaW5lIGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIFxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShnb2FsLCBcdTAwMjYocXVvdGEpLVx1MDAzZWdvYWxzLCBsaXN0KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk5NS1cbmluY2x1ZGUvbGludXgvZGFtb24uaDo5OTY6I2RlZmluZSBkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZ29hbCwgbmV4dCwgcXVvdGEpIFxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGdvYWwsIG5leHQsIFx1MDAyNihxdW90YSktXHUwMDNlZ29hbHMsIGxpc3QpXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMzc9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMzk6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDA6XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDEtXHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQyOnZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0Mzp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0NC1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDQ1PXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDctXHRcdFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQ4Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0OS1cdFx0XHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDUyPXZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDUzOmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUXVvdGEgR29hbCBNYW5hZ2VtZW50IGFuZCBTeXN0ZW0gRmlsZSBTeXN0ZW0gSW50ZXJhY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGFuZCBicmVhayBkb3duIHRoZSBxdW90YSBnb2FsIG1hbmFnZW1lbnQuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vc19hZGRfcXVvdGFfZ29hbGAsIGFuZCBgZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIGNyZWF0aW5nLCBjb21taXR0aW5nLCBhZGRpbmcsIGFuZCBkZXN0cm95aW5nIHF1b3RhIGdvYWxzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCBpcyBrZXkuCgpOZXh0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGZpbGUgc3lzdGVtIGNvbnRleHQgcmVsYXRlcyB0byB0aGlzIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFueSBgc3lzX2N0eGAgYXBwbHkgb3IgY29tbWl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbnkgZnVuY3Rpb25zIHRoYXQgdXNlIGBkYW1vc19zeXNmc2Agb3IgYGRhbW9uX3N5c2ZzYCBpbiB0aGVpciBuYW1lLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBxdW90YSBnb2FscyBhcmUgcmVwcmVzZW50ZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBob3cgbW9kaWZpY2F0aW9ucyBhcmUgYXBwbGllZCBvciBjb21taXR0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzQ5OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOkRFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTY6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE3LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xOS17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoyMDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBrbWFsbG9jX29iaigqcmFuZ2UpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MzE9c3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zMy17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNDpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjM1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz00MD1zdGF0aWMgc3NpemVfdCBtaW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00Mi17XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo0MzpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQ0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy00NS1cdHVuc2lnbmVkIGxvbmcgbWluO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTU2PXN0YXRpYyBzc2l6ZV90IG1heF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNTgte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NTk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjEtXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NjU9c3RhdGljIHNzaXplX3QgbWF4X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjcte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6Njg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNzAtXHR1bnNpZ25lZCBsb25nIG1heDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy04MC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgxOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjgzOlx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSwga29iaikpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODQtfVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21pbl9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg3LVx0XHRfX0FUVFJfUldfTU9ERShtaW4sIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX21heF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTkwLVx0XHRfX0FUVFJfUldfTU9ERShtYXgsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjkzOlx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjk0Olx0XHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk1LVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk2LX07XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NzpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3VsX3JhbmdlKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk4LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTk6Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMDpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMjpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3VsX3JhbmdlX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMy19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwNjpzdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX2VxKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNy1cdFx0Y2hhciAqbWVtY2dfcGF0aF9idWYsIGNoYXIgKnBhdGgpXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEzNC1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNTpcdFx0aWYgKGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEobWVtY2csIHBhdGgsIG1lbWNnX3BhdGgpKSB7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzYtXHRcdFx0KmlkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtOC1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjk6ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2Uge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTItXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE5LVx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMDp2b2lkIGRhbW9uX3N5c2ZzX3VsX3JhbmdlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyMjpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTI3LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mjg6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjktXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMS1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zMy1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM0OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNzpleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQxLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQzOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ0LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Njp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTE6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUyOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTc9dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU4Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU5LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo2MTppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYxLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MzpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24sXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc4LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwMj1zdGF0aWMgdm9pZCBkYW1vc19zeXNmc19yZWdpb25fcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24pXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA5PXN0YXRpYyBzc2l6ZV90IHN0YXJ0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjExLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjEzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxOD1zdGF0aWMgc3NpemVfdCBlbmRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI3PXN0YXRpYyBzc2l6ZV90IG5yX2FjY2Vzc2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyOS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMwOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzMTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzY9c3RhdGljIHNzaXplX3QgYWdlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjM4LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzk6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI0NT1zdGF0aWMgc3NpemVfdCBzel9maWx0ZXJfcGFzc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjQ4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU0OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1OC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYzLVx0XHRfX0FUVFJfUk9fTU9ERShzdGFydCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZW5kX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ni1cdFx0X19BVFRSX1JPX01PREUoZW5kLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9ucl9hY2Nlc3Nlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjktXHRcdF9fQVRUUl9ST19NT0RFKG5yX2FjY2Vzc2VzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcyLVx0XHRfX0FUVFJfUk9fTU9ERShhZ2UsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc1LVx0XHRfX0FUVFJfUk9fTU9ERShzel9maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc4Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zdGFydF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjc5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWdlX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODI6XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3N6X2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4My1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg0LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4ODpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OS1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTA6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA1OmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTk9c3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjQtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjk6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyLCAqbmV4dDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMzItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDI6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDUtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDgtXHRcdF9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1MTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTItXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1My19O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NDpBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1NzpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTgtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU5Olx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfZ3JvdXBzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2MC19O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzY2OnN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY3LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM3ODpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM3OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzgxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzgzPXN0YXRpYyBzc2l6ZV90IG5yX3RyaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODY6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg3Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zOTI9c3RhdGljIHNzaXplX3Qgc3pfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozOTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTctXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwMT1zdGF0aWMgc3NpemVfdCBucl9hcHBsaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwMy17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDA0Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwNTpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQwNi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDEwPXN0YXRpYyBzc2l6ZV90IHN6X2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDEyLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MTM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDE0Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDE1LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTk9c3RhdGljIHNzaXplX3Qgc3pfb3BzX2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDIxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjI6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDIzOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDI0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00Mjg9c3RhdGljIHNzaXplX3QgcXRfZXhjZWVkc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQzMTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MzMtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQzNz1zdGF0aWMgc3NpemVfdCBucl9zbmFwc2hvdHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDQyLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NDY9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTEtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQ1NT1zdGF0aWMgc3NpemVfdCBtYXhfbnJfc25hcHNob3RzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NTk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NjAtXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHMsIGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2bWF4X25yX3NuYXBzaG90cyk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0Njg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Njkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MDpcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzEtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Mi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0NzM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzQtXHRcdF9fQVRUUl9ST19NT0RFKG5yX3RyaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NzUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc3LVx0XHRfX0FUVFJfUk9fTU9ERShzel90cmllZCwgMDQwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDc4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3OTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgwLVx0XHRfX0FUVFJfUk9fTU9ERShucl9hcHBsaWVkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDgyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODMtXHRcdF9fQVRUUl9ST19NT0RFKHN6X2FwcGxpZWQsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODYtXHRcdF9fQVRUUl9ST19NT0RFKHN6X29wc19maWx0ZXJfcGFzc2VkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfcXRfZXhjZWVkc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODktXHRcdF9fQVRUUl9ST19NT0RFKHF0X2V4Y2VlZHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkyLVx0XHRfX0FUVFJfUk9fTU9ERShucl9zbmFwc2hvdHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5NS1cdFx0X19BVFRSX1JXX01PREUobWF4X25yX3NuYXBzaG90cywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ5NzpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTg6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl90cmllZF9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk5Olx0XHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMDpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X2FwcGxpZWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMjpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3N6X29wc19maWx0ZXJfcGFzc2VkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDM6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDQ6XHRcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNTpcdFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX21heF9ucl9zbmFwc2hvdHNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNi1cdE5VTEwsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTA3LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA4OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc3RhdHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc3RhdHNfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTExOlx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zdGF0c19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUxMi1cdC5zeXNmc19vcHMgPSBcdTAwMjZrb2JqX3N5c2ZzX29wcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MTM6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTE0LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MzAtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTQxOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDItXHRcdGVudW0gZGFtb3Nfc3lzZnNfZmlsdGVyX2hhbmRsZV9sYXllciBsYXllcilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXHRpZiAoZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01OTM9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01OTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NjpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1OTc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5OC1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02Mjc9c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjI5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjMxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MzItXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY1Mj1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NTY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1Ny1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NjYxPXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NjMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY2NDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NjU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2Ni1cdGJvb2wgbWF0Y2hpbmc7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY3Nj1zdGF0aWMgc3NpemVfdCBhbGxvd19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Nzgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4MS1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njg1PXN0YXRpYyBzc2l6ZV90IGFsbG93X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODcte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY4ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODk6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY5MC1cdGJvb2wgYWxsb3c7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTcwMD1zdGF0aWMgc3NpemVfdCBtZW1jZ19wYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwMi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzAzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzA1LVx0aW50IGxlbjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzA3Olx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwOC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzEwLVx0XHRcdGZpbHRlci1cdTAwM2VtZW1jZ19wYXRoID8gZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGggOiBcJiMzNDtcJiMzNDspO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcxMTpcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTItXHRyZXR1cm4gbGVuO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MTU9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzE3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTg6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE5Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjAtXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyNi1cdHN0cnNjcHkocGF0aCwgYnVmLCBjb3VudCAmIzQzOyAxKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3Mjc6XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjgtXHRcdGtmcmVlKHBhdGgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MzItXHRmaWx0ZXItXHUwMDNlbWVtY2dfcGF0aCA9IHBhdGg7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzMzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczNC1cdHJldHVybiBjb3VudDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM3PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzM5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDItXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc0Nj1zdGF0aWMgc3NpemVfdCBhZGRyX3N0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDgte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc0OTpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTA6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1MS1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmZpbHRlci1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzU2PXN0YXRpYyBzc2l6ZV90IGFkZHJfZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1OC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzU5Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc2MDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NjU9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2Ny17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MDQKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIE1vZHVsZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYG1tL2RhbW9uL3N5c2ZzLmNgIGV4cG9ydHMgYGRhbW9uX3N5c2ZzX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSB3YW50IHRvIHRyYWNlIHRoZSBpbnRlcmNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHN5bWJvbHMuIEZyb20gYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGEgY2x1c3RlciByZWxhdGVkIHRvIHF1b3RhIGdvYWxzIGFuZCBzY2hlbWUgY29tbWl0bWVudDogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9jb21taXRfc2NoZW1lc2AsIGFuZCBgZGFtb25fY29tbWl0X2N0eGAuIFBsdXMgdGhlIGNvcmUgYGRhbW9uX3N0YXJ0YCBmdW5jdGlvbi4KClRoZW4sIGZyb20gYG1tL2RhbW9uL3N5c2ZzLmNgLCBJJiMzOTttIG5vdGluZyBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIHdoaWNoIGlzIHN0YXRpYyBidXQgY2FsbGVkIHRocm91Z2ggYSBzeXNmcyB3cml0ZSwgYW5kIHRoZW4gYGRhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0X3N0b3JlYCwgYW5kIGBrZGFtb25kc19zdG9yZWAuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZXhwb3J0ZWQgb3IgbWFya2VkIG5vbi1zdGF0aWMgaW4gdGhvc2UgZmlsZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2Ugc3ltYm9scy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnRlcmFjdGlvbiBsaWVzLiBUaGVzZSBhcmUgdGhlIGhvb2tzIHRoYXQgdGhlIHN5c2ZzIGludGVyZmFjZSBpcyB1c2luZyB0byBjb250cm9sIGFuZCBjb25maWd1cmUgREFNT04mIzM5O3MgY29yZSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2ZzIGludGVyZmFjZSB0cmlnZ2VycyB0aGUgY29yZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3xeaW50IGRhbW9zX3xec3RydWN0IGRhbW9zXy4qZGFtb3NffF5zdHJ1Y3QgZGFtb25fLipkYW1vbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzAtICovXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxubW0vZGFtb24vY29yZS5jLTcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbm1tL2RhbW9uL2NvcmUuYy05OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTExMy1cbm1tL2RhbW9uL2NvcmUuYzoxMTQ6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG5tbS9kYW1vbi9jb3JlLmMtMTE1LVx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTYxLVxubW0vZGFtb24vY29yZS5jOjE2MjpzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxubW0vZGFtb24vY29yZS5jLTE2My17XG4tLVxubW0vZGFtb24vY29yZS5jPTMxOD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI3LSAqL1xubW0vZGFtb24vY29yZS5jOjMyODpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxubW0vZGFtb24vY29yZS5jLTMyOS17XG4tLVxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc3LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbm1tL2RhbW9uL2NvcmUuYy00NzktXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNTY4LVxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy01NzAtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG4tLVxubW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTc1Mz12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzc3LSAqL1xubW0vZGFtb24vY29yZS5jOjc3ODpzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXdfdGFyZ2V0KHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtNzc5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODI5PXVuc2lnbmVkIGludCBkYW1vbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4tLVxubW0vZGFtb24vY29yZS5jLTgzMy1cbm1tL2RhbW9uL2NvcmUuYzo4MzQ6c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTgzNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTU9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDUwOmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxubW0vZGFtb24vY29yZS5jLTEwNTEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTQ3PXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTY4LSAqL1xubW0vZGFtb24vY29yZS5jOjExNjk6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE3MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTE4MTY9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NDQtICovXG5tbS9kYW1vbi9jb3JlLmM6MTg0NTppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xODQ2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTg2NC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxODY1OmludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZClcbm1tL2RhbW9uL2NvcmUuYy0xODY2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTk2ND1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5ODAtICovXG5tbS9kYW1vbi9jb3JlLmM6MTk4MTppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcbm1tL2RhbW9uL2NvcmUuYy0xOTgyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA2MT1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDc2LSAqL1xubW0vZGFtb24vY29yZS5jOjIwNzc6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0yMDc4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjExMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTEzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTE0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE2NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMTY2OmludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMTY3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzk2Mj1zdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTkzLSAqL1xubW0vZGFtb24vY29yZS5jOjM5OTQ6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jLTM5OTUtXHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbi0tXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTE0LSAqL1xubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzoxNTppbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTYtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKip0YXJnZXRwKVxuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmgtNDUtXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oOjQ2OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00Ny1cdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA1LVx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTQ5LVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MDppbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MS1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTEzPWJvb2wgZGFtb25fZm9saW9feW91bmcoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTU6aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xNi1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwPURFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xNS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xNy1cdFx0dW5zaWduZWQgbG9uZyBtaW4sXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExNzppbnQgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChjaGFyICptZW1jZ19wYXRoLCB1NjQgKmlkKVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0xMT1zdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2Uge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MTc6c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVx0XHR1bnNpZ25lZCBsb25nIG1pbixcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0yOD1zdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyB7XG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzMtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozNDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM1LXZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zNz1leHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDAtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Nj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMzQ9c3RhdGljXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIzNi1cdHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTk2Mj1zdGF0aWNcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTYzOnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTY0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NzktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ0OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0NS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMDE9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNDg6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ5LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MDIKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFF1b3RhIEdvYWwgQW5hbHlzaXMgYW5kIEZ1enppbmcgUmVjb21tZW5kYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgYENPTkZJR19QU0lgIGFyZSBlc3NlbnRpYWwuIFNwZWNpZmljYWxseSwgYENPTkZJR19QU0lgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBlbmFibGVzIHJlYWxpc3RpYyBQU0ktYmFzZWQgcXVvdGEgZ29hbCB0ZXN0aW5nIHdpdGhpbiBEQU1PTiwgcGFydGljdWxhcmx5IGluIHRoZSBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbGAgZnVuY3Rpb24uIFdpdGhvdXQgUFNJLCB3ZSYjMzk7cmUgZXNzZW50aWFsbHkgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBnaXZlIHVzIG1lYW5pbmdmdWwgcmVzdWx0cy4gREFNT04gYW5kIERBTU9OX1NZU0ZTIGFyZSBjbGVhcmx5IG5lZWRlZCB0byBlbmFibGUgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZS4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gQWZ0ZXIgYSBxdWljayBzY2FuLCB0aGUgaW1wb3J0YW50IGZvY3VzIHN5bWJvbHMgYXJlOiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLiBEb3VibGUtY2hlY2tpbmcsIEkgY29uZmlybSB0aGF0IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFyZSBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgdmlzaWJsZSBpbiBib3RoIHRoZSBjb3JlIERBTU9OIGNvZGUgKGBtbS9kYW1vbi9jb3JlLmNgKSBhbmQgdGhlIGhlYWRlciBmaWxlIChgaW5jbHVkZS9saW51eC9kYW1vbi5oYCkuIFRoaXMgaXMgZ29vZDsgd2UgY2FuIHJlYWNoIHRoZW0uCgpOb3csIGZvciB0aGUgdmVyZGljdDogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCAoREFNT04pIGNvbWJpbmVkIHdpdGggYSBzeXNmcyBpbnRlcmZhY2UgYW5kIGtlcm5lbC1pbnRlcm5hbCBnb2FsIGNvbW1pdCBsb2dpYy4gVGhpcyBpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgcG90ZW50aWFsIGJ1Z3MuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKRmluYWxseSwgbGV0JiMzOTtzIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmF0aW9uYWxlIHRvIGp1c3RpZnkgZnV6emluZzogdGhpcyBpcyBEQU1PUyBxdW90YSBnb2FsIGluaXRpYWwgc3RhdGUgaGFuZGxpbmcgZm9yIHRoZSBQU0kgbWV0cmljLCBub2RlIGVsaWdpYmxlIG1lbW9yeSBnb2FsIG5pZCBjb3B5aW5nIG9uIGNvbW1pdCwgYW5kIHBlci1rZGFtb25kIHJlZnJlc2ggaW50ZXJ2YWwgdHJhY2tpbmcgaW4gdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gVGhhdCBjb3ZlcnMgc29tZSBpbnRlcmVzdGluZyB0aGluZ3MuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBhcyBsaXN0ZWQgYWJvdmUuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIGluY2x1ZGUgYFsmIzM0O0RBTU9OJiMzNDssICYjMzQ7REFNT05fU1lTRlMmIzM0OywgJiMzNDtQU0kmIzM0O11gLiBBbGwgc2V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1BTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtQU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19uZXdfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBNTSBjb3JlIGFuZCBzeXNmcyBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdCBiZWhhdmlvciBvZiBQU0kgYW5kIG5vZGUtZWxpZ2libGUtbWVtb3J5IERBTU9TIHF1b3RhIGdvYWxzLCBhbmQgY2hhbmdpbmcgZ2xvYmFsIHN5c2ZzIHVwZGF0ZSB0aW1pbmcgdG8gcGVyLWtkYW1vbmQgcmVmcmVzaCB0cmFja2luZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBydW50aW1lIGxvZ2ljIHBhdGhzIHZpYSBzeXNmcyBhbmQgREFNT04gQVBJcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBnb2FsIGNhbGN1bGF0aW9uIGxvZ2ljIChzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGFuZCBoYW5kbGluZyB0aGUgbGFzdCBQU0kgdG90YWwgc2VudGluZWwgYW5kIGNvbW1pdHRpbmcgdGhlIG5vZGUgSUQgZm9yIGVsaWdpYmxlIG1lbW9yeSBnb2FscykgYW5kIG1vdmVzIGEgZ2xvYmFsIHN5c2ZzIHJlZnJlc2ggamlmZmllcyB0aW1lc3RhbXAgdG8gcGVyLWtkYW1vbmQgc3RydWN0IGluc3RhbmNlcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGludHJvZHVjZWQ6XG4xLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3RzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIChzeXNmcyB1c2VzIHN0YW5kYXJkIHN0cmluZyBmb3JtYXR0aW5nKS5cbjIuIFRoZSBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIChlLmcuLCBgZGFtb25fc3lzZnNfa2RhbW9uZGAgdmlhIGBremFsbG9jX29iamAsIGV4cGxpY2l0IGZpZWxkIGluaXRpYWxpemF0aW9uIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbGApLlxuMy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBjYWxjdWxhdGlvbnMgd2l0aGluIERBTU9OLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MDUzMDBlMWM1ZTQwOWIxYzJjMTBmZTQ3Njk0ZTYwNDY5MDlhMmUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTk6MDQ6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uNzBlZTg1YjQxNDY0NiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNjM1LDYgJiM0Mzs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoCiAJCXJldHVybiBOVUxMOwogCWdvYWwtJmd0O21ldHJpYyA9IG1ldHJpYzsKIAlnb2FsLSZndDt0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7CiYjNDM7CWlmIChtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKQomIzQzOwkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7Z29hbC0mZ3Q7bGlzdCk7CiAJcmV0dXJuIGdvYWw7CiB9CkBAIC0xMTIyLDYgJiM0MzsxMTI0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpCiB7CiAJc3dpdGNoIChkc3QtJmd0O21ldHJpYykgewomIzQzOwljYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzoKJiM0MzsJCWRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDoKIAkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKQEAgLTExMzEsNiAmIzQzOzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigKIAkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKIAkJZHN0LSZndDttZW1jZ19pZCA9IHNyYy0mZ3Q7bWVtY2dfaWQ7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOgomIzQzOwkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTExNDMsNyAmIzQzOzExNTEsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKIAlkc3QtJmd0O3RhcmdldF92YWx1ZSA9IHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlOwogCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKQogCQlkc3QtJmd0O2N1cnJlbnRfdmFsdWUgPSBzcmMtJmd0O2N1cnJlbnRfdmFsdWU7Ci0JLyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi8KIAlkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7CiB9CiAKQEAgLTMwMTgsNyAmIzQzOzMwMjUsMTIgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLAogCQlicmVhazsKIAljYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzoKIAkJbm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTsKLQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLSZndDtsYXN0X3BzaV90b3RhbDsKJiM0MzsJCS8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi8KJiM0MzsJCWlmIChnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKQomIzQzOwkJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBnb2FsLSZndDt0YXJnZXRfdmFsdWU7CiYjNDM7CQllbHNlCiYjNDM7CQkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLQomIzQzOwkJCQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbDsKIAkJZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsOwogCQlicmVhazsKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTE3ODksNiAmIzQzOzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0czsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7CiAJdW5zaWduZWQgaW50IHJlZnJlc2hfbXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZCkKQEAgLTIyMTUsMTcgJiM0MzsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoCiAJcmV0dXJuIGN0eDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllczsKLQogc3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTsKIAogCWlmICghc3lzZnNfa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcykKIAkJcmV0dXJuIDA7Ci0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKQomIzQzOwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMpKQogCQlyZXR1cm4gMDsKLQlkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyAmIzQzOwomIzQzOwlzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKIAkJbXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLSZndDtyZWZyZXNoX21zKTsKIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmYW1wO2RhbW9uX3N5c2ZzX2xvY2spKQpAQCAtMjI3Myw4ICYjNDM7MjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAl9CiAJa2RhbW9uZC0mZ3Q7ZGFtb25fY3R4ID0gY3R4OwogCi0JZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9Ci0JCWppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLSZndDtyZWZyZXNoX21zKTsKJiM0MzsJa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiYjNDM7CQltc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwogCiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7Zm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAppbmRleCA0YTUzNmQ0MWNkYjJkLi42NTQ0M2FiYTAzMzAwIDEwMDY0NAotLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCkBAIC03NTEsMTkgJiM0Mzs3NTEsMTYgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewotCXU2NCBkc3RfbGFzdF9wc2lfdG90YWwgPSAwOwotCi0JaWYgKGRzdC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKLQkJZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LSZndDtsYXN0X3BzaV90b3RhbDsKIAlkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7CiAKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDttZXRyaWMsIHNyYy0mZ3Q7bWV0cmljKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDt0YXJnZXRfdmFsdWUsIHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKTsKIAlpZiAoc3JjLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7Y3VycmVudF92YWx1ZSwgc3JjLSZndDtjdXJyZW50X3ZhbHVlKTsKLQlpZiAoZHN0X2xhc3RfcHNpX3RvdGFsICZhbXA7JmFtcDsgc3JjLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKQotCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDtsYXN0X3BzaV90b3RhbCwgZHN0X2xhc3RfcHNpX3RvdGFsKTsKIAlzd2l0Y2ggKGRzdC0mZ3Q7bWV0cmljKSB7CiYjNDM7CWNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOgomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDoKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC0mZ3Q7bmlkLCBzcmMtJmd0O25pZCk7CkBAIC03ODcsNiAmIzQzOzc4NCwxMyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkJLmxhc3RfcHNpX3RvdGFsID0gNDU2LAogCX07CiAKJiM0MzsJZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgJmFtcDtkc3QsCiYjNDM7CQkJJmFtcDsoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHsKJiM0MzsJCQkubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLAomIzQzOwkJCS50YXJnZXRfdmFsdWUgPSAyMzQsCiYjNDM7CQkJLmN1cnJlbnRfdmFsdWUgPSAzNDUsCiYjNDM7CQkJLmxhc3RfcHNpX3RvdGFsID0gNTY3LAomIzQzOwkJCX0pOwogCWRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsICZhbXA7ZHN0LAogCQkJJmFtcDsoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpewogCQkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNoYW5nZXMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9kYW1vbi9jb3JlLmNgLgoKSSBzZWUgc29tZSBrZXkgYWx0ZXJhdGlvbnMgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLiBJdCBhcHBlYXJzIHRoYXQgd2hlbiBgbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gYFU2NF9NQVhgLiBUaGF0JiMzOTtzIGEgZmxhZywgbGlrZWx5IGEgc2VudGluZWwgdmFsdWUgZm9yIHVuaW5pdGlhbGl6ZWQgb3IgYSBzcGVjaWFsIGNhc2UuIERpZ2dpbmcgZnVydGhlciBpbnRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigpYCwgdGhlIHNhbWUgYFU2NF9NQVhgIGFzc2lnbm1lbnQgaGFwcGVucyBmb3IgYGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGluIHRoZSBzYW1lIG1ldHJpYyBjYXNlIGFuZCB0aGVuIGZvciB0aGUgYERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQYCBpdCBqdXN0IGNvcGllcyB0aGUgYG5pZGAuIEZ1cnRoZXIgb24sIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgpYCByZW1vdmVzIGEgY29tbWVudCBhYm91dCBrZWVwaW5nIGBsYXN0X3BzaV90b3RhbGAgYXMgaXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBzdHJhdGVneS4gVGhpcyBpbXBsaWVzIGEgY2hhbmdlIGluIHRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyB2YXJpYWJsZSBhbmQgdGhlIHVwZGF0ZSBsb2dpYy4gTGFzdGx5LCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCBub3cgdXRpbGl6ZXMgdGhpcyBgbGFzdF9wc2lfdG90YWxgIHZhbHVlLiBXaGVuIGl0ICppcyogYFU2NF9NQVhgLCBpdCBhc3NpZ25zIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBkaXJlY3RseSBmcm9tIGBnb2FsLSZndDt0YXJnZXRfdmFsdWVgLiBPdGhlcndpc2UsIGl0IGNhbGN1bGF0ZXMgYGN1cnJlbnRfdmFsdWVgIGJ5IHN1YnRyYWN0aW5nIGBsYXN0X3BzaV90b3RhbGAgZnJvbSBgbm93X3BzaV90b3RhbGAsIGFuZCB0aGVuIHVwZGF0ZXMgYGxhc3RfcHNpX3RvdGFsYC4gVGhpcyBzbWVsbHMgbGlrZSBhbiBpc3N1ZSB3YWl0aW5nIHRvIGhhcHBlbiBpZiBub3QgY2FyZWZ1bGx5IGhhbmRsZWQuIFdlIGFyZSBlaXRoZXIgZGVhbGluZyB3aXRoIGFuIG92ZXJmbG93IGlzc3VlLCBhIHdyYXAtYXJvdW5kIGJ1Zywgb3IgYSBsb2dpYyBlcnJvciByZWxhdGVkIHRvIHRoZSBzcGVjaWFsIGluaXRpYWxpemF0aW9uLiBUaGlzIHNlY3Rpb24gaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgZnV6emluZyBzZXNzaW9uIHRvIGV4cGxvcmUgcG90ZW50aWFsIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBgVTY0X01BWGAgdXNhZ2UgYW5kIHRoZSBjYWxjdWxhdGlvbnMuCgpNb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLCBJIHNlZSBhIG5ldyBtZW1iZXIsIGB1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzYCwgYWRkZWQgdG8gYHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kYCwgYW5kIHRoZW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllc2AgaXMgcmVtb3ZlZCBhbmQgbm93IGl0JiMzOTtzIHBlciBpbnN0YW5jZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIG1vcmUgZmxleGlibGUgb3IgcGVyLWluc3RhbmNlIHJlZnJlc2ggc3RyYXRlZ3kuIEluIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKClgLCB0aGlzIG5ldyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB1c2luZyBgamlmZmllc2AgYW5kIGByZWZyZXNoX21zYC4gQW5kIHRoZW4gbGF0ZXIgaW4gYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKClgIGl0JiMzOTtzIHVzZWQuIFRoaXMgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgaG93IGBkYW1vbl9zeXNmc19rZGFtb25kYCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCBsYXRlci4KCkZpbmFsbHksIHRoZSB1bml0IHRlc3RzIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgIGhhdmUgYmVlbiB1cGRhdGVkLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCBkb2VzbiYjMzk7dCB0ZWxsIG1lICpob3cqIHRoZXkmIzM5O3ZlIGJlZW4gdXBkYXRlZC4gQXJlIHRoZXkgdGVzdGluZyB0aGUgbmV3IGxvZ2ljPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB0ZXN0IGNhc2VzIHRoZW1zZWx2ZXMgdG8gZXZhbHVhdGUgdGhlaXIgdGhvcm91Z2huZXNzIGluIHJlbGF0aW9uIHRvIHRoZXNlIGNoYW5nZXMuCgpCZWZvcmUgSSBqdW1wIHRvIGEgY29uY2x1c2lvbiwgSSBuZWVkIHRvIHJlYWQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFyb3VuZCBsaW5lIDE3ODksIHRvIHNlZSBob3cgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGFsbG9jYXRlZCBhbmQgaG93IHRoZSByZWZyZXNoIGxvZ2ljIGltcGFjdHMgaXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBuZXcgcmVmcmVzaCBsb2dpYyBpcyBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgb3IgaW5jb3JyZWN0IHRpbWluZy4gSSYjMzk7bGwgbG9vayBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgcmVsYXRlZCB0byB0aGlzIG5ldyB2YXJpYWJsZSBpbiB0aGUgaW5zdGFuY2UgYWxsb2NhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgamlmZmllc2AgdXNhZ2UgYXMgd2VsbC4KCkJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgYFU2NF9NQVhgIGFuZCB0aGUgY2FsY3VsYXRpb25zIGludm9sdmluZyBgbGFzdF9wc2lfdG90YWxgLCBhcmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZm9yIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMuY2AgYXJlIGFsc28gd29ydGggY2xvc2VyIGV4YW1pbmF0aW9uLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHN0cnVjdCBhbmQgdGhlIHRpbWluZyBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODU6XHQgKi9cbjE3ODY6XHRcbjE3ODc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4xNzg4Olx0XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuMTc4OTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcbjE3OTA6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX2N0eDtcbjE3OTE6XHRcdHVuc2lnbmVkIGludCByZWZyZXNoX21zO1xuMTc5MjpcdFx0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcbjE3OTM6XHR9O1xuMTc5NDpcdFxuMTc5NTpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxuMTc5NjpcdHtcbjE3OTc6XHRcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCk7XG4xNzk4Olx0fVxuMTc5OTpcdFxuMTgwMDpcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZF9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbjE4MDE6XHR7XG4xODAyOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuMTgwMzpcdFx0aW50IGVycjtcbjE4MDQ6XHRcbjE4MDU6XHRcdGNvbnRleHRzID0gZGFtb25fc3lzZnNfY29udGV4dHNfYWxsb2MoKTtcbjE4MDY6XHRcdGlmICghY29udGV4dHMpXG4xODA3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTgwODpcdFxuMTgwOTpcdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2Y29udGV4dHMtXHUwMDNla29iaixcbjE4MTA6XHRcdFx0XHRcdTAwMjZkYW1vbl9zeXNmc19jb250ZXh0c19rdHlwZSwgXHUwMDI2a2RhbW9uZC1cdTAwM2Vrb2JqLFxuMTgxMTpcdFx0XHRcdFwmIzM0O2NvbnRleHRzXCYjMzQ7KTtcbjE4MTI6XHRcdGlmIChlcnIpIHtcbjE4MTM6XHRcdFx0a29iamVjdF9wdXQoXHUwMDI2Y29udGV4dHMtXHUwMDNla29iaik7XG4xODE0Olx0XHRcdHJldHVybiBlcnI7XG4xODE1Olx0XHR9XG4xODE2Olx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzID0gY29udGV4dHM7XG4xODE3Olx0XG4xODE4Olx0XHRyZXR1cm4gZXJyO1xuMTgxOTpcdH1cbjE4MjA6XHRcbjE4MjE6XHRzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4xODIyOlx0e1xuMTgyMzpcdFx0ZGFtb25fc3lzZnNfY29udGV4dHNfcm1fZGlycyhrZGFtb25kLVx1MDAzZWNvbnRleHRzKTtcbjE4MjQ6XHRcdGtvYmplY3RfcHV0KFx1MDAyNmtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNla29iaik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBjYWxjdWxhdGVzIHF1b3RhIGdvYWxzLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgdGFyZ2V0IHNpemUgb3IgY291bnQgb2YgcGFnZXMgd2UmIzM5O3JlIGFpbWluZyBmb3Igd2l0aGluIGEgbW9uaXRvcmluZyByZWdpb24sIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBxdW90YSBjb25zdHJhaW50cy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgYmFzZWQgb24gc29tZSBmaXhlZCBwZXJjZW50YWdlLCBkeW5hbWljIGNhbGN1bGF0aW9ucywgb3IgYSBjb21iaW5hdGlvbi4gVGhlICYjMzQ7bmV3JiMzNDsgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gY29tcHV0aW5nIHRoZSB0YXJnZXQgYWZ0ZXIgc29tZSBjaGFuZ2UgaW4gbWVtb3J5IHByZXNzdXJlIG9yIHRoZSBEQU1PTiBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBsb29rIGZvciBpbnB1dCB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBwYXJhbWV0ZXJzIGxpa2U6CgoqICAgQ3VycmVudCBxdW90YSBsaW1pdAoqICAgQ3VycmVudCBtb25pdG9yZWQgcmVnaW9uIHNpemUKKiAgIFBvc3NpYmxlIGFkanVzdG1lbnRzIGJhc2VkIG9uIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQvb3IgREFNT04mIzM5O3MgZmVlZGJhY2suCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIHNjZW5hcmlvcywgaWYgaXQgZXhpc3RzLCB0byBlbnN1cmUgaXQgaGFuZGxlcyBib3VuZGFyeSBjb25kaXRpb25zIHdlbGwuIE15IG9iamVjdGl2ZSBpcyB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBxdW90YS1yZWxhdGVkIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIERBTU9OIG1hY2hpbmVyeSwgc3BlY2lmaWNhbGx5IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGxvb3BzLiBJJiMzOTttIGtlZW4gb24gZmluZGluZyB0aGUgY29yZSBsb2dpYyB0byBzZWUgaG93IGl0IGJhbGFuY2VzIGFjY3VyYWN5IG9mIG1vbml0b3Jpbmcgd2l0aCBhbnkgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MjU6XHR9XG4gNjI2Olx0XG4gNjI3Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuIDYyODpcdFx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbiA2Mjk6XHRcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXG4gNjMwOlx0e1xuIDYzMTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4gNjMyOlx0XG4gNjMzOlx0XHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xuIDYzNDpcdFx0aWYgKCFnb2FsKVxuIDYzNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2MzY6XHRcdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuIDYzNzpcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XG4gNjM4Olx0XHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiA2Mzk6XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4gNjQwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZnb2FsLVx1MDAzZWxpc3QpO1xuIDY0MTpcdFx0cmV0dXJuIGdvYWw7XG4gNjQyOlx0fVxuIDY0MzpcdFxuIDY0NDpcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbiA2NDU6XHR7XG4gNjQ2Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmctXHUwMDNlbGlzdCwgXHUwMDI2cS1cdTAwM2Vnb2Fscyk7XG4gNjQ3Olx0fVxuIDY0ODpcdFxuIDY0OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2RlbF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDY1MDpcdHtcbiA2NTE6XHRcdGxpc3RfZGVsKFx1MDAyNmctXHUwMDNlbGlzdCk7XG4gNjUyOlx0fVxuIDY1MzpcdFxuIDY1NDpcdHN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwIGludG8gYGRhbW9zX3F1b3RhX2dvYWxgKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIOKAkyBldmVyeSBzaW5nbGUgZmllbGQgd2l0aGluIGl0IGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgKnVzZWQqIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJJiMzOTttIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGRlY2xhcmF0aW9uczsgSSB3YW50IHRoZSByZWFsLXdvcmxkIHVzYWdlIHBhdHRlcm5zLiBBcmUgdGhlc2UgZmllbGRzIHJlYWQ/IE1vZGlmaWVkPyBJbiB3aGF0IGNvbnRleHRzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXM/IEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgZGVmaW5pdGlvbiB3aXRoIGFsbCB0aGUgcGxhY2VzIGl0JiMzOTtzIHJlZmVyZW5jZWQsIHRyYWNpbmcgZXZlcnkgcGF0aC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIHN0cnVjdCwgaXRzIHB1cnBvc2UsIGFuZCBpdHMgaW5mbHVlbmNlIG9uIHRoZSBzeXN0ZW0uIE5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayBob3cgdGhlIHF1b3RhIGdvYWxzIGFyZSBzZXQgYW5kIGFwcGxpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vc19xdW90YV9nb2FsIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYwPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTUtICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTk2OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTctXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgQ29yZTogRXhhbWluaW5nIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OJiMzOTtzIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbnRlcmZhY2VzIGFyZSBkZWZpbmVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgc2VjdGlvbiBiZWNhdXNlIEkgcmVjYWxsIGl0IGNvbnRhaW5pbmcgY3JpdGljYWwgZGVjbGFyYXRpb25zIHJlbGF0aW5nIHRvLi4uIHdlbGwsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGEgYml0LiBJcyBpdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciB0aGUgbW9uaXRvcmluZyBhZ2VudHMgdGhlbXNlbHZlcywgb3IgcGVyaGFwcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG1vbml0b3Jpbmcgc2Vzc2lvbj8gSXQgbWlnaHQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlICphY2Nlc3NfcmVjb3JkKiBzdHJ1Y3R1cmUuIEl0IGlzLCBzbyB0aGlzIHdpbGwgZGV0YWlsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhY2Nlc3Mgb2YgYSBtZW1vcnkgcmVnaW9uLiBBbmQgdGhlIERBTU9OIG1vbml0b3Jpbmcgc2Vzc2lvbiB3b3VsZCB1dGlsaXplIHRoZXNlIHJlY29yZHMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYSBtb25pdG9yaW5nIHNlc3Npb24gaXMgaW5pdGlhbGl6ZWQgYW5kIGhvdyB0aGVzZSBhZ2VudCBzdHJ1Y3R1cmVzIGludGVncmF0ZSB3aXRoIHRoZSBvdmVyYWxsIGZyYW1ld29yay4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhY2Nlc3MgZGF0YSBpcyBjYXB0dXJlZCBhbmQgaW50ZXJwcmV0ZWQgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgaG93IEkgd291bGQgaW1wbGVtZW50IGFjY2Vzcy1hd2FyZSBtZW1vcnkgb3B0aW1pemF0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZnJhbWV3b3JrIHByb3ZpZGVzIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB0byBvcHRpbWl6ZSBtZW1vcnkgbWFuYWdlbWVudC4gSSByZWFsbHkgbmVlZCB0byBnZXQgdGhlIGxheW91dCBvZiB0aGlzIHN0dWZmIHNvIEkgY2FuIG1vdmUgZm9yd2FyZCBpbiBteSBjdXJyZW50IHJlc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0ICogSWYgQG1ldHJpYyBpcyBEQU1PU19RVU9UQV9OT0RFX01FTV97VVNFRCxGUkVFfV9CUCwgQG5pZCByZXByZXNlbnRzIHRoZSBub2RlXG4gMTkxOlx0ICogaWQgb2YgdGhlIHRhcmdldCBub2RlIHRvIGFjY291bnQgdGhlIHVzZWQvZnJlZSBtZW1vcnkuXG4gMTkyOlx0ICpcbiAxOTM6XHQgKiBJZiBAbWV0cmljIGlzIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfe1VTRUQsRlJFRX1fQlAsIEBuaWQgYW5kIEBtZW1jZ19pZFxuIDE5NDpcdCAqIHJlcHJlc2VudHMgdGhlIG5vZGUgaWQgYW5kIHRoZSBjZ3JvdXAgdG8gYWNjb3VudCB0aGUgdXNlZCBtZW1vcnkgZm9yLlxuIDE5NTpcdCAqL1xuIDE5NjpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcbiAxOTc6XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xuIDE5ODpcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG4gMTk5Olx0XHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XG4gMjAwOlx0XHQvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqL1xuIDIwMTpcdFx0dW5pb24ge1xuIDIwMjpcdFx0XHRzdHJ1Y3Qge1xuIDIwMzpcdFx0XHRcdGludCBuaWQ7XG4gMjA0Olx0XHRcdFx0dTY0IG1lbWNnX2lkO1xuIDIwNTpcdFx0XHR9O1xuIDIwNjpcdC8qIHByaXZhdGU6ICovXG4gMjA3Olx0XHRcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXG4gMjA4Olx0XHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbiAyMDk6XHRcbiAyMTA6XHRcdH07XG4gMjExOlx0LyogcHJpdmF0ZTogKi9cbiAyMTI6XHRcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gMjEzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gMjE0Olx0fTtcbiAyMTU6XHRcbiAyMTY6XHQvKipcbiAyMTc6XHQgKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgLSBHb2FsLWJhc2VkIHF1b3RhIHR1bmluZyBsb2dpYy5cbiAyMTg6XHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxuIDIxOTpcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMOlx0QWltIHplcm8gcXVvdGEgYXNhcC5cbiAyMjA6XHQgKi9cbiAyMjE6XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xuIDIyMjpcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNULFxuIDIyMzpcdFx0REFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcbiAyMjQ6XHR9O1xuIDIyNTpcdFxuIDIyNjpcdC8qKlxuIDIyNzpcdCAqIHN0cnVjdCBkYW1vc19xdW90YSAtIENvbnRyb2xzIHRoZSBhZ2dyZXNzaXZlbmVzcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxuIDIyODpcdCAqIEByZXNldF9pbnRlcnZhbDpcdENoYXJnZSByZXNldCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuXG4gMjI5Olx0ICogQG1zOlx0XHRcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RydWN0dXJlIGBkYW1vc19xdW90YV9nb2FsYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYC4gSSBzZWUgdGhlIGtleSBtZW1iZXJzOiBgbWV0cmljYCwgYHRhcmdldF92YWx1ZWAsIGBjdXJyZW50X3ZhbHVlYCwgYW5kIHRoZW4gdGhpcyB1bmlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdlIGhhdmUgZWl0aGVyIGEgbm9kZSBJRCBhbmQgbWVtY2cgSUQgcGFpciwgb3IgYSBgbGFzdF9wc2lfdG90YWxgIHZhbHVlIGluIHRoZXJlLiBDbGVhcmx5IGRlc2lnbmVkIGZvciBzb21lIGtpbmQgb2YgcmVzb3VyY2UgcXVvdGEgbWFuYWdlbWVudC4gQmVmb3JlIEkgZ28gdG9vIGZhciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHN0cnVjdHVyZS4KCk15IG5leHQgbW92ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBkYW1vc19xdW90YV9nb2FsYCBpcyBhbGxvY2F0ZWQsIGluaXRpYWxpemVkLCB1c2VkLCBvciBmcmVlZC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYGRhbW9zX25ld19xdW90YV9nb2FsYCAoYXNzdW1pbmcgdGhpcyBpcyBob3cgaXTigJlzIGFsbG9jYXRlZCBvciBjb25zdHJ1Y3RlZCksIGFuZCBhbHNvIGEgZ2VuZXJpYyBzZWFyY2ggZm9yIHRoZSBzdHJ1Y3R1cmUgbmFtZSBpdHNlbGYsIGBkYW1vc19xdW90YV9nb2FsYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIHVuaW9uIGlzIGxpa2VseSBiZWluZyB1c2VkIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfbmV3X3F1b3RhX2dvYWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMzc9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMzk6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDAtXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02MjYtXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy02MjgtXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTY5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjExODQ6XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTE4NS1cdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXHRcdHJldHVybiAtRUlOVkFMO1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTIzOS1cdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQzOlx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVx0XHRcdDEwMDAwIC0gYWN0aXZlX21lbV9icCAmIzQzOyAyKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVx0XHRcdFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ0Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTI0NS1cdFx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjE6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChzeXNmc19nb2FsLVx1MDAzZW1ldHJpYyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYyLVx0XHRcdFx0c3lzZnNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Mzg9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVx0XHQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cdFx0XHRcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE2MS1cdFx0Z290byBmcmVlX291dDtcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxNjI6XHRxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTYzLVx0XHRcdHByb21vdGUgPyBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQIDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcXVvdGEgZ29hbHMgYW5kIGN1cnJlbnQgdmFsdWVzIGFyZSBiZWluZyBzZXQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0LiBUaGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBudWFuY2VzIG9yIG9wdGltaXphdGlvbnMgdG8gdW5jb3ZlciBoZXJlIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgaW4gbXkgY3VycmVudCBwcm9qZWN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBmbHVjdHVhdGlvbnMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzIOKAkyBlbnN1cmluZyB0aGUgcXVvdGEgbWFuYWdlbWVudCBpcyByb2J1c3QgYW5kIGVmZmljaWVudC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIHRoaXMgYXJlYSBhcmUgc29saWQgYmVmb3JlIGJ1aWxkaW5nIG9uIHRvcCBvZiB0aGVtLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMTU6XHR9XG4zMDE2Olx0XG4zMDE3Olx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMzAxODpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuMzAxOTpcdHtcbjMwMjA6XHRcdHU2NCBub3dfcHNpX3RvdGFsO1xuMzAyMTpcdFxuMzAyMjpcdFx0c3dpdGNoIChnb2FsLVx1MDAzZW1ldHJpYykge1xuMzAyMzpcdFx0Y2FzZSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlxuMzAyNDpcdFx0XHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgKi9cbjMwMjU6XHRcdFx0YnJlYWs7XG4zMDI2Olx0XHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbjMwMjc6XHRcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbjMwMjg6XHRcdFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xuMzAyOTpcdFx0XHRpZiAoZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxuMzAzMDpcdFx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMzAzMTpcdFx0XHRlbHNlXG4zMDMyOlx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtXG4zMDMzOlx0XHRcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuMzAzNDpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbjMwMzU6XHRcdFx0YnJlYWs7XG4zMDM2Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4zMDM3Olx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4zMDM4Olx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX21lbV9icChnb2FsKTtcbjMwMzk6XHRcdFx0YnJlYWs7XG4zMDQwOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjMwNDE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMzA0MjpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xuMzA0MzpcdFx0XHRicmVhaztcbjMwNDQ6XHRcdGNhc2UgREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUDpcbjMwNDU6XHRcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxuMzA0NjpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcbjMwNDc6XHRcdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuMzA0ODpcdFx0XHRicmVhaztcbjMwNDk6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4zMDUwOlx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxuMzA1MTpcdFx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuMzA1MjpcdFx0XHRicmVhaztcbjMwNTM6XHRcdGRlZmF1bHQ6XG4zMDU0Olx0XHRcdGJyZWFrO1xuMzA1NTpcdFx0fVxuMzA1NjpcdH1cbjMwNTc6XHRcbjMwNTg6XHQvKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXG4zMDU5Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9TIFF1b3RhIEdvYWwgSW5pdGlhbGl6YXRpb24gYW5kIFVwZGF0ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsYCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBJdCBzZWVtZWQgbGlrZSBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIHByZXZpb3VzbHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaXNzdWVzLCBwYXJ0aWN1bGFybHkgaWYgYGttYWxsb2NgIHdhcyBpbnZvbHZlZCwgd2hpY2ggaXQgd2FzLiBJIHdhcyBzZWVpbmcgdGhhdCBpdCBjb3VsZCBlaXRoZXIgYmUgemVybyBvciB1bmluaXRpYWxpemVkLiBUaGF0IG1hZGUgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHN1YnRyYWN0aW9ucyB3aXRoIHplcm8gaW4gcHJpb3IgY2FsY3VsYXRpb25zLgoKQWgsIEkgc2VlLiBXaXRoIHRoZSBwYXRjaCwgYGttYWxsb2Nfb2JqKCpnb2FsKWAgaXMgdXNlZCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBmb2xsb3dlZCBieSBjb25kaXRpb25hbCBpbml0aWFsaXphdGlvbiBvZiBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYYCBvbmx5IGlmIHRoZSBtZXRyaWMgaXMgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIFRoZSBjb21taXQgZnVuY3Rpb24gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbHNvIHNldHMgYGRzdC0mZ3Q7bGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYYCBmb3IgdGhhdCBzYW1lIG1ldHJpYy4gVGhpcyBtYWtlcyBzZW5zZS4KClRoZW4gSSBjb25zaWRlcmVkIGBzeXNmcy5jYC4gSSBub3RpY2VkIGBkYW1vbl9zeXNmc19rZGFtb25kYCBub3cgaGFzIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaW4gcGxhY2Ugb2YgYSBnbG9iYWwsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlLiBBbmQgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBzYWZlLiBJbiBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGBrZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllc2AgaXMgc2V0IHVzaW5nIGBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcylgLiBUaGF0IGxvb2tzIHNvbGlkIGFuZCBhcyBleHBlY3RlZC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgb3RoZXIgbWV0cmljcyBhcmUgaGFuZGxlZCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIHVuaW9uIGZpZWxkcyBsaWtlIGBuaWRgIGFuZCBgbWVtY2dfaWRgIGFyZSBpbml0aWFsaXplZCBhbG9uZ3NpZGUgYGxhc3RfcHNpX3RvdGFsYCB3aXRoIHJlc3BlY3QgdG8gb3RoZXIgbWV0cmljcy4gSSBzaG91bGQgcmV2aWV3IGFsbCB0aGUgY2FsbHMgdG8gYGRhbW9zX25ld19xdW90YV9nb2FsYCB0byB2ZXJpZnkgdGhlc2UgaW5pdGlhbGl6YXRpb25zIGFyZSBjb25zaXN0ZW50IGFuZCByb2J1c3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsfGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTExMTA9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMi1cbm1tL2RhbW9uL2NvcmUuYzoxMTIzOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExMjQtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExNDYtXG5tbS9kYW1vbi9jb3JlLmM6MTE0NzpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTQ4LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTUzLVx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jOjExNTQ6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE1NS19XG4tLVxubW0vZGFtb24vY29yZS5jLTExNTctLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTE1ODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTExNTktICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjgtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2OTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMTcwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ni1cdFx0aWYgKHNyY19nb2FsKVxubW0vZGFtb24vY29yZS5jOjExNzc6XHRcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTExODMtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE4NDpcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTg3LVx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjExODg6XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMTE4OS1cdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTExOTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjAwLVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjEyMDE6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyMDItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9kYW1vbi9scnVfc29ydC5jOjIzODpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDQtXHRcdFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICYjNDM7IDIpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVx0XHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXHUwMDNlbWV0cmljLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjItXHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MTgtXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTE5Olx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1My17XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU0Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1NS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1My1cdFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2Fscyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTQ6XHRcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1NS1cdFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVx0XHQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cdFx0XHRcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjYtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODY3Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZWAuIFJpZ2h0LCB0aGF0JiMzOTtzIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBob3cgREFNT04gaGFuZGxlcyBxdW90YSBzY29yaW5nIHRocm91Z2ggc3lzZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgcXVvdGEgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgREFNT04gY29tcG9uZW50cy4gSSBleHBlY3QgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBxdW90YSBsaW1pdHMgYXJlIGRlZmluZWQsIGhvdyBzY29yaW5nIGxvZ2ljIGlzIGFwcGxpZWQsIGFuZCBob3cgcmVzdWx0cyBhcmUgZXhwb3NlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgaW1wbGVtZW50aW5nIGEgcXVvdGEgc3lzdGVtIHdpdGhpbiBhIG1vbml0b3JpbmcgZnJhbWV3b3JrLiBJJiMzOTttIGdvaW5nIGluIHdpdGggYSBoeXBvdGhlc2lzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgc2NvcmluZyBwYXJhbWV0ZXJzIGFyZSB1cGRhdGVkIGJhc2VkIG9uIHVzZXIgaW5wdXQsIGFuZCBpdCBzZXRzIHRoZSBzdGFnZSBmb3IgdGhlIG1vbml0b3JpbmcgZnJhbWV3b3JrIHRvIHN0YXJ0IG9ic2VydmluZyB0aGUgcmVzb3VyY2UgdXNhZ2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg0NzpcdHN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuMjg0ODpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxuMjg0OTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuMjg1MDpcdHtcbjI4NTE6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuMjg1MjpcdFx0aW50IGksIGVycjtcbjI4NTM6XHRcbjI4NTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c2ZzX2dvYWxzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuMjg1NTpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XG4yODU2Olx0XHRcdFx0c3lzZnNfZ29hbHMtXHUwMDNlZ29hbHNfYXJyW2ldO1xuMjg1NzpcdFxuMjg1ODpcdFx0XHRpZiAoIXN5c2ZzX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKVxuMjg1OTpcdFx0XHRcdGNvbnRpbnVlO1xuMjg2MDpcdFxuMjg2MTpcdFx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cdTAwM2VtZXRyaWMsXG4yODYyOlx0XHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4yODYzOlx0XHRcdGlmICghZ29hbClcbjI4NjQ6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4NjU6XHRcdFx0c3dpdGNoIChzeXNmc19nb2FsLVx1MDAzZW1ldHJpYykge1xuMjg2NjpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XG4yODY3Olx0XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuMjg2ODpcdFx0XHRcdGJyZWFrO1xuMjg2OTpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4yODcwOlx0XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbjI4NzE6XHRcdFx0XHRnb2FsLVx1MDAzZW5pZCA9IHN5c2ZzX2dvYWwtXHUwMDNlbmlkO1xuMjg3MjpcdFx0XHRcdGJyZWFrO1xuMjg3MzpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjI4NzQ6XHRcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG4yODc1Olx0XHRcdFx0ZXJyID0gZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChcbjI4NzY6XHRcdFx0XHRcdFx0c3lzZnNfZ29hbC1cdTAwM2VwYXRoLCBcdTAwMjZnb2FsLVx1MDAzZW1lbWNnX2lkKTtcbjI4Nzc6XHRcdFx0XHRpZiAoZXJyKSB7XG4yODc4Olx0XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZ29hbCk7XG4yODc5Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjg4MDpcdFx0XHRcdH1cbjI4ODE6XHRcdFx0XHRnb2FsLVx1MDAzZW5pZCA9IHN5c2ZzX2dvYWwtXHUwMDNlbmlkO1xuMjg4MjpcdFx0XHRcdGJyZWFrO1xuMjg4MzpcdFx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxuMjg4NDpcdFx0XHRcdGdvYWwtXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cdTAwM2VuaWQ7XG4yODg1Olx0XHRcdFx0YnJlYWs7XG4yODg2Olx0XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Njc1CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9TIFF1b3RhIEdvYWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZWAsIHdlJiMzOTtyZSBjcmVhdGluZyBhIG5ldyBxdW90YSBnb2FsIGJhc2VkIG9uIHRoZSBgc3lzZnNfZ29hbGAgZGF0YS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB1cGRhdGluZyBob3cgd2UgaGFuZGxlIHNwZWNpZmljIHF1b3RhIG1ldHJpY3MsIG5hbWVseSB0aG9zZSByZWxhdGVkIHRvIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGFuZCBub2RlLWVsaWdpYmxlIG1lbW9yeS4gSSBzZWUgdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGlzIGNydWNpYWwsIGNvcHlpbmcgdmFsdWVzLCBhbmQgdGhlbiBjYWxsaW5nIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlIGtleSBjaGFuZ2VzOiAgYGxhc3RfcHNpX3RvdGFsYCBpcyBpbml0aWFsaXplZCB3aXRoIGBVNjRfTUFYYCB3aGVuIGNvbW1pdHRpbmcgb3IgY3JlYXRpbmcgZ29hbHMgZm9yIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCBgbmlkYCBiZWluZyBjb21taXR0ZWQgdG8gZHN0IGZvciBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLiAgVGhlIHVwZGF0ZSBpbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoYXQgaW5pdGlhbCBQU0kgZGF0YS4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB3ZSYjMzk7cmUgY29weWluZyBkYXRhIG91dC4gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSYjMzk7cmUgdXNpbmcgc3RhbmRhcmQgc3lzZnMgcmVhZHMvd3JpdGVzIGZvciBEQU1PTiwgc28gc3RyaW5nIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcgYXJlIGJlaW5nIHVzZWQuIE5vIGRpcmVjdCBzdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHByZXZpb3VzIGxvZ2ljYWwgaXNzdWUgd2l0aCBQU0kgdG90YWwgcXVvdGEgYnkgaW5pdGlhbGl6aW5nIG9yIGNvcHlpbmcgdGhlIGBuaWRgIGZpZWxkLiBObyBLTVNBTiBhbGVydHMgaGVyZS4KClRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBjbGFzc2ljIEtNU0FOICYjMzQ7cmVkIGZsYWdzLiYjMzQ7IEtNU0FOIGZsYWdzIGNvZGUgdGhhdCBzZW5kcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGFsbG9jYXRlcyBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgaGFzIHBvdGVudGlhbCBidWZmZXIgYWNjZXNzIGlzc3VlcyBmcm9tIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpCYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGUgY2hhbmdlczoKCjEuICBUaGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG9zc2libHkgdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICBDb25kaXRpb25hbCBsb2dpYyBzZWVtcyBzYWZlLCBhcyB0aGUgUFNJIHRvdGFsIHF1b3RhIGlzc3VlIGlzIHNwZWNpZmljYWxseSBmaXhlZCBpbiB0aGUgcGF0Y2guCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGlzIHNvdW5kLiBFdmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgYWxsb2NhdGVkIG1lbW9yeSB1c2VzIHplcm8tYWxsb2NhdG9ycy4KNC4gIE5vIGJ1ZmZlciBhY2Nlc3MgaXNzdWVzLiBUaGUgY2hhbmdlcyBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uLCBzbyB0aGUgY2hhbmNlIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGlzIHZlcnkgbG93LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBgZmFsc2VgLgoKSGVyZSYjMzk7cyBteSByYXRpb25hbGUgZm9yIGZvcm11bGF0aW5nIGEgY29tcGxldGUgYEtNU0FOUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9TIHF1b3RhIGdvYWwgaGFuZGxpbmcuIEl0JiMzOTtzIGZvY3VzZWQgb24gdGhlIGludGVybmFsIHF1b3RhIGNhbGN1bGF0aW9uIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIHdpdGhpbiBEQU1PTiBhbmQgaG93IHdlIGhhbmRsZSBzeXNmcyBhdHRyaWJ1dGVzLiBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKHRoaW5ncyBsaWtlIGlvY3RsLCBuZXRsaW5rLCBvciBCUEYgb3V0cHV0cykuIE1lbW9yeSBhbGxvY2F0aW9ucyB1c2UgYGt6YWxsb2Nfb2JqYCwgYW5kIG5ldyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBleHBvc2VkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQuIFdlJiMzOTtyZSBnb29kIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGdvYWwgY2FsY3VsYXRpb24gbG9naWMgKHNwZWNpZmljYWxseSBpbml0aWFsaXppbmcgYW5kIGhhbmRsaW5nIHRoZSBsYXN0IFBTSSB0b3RhbCBzZW50aW5lbCBhbmQgY29tbWl0dGluZyB0aGUgbm9kZSBJRCBmb3IgZWxpZ2libGUgbWVtb3J5IGdvYWxzKSBhbmQgbW92ZXMgYSBnbG9iYWwgc3lzZnMgcmVmcmVzaCBqaWZmaWVzIHRpbWVzdGFtcCB0byBwZXIta2RhbW9uZCBzdHJ1Y3QgaW5zdGFuY2VzLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZDpcbjEuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgKHN5c2ZzIHVzZXMgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdHRpbmcpLlxuMi4gVGhlIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKGUuZy4sIGBkYW1vbl9zeXNmc19rZGFtb25kYCB2aWEgYGt6YWxsb2Nfb2JqYCwgZXhwbGljaXQgZmllbGQgaW5pdGlhbGl6YXRpb24gaW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCkuXG4zLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgZ29hbCBjYWxjdWxhdGlvbiBsb2dpYyAoc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlIGxhc3QgUFNJIHRvdGFsIHNlbnRpbmVsIGFuZCBjb21taXR0aW5nIHRoZSBub2RlIElEIGZvciBlbGlnaWJsZSBtZW1vcnkgZ29hbHMpIGFuZCBtb3ZlcyBhIGdsb2JhbCBzeXNmcyByZWZyZXNoIGppZmZpZXMgdGltZXN0YW1wIHRvIHBlci1rZGFtb25kIHN0cnVjdCBpbnN0YW5jZXMuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkOlxuMS4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0cyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSAoc3lzZnMgdXNlcyBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0dGluZykuXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cbjMuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgY2FsY3VsYXRpb25zIHdpdGhpbiBEQU1PTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6MTQuMTk0ODI2NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE4OTE2MDMwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJQU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBnb2FsIGNhbGN1bGF0aW9uIGxvZ2ljIChzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGFuZCBoYW5kbGluZyB0aGUgbGFzdCBQU0kgdG90YWwgc2VudGluZWwgYW5kIGNvbW1pdHRpbmcgdGhlIG5vZGUgSUQgZm9yIGVsaWdpYmxlIG1lbW9yeSBnb2FscykgYW5kIG1vdmVzIGEgZ2xvYmFsIHN5c2ZzIHJlZnJlc2ggamlmZmllcyB0aW1lc3RhbXAgdG8gcGVyLWtkYW1vbmQgc3RydWN0IGluc3RhbmNlcy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZDpcXG4xLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3RzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIChzeXNmcyB1c2VzIHN0YW5kYXJkIHN0cmluZyBmb3JtYXR0aW5nKS5cXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cXG4zLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgTU0gY29yZSBhbmQgc3lzZnMgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb21taXQgYmVoYXZpb3Igb2YgUFNJIGFuZCBub2RlLWVsaWdpYmxlLW1lbW9yeSBEQU1PUyBxdW90YSBnb2FscywgYW5kIGNoYW5naW5nIGdsb2JhbCBzeXNmcyB1cGRhdGUgdGltaW5nIHRvIHBlci1rZGFtb25kIHJlZnJlc2ggdHJhY2tpbmcuIFRoZXNlIGFyZSByZWFjaGFibGUgcnVudGltZSBsb2dpYyBwYXRocyB2aWEgc3lzZnMgYW5kIERBTU9OIEFQSXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjE0LjE5NDgzNDE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE5ODE4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MDUzMDBlMWM1ZTQwOWIxYzJjMTBmZTQ3Njk0ZTYwNDY5MDlhMmUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjcwZWU4NWI0MTQ2NDYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPSBtZXRyaWM7XFxuIFxcdGdvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcXG4rXFx0aWYgKG1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXFxuK1xcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmdvYWwtXFx1MDAzZWxpc3QpO1xcbiBcXHRyZXR1cm4gZ29hbDtcXG4gfVxcbkBAIC0xMTIyLDYgKzExMjQsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4ge1xcbiBcXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuK1xcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbitcXHRcXHRkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbiBcXHRcXHRkc3QtXFx1MDAzZW5pZCA9IHNyYy1cXHUwMDNlbmlkO1xcbkBAIC0xMTMxLDYgKzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0XFx0ZHN0LVxcdTAwM2VuaWQgPSBzcmMtXFx1MDAzZW5pZDtcXG4gXFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbitcXHRcXHRkc3QtXFx1MDAzZW5pZCA9IHNyYy1cXHUwMDNlbmlkO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMTE0Myw3ICsxMTUxLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuIFxcdGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuIFxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbiBcXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxuLVxcdC8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovXFxuIFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4gfVxcbiBcXG5AQCAtMzAxOCw3ICszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbiBcXHRcXHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbi1cXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO1xcbitcXHRcXHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXFxuK1xcdFxcdGlmIChnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9PSBVNjRfTUFYKVxcbitcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cXG4rXFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuIFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXFxuQEAgLTE3ODksNiArMTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xcbiBcXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbkBAIC0yMjE1LDE3ICsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuIFxcdHJldHVybiBjdHg7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xcbiBcXG4gXFx0aWYgKCFzeXNmc19rZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxcbitcXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgK1xcbitcXHRzeXNmc19rZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xcbiBcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbiBcXG4gXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG5AQCAtMjI3Myw4ICsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbiBcXHR9XFxuIFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4gXFxuLVxcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxcbi1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4rXFx0a2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcXG4rXFx0XFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4gXFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCA0YTUzNmQ0MWNkYjJkLi42NTQ0M2FiYTAzMzAwIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbkBAIC03NTEsMTkgKzc1MSwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXFxuIFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuIHtcXG4tXFx0dTY0IGRzdF9sYXN0X3BzaV90b3RhbCA9IDA7XFxuLVxcbi1cXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbi1cXHRcXHRkc3RfbGFzdF9wc2lfdG90YWwgPSBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO1xcbiBcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XFxuIFxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtZXRyaWMsIHNyYy1cXHUwMDNlbWV0cmljKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuIFxcdGlmIChzcmMtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbi1cXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFxcdTAwMjZcXHUwMDI2IHNyYy1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4tXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XFxuIFxcdHN3aXRjaCAoZHN0LVxcdTAwM2VtZXRyaWMpIHtcXG4rXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG5AQCAtNzg3LDYgKzc4NCwxMyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxcbiBcXHR9O1xcbiBcXG4rXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4rXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xcbitcXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbitcXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxcbitcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDM0NSxcXG4rXFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbitcXHRcXHRcXHR9KTtcXG4gXFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XFxuIFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDoxNC41OTc2NzQwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTExNzI5MDQxNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiUFNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfbmV3X3F1b3RhX2dvYWxcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIE1NIGNvcmUgYW5kIHN5c2ZzIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0IGJlaGF2aW9yIG9mIFBTSSBhbmQgbm9kZS1lbGlnaWJsZS1tZW1vcnkgREFNT1MgcXVvdGEgZ29hbHMsIGFuZCBjaGFuZ2luZyBnbG9iYWwgc3lzZnMgdXBkYXRlIHRpbWluZyB0byBwZXIta2RhbW9uZCByZWZyZXNoIHRyYWNraW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgcGF0aHMgdmlhIHN5c2ZzIGFuZCBEQU1PTiBBUElzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MDUzMDBlMWM1ZTQwOWIxYzJjMTBmZTQ3Njk0ZTYwNDY5MDlhMmUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTk6MDQ6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjcwZWU4NWI0MTQ2NDYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTYzNSw2ICs2MzUsOCBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbitcdGlmIChtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuK1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4gXHRyZXR1cm4gZ29hbDtcbiB9XG5AQCAtMTEyMiw2ICsxMTI0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuIFx0c3dpdGNoIChkc3QtXHUwMDNlbWV0cmljKSB7XG4rXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbitcdFx0ZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExMzEsNiArMTEzNiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbiBcdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xuIFx0XHRicmVhaztcbitcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4rXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTExNDMsNyArMTE1MSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0ZHN0LVx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cdTAwM2V0YXJnZXRfdmFsdWU7XG4gXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIFx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuLVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbiB9XG4gXG5AQCAtMzAxOCw3ICszMDI1LDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiBcdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbi1cdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4rXHRcdC8qIHVuaW5pdGlhbGl6ZWQgbGFzdF9wc2lfdG90YWw7IG1ha2Ugbm8gZWZmZWN0IHRoaXMgcm91bmQgKi9cbitcdFx0aWYgKGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPT0gVTY0X01BWClcbitcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZTtcbitcdFx0ZWxzZVxuK1x0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxuK1x0XHRcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTE3ODksNiArMTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7XG4gXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcbitcdHVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7XG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZClcbkBAIC0yMjE1LDE3ICsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4gXHRyZXR1cm4gY3R4O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzO1xuLVxuIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XG4gXG4gXHRpZiAoIXN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcylcbiBcdFx0cmV0dXJuIDA7XG4tXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcykpXG4rXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcykpXG4gXHRcdHJldHVybiAwO1xuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgK1xuK1x0c3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xuIFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4gXG4gXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG5AQCAtMjI3Myw4ICsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuIFx0fVxuIFx0a2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggPSBjdHg7XG4gXG4tXHRkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbitcdGtkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjY1NDQzYWJhMDMzMDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTc1MSwxOSArNzUxLDE2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCxcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiB7XG4tXHR1NjQgZHN0X2xhc3RfcHNpX3RvdGFsID0gMDtcbi1cbi1cdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbi1cdFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuIFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xuIFxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZXRyaWMsIHNyYy1cdTAwM2VtZXRyaWMpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2V0YXJnZXRfdmFsdWUsIHNyYy1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuIFx0aWYgKHNyYy1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlLCBzcmMtXHUwMDNlY3VycmVudF92YWx1ZSk7XG4tXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFx1MDAyNlx1MDAyNiBzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbi1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCwgZHN0X2xhc3RfcHNpX3RvdGFsKTtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcbiBcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xuQEAgLTc4Nyw2ICs3ODQsMTMgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcbiBcdH07XG4gXG4rXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4rXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XG4rXHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbitcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuK1x0XHRcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxuK1x0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcbitcdFx0XHR9KTtcbiBcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiBcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6MTQuNTk3Njc1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjQ3Njk4OTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgREFNT04gRnVuY3Rpb25hbGl0eSBcdTAwMjYgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBhIHJlbGF0ZWQgS1VuaXQgdGVzdCBoZWFkZXIsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBMZXQncyBkaWcgaW46XG5cbkZpcnN0bHksIGBtbS9kYW1vbi9jb3JlLmNgIGhhcyBzb21lIHF1b3RhIGFuZCBQU0ktcmVsYXRlZCBtb2RpZmljYXRpb25zOlxuXG4qICAgSSBzZWUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBzZXR0aW5nIGBsYXN0X3BzaV90b3RhbGAgdG8gYFU2NF9NQVhgIHVuZGVyIGEgc3BlY2lmaWMgYG1ldHJpY2AgY29uZGl0aW9uIChgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCkuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG5ldyBlZGdlIGNhc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIFBTSSB2YWx1ZXMuIEFsc28gdGhlcmUgaXMgYSBgbmlkYCBiZWluZyBzZXQgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCB3aGVuIGBtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLlxuKiAgIFRoZSBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24gaGFuZGxlcyBjYXNlcyB3aGVyZSBgbGFzdF9wc2lfdG90YWxgIGlzIHVuaW5pdGlhbGl6ZWQuIE15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZywgYmVjYXVzZSB0aGUgbmV3IGNoZWNrIGZvciBgVTY0X01BWGAgaGVyZSBjb3VsZCBiZSBoaWRpbmcgc29tZSBuZXcgbG9naWMuXG5cblNlY29uZGx5LCBgbW0vZGFtb24vc3lzZnMuY2AgcmV2ZWFsczpcblxuKiAgIFRoZSBjcnVjaWFsIGNoYW5nZSBoZXJlIGlzIGdvaW5nIGZyb20gYSBnbG9iYWwgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIHRvIGEgcGVyLWtkYW1vbmQgYHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHN5c2ZzIGFuZCBob3cgaXQgbWlnaHQgaW50cm9kdWNlIG5ldyB0aW1pbmcvc3luY2hyb25pemF0aW9uIGlzc3Vlcywgd2hpY2ggY291bGQgdGhlbiBiZWNvbWUgZnV6emluZyB0YXJnZXRzLlxuKiAgIEl0IGFsc28gbW9kaWZpZXMgdGhlIGZ1bmN0aW9ucyBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIGFuZCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN5c2ZzIGFyZSBiZWluZyBtb2RpZmllZC5cblxuRmluYWxseSwgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgaGFzIHRlc3QgdXBkYXRlcywgd2hpY2ggaXMgZ29vZC4gSG93ZXZlciwgdGhlc2UgYXJlIG9mdGVuIGp1c3QgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZywgb3IgYXQgbGVhc3QgdGhleSB1c3VhbGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBzY29wZSBvZiBwb3RlbnRpYWwgYnVncy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIERBTU9OIGFuZCBhbGwgaXRzIHJlbGV2YW50IGNvbXBvbmVudHMgKHN5c2ZzLCBQU0ksIGV0Yy4pLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgKG9yIGp1c3QgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBkaXJlY3RseSkgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGxvZ2ljIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgb2xkIG9uZSwgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IHRoZSBjaGFuZ2VkIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c2ZzIGZpbGVzIG1heSBiZWNvbWUgYSBmdXp6aW5nIHRhcmdldC5cblxuQmFzZWQgb24gdGhpcyBpbml0aWFsIHJldmlldywgSSdkIHNheSB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGUgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoZSBwZXIta2RhbW9uZCBzeXNmcyBtb2RpZmljYXRpb24gYW5kIHRoZSBoYW5kbGluZyBvZiB1bmluaXRpYWxpemVkIHZhbHVlcywgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjI3LjA3NDY2OTE2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEwNTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDoyNy4xMjE3ODAwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMTIxNTA1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkaXJlY3RpdmVzLCBzdHJ1Y3R1cmVkIGZvciBzb21lb25lIHdpdGggYSBzb2xpZCBncmFzcCBvZiBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBEQU1PTiBjb2RlYmFzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIG9wdGlvbnMgcmVsYXRpbmcgdG8gREFNT04gaXRzZWxmLCBvYnZpb3VzbHkg4oCTIGBEQU1PTmAsIG5hdHVyYWxseSDigJMgYnV0IGFsc28gdGhlIHN5c2ZzIGludGVncmF0aW9uLCBgREFNT05fU1lTRlNgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBleHBvc2VkIGFuZCBjb250cm9sbGVkLiBUaGVuLCBJIHdpbGwgYWxzbyBjaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIERBTU9OIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0cyB2YXJpb3VzIGNvbXBvbmVudHMgYXJlIGVuYWJsZWQgYW5kIGJ1aWx0LiBJdCdzIHRpbWUgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBvciBpbXByb3ZlbWVudHMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGR1ZyBpbnRvIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDozMy4yMzM5MzI3MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDozMy4yMzQwMjAzMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODgyNjQ0MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBEQU1PTiBzdWJzeXN0ZW0gc2hvdWxkIHJlc2lkZSwgYW5kIGl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBjb21waWxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxhdGlvbiBmbGFncywgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IERBTU9OIG1vZHVsZXMgbWlnaHQgYmUgbGlua2VkIHRvZ2V0aGVyLiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgZG9jdW1lbnRzIHRoZSBidWlsZCBwcm9jZXNzLiBLbm93aW5nIHRoZSBNYWtlZmlsZSB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSBpbi1kZXB0aCBpbnZlc3RpZ2F0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjM2LjExNjY2NzM1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjM2LjExNjc0NzY0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1MDgwMjkzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlIENvZGUgZm9yIFF1b3RhIEZlYXR1cmVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXMgYXJlIGF0IHBsYXkgaGVyZS4gTG9va2luZyBhdCBgY29yZS5jYCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCwgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYC4gSXQncyBjbGVhciB0aG9zZSBhcmUgY2VudHJhbCB0byB0aGUgcXVvdGEgbWFuYWdlbWVudC4gQW5kIEkgc2VlIHRoZXNlIG1hY3JvczogYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgYW5kIGBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUGAuIE5vdyB0aGUgcHJlc2VuY2Ugb2YgYFBTSWAgaXMgaW50cmlndWluZywgc28gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhhdC4gTGV0J3MgbG9vayBmb3IgaG93IGBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsYCBpcyBkZXBlbmRlbnQgb24gd2hldGhlciBvciBub3QgYENPTkZJR19QU0lgIGlzIGRlZmluZWQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgb24gaG93IG1lbW9yeSBwcmVzc3VyZSBpcyBiZWluZyBjb25zaWRlcmVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDo0NC42MjQ3ODAxMzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzAyOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI3NTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQodW5zaWduZWQgbG9uZyBsYXN0X2lucHV0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3ODctXFxubW0vZGFtb24vY29yZS5jOjI3ODg6c3RhdGljIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTI3ODkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3OTctXFxubW0vZGFtb24vY29yZS5jOjI3OTg6c3RhdGljIGlubGluZSB1NjQgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzk5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDE3PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDI2LVxcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbm1tL2RhbW9uL2NvcmUuYzozMDI3OlxcdFxcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxubW0vZGFtb24vY29yZS5jLTMwMjgtXFx0XFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDo0NC42NzE0OTA1NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzNDc4MTkwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAyNzg1LiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgd2l0aCBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eSwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvciBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBoZWFydCBvZiBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtLiBMZXQncyBzZWUgaWYgaXQgZGVhbHMgd2l0aCB0aGUgbW9uaXRvcmluZyBwcm9jZXNzIGl0c2VsZiwgdGhlIGRhdGEgcHJvY2Vzc2luZywgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2Ygc2FtcGxpbmcgb3IgdHJpZ2dlcmluZyBldmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc25pcHBldCdzIGltbWVkaWF0ZSBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IHRpZXMgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNDo1NS4wMTkzMTgwMDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzgwOlxcdFxcdFxcdHJldHVybiBtYXgobGFzdF9pbnB1dCAtIGNvbXBlbnNhdGlvbiwgbWluX2lucHV0KTtcXG4yNzgxOlxcdFxcdGlmIChsYXN0X2lucHV0IFxcdTAwM2MgVUxPTkdfTUFYIC0gY29tcGVuc2F0aW9uKVxcbjI3ODI6XFx0XFx0XFx0cmV0dXJuIGxhc3RfaW5wdXQgKyBjb21wZW5zYXRpb247XFxuMjc4MzpcXHRcXHRyZXR1cm4gVUxPTkdfTUFYO1xcbjI3ODQ6XFx0fVxcbjI3ODU6XFx0XFxuMjc4NjpcXHQjaWZkZWYgQ09ORklHX1BTSVxcbjI3ODc6XFx0XFxuMjc4ODpcXHRzdGF0aWMgdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZClcXG4yNzg5OlxcdHtcXG4yNzkwOlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2cHNpX2Rpc2FibGVkKSlcXG4yNzkxOlxcdFxcdFxcdHJldHVybiAwO1xcbjI3OTI6XFx0XFx0cmV0dXJuIGRpdl91NjQocHNpX3N5c3RlbS50b3RhbFtQU0lfQVZHU11bUFNJX01FTSAqIDJdLFxcbjI3OTM6XFx0XFx0XFx0XFx0TlNFQ19QRVJfVVNFQyk7XFxuMjc5NDpcXHR9XFxuMjc5NTpcXHRcXG4yNzk2OlxcdCNlbHNlXFx0LyogQ09ORklHX1BTSSAqL1xcbjI3OTc6XFx0XFxuMjc5ODpcXHRzdGF0aWMgaW5saW5lIHU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXFxuMjc5OTpcXHR7XFxuMjgwMDpcXHRcXHRyZXR1cm4gMDtcXG4yODAxOlxcdH1cXG4yODAyOlxcdFxcbjI4MDM6XFx0I2VuZGlmXFx0LyogQ09ORklHX1BTSSAqL1xcbjI4MDQ6XFx0XFxuMjgwNTpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG4yODA2OlxcdHN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcXG4yODA3OlxcdHtcXG4yODA4OlxcdFxcdHJldHVybiBuaWQgXFx1MDAzYyAwIHx8IG5pZCBcXHUwMDNlPSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSk7XFxuMjgwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA0OjU1LjAxOTc1Mzk0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTEzMDM1ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBtZW1vcnkgbWFuYWdlbWVudCBhZ2Fpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbW0vZGFtb24vc3lzZnMuY2AuIEkgcmVjYWxsIHRoYXQgZmlsZSBiZWluZyBhIGZvY2FsIHBvaW50IGZvciBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gREFNT04g4oCTIHRoYXQncyBEYXRhIEFjY2VzcyBNT05pdG9yLCByaWdodD8gSSdtIGJldHRpbmcgdGhhdCBhbnkgY2hhbmdlcyB0aGVyZSBhcmUgbGlrZWx5IHRvIGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBMZXQncyBzZWUgaWYgdGhhdCBmaWxlIHNoZWRzIHNvbWUgbGlnaHQgb24gdGhlIGlzc3VlLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6NTkuNTMyNzkyMjQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTA6XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKGN0eCwgc3lzX2N0eCk7XFxuMjIxMTpcXHRcXHRpZiAoZXJyKSB7XFxuMjIxMjpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbjIyMTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yMjE0OlxcdFxcdH1cXG4yMjE1OlxcdFxcbjIyMTY6XFx0XFx0cmV0dXJuIGN0eDtcXG4yMjE3OlxcdH1cXG4yMjE4OlxcdFxcbjIyMTk6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxcbjIyMjA6XFx0e1xcbjIyMjE6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xcbjIyMjI6XFx0XFxuMjIyMzpcXHRcXHRpZiAoIXN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpXFxuMjIyNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjI1OlxcdFxcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzeXNmc19rZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcykpXFxuMjIyNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjI3OlxcdFxcdHN5c2ZzX2tkYW1vbmQtXFx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXFxuMjIyODpcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbjIyMjk6XFx0XFxuMjIzMDpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjIyMzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMjpcXHRcXHRpZiAoc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjIzMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjM0OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNTpcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG4yMjM2OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNzpcXHRvdXQ6XFxuMjIzODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjIyMzk6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MDpcXHR9XFxuMjI0MTpcXHRcXG4yMjQyOlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4yMjQzOlxcdHtcXG4yMjQ0OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4yMjQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XFxuMjI0NjpcXHRcXHRpbnQgZXJyO1xcbjIyNDc6XFx0XFxuMjI0ODpcXHRcXHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxcbjIyNDk6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yMjUwOlxcdFxcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cXG4yMjUxOlxcdFxcdGlmIChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlbnIgIT0gMSlcXG4yMjUyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyNTM6XFx0XFxuMjI1NDpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KVxcbjIyNTU6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMjU2OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IE5VTEw7XFxuMjI1NzpcXHRcXG4yMjU4OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI1OTpcXHRcXHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXFxuMjI2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMjYxOlxcdFxcbjIyNjI6XFx0XFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0pO1xcbjIyNjM6XFx0XFx0aWYgKElTX0VSUihjdHgpKSB7XFxuMjI2NDpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjY1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGN0eCk7XFxuMjI2NjpcXHRcXHR9XFxuMjI2NzpcXHRcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxuMjI2ODpcXHRcXHRpZiAoZXJyKSB7XFxuMjI2OTpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjcwOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMjI3MTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIyNzI6XFx0XFx0fVxcbjIyNzM6XFx0XFx0a2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xcbjIyNzQ6XFx0XFxuMjI3NTpcXHRcXHRrZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xcbjIyNzY6XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4yMjc3OlxcdFxcbjIyNzg6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcXG4yMjc5OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbjIyODA6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4yMjgxOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXFxuMjI4MzpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg0OlxcdFxcdHJldHVybiBlcnI7XFxuMjI4NTpcXHR9XFxuMjI4NjpcXHRcXG4yMjg3OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI4ODpcXHR7XFxuMjI4OTpcXHRcXHRpZiAoIWtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDQ6NTkuNTMyOTg1MzY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2NTg0NDY2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBBIEZ1enppbmcgVGFyZ2V0IEVtZXJnZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21lIGtleSBhcmVhcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IERBTU9OIGlzIGluZGVlZCBhY2Nlc3NpYmxlIGFuZCBmdXp6ZWQgdmlhIHN5c2ZzIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gLiBUaGF0J3Mgc3RhbmRhcmQgYW5kIGVhc3kgdG8gZ2V0IGF0LCBldmVuIGluIFFFTVUgb3IgR0NFIHdpdGhvdXQgc3BlY2lhbCBoYXJkd2FyZS4gSW1wb3J0YW50IHRvIGNvbnNpZGVyIC0gdGhlIERBTU9OIHF1b3RhIGdvYWxzICh0aGluZ3MgbGlrZSBQU0kgYW5kIE5PREVfRUxJR0lCTEVfTUVNKSBhcmUgY29uZmlndXJlZCB0aHJvdWdoIHN5c2ZzIGFuZCBhcmUgYWN0aXZlbHkgbWFuYWdlZCBieSBrZGFtb25kIHRocmVhZHMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBjYW4gcG90ZW50aWFsbHkgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaXhlcy4gSSd2ZSBub3RlZCB0aHJlZSBrZXkgYXJlYXM6XG5cbjEuICBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWA6IFRoaXMgcGF0Y2ggcHJldmVudHMgYSBiYWQgZGVsdGEgb24gdGhlIGZpcnN0IHJvdW5kIHdoZXJlIHRoZSBsYXN0XFxfcHNpXFxfdG90YWwgaXMgdW5pbml0aWFsaXplZC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3VlIHRoYXQgY291bGQgYmUgZXhwbG9pdGFibGUgd2l0aCBjYXJlZnVsbHkgY3JhZnRlZCBpbnB1dHMuXG4yLiAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYDogVGhlIGZpeCBlbnN1cmVzIHRoYXQgYGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkYCBmb3IgYERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQYCBhbmQgcmVzZXRzIGBsYXN0X3BzaV90b3RhbGAgZm9yIFBTSSBnb2Fscy4gVGhpcyBraW5kIG9mIG9wZXJhdGlvbiAtIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG5vZGUgSUQgYXNzaWdubWVudCBhbmQgcmVzZXR0aW5nIGEgc3RhdGUgY291bnRlciAtIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nLiBJbmNvcnJlY3Qgbm9kZSBhc3NpZ25tZW50IGFuZCBzdGF0ZSBwcm9ibGVtcyBjYW4gYmUgZWFzaWx5IG1pc3NlZCBidXQgaGF2ZSBhIG1ham9yIGVmZmVjdC5cbjMuICBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gOiBUaGlzIGNoYW5nZSBtYWtlcyBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIHBlci1rZGFtb25kIGluc3RlYWQgb2YgYSBzaGFyZWQgZ2xvYmFsIHZhcmlhYmxlLiBJIHNlZSB0aGUgdmFsdWUgaGVyZSAtIHRoaXMgYXZvaWRzIGludGVyZmVyZW5jZSBiZXR3ZWVuIG11bHRpcGxlIGtkYW1vbmRzLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgcG9zc2libGUgc3RhdGUgY29ycnVwdGlvbiB0aGF0IGEgZnV6emVyIGNvdWxkIGRlZmluaXRlbHkgdHJpZ2dlci5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgTU0gbG9naWMgYW5kIGludm9sdmUgcXVvdGEgZ29hbHMgYW5kIHN5c2ZzIGludGVyZmFjZXMsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgcmVsZXZhbnQgZnVuY3Rpb25zOlxuSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBmdW5jdGlvbnMgbW9kaWZpZWQgYW5kIGZ1bmN0aW9ucyB0aGF0IGNhbGwgZGlyZWN0bHkgaW50byB0aGUgbW9kaWZpZWQgY29kZS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIEkgbmVlZCB0byBjaGVjazpcblxuKiAgIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgKElzIHRoaXMgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYz8gSW1wb3J0YW50IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4pXG4qICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYFxuKiAgIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBhbmQgaXRzIGNhbGxpbmcgZnVuY3Rpb25zOiBgZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXRgLCBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jb21taXRfY3R4YC5cblxuSSdsbCBhbHNvIHNlYXJjaCBmb3Igd2hlcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhcmUgZGVjbGFyZWQvZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2AsIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rOyBJJ2xsIHN0YXJ0IHdyaXRpbmcgYSBmdXp6ZXIgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MDkuMTkxNDM0NjM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MjYtXFxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTYyOC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTY5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODMtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjExODQ6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE4NS1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM4OlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzOS1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0NC1cXHRcXHRcXHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgKyAyKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVxcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVxcdFxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjE6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Mi1cXHRcXHRcXHRcXHRzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzOD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Ni1cXHRcXHQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODU3OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTgtXFx0XFx0XFx0XFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjA5LjIzODE0ODQ4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MTAxNTY4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aG9zZSBEQU1PTi1yZWxhdGVkIGVudHJ5IHBvaW50cyBhbmQgbXkgbWVudGFsIHJvYWRtYXAgZm9yIGRpdmluZyBkZWVwZXI6XG5cbioqSW5pdGlhbCBEQU1PTiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aG9zZSBmdW5jdGlvbnM6IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGFuZCBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gLiBJJ20gY3VyaW91cyB3aGF0IGtpbmQgb2YgaW50ZXJhY3Rpb25zIHRoZXNlIHJlcHJlc2VudC4gSeKAmW0gZ3Vlc3NpbmcgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgaW52b2x2ZXMgc2V0dGluZyBvciBhcHBseWluZyBzb21lIGtpbmQgb2YgcmVzb3VyY2UgbGltaXRzIG9yIHF1b3RhcywgbGlrZWx5IHJlbGF0ZWQgdG8gREFNT04ncyBvcGVyYXRpb24uIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgcHJvYmFibHkgYSBjb250cm9sIGtub2IgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgREFNT04gY29yZSBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIHNvdW5kcyBpbnRyaWd1aW5nLi4uIG1heWJlIHJlbGF0ZWQgdG8gcmVwZWF0aW5nIGEgY2FsbCBvciBhY3Rpb24gYXMgcGFydCBvZiBEQU1PTidzIG1vbml0b3JpbmcgbG9vcCwgb3IgcGVyaGFwcyBmb3Igc29tZSBraW5kIG9mIHVzZXIgaW50ZXJhY3Rpb24gbWVjaGFuaXNtIHZpYSBzeXNmcy5cblxuTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgc2V0IG9mIHN5c2ZzIGVudHJ5IHBvaW50cyB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgYSBsaXN0IG9mIGFsbCB0aGUgc3lzZnMgZmlsZXMgaXQgZXhwb3J0cywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZnVsbCB1c2VyIGludGVyZmFjZSB0aGF0IERBTU9OIHByZXNlbnRzLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIGxldmVsIG9mIGNvbnRyb2wgYW5kIHRoZSBraW5kcyBvZiBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdG8gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGtub2JzIHdlIGhhdmUgYXQgb3VyIGRpc3Bvc2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjEyLjg0ODMwOTAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY1OTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjIxOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDEtXFxubW0vZGFtb24vc3lzZnMuYzoyMjQyOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDMte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjg3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTQtXFx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4IGluIG5leHRcXG5tbS9kYW1vbi9zeXNmcy5jOjIyOTU6XFx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXFxubW0vZGFtb24vc3lzZnMuYy0yMjk2LVxcdCAqL1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzYzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNzAtXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfT046XFxubW0vZGFtb24vc3lzZnMuYzoyMzcxOlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Mi1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjEyLjg5NDk3NjA4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg2MTE5OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgREFNT04ncyBRdW90YSBHb2FscyBhbmQgU3lzZnMgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIERBTU9OJ3MgaW50ZXJuYWxzIHJlbGF0ZWQgdG8gcXVvdGEgZ29hbHMgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHN5c2ZzLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGhlYWRlciBmaWxlOyBpdCdzIGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIG5hdmlnYXRpbmcga2VybmVsIGludGVybmFscyBsaWtlIHRoaXMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIG91ciBhcmVhcyBvZiBpbnRlcmVzdC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MTUuMTgxMDk4NDY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ4MjE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc18uKnF1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTI4PWVudW0gZGFtb3NfYWN0aW9uIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNDMtLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE0NDogKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgbWV0cmljIHRvIGJlIHVzZWQgYXMgdGhlIGdvYWxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTQ1LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTU5LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNjA6ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE2MS1cXHREQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE3My0vKipcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTc0OiAqIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIC0gREFNT1Mgc2NoZW1lIHF1b3RhIGF1dG8tdHVuaW5nIGdvYWwuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE3NS0gKiBAbWV0cmljOlxcdFxcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk1LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTY6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTc6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5OC1cXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMTYtLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIxNzogKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgLSBHb2FsLWJhc2VkIHF1b3RhIHR1bmluZyBsb2dpYy5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjE4LSAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q6XFx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMC0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MjIxOmVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyMi1cXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjI2LS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoyMjc6ICogc3RydWN0IGRhbW9zX3F1b3RhIC0gQ29udHJvbHMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTIyOC0gKiBAcmVzZXRfaW50ZXJ2YWw6XFx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzMtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3NDpzdHJ1Y3QgZGFtb3NfcXVvdGEge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzUtXFx0dW5zaWduZWQgbG9uZyByZXNldF9pbnRlcnZhbDtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yNzgtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3OTpcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjgwLVxcdHVuc2lnbmVkIGxvbmcgZXN6O1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI4OS0vKiBwcml2YXRlOiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoyOTA6XFx0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yOTEtXFx0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0zMzk9c3RydWN0IGRhbW9zX3dhdGVybWFya3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2My0gKiBkZXRlcm1pbmVkIHRoZSByZWdpb24gYXMgZWxpZ2libGUgdG8gYXBwbHkgdGhlIGFjdGlvbi4gIFRoZSBhY2Nlc3MgcGF0dGVyblxcbmluY2x1ZGUvbGludXgvZGFtb24uaDozNjQ6ICogKFxcdTAwMjZzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pLCBxdW90YXMgKFxcdTAwMjZzdHJ1Y3QgZGFtb3NfcXVvdGEpLCB3YXRlcm1hcmtzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2NS0gKiAoXFx1MDAyNnN0cnVjdCBkYW1vc193YXRlcm1hcmtzKSBhbmQgZmlsdGVycyAoXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIpIHRoYXQgaGFuZGxlZFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTU1ND1zdHJ1Y3QgZGFtb3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU1Ny1cXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo1NTg6XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC01NTktXFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTk1NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGFtb25fc3pfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTkyLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5OTM6I2RlZmluZSBkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSBcXFxcXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTk5NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGdvYWwsIFxcdTAwMjYocXVvdGEpLVxcdTAwM2Vnb2FscywgbGlzdClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk1LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5OTY6I2RlZmluZSBkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZ29hbCwgbmV4dCwgcXVvdGEpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTk3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnb2FsLCBuZXh0LCBcXHUwMDI2KHF1b3RhKS1cXHUwMDNlZ29hbHMsIGxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzNz12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDM5OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0MDpcXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0MS1cXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDI6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0Mzp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDQtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNDU9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQ3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0OS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTI9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDUzOmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MTUuMjI2NTg2ODYxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjEzNjI0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFF1b3RhIEdvYWwgTWFuYWdlbWVudCBhbmQgU3lzdGVtIEZpbGUgU3lzdGVtIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIGJyZWFrIGRvd24gdGhlIHF1b3RhIGdvYWwgbWFuYWdlbWVudC4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9zX2FkZF9xdW90YV9nb2FsYCwgYW5kIGBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWxgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gY3JlYXRpbmcsIGNvbW1pdHRpbmcsIGFkZGluZywgYW5kIGRlc3Ryb3lpbmcgcXVvdGEgZ29hbHMuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGludGVyYWN0IGlzIGtleS5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBmaWxlIHN5c3RlbSBjb250ZXh0IHJlbGF0ZXMgdG8gdGhpcyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGFueSBgc3lzX2N0eGAgYXBwbHkgb3IgY29tbWl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIGFueSBmdW5jdGlvbnMgdGhhdCB1c2UgYGRhbW9zX3N5c2ZzYCBvciBgZGFtb25fc3lzZnNgIGluIHRoZWlyIG5hbWUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaG93IHRoZXNlIHF1b3RhIGdvYWxzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGhvdyBtb2RpZmljYXRpb25zIGFyZSBhcHBsaWVkIG9yIGNvbW1pdHRlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjAyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjE3LjU4Nzk1MzIxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MjExNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMzQ5OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDpERUZJTkVfTVVURVgoZGFtb25fc3lzZnNfbG9jayk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xNS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE3LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTkte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjIwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBrbWFsbG9jX29iaigqcmFuZ2UpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTIxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MzE9c3RhdGljIHNzaXplX3QgbWluX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTMzLXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzozNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0zNi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTQwPXN0YXRpYyBzc2l6ZV90IG1pbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNDIte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjQzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo0NDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTQ1LVxcdHVuc2lnbmVkIGxvbmcgbWluO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9NTY9c3RhdGljIHNzaXplX3QgbWF4X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTU4LXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo1OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6NjA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy02MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTY1PXN0YXRpYyBzc2l6ZV90IG1heF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtNjcte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjY4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqcmFuZ2UgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo2OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTcwLVxcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODE6dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTgyLXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo4MzpcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlLCBrb2JqKSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODQtfVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjg2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTg3LVxcdFxcdF9fQVRUUl9SV19NT0RFKG1pbiwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtODgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6ODk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc191bF9yYW5nZV9tYXhfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTAtXFx0XFx0X19BVFRSX1JXX01PREUobWF4LCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYXR0cnNbXSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5MzpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWluX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzo5NDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfdWxfcmFuZ2VfbWF4X2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy05NS1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTk2LX07XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTc6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc191bF9yYW5nZSk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtOTgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6OTk6Y29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDA6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwMS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwMjpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc191bF9yYW5nZV9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTAzLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTA2OnN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTEwNy1cXHRcXHRjaGFyICptZW1jZ19wYXRoX2J1ZiwgY2hhciAqcGF0aClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNi1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTc6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZClcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTgte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTM0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEzNTpcXHRcXHRpZiAoZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShtZW1jZywgcGF0aCwgbWVtY2dfcGF0aCkpIHtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMzYtXFx0XFx0XFx0KmlkID0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC04LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjk6ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTEwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjExOnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTItXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjE3OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTgtXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMTktXFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjIwOnZvaWQgZGFtb25fc3lzZnNfdWxfcmFuZ2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjEtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MjI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdWxfcmFuZ2Vfa3R5cGU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0yNy1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoyODpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyB7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMjktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzEtXFx0aW50IG5yO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTM2LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjM3OmV4dGVybiBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZXNfa3R5cGU7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6Mzk6aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0MDpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDI6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0MzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00NC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjQ2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01MC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUyOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTc9dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1ODpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01OS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTYwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjYxOmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZXNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2MDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2MS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTc3OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24sXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3OC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjAyPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3JlZ2lvbl9ybV9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDM6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA0LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDk9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxMjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMTg9c3RhdGljIHNzaXplX3QgZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24sIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjI3PXN0YXRpYyBzc2l6ZV90IG5yX2FjY2Vzc2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjMxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzNj1zdGF0aWMgc3NpemVfdCBhZ2Vfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzOC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzOTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNDU9c3RhdGljIHNzaXplX3Qgc3pfZmlsdGVyX3Bhc3NlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI0Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0ODpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NDpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqcmVnaW9uID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1OC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2My1cXHRcXHRfX0FUVFJfUk9fTU9ERShzdGFydCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9lbmRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2Ni1cXHRcXHRfX0FUVFJfUk9fTU9ERShlbmQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fbnJfYWNjZXNzZXNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl9hY2Nlc3NlcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hZ2VfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3Mi1cXHRcXHRfX0FUVFJfUk9fTU9ERShhZ2UsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3NDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3pfZmlsdGVyX3Bhc3NlZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjc1LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X2ZpbHRlcl9wYXNzZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3NzpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzg6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fc3RhcnRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNzk6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZW5kX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgwOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX25yX2FjY2Vzc2VzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FnZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4MjpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9zel9maWx0ZXJfcGFzc2VkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgzLVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NC19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODU6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODc6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg4OlxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODktXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkwOlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTEtfTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NzpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNDpzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA1OmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwOC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMTk9c3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzI3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMjg6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzI5OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyAqcmVnaW9ucylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzMxOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpyLCAqbmV4dDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMyLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQyOnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0My17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0NDpcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0NS19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzQ3OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OC1cXHRcXHRfX0FUVFJfUk9fTU9ERSh0b3RhbF9ieXRlcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM0OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzUwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTE6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzUyLVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1My19O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTQ6QVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM1NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNTc6XFx0LnJlbGVhc2UgPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNTgtXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzU5OlxcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzYwLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNjY6c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzY3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNzg6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqZGFtb25fc3lzZnNfc3RhdHNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzc5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zODEtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM4Mz1zdGF0aWMgc3NpemVfdCBucl90cmllZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzg1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg2OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzg3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4OC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zOTI9c3RhdGljIHNzaXplX3Qgc3pfdHJpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM5NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM5NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOTctXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDAxPXN0YXRpYyBzc2l6ZV90IG5yX2FwcGxpZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MDMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDA2LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQxMD1zdGF0aWMgc3NpemVfdCBzel9hcHBsaWVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDEyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDEzOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDE0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQxNS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00MTk9c3RhdGljIHNzaXplX3Qgc3pfb3BzX2ZpbHRlcl9wYXNzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00MjEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjI6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzdGF0cyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDI0LVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQyOD1zdGF0aWMgc3NpemVfdCBxdF9leGNlZWRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDMwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDMxOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDMyOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQzMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00Mzc9c3RhdGljIHNzaXplX3QgbnJfc25hcHNob3RzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDM5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQwOlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDQxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0Mi1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz00NDY9c3RhdGljIHNzaXplX3QgbWF4X25yX3NuYXBzaG90c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0OC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ0OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMgKnN0YXRzID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc3RhdHMsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NTEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDU1PXN0YXRpYyBzc2l6ZV90IG1heF9ucl9zbmFwc2hvdHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDU3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3RhdHMgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2MC1cXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHMsIGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNm1heF9ucl9zbmFwc2hvdHMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDY4OnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3N0YXRzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2OS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ3MDpcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzLCBrb2JqKSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3MS19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Mi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDczOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfdHJpZWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NC1cXHRcXHRfX0FUVFJfUk9fTU9ERShucl90cmllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfc3pfdHJpZWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3Ny1cXHRcXHRfX0FUVFJfUk9fTU9ERShzel90cmllZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3OC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDc5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDgwLVxcdFxcdF9fQVRUUl9ST19NT0RFKG5yX2FwcGxpZWQsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3N0YXRzX3N6X2FwcGxpZWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ4My1cXHRcXHRfX0FUVFJfUk9fTU9ERShzel9hcHBsaWVkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19zel9vcHNfZmlsdGVyX3Bhc3NlZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg2LVxcdFxcdF9fQVRUUl9ST19NT0RFKHN6X29wc19maWx0ZXJfcGFzc2VkLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDg3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19xdF9leGNlZWRzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00ODktXFx0XFx0X19BVFRSX1JPX01PREUocXRfZXhjZWVkcywgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDkxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc3RhdHNfbnJfc25hcHNob3RzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTItXFx0XFx0X19BVFRSX1JPX01PREUobnJfc25hcHNob3RzLCAwNDAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDkzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTQ6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zdGF0c19tYXhfbnJfc25hcHNob3RzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OTUtXFx0XFx0X19BVFRSX1JXX01PREUobWF4X25yX3NuYXBzaG90cywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5Ni1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk3OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zdGF0c19hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0OTg6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3RyaWVkX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDk5OlxcdFxcdTAwMjZkYW1vbl9zeXNmc19zdGF0c19zel90cmllZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbnJfYXBwbGllZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfYXBwbGllZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwMjpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfc3pfb3BzX2ZpbHRlcl9wYXNzZWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDM6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX3F0X2V4Y2VlZHNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1MDQ6XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3N0YXRzX25yX3NuYXBzaG90c19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUwNTpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc3RhdHNfbWF4X25yX3NuYXBzaG90c19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwNi1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MDctfTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTA4OkFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfc3RhdHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zdGF0c19rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTExOlxcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfc3RhdHNfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTEyLVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxMzpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vbl9zeXNmc19zdGF0c19ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUxNC19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMwLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDE6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDItXFx0XFx0ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDQ6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlcjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NDY6XFx0ZmlsdGVyID0ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXFx0aWYgKGZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01OTM9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NjpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU5NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU5OC1cXHRpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02Mjc9c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02Mjkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MzE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02MzItXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY1Mj1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY1NjpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY1Ny1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz02NjE9c3RhdGljIHNzaXplX3QgbWF0Y2hpbmdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjYzLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjY0OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjY1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjY2LVxcdGJvb2wgbWF0Y2hpbmc7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Njc2PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjc4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njc5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjgwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgxLVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTY4NT1zdGF0aWMgc3NpemVfdCBhbGxvd19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02ODcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODg6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2ODk6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02OTAtXFx0Ym9vbCBhbGxvdztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03MDA9c3RhdGljIHNzaXplX3QgbWVtY2dfcGF0aF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwMi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwMzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcwNS1cXHRpbnQgbGVuO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcwNzpcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MDgtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MTAtXFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2VtZW1jZ19wYXRoID8gZmlsdGVyLVxcdTAwM2VtZW1jZ19wYXRoIDogXFxcIlxcXCIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3MTE6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzEyLVxcdHJldHVybiBsZW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzE1PXN0YXRpYyBzc2l6ZV90IG1lbWNnX3BhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzE3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzE5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzIwLVxcdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MjYtXFx0c3Ryc2NweShwYXRoLCBidWYsIGNvdW50ICsgMSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjcyNzpcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTcyOC1cXHRcXHRrZnJlZShwYXRoKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MzItXFx0ZmlsdGVyLVxcdTAwM2VtZW1jZ19wYXRoID0gcGF0aDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzMzOlxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTczNC1cXHRyZXR1cm4gY291bnQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM3PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Mzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDA6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIgKmZpbHRlciA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXIsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NDItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzQ2PXN0YXRpYyBzc2l6ZV90IGFkZHJfc3RhcnRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzQ4LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzQ5OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyICpmaWx0ZXIgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzUxLVxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZWFkZHJfcmFuZ2Uuc3RhcnQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTc1Nj1zdGF0aWMgc3NpemVfdCBhZGRyX2VuZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc1OC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc1OTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZmlsdGVyID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc2MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz03NjU9c3RhdGljIHNzaXplX3QgYWRkcl9lbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzY3LXtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MTcuNjM2ODgwNDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3NDE0ODcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gTW9kdWxlIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYG1tL2RhbW9uL3N5c2ZzLmNgIGV4cG9ydHMgYGRhbW9uX3N5c2ZzX2luaXRgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgaW50ZXJjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLlxuXG5JJ20gdGhpbmtpbmcsIGxldCdzIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHN5bWJvbHMuIEZyb20gYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIGEgY2x1c3RlciByZWxhdGVkIHRvIHF1b3RhIGdvYWxzIGFuZCBzY2hlbWUgY29tbWl0bWVudDogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9jb21taXRfc2NoZW1lc2AsIGFuZCBgZGFtb25fY29tbWl0X2N0eGAuIFBsdXMgdGhlIGNvcmUgYGRhbW9uX3N0YXJ0YCBmdW5jdGlvbi5cblxuVGhlbiwgZnJvbSBgbW0vZGFtb24vc3lzZnMuY2AsIEknbSBub3RpbmcgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCB3aGljaCBpcyBzdGF0aWMgYnV0IGNhbGxlZCB0aHJvdWdoIGEgc3lzZnMgd3JpdGUsIGFuZCB0aGVuIGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdF9zdG9yZWAsIGFuZCBga2RhbW9uZHNfc3RvcmVgLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJIG5lZWQgdG8gc2VlIHdoYXQncyBiZWluZyBleHBvcnRlZCBvciBtYXJrZWQgbm9uLXN0YXRpYyBpbiB0aG9zZSBmaWxlcy4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIHN5bWJvbHMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnRlcmFjdGlvbiBsaWVzLiBUaGVzZSBhcmUgdGhlIGhvb2tzIHRoYXQgdGhlIHN5c2ZzIGludGVyZmFjZSBpcyB1c2luZyB0byBjb250cm9sIGFuZCBjb25maWd1cmUgREFNT04ncyBjb3JlIG9wZXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIHRyaWdnZXJzIHRoZSBjb3JlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDA0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA1OjIyLjIxMTAzMjA2N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2ODkwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBkYW1vbl98XmludCBkYW1vc198XnN0cnVjdCBkYW1vc18uKmRhbW9zX3xec3RydWN0IGRhbW9uXy4qZGFtb25fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMy1cXG5tbS9kYW1vbi9jb3JlLmM6MTE0OnN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbm1tL2RhbW9uL2NvcmUuYy0xMTUtXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjEtXFxubW0vZGFtb24vY29yZS5jOjE2MjpzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0xNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxOD1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjctICovXFxubW0vZGFtb24vY29yZS5jOjMyODpzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzctICovXFxubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01NjgtXFxubW0vZGFtb24vY29yZS5jOjU2OTpzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19uZXdfZmlsdGVyKGVudW0gZGFtb3NfZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtNTcwLVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MjYtXFxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTYyOC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NTM9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzc3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3Nzg6c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy03Nzkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgyOT11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMy1cXG5tbS9kYW1vbi9jb3JlLmM6ODM0OnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDE1PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA1MDppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTA1MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTE0Nz1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTY4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTY5OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTcwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODE2PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NDQtICovXFxubW0vZGFtb24vY29yZS5jOjE4NDU6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4NDYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NjQtICovXFxubW0vZGFtb24vY29yZS5jOjE4NjU6aW50IGRhbW9uX25yX3J1bm5pbmdfY3R4cyh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0xODY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTY0PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTgwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTgxOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTgyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDYxPWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA3Ni0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA3NzppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0yMDc4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTEyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTEzOmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjExNC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE2NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjE2NjppbnQgZGFtb3Nfd2FsayhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vc193YWxrX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIxNjcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM5NjI9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTkzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozOTk0OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk5NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0xNC0gKi9cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jOjE1OmludCBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhwLFxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMTYtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqKnRhcmdldHApXFxuLS1cXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5oLTQ1LVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmg6NDY6aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uaC00Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICoqdGFyZ2V0cCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAzLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDQ6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE0OS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTUwOmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1MS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTM9Ym9vbCBkYW1vbl9mb2xpb195b3VuZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTQtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE1OmludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTE2LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE3OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTEwPURFRklORV9NVVRFWChkYW1vbl9zeXNmc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjE2OnN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTctXFx0XFx0dW5zaWduZWQgbG9uZyBtaW4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTYtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MTE3OmludCBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKGNoYXIgKm1lbWNnX3BhdGgsIHU2NCAqaWQpXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE4LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTExPXN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0xNi1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDoxNzpzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKmRhbW9uX3N5c2ZzX3VsX3JhbmdlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTE4LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mjg9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6MzQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZCk7XFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzUtdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTQ2PXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaD01Nz12b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNjAtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NjE6aW50IGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfdG9faWQoY2hhciAqbWVtY2dfcGF0aCwgdTY0ICppZCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE5NjI9c3RhdGljXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NjM6c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICpkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTY0LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjc5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjgwOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ1LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMDE9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNDctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNDg6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0OS1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDU6MjIuMjU5NzI1OTM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTgzNTg0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFF1b3RhIEdvYWwgQW5hbHlzaXMgYW5kIEZ1enppbmcgUmVjb21tZW5kYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYW5kIGBDT05GSUdfUFNJYCBhcmUgZXNzZW50aWFsLiBTcGVjaWZpY2FsbHksIGBDT05GSUdfUFNJYCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5hYmxlcyByZWFsaXN0aWMgUFNJLWJhc2VkIHF1b3RhIGdvYWwgdGVzdGluZyB3aXRoaW4gREFNT04sIHBhcnRpY3VsYXJseSBpbiB0aGUgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWxgIGZ1bmN0aW9uLiBXaXRob3V0IFBTSSwgd2UncmUgZXNzZW50aWFsbHkgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGF0J3Mgbm90IGdvaW5nIHRvIGdpdmUgdXMgbWVhbmluZ2Z1bCByZXN1bHRzLiBEQU1PTiBhbmQgREFNT05fU1lTRlMgYXJlIGNsZWFybHkgbmVlZGVkIHRvIGVuYWJsZSB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgc3lzZnMgaW50ZXJmYWNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgc2NhbiwgdGhlIGltcG9ydGFudCBmb2N1cyBzeW1ib2xzIGFyZTogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYC4gRG91YmxlLWNoZWNraW5nLCBJIGNvbmZpcm0gdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhcmUgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIHZpc2libGUgaW4gYm90aCB0aGUgY29yZSBEQU1PTiBjb2RlIChgbW0vZGFtb24vY29yZS5jYCkgYW5kIHRoZSBoZWFkZXIgZmlsZSAoYGluY2x1ZGUvbGludXgvZGFtb24uaGApLiBUaGlzIGlzIGdvb2Q7IHdlIGNhbiByZWFjaCB0aGVtLlxuXG5Ob3csIGZvciB0aGUgdmVyZGljdDogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IChEQU1PTikgY29tYmluZWQgd2l0aCBhIHN5c2ZzIGludGVyZmFjZSBhbmQga2VybmVsLWludGVybmFsIGdvYWwgY29tbWl0IGxvZ2ljLiBUaGlzIGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBwb3RlbnRpYWwgYnVncy4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuXG5cbkZpbmFsbHksIGxldCdzIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmF0aW9uYWxlIHRvIGp1c3RpZnkgZnV6emluZzogdGhpcyBpcyBEQU1PUyBxdW90YSBnb2FsIGluaXRpYWwgc3RhdGUgaGFuZGxpbmcgZm9yIHRoZSBQU0kgbWV0cmljLCBub2RlIGVsaWdpYmxlIG1lbW9yeSBnb2FsIG5pZCBjb3B5aW5nIG9uIGNvbW1pdCwgYW5kIHBlci1rZGFtb25kIHJlZnJlc2ggaW50ZXJ2YWwgdHJhY2tpbmcgaW4gdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gVGhhdCBjb3ZlcnMgc29tZSBpbnRlcmVzdGluZyB0aGluZ3MuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcnJheSBpcyBhcyBsaXN0ZWQgYWJvdmUuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB3aWxsIGluY2x1ZGUgYFtcIkRBTU9OXCIsIFwiREFNT05fU1lTRlNcIiwgXCJQU0lcIl1gLiBBbGwgc2V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5MDIsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjA2LjI0MzMxMzA5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzk5NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlBTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBNTSBjb3JlIGFuZCBzeXNmcyBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdCBiZWhhdmlvciBvZiBQU0kgYW5kIG5vZGUtZWxpZ2libGUtbWVtb3J5IERBTU9TIHF1b3RhIGdvYWxzLCBhbmQgY2hhbmdpbmcgZ2xvYmFsIHN5c2ZzIHVwZGF0ZSB0aW1pbmcgdG8gcGVyLWtkYW1vbmQgcmVmcmVzaCB0cmFja2luZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBydW50aW1lIGxvZ2ljIHBhdGhzIHZpYSBzeXNmcyBhbmQgREFNT04gQVBJcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlBTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBNTSBjb3JlIGFuZCBzeXNmcyBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdCBiZWhhdmlvciBvZiBQU0kgYW5kIG5vZGUtZWxpZ2libGUtbWVtb3J5IERBTU9TIHF1b3RhIGdvYWxzLCBhbmQgY2hhbmdpbmcgZ2xvYmFsIHN5c2ZzIHVwZGF0ZSB0aW1pbmcgdG8gcGVyLWtkYW1vbmQgcmVmcmVzaCB0cmFja2luZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBydW50aW1lIGxvZ2ljIHBhdGhzIHZpYSBzeXNmcyBhbmQgREFNT04gQVBJcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDY6MDYuMzI2NzIwMDY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc1OTY5ODE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjA2LjMyNzMwMTE3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk5NzU5MTEwNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgZ29hbCBjYWxjdWxhdGlvbiBsb2dpYyAoc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlIGxhc3QgUFNJIHRvdGFsIHNlbnRpbmVsIGFuZCBjb21taXR0aW5nIHRoZSBub2RlIElEIGZvciBlbGlnaWJsZSBtZW1vcnkgZ29hbHMpIGFuZCBtb3ZlcyBhIGdsb2JhbCBzeXNmcyByZWZyZXNoIGppZmZpZXMgdGltZXN0YW1wIHRvIHBlci1rZGFtb25kIHN0cnVjdCBpbnN0YW5jZXMuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGludHJvZHVjZWQ6XFxuMS4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0cyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSAoc3lzZnMgdXNlcyBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0dGluZykuXFxuMi4gVGhlIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgKGUuZy4sIGBkYW1vbl9zeXNmc19rZGFtb25kYCB2aWEgYGt6YWxsb2Nfb2JqYCwgZXhwbGljaXQgZmllbGQgaW5pdGlhbGl6YXRpb24gaW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCkuXFxuMy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBjYWxjdWxhdGlvbnMgd2l0aGluIERBTU9OLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjA1MzAwZTFjNWU0MDliMWMyYzEwZmU0NzY5NGU2MDQ2OTA5YTJlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDE5OjA0OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi43MGVlODViNDE0NjQ2IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC02MzUsNiArNjM1LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuIFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XG4rXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbitcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZnb2FsLVx1MDAzZWxpc3QpO1xuIFx0cmV0dXJuIGdvYWw7XG4gfVxuQEAgLTExMjIsNiArMTEyNCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVg7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxuIFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbkBAIC0xMTMxLDYgKzExMzYsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbiBcdFx0ZHN0LVx1MDAzZW5pZCA9IHNyYy1cdTAwM2VuaWQ7XG4gXHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxuK1x0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0xMTQzLDcgKzExNTEsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBcdGRzdC1cdTAwM2V0YXJnZXRfdmFsdWUgPSBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuIFx0aWYgKGRzdC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbiBcdFx0ZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXHUwMDNlY3VycmVudF92YWx1ZTtcbi1cdC8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovXG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4gfVxuIFxuQEAgLTMwMTgsNyArMzAyNSwxMiBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gXHRcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4tXHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xuK1x0XHQvKiB1bmluaXRpYWxpemVkIGxhc3RfcHNpX3RvdGFsOyBtYWtlIG5vIGVmZmVjdCB0aGlzIHJvdW5kICovXG4rXHRcdGlmIChnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXG4rXHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWU7XG4rXHRcdGVsc2VcbitcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC1cbitcdFx0XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG4gXHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xNzg5LDYgKzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyArMjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuIFx0cmV0dXJuIGN0eDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcztcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xuIFxuIFx0aWYgKCFzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxuK1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCArMjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4rXHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXG4rXHRcdG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiBcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCA0YTUzNmQ0MWNkYjJkLi42NTQ0M2FiYTAzMzAwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC03NTEsMTkgKzc1MSwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsXG4gXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4ge1xuLVx0dTY0IGRzdF9sYXN0X3BzaV90b3RhbCA9IDA7XG4tXG4tXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdGRzdF9sYXN0X3BzaV90b3RhbCA9IGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWV0cmljLCBzcmMtXHUwMDNlbWV0cmljKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdGlmIChzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xuLVx0aWYgKGRzdF9sYXN0X3BzaV90b3RhbCBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG4tXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XG4gXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbitcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbmlkLCBzcmMtXHUwMDNlbmlkKTtcbkBAIC03ODcsNiArNzg0LDEzIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHQubGFzdF9wc2lfdG90YWwgPSA0NTYsXG4gXHR9O1xuIFxuK1x0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuK1x0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xuK1x0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4rXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbitcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbitcdFx0XHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXG4rXHRcdFx0fSk7XG4gXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4gXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcbiBcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjA2LjMyNzMwMzg2N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU3MzExODE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY2hhbmdlcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYC5cblxuSSBzZWUgc29tZSBrZXkgYWx0ZXJhdGlvbnMgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLiBJdCBhcHBlYXJzIHRoYXQgd2hlbiBgbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byBgVTY0X01BWGAuIFRoYXQncyBhIGZsYWcsIGxpa2VseSBhIHNlbnRpbmVsIHZhbHVlIGZvciB1bmluaXRpYWxpemVkIG9yIGEgc3BlY2lhbCBjYXNlLiBEaWdnaW5nIGZ1cnRoZXIgaW50byBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oKWAsIHRoZSBzYW1lIGBVNjRfTUFYYCBhc3NpZ25tZW50IGhhcHBlbnMgZm9yIGBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWxgIGluIHRoZSBzYW1lIG1ldHJpYyBjYXNlIGFuZCB0aGVuIGZvciB0aGUgYERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQYCBpdCBqdXN0IGNvcGllcyB0aGUgYG5pZGAuIEZ1cnRoZXIgb24sIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgpYCByZW1vdmVzIGEgY29tbWVudCBhYm91dCBrZWVwaW5nIGBsYXN0X3BzaV90b3RhbGAgYXMgaXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBzdHJhdGVneS4gVGhpcyBpbXBsaWVzIGEgY2hhbmdlIGluIHRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyB2YXJpYWJsZSBhbmQgdGhlIHVwZGF0ZSBsb2dpYy4gTGFzdGx5LCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCBub3cgdXRpbGl6ZXMgdGhpcyBgbGFzdF9wc2lfdG90YWxgIHZhbHVlLiBXaGVuIGl0ICppcyogYFU2NF9NQVhgLCBpdCBhc3NpZ25zIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGRpcmVjdGx5IGZyb20gYGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlYC4gT3RoZXJ3aXNlLCBpdCBjYWxjdWxhdGVzIGBjdXJyZW50X3ZhbHVlYCBieSBzdWJ0cmFjdGluZyBgbGFzdF9wc2lfdG90YWxgIGZyb20gYG5vd19wc2lfdG90YWxgLCBhbmQgdGhlbiB1cGRhdGVzIGBsYXN0X3BzaV90b3RhbGAuIFRoaXMgc21lbGxzIGxpa2UgYW4gaXNzdWUgd2FpdGluZyB0byBoYXBwZW4gaWYgbm90IGNhcmVmdWxseSBoYW5kbGVkLiBXZSBhcmUgZWl0aGVyIGRlYWxpbmcgd2l0aCBhbiBvdmVyZmxvdyBpc3N1ZSwgYSB3cmFwLWFyb3VuZCBidWcsIG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgc3BlY2lhbCBpbml0aWFsaXphdGlvbi4gVGhpcyBzZWN0aW9uIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGZ1enppbmcgc2Vzc2lvbiB0byBleHBsb3JlIHBvdGVudGlhbCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgYFU2NF9NQVhgIHVzYWdlIGFuZCB0aGUgY2FsY3VsYXRpb25zLlxuXG5Nb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLCBJIHNlZSBhIG5ldyBtZW1iZXIsIGB1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzYCwgYWRkZWQgdG8gYHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kYCwgYW5kIHRoZW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllc2AgaXMgcmVtb3ZlZCBhbmQgbm93IGl0J3MgcGVyIGluc3RhbmNlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmRzIGEgbW9yZSBmbGV4aWJsZSBvciBwZXItaW5zdGFuY2UgcmVmcmVzaCBzdHJhdGVneS4gSW4gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKWAsIHRoaXMgbmV3IHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHVzaW5nIGBqaWZmaWVzYCBhbmQgYHJlZnJlc2hfbXNgLiBBbmQgdGhlbiBsYXRlciBpbiBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4oKWAgaXQncyB1c2VkLiBUaGlzIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgaG93IGBkYW1vbl9zeXNmc19rZGFtb25kYCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCBsYXRlci5cblxuRmluYWxseSwgdGhlIHVuaXQgdGVzdHMgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgaGF2ZSBiZWVuIHVwZGF0ZWQuIFRoYXQncyBnb29kLCBidXQgaXQgZG9lc24ndCB0ZWxsIG1lICpob3cqIHRoZXkndmUgYmVlbiB1cGRhdGVkLiBBcmUgdGhleSB0ZXN0aW5nIHRoZSBuZXcgbG9naWM/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgdGVzdCBjYXNlcyB0aGVtc2VsdmVzIHRvIGV2YWx1YXRlIHRoZWlyIHRob3JvdWdobmVzcyBpbiByZWxhdGlvbiB0byB0aGVzZSBjaGFuZ2VzLlxuXG5CZWZvcmUgSSBqdW1wIHRvIGEgY29uY2x1c2lvbiwgSSBuZWVkIHRvIHJlYWQgYG1tL2RhbW9uL3N5c2ZzLmNgIGFyb3VuZCBsaW5lIDE3ODksIHRvIHNlZSBob3cgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGFsbG9jYXRlZCBhbmQgaG93IHRoZSByZWZyZXNoIGxvZ2ljIGltcGFjdHMgaXQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIG5ldyByZWZyZXNoIGxvZ2ljIGlzIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvcnJlY3QgdGltaW5nLiBJJ2xsIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIHJlbGF0ZWQgdG8gdGhpcyBuZXcgdmFyaWFibGUgaW4gdGhlIGluc3RhbmNlIGFsbG9jYXRpb24uIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgamlmZmllc2AgdXNhZ2UgYXMgd2VsbC5cblxuQmFzZWQgb24gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgY2hhbmdlcyBpbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHVzZSBvZiBgVTY0X01BWGAgYW5kIHRoZSBjYWxjdWxhdGlvbnMgaW52b2x2aW5nIGBsYXN0X3BzaV90b3RhbGAsIGFyZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBmb3IgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBhcmUgYWxzbyB3b3J0aCBjbG9zZXIgZXhhbWluYXRpb24sIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgZGFtb25fc3lzZnNfa2RhbW9uZGAgc3RydWN0IGFuZCB0aGUgdGltaW5nIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjoyNC45MDA0MjU1NTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4NTpcXHQgKi9cXG4xNzg2OlxcdFxcbjE3ODc6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQge1xcbjE3ODg6XFx0XFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4xNzg5OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XFxuMTc5MDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7XFxuMTc5MTpcXHRcXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcXG4xNzkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7XFxuMTc5MzpcXHR9O1xcbjE3OTQ6XFx0XFxuMTc5NTpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZClcXG4xNzk2OlxcdHtcXG4xNzk3OlxcdFxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCk7XFxuMTc5ODpcXHR9XFxuMTc5OTpcXHRcXG4xODAwOlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZF9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4xODAxOlxcdHtcXG4xODAyOlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XFxuMTgwMzpcXHRcXHRpbnQgZXJyO1xcbjE4MDQ6XFx0XFxuMTgwNTpcXHRcXHRjb250ZXh0cyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FsbG9jKCk7XFxuMTgwNjpcXHRcXHRpZiAoIWNvbnRleHRzKVxcbjE4MDc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTgwODpcXHRcXG4xODA5OlxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZjb250ZXh0cy1cXHUwMDNla29iaixcXG4xODEwOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9zeXNmc19jb250ZXh0c19rdHlwZSwgXFx1MDAyNmtkYW1vbmQtXFx1MDAzZWtvYmosXFxuMTgxMTpcXHRcXHRcXHRcXHRcXFwiY29udGV4dHNcXFwiKTtcXG4xODEyOlxcdFxcdGlmIChlcnIpIHtcXG4xODEzOlxcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZjb250ZXh0cy1cXHUwMDNla29iaik7XFxuMTgxNDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE4MTU6XFx0XFx0fVxcbjE4MTY6XFx0XFx0a2RhbW9uZC1cXHUwMDNlY29udGV4dHMgPSBjb250ZXh0cztcXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0cmV0dXJuIGVycjtcXG4xODE5OlxcdH1cXG4xODIwOlxcdFxcbjE4MjE6XFx0c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbjE4MjI6XFx0e1xcbjE4MjM6XFx0XFx0ZGFtb25fc3lzZnNfY29udGV4dHNfcm1fZGlycyhrZGFtb25kLVxcdTAwM2Vjb250ZXh0cyk7XFxuMTgyNDpcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2a2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWtvYmopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjoyNC45MDA3Mzk5NjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ0ODA4NjA3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9zX25ld19xdW90YV9nb2FsYCoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gY2FsY3VsYXRlcyBxdW90YSBnb2Fscy4gVGhpcyBmdW5jdGlvbidzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgdGFyZ2V0IHNpemUgb3IgY291bnQgb2YgcGFnZXMgd2UncmUgYWltaW5nIGZvciB3aXRoaW4gYSBtb25pdG9yaW5nIHJlZ2lvbiwgZXNwZWNpYWxseSByZWxhdGVkIHRvIHF1b3RhIGNvbnN0cmFpbnRzLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0J3MgYmFzZWQgb24gc29tZSBmaXhlZCBwZXJjZW50YWdlLCBkeW5hbWljIGNhbGN1bGF0aW9ucywgb3IgYSBjb21iaW5hdGlvbi4gVGhlIFwibmV3XCIgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIGNvbXB1dGluZyB0aGUgdGFyZ2V0IGFmdGVyIHNvbWUgY2hhbmdlIGluIG1lbW9yeSBwcmVzc3VyZSBvciB0aGUgREFNT04gcGFyYW1ldGVycy4gSSdsbCBsb29rIGZvciBpbnB1dCB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIHBhcmFtZXRlcnMgbGlrZTpcblxuKiAgIEN1cnJlbnQgcXVvdGEgbGltaXRcbiogICBDdXJyZW50IG1vbml0b3JlZCByZWdpb24gc2l6ZVxuKiAgIFBvc3NpYmxlIGFkanVzdG1lbnRzIGJhc2VkIG9uIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQvb3IgREFNT04ncyBmZWVkYmFjay5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIHNjZW5hcmlvcywgaWYgaXQgZXhpc3RzLCB0byBlbnN1cmUgaXQgaGFuZGxlcyBib3VuZGFyeSBjb25kaXRpb25zIHdlbGwuIE15IG9iamVjdGl2ZSBpcyB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBxdW90YS1yZWxhdGVkIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIERBTU9OIG1hY2hpbmVyeSwgc3BlY2lmaWNhbGx5IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGxvb3BzLiBJJ20ga2VlbiBvbiBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIHRvIHNlZSBob3cgaXQgYmFsYW5jZXMgYWNjdXJhY3kgb2YgbW9uaXRvcmluZyB3aXRoIGFueSBwZXJmb3JtYW5jZSBvdmVyaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDY6MzkuMzgxNjA1OTQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI1OlxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbiA2Mjg6XFx0XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxuIDYyOTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcXG4gNjMwOlxcdHtcXG4gNjMxOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xcbiA2MzQ6XFx0XFx0aWYgKCFnb2FsKVxcbiA2MzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDYzNjpcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPSBtZXRyaWM7XFxuIDYzNzpcXHRcXHRnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XFxuIDYzODpcXHRcXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4gNjM5OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4gNjQwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZnb2FsLVxcdTAwM2VsaXN0KTtcXG4gNjQxOlxcdFxcdHJldHVybiBnb2FsO1xcbiA2NDI6XFx0fVxcbiA2NDM6XFx0XFxuIDY0NDpcXHR2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxuIDY0NTpcXHR7XFxuIDY0NjpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZnLVxcdTAwM2VsaXN0LCBcXHUwMDI2cS1cXHUwMDNlZ29hbHMpO1xcbiA2NDc6XFx0fVxcbiA2NDg6XFx0XFxuIDY0OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNjUwOlxcdHtcXG4gNjUxOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZnLVxcdTAwM2VsaXN0KTtcXG4gNjUyOlxcdH1cXG4gNjUzOlxcdFxcbiA2NTQ6XFx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjozOS4zODE4NTU5MDdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5MTkzMzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXAgaW50byBgZGFtb3NfcXVvdGFfZ29hbGAqKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoaXMgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGFyY2hpdGVjdHVyZSDigJMgZXZlcnkgc2luZ2xlIGZpZWxkIHdpdGhpbiBpdCBhbmQsIGNydWNpYWxseSwgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgZGVjbGFyYXRpb25zOyBJIHdhbnQgdGhlIHJlYWwtd29ybGQgdXNhZ2UgcGF0dGVybnMuIEFyZSB0aGVzZSBmaWVsZHMgcmVhZD8gTW9kaWZpZWQ/IEluIHdoYXQgY29udGV4dHM/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcz8gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGRlZmluaXRpb24gd2l0aCBhbGwgdGhlIHBsYWNlcyBpdCdzIHJlZmVyZW5jZWQsIHRyYWNpbmcgZXZlcnkgcGF0aC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIHN0cnVjdCwgaXRzIHB1cnBvc2UsIGFuZCBpdHMgaW5mbHVlbmNlIG9uIHRoZSBzeXN0ZW0uIE5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayBob3cgdGhlIHF1b3RhIGdvYWxzIGFyZSBzZXQgYW5kIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjQxLjY3Mzc5Mzc1NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3ODk0MTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYwPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5NS0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTk2OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LVxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNjo0NC41NTI3NDMyMzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE1NTU0MDA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvcmU6IEV4YW1pbmluZyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5Ni4gSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04ncyBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJmYWNlcyBhcmUgZGVmaW5lZC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgc2VjdGlvbiBiZWNhdXNlIEkgcmVjYWxsIGl0IGNvbnRhaW5pbmcgY3JpdGljYWwgZGVjbGFyYXRpb25zIHJlbGF0aW5nIHRvLi4uIHdlbGwsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGEgYml0LiBJcyBpdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciB0aGUgbW9uaXRvcmluZyBhZ2VudHMgdGhlbXNlbHZlcywgb3IgcGVyaGFwcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG1vbml0b3Jpbmcgc2Vzc2lvbj8gSXQgbWlnaHQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlICphY2Nlc3NfcmVjb3JkKiBzdHJ1Y3R1cmUuIEl0IGlzLCBzbyB0aGlzIHdpbGwgZGV0YWlsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhY2Nlc3Mgb2YgYSBtZW1vcnkgcmVnaW9uLiBBbmQgdGhlIERBTU9OIG1vbml0b3Jpbmcgc2Vzc2lvbiB3b3VsZCB1dGlsaXplIHRoZXNlIHJlY29yZHMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhIG1vbml0b3Jpbmcgc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBhbmQgaG93IHRoZXNlIGFnZW50IHN0cnVjdHVyZXMgaW50ZWdyYXRlIHdpdGggdGhlIG92ZXJhbGwgZnJhbWV3b3JrLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYWNjZXNzIGRhdGEgaXMgY2FwdHVyZWQgYW5kIGludGVycHJldGVkIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBJIHdvdWxkIGltcGxlbWVudCBhY2Nlc3MtYXdhcmUgbWVtb3J5IG9wdGltaXphdGlvbnMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGZyYW1ld29yayBwcm92aWRlcyBkYXRhIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3B0aW1pemUgbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IHRoZSBsYXlvdXQgb2YgdGhpcyBzdHVmZiBzbyBJIGNhbiBtb3ZlIGZvcndhcmQgaW4gbXkgY3VycmVudCByZXNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjQ4LjcwODI4OTIyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHQgKiBJZiBAbWV0cmljIGlzIERBTU9TX1FVT1RBX05PREVfTUVNX3tVU0VELEZSRUV9X0JQLCBAbmlkIHJlcHJlc2VudHMgdGhlIG5vZGVcXG4gMTkxOlxcdCAqIGlkIG9mIHRoZSB0YXJnZXQgbm9kZSB0byBhY2NvdW50IHRoZSB1c2VkL2ZyZWUgbWVtb3J5LlxcbiAxOTI6XFx0ICpcXG4gMTkzOlxcdCAqIElmIEBtZXRyaWMgaXMgREFNT1NfUVVPVEFfTk9ERV9NRU1DR197VVNFRCxGUkVFfV9CUCwgQG5pZCBhbmQgQG1lbWNnX2lkXFxuIDE5NDpcXHQgKiByZXByZXNlbnRzIHRoZSBub2RlIGlkIGFuZCB0aGUgY2dyb3VwIHRvIGFjY291bnQgdGhlIHVzZWQgbWVtb3J5IGZvci5cXG4gMTk1OlxcdCAqL1xcbiAxOTY6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbiAxOTc6XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuIDE5ODpcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG4gMTk5OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcXG4gMjAwOlxcdFxcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXFxuIDIwMTpcXHRcXHR1bmlvbiB7XFxuIDIwMjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyMDM6XFx0XFx0XFx0XFx0aW50IG5pZDtcXG4gMjA0OlxcdFxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gMjA1OlxcdFxcdFxcdH07XFxuIDIwNjpcXHQvKiBwcml2YXRlOiAqL1xcbiAyMDc6XFx0XFx0XFx0LyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi9cXG4gMjA4OlxcdFxcdFxcdHU2NCBsYXN0X3BzaV90b3RhbDtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0XFx0fTtcXG4gMjExOlxcdC8qIHByaXZhdGU6ICovXFxuIDIxMjpcXHRcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiAyMTM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiAyMTQ6XFx0fTtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0LyoqXFxuIDIxNzpcXHQgKiBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgLSBHb2FsLWJhc2VkIHF1b3RhIHR1bmluZyBsb2dpYy5cXG4gMjE4OlxcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q6XFx0QWltIGxvbmcgdGVybSBjb25zaXN0ZW50IHF1b3RhLlxcbiAyMTk6XFx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUw6XFx0QWltIHplcm8gcXVvdGEgYXNhcC5cXG4gMjIwOlxcdCAqL1xcbiAyMjE6XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4gMjIyOlxcdFxcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVCxcXG4gMjIzOlxcdFxcdERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwsXFxuIDIyNDpcXHR9O1xcbiAyMjU6XFx0XFxuIDIyNjpcXHQvKipcXG4gMjI3OlxcdCAqIHN0cnVjdCBkYW1vc19xdW90YSAtIENvbnRyb2xzIHRoZSBhZ2dyZXNzaXZlbmVzcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxcbiAyMjg6XFx0ICogQHJlc2V0X2ludGVydmFsOlxcdENoYXJnZSByZXNldCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuXFxuIDIyOTpcXHQgKiBAbXM6XFx0XFx0XFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA2OjQ4LjcwODM5Mzk5N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA4MzY4Njk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0cnVjdHVyZSBgZGFtb3NfcXVvdGFfZ29hbGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgLiBJIHNlZSB0aGUga2V5IG1lbWJlcnM6IGBtZXRyaWNgLCBgdGFyZ2V0X3ZhbHVlYCwgYGN1cnJlbnRfdmFsdWVgLCBhbmQgdGhlbiB0aGlzIHVuaW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2UgaGF2ZSBlaXRoZXIgYSBub2RlIElEIGFuZCBtZW1jZyBJRCBwYWlyLCBvciBhIGBsYXN0X3BzaV90b3RhbGAgdmFsdWUgaW4gdGhlcmUuIENsZWFybHkgZGVzaWduZWQgZm9yIHNvbWUga2luZCBvZiByZXNvdXJjZSBxdW90YSBtYW5hZ2VtZW50LiBCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZS4gSSBuZWVkIHRvIGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgZGFtb3NfcXVvdGFfZ29hbGAgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgdXNlZCwgb3IgZnJlZWQuIEknbGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYGRhbW9zX25ld19xdW90YV9nb2FsYCAoYXNzdW1pbmcgdGhpcyBpcyBob3cgaXTigJlzIGFsbG9jYXRlZCBvciBjb25zdHJ1Y3RlZCksIGFuZCBhbHNvIGEgZ2VuZXJpYyBzZWFyY2ggZm9yIHRoZSBzdHJ1Y3R1cmUgbmFtZSBpdHNlbGYsIGBkYW1vc19xdW90YV9nb2FsYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIHVuaW9uIGlzIGxpa2VseSBiZWluZyB1c2VkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA3OjA3Ljc5MjA4NDE1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNzY2OTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzNz12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM4LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDM5OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0MC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyNi1cXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNjk9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE4My1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTE4NDpcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTg1LVxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVxcdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVxcdFxcdFxcdDEwMDAwIC0gYWN0aXZlX21lbV9icCArIDIpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYyLVxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVxcdFxcdCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cXHRcXHRcXHRcXHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTYxLVxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE2MjpcXHRxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE2My1cXHRcXHRcXHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA3OjEwLjA5OTc2MjA4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTQxODEyNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gREFNT04gUXVvdGEgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcXVvdGEgZ29hbHMgYW5kIGN1cnJlbnQgdmFsdWVzIGFyZSBiZWluZyBzZXQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0LiBUaGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBudWFuY2VzIG9yIG9wdGltaXphdGlvbnMgdG8gdW5jb3ZlciBoZXJlIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgaW4gbXkgY3VycmVudCBwcm9qZWN0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGZsdWN0dWF0aW9ucyBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMg4oCTIGVuc3VyaW5nIHRoZSBxdW90YSBtYW5hZ2VtZW50IGlzIHJvYnVzdCBhbmQgZWZmaWNpZW50LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29yZSBtZWNoYW5pY3Mgb2YgdGhpcyBhcmVhIGFyZSBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgb24gdG9wIG9mIHRoZW0uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzUxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDc6MjEuNTE3ODkzNDE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAxNSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAxNTpcXHR9XFxuMzAxNjpcXHRcXG4zMDE3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4zMDE4OlxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuMzAxOTpcXHR7XFxuMzAyMDpcXHRcXHR1NjQgbm93X3BzaV90b3RhbDtcXG4zMDIxOlxcdFxcbjMwMjI6XFx0XFx0c3dpdGNoIChnb2FsLVxcdTAwM2VtZXRyaWMpIHtcXG4zMDIzOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXG4zMDI0OlxcdFxcdFxcdC8qIFVzZXIgc2hvdWxkIGFscmVhZHkgc2V0IGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgKi9cXG4zMDI1OlxcdFxcdFxcdGJyZWFrO1xcbjMwMjY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxuMzAyNzpcXHRcXHRcXHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbjMwMjg6XFx0XFx0XFx0LyogdW5pbml0aWFsaXplZCBsYXN0X3BzaV90b3RhbDsgbWFrZSBubyBlZmZlY3QgdGhpcyByb3VuZCAqL1xcbjMwMjk6XFx0XFx0XFx0aWYgKGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID09IFU2NF9NQVgpXFxuMzAzMDpcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlO1xcbjMwMzE6XFx0XFx0XFx0ZWxzZVxcbjMwMzI6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLVxcbjMwMzM6XFx0XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxuMzAzNDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxuMzAzNTpcXHRcXHRcXHRicmVhaztcXG4zMDM2OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcXG4zMDM3OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcXG4zMDM4OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxuMzAzOTpcXHRcXHRcXHRicmVhaztcXG4zMDQwOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbjMwNDE6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuMzA0MjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG4zMDQzOlxcdFxcdFxcdGJyZWFrO1xcbjMwNDQ6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQOlxcbjMwNDU6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XFxuMzA0NjpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXFxuMzA0NzpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuMzA0ODpcXHRcXHRcXHRicmVhaztcXG4zMDQ5OlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XFxuMzA1MDpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXFxuMzA1MTpcXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbjMwNTI6XFx0XFx0XFx0YnJlYWs7XFxuMzA1MzpcXHRcXHRkZWZhdWx0OlxcbjMwNTQ6XFx0XFx0XFx0YnJlYWs7XFxuMzA1NTpcXHRcXHR9XFxuMzA1NjpcXHR9XFxuMzA1NzpcXHRcXG4zMDU4OlxcdC8qIFJldHVybiB0aGUgaGlnaGVzdCBzY29yZSBzaW5jZSBpdCBtYWtlcyBzY2hlbWVzIGxlYXN0IGFnZ3Jlc3NpdmUgKi9cXG4zMDU5OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDc6MjEuNTE4MDkwODU2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzU5MTc4NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT1MgUXVvdGEgR29hbCBJbml0aWFsaXphdGlvbiBhbmQgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWxgIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAuIEl0IHNlZW1lZCBsaWtlIGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgcHJldmlvdXNseSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpc3N1ZXMsIHBhcnRpY3VsYXJseSBpZiBga21hbGxvY2Agd2FzIGludm9sdmVkLCB3aGljaCBpdCB3YXMuIEkgd2FzIHNlZWluZyB0aGF0IGl0IGNvdWxkIGVpdGhlciBiZSB6ZXJvIG9yIHVuaW5pdGlhbGl6ZWQuIFRoYXQgbWFkZSBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgc3VidHJhY3Rpb25zIHdpdGggemVybyBpbiBwcmlvciBjYWxjdWxhdGlvbnMuXG5cbkFoLCBJIHNlZS4gV2l0aCB0aGUgcGF0Y2gsIGBrbWFsbG9jX29iaigqZ29hbClgIGlzIHVzZWQgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCwgZm9sbG93ZWQgYnkgY29uZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gb2YgYGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBVNjRfTUFYYCBvbmx5IGlmIHRoZSBtZXRyaWMgaXMgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIFRoZSBjb21taXQgZnVuY3Rpb24gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbHNvIHNldHMgYGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IFU2NF9NQVhgIGZvciB0aGF0IHNhbWUgbWV0cmljLiBUaGlzIG1ha2VzIHNlbnNlLlxuXG5UaGVuIEkgY29uc2lkZXJlZCBgc3lzZnMuY2AuIEkgbm90aWNlZCBgZGFtb25fc3lzZnNfa2RhbW9uZGAgbm93IGhhcyBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGluIHBsYWNlIG9mIGEgZ2xvYmFsLCB3aGljaCBpcyBhIGdvb2QgbW92ZS4gQW5kIGBkYW1vbl9zeXNmc19rZGFtb25kYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgc2FmZS4gSW4gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBga2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllc2AgaXMgc2V0IHVzaW5nIGBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpYC4gVGhhdCBsb29rcyBzb2xpZCBhbmQgYXMgZXhwZWN0ZWQuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgb3RoZXIgbWV0cmljcyBhcmUgaGFuZGxlZCBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdW5pb24gZmllbGRzIGxpa2UgYG5pZGAgYW5kIGBtZW1jZ19pZGAgYXJlIGluaXRpYWxpemVkIGFsb25nc2lkZSBgbGFzdF9wc2lfdG90YWxgIHdpdGggcmVzcGVjdCB0byBvdGhlciBtZXRyaWNzLiBJIHNob3VsZCByZXZpZXcgYWxsIHRoZSBjYWxscyB0byBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHRvIHZlcmlmeSB0aGVzZSBpbml0aWFsaXphdGlvbnMgYXJlIGNvbnNpc3RlbnQgYW5kIHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNzozMi44NzcyNzMyNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDI4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsfGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyNi1cXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExMTA9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTIyLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTIzOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTI0LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTE0NzpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE0OC1cXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNTMtXFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTU0OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE1NS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1Ny0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTE1ODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTU5LSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTY4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTY5OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTcwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTc2LVxcdFxcdGlmIChzcmNfZ29hbClcXG5tbS9kYW1vbi9jb3JlLmM6MTE3NzpcXHRcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTgzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTg0OlxcdFxcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTExODUtXFx0XFx0XFx0XFx0c3JjX2dvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE4Ny1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6MTE4ODpcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTg5LVxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExOTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMDAtXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjEyMDE6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTIwMi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVxcdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVxcdFxcdFxcdDEwMDAwIC0gYWN0aXZlX21lbV9icCArIDIpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2MTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODYyLVxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg5ND1pbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTE4LVxcdFxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkxOTpcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIFxcdTAwMjZxdW90YSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjAtXFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnF1b3RhKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzUzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU0OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU1LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzOD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1My1cXHRcXHQgKiBXaGVuIG5yX3NyY19nb2FscyBpcyBzbWFsbGVyIHRoYW4gZHN0X2dvYWxzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTQ6XFx0XFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1NS1cXHRcXHQgKiBNYWtlIGl0IGtmcmVlKCktYWJsZS5cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU2LVxcdFxcdCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTc6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1OC1cXHRcXHRcXHRcXHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjYtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg2NzpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTk6MDc6MzIuOTI1NzA2NjhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI5ODcwNTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlYC4gUmlnaHQsIHRoYXQncyBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBob3cgREFNT04gaGFuZGxlcyBxdW90YSBzY29yaW5nIHRocm91Z2ggc3lzZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgcXVvdGEgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgREFNT04gY29tcG9uZW50cy4gSSBleHBlY3QgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBxdW90YSBsaW1pdHMgYXJlIGRlZmluZWQsIGhvdyBzY29yaW5nIGxvZ2ljIGlzIGFwcGxpZWQsIGFuZCBob3cgcmVzdWx0cyBhcmUgZXhwb3NlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgaW1wbGVtZW50aW5nIGEgcXVvdGEgc3lzdGVtIHdpdGhpbiBhIG1vbml0b3JpbmcgZnJhbWV3b3JrLiBJJ20gZ29pbmcgaW4gd2l0aCBhIGh5cG90aGVzaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBzY29yaW5nIHBhcmFtZXRlcnMgYXJlIHVwZGF0ZWQgYmFzZWQgb24gdXNlciBpbnB1dCwgYW5kIGl0IHNldHMgdGhlIHN0YWdlIGZvciB0aGUgbW9uaXRvcmluZyBmcmFtZXdvcmsgdG8gc3RhcnQgb2JzZXJ2aW5nIHRoZSByZXNvdXJjZSB1c2FnZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNzozNi4yMjQ0MTYxMDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQ3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODQ3OlxcdHN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbjI4NDg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpzeXNmc19nb2FscyxcXG4yODQ5OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuMjg1MDpcXHR7XFxuMjg1MTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4yODUyOlxcdFxcdGludCBpLCBlcnI7XFxuMjg1MzpcXHRcXG4yODU0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNmc19nb2Fscy1cXHUwMDNlbnI7IGkrKykge1xcbjI4NTU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKnN5c2ZzX2dvYWwgPVxcbjI4NTY6XFx0XFx0XFx0XFx0c3lzZnNfZ29hbHMtXFx1MDAzZWdvYWxzX2FycltpXTtcXG4yODU3OlxcdFxcbjI4NTg6XFx0XFx0XFx0aWYgKCFzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpXFxuMjg1OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODYwOlxcdFxcbjI4NjE6XFx0XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG4yODYyOlxcdFxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuMjg2MzpcXHRcXHRcXHRpZiAoIWdvYWwpXFxuMjg2NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODY1OlxcdFxcdFxcdHN3aXRjaCAoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljKSB7XFxuMjg2NjpcXHRcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxuMjg2NzpcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG4yODY4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4Njk6XFx0XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbjI4NzA6XFx0XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbjI4NzE6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cXHUwMDNlbmlkO1xcbjI4NzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg3MzpcXHRcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG4yODc0OlxcdFxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxcbjI4NzU6XFx0XFx0XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfbWVtY2dfcGF0aF90b19pZChcXG4yODc2OlxcdFxcdFxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXBhdGgsIFxcdTAwMjZnb2FsLVxcdTAwM2VtZW1jZ19pZCk7XFxuMjg3NzpcXHRcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjg3ODpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZ29hbCk7XFxuMjg3OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4ODA6XFx0XFx0XFx0XFx0fVxcbjI4ODE6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cXHUwMDNlbmlkO1xcbjI4ODI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg4MzpcXHRcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbjI4ODQ6XFx0XFx0XFx0XFx0Z29hbC1cXHUwMDNlbmlkID0gc3lzZnNfZ29hbC1cXHUwMDNlbmlkO1xcbjI4ODU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg4NjpcXHRcXHRcXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxOTowNzozNi4yMjQ1NzczMDNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg2MTgwNjAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9TIFF1b3RhIEdvYWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmVgLCB3ZSdyZSBjcmVhdGluZyBhIG5ldyBxdW90YSBnb2FsIGJhc2VkIG9uIHRoZSBgc3lzZnNfZ29hbGAgZGF0YS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB1cGRhdGluZyBob3cgd2UgaGFuZGxlIHNwZWNpZmljIHF1b3RhIG1ldHJpY3MsIG5hbWVseSB0aG9zZSByZWxhdGVkIHRvIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIGFuZCBub2RlLWVsaWdpYmxlIG1lbW9yeS4gSSBzZWUgdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGlzIGNydWNpYWwsIGNvcHlpbmcgdmFsdWVzLCBhbmQgdGhlbiBjYWxsaW5nIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlIGtleSBjaGFuZ2VzOiAgYGxhc3RfcHNpX3RvdGFsYCBpcyBpbml0aWFsaXplZCB3aXRoIGBVNjRfTUFYYCB3aGVuIGNvbW1pdHRpbmcgb3IgY3JlYXRpbmcgZ29hbHMgZm9yIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGFuZCBgbmlkYCBiZWluZyBjb21taXR0ZWQgdG8gZHN0IGZvciBgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlBgLiAgVGhlIHVwZGF0ZSBpbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoYXQgaW5pdGlhbCBQU0kgZGF0YS5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIEknbSBsb29raW5nIGZvciB3aGVyZSB3ZSdyZSBjb3B5aW5nIGRhdGEgb3V0LiBJJ20gc2VlaW5nIHRoYXQgd2UncmUgdXNpbmcgc3RhbmRhcmQgc3lzZnMgcmVhZHMvd3JpdGVzIGZvciBEQU1PTiwgc28gc3RyaW5nIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcgYXJlIGJlaW5nIHVzZWQuIE5vIGRpcmVjdCBzdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHByZXZpb3VzIGxvZ2ljYWwgaXNzdWUgd2l0aCBQU0kgdG90YWwgcXVvdGEgYnkgaW5pdGlhbGl6aW5nIG9yIGNvcHlpbmcgdGhlIGBuaWRgIGZpZWxkLiBObyBLTVNBTiBhbGVydHMgaGVyZS5cblxuVG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIEkgbmVlZCB0byBjaGVjayBmb3IgdGhlIGNsYXNzaWMgS01TQU4gXCJyZWQgZmxhZ3MuXCIgS01TQU4gZmxhZ3MgY29kZSB0aGF0IHNlbmRzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYywgYWxsb2NhdGVzIGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBoYXMgcG90ZW50aWFsIGJ1ZmZlciBhY2Nlc3MgaXNzdWVzIGZyb20gdW5pbml0aWFsaXplZCBieXRlcy5cblxuQmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhlIGNoYW5nZXM6XG5cbjEuICBUaGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG9zc2libHkgdW5pbml0aWFsaXplZCBmaWVsZHMuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgc2VlbXMgc2FmZSwgYXMgdGhlIFBTSSB0b3RhbCBxdW90YSBpc3N1ZSBpcyBzcGVjaWZpY2FsbHkgZml4ZWQgaW4gdGhlIHBhdGNoLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgc291bmQuIEV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZXMgemVyby1hbGxvY2F0b3JzLlxuNC4gIE5vIGJ1ZmZlciBhY2Nlc3MgaXNzdWVzLiBUaGUgY2hhbmdlcyBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uLCBzbyB0aGUgY2hhbmNlIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGlzIHZlcnkgbG93LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAuXG5cbkhlcmUncyBteSByYXRpb25hbGUgZm9yIGZvcm11bGF0aW5nIGEgY29tcGxldGUgYEtNU0FOUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9TIHF1b3RhIGdvYWwgaGFuZGxpbmcuIEl0J3MgZm9jdXNlZCBvbiB0aGUgaW50ZXJuYWwgcXVvdGEgY2FsY3VsYXRpb24gYW5kIHNjaGVkdWxpbmcgbG9naWMgd2l0aGluIERBTU9OIGFuZCBob3cgd2UgaGFuZGxlIHN5c2ZzIGF0dHJpYnV0ZXMuIE5vIGtlcm5lbC10by11c2VyIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCAodGhpbmdzIGxpa2UgaW9jdGwsIG5ldGxpbmssIG9yIEJQRiBvdXRwdXRzKS4gTWVtb3J5IGFsbG9jYXRpb25zIHVzZSBga3phbGxvY19vYmpgLCBhbmQgbmV3IGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudC4gV2UncmUgZ29vZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njc1LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE5OjA3OjQ2LjA4NjM4Nzk0M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9TIHF1b3RhIGdvYWwgY2FsY3VsYXRpb24gbG9naWMgKHNwZWNpZmljYWxseSBpbml0aWFsaXppbmcgYW5kIGhhbmRsaW5nIHRoZSBsYXN0IFBTSSB0b3RhbCBzZW50aW5lbCBhbmQgY29tbWl0dGluZyB0aGUgbm9kZSBJRCBmb3IgZWxpZ2libGUgbWVtb3J5IGdvYWxzKSBhbmQgbW92ZXMgYSBnbG9iYWwgc3lzZnMgcmVmcmVzaCBqaWZmaWVzIHRpbWVzdGFtcCB0byBwZXIta2RhbW9uZCBzdHJ1Y3QgaW5zdGFuY2VzLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkOlxcbjEuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgKHN5c2ZzIHVzZXMgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdHRpbmcpLlxcbjIuIFRoZSBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIChlLmcuLCBgZGFtb25fc3lzZnNfa2RhbW9uZGAgdmlhIGBremFsbG9jX29iamAsIGV4cGxpY2l0IGZpZWxkIGluaXRpYWxpemF0aW9uIGluIGBkYW1vc19uZXdfcXVvdGFfZ29hbGApLlxcbjMuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgY2FsY3VsYXRpb25zIHdpdGhpbiBEQU1PTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBnb2FsIGNhbGN1bGF0aW9uIGxvZ2ljIChzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGFuZCBoYW5kbGluZyB0aGUgbGFzdCBQU0kgdG90YWwgc2VudGluZWwgYW5kIGNvbW1pdHRpbmcgdGhlIG5vZGUgSUQgZm9yIGVsaWdpYmxlIG1lbW9yeSBnb2FscykgYW5kIG1vdmVzIGEgZ2xvYmFsIHN5c2ZzIHJlZnJlc2ggamlmZmllcyB0aW1lc3RhbXAgdG8gcGVyLWtkYW1vbmQgc3RydWN0IGluc3RhbmNlcy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZDpcXG4xLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3RzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIChzeXNmcyB1c2VzIHN0YW5kYXJkIHN0cmluZyBmb3JtYXR0aW5nKS5cXG4yLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCAoZS5nLiwgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIHZpYSBga3phbGxvY19vYmpgLCBleHBsaWNpdCBmaWVsZCBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKS5cXG4zLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[1] Phase: Succeeded StartedAt: 2026-08-28 19:07:57 +0000 UTC FinishedAt: 2026-08-28 19:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 19:07:57 +0000 UTC FinishedAt: 2026-08-28 19:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2] Phase: Succeeded StartedAt: 2026-08-28 19:07:57 +0000 UTC FinishedAt: 2026-08-28 22:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-28 19:07:57 +0000 UTC FinishedAt: 2026-08-28 22:51:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-28 19:07:57 +0000 UTC FinishedAt: 2026-08-28 19:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-28 19:07:57 +0000 UTC FinishedAt: 2026-08-28 19:08:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow4f77w/series-workflow4f77w-convert-artifact-2407844299/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-28 19:08:07 +0000 UTC FinishedAt: 2026-08-28 19:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-28 19:08:07 +0000 UTC FinishedAt: 2026-08-28 19:23:57 +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:*1cb31795-2b11-49b4-a659-ca91a0aba756,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-workflow4f77w/series-workflow4f77w-convert-artifact-2407844299/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": "d9f03264-9d7f-48a0-aa05-926212dd7086", "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-workflow4f77w/series-workflow4f77w-build-action-1883783369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-28 19:08:07 +0000 UTC FinishedAt: 2026-08-28 19:23:47 +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:*1cb31795-2b11-49b4-a659-ca91a0aba756,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-workflow4f77w/series-workflow4f77w-convert-artifact-2407844299/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": "d9f03264-9d7f-48a0-aa05-926212dd7086", "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-workflow4f77w/series-workflow4f77w-build-action-1883783369/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 19:23:57 +0000 UTC FinishedAt: 2026-08-28 19:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 19:23:57 +0000 UTC FinishedAt: 2026-08-28 19:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 19:23:57 +0000 UTC FinishedAt: 2026-08-28 19:24:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 19:23:57 +0000 UTC FinishedAt: 2026-08-28 19:24:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow4f77w/series-workflow4f77w-convert-artifact-3877918242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 19:24:07 +0000 UTC FinishedAt: 2026-08-28 19:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 19:24:07 +0000 UTC FinishedAt: 2026-08-28 19:25:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9f03264-9d7f-48a0-aa05-926212dd7086,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-workflow4f77w/series-workflow4f77w-build-action-1883783369/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-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 19:26:05 +0000 UTC FinishedAt: 2026-08-28 19:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 19:26:05 +0000 UTC FinishedAt: 2026-08-28 19:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 19:26:05 +0000 UTC FinishedAt: 2026-08-28 19:42:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 19:26:05 +0000 UTC FinishedAt: 2026-08-28 19:42:56 +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:*1cb31795-2b11-49b4-a659-ca91a0aba756,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-workflow4f77w/series-workflow4f77w-convert-artifact-3877918242/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": "f5e9db22-826d-4c1f-b0c9-21dc57c59785", "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-workflow4f77w/series-workflow4f77w-build-action-1962776182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 19:26:05 +0000 UTC FinishedAt: 2026-08-28 19:42:46 +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:*1cb31795-2b11-49b4-a659-ca91a0aba756,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-workflow4f77w/series-workflow4f77w-convert-artifact-3877918242/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": "f5e9db22-826d-4c1f-b0c9-21dc57c59785", "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-workflow4f77w/series-workflow4f77w-build-action-1962776182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 19:42:56 +0000 UTC FinishedAt: 2026-08-28 19:42:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 19:42:56 +0000 UTC FinishedAt: 2026-08-28 19:42:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 19:42:56 +0000 UTC FinishedAt: 2026-08-28 19:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 19:42:56 +0000 UTC FinishedAt: 2026-08-28 19:44:42 +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:*f5e9db22-826d-4c1f-b0c9-21dc57c59785,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-workflow4f77w/series-workflow4f77w-build-action-1962776182/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-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 19:44:52 +0000 UTC FinishedAt: 2026-08-28 22:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 19:44:52 +0000 UTC FinishedAt: 2026-08-28 22:51:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},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:*d9f03264-9d7f-48a0-aa05-926212dd7086,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f5e9db22-826d-4c1f-b0c9-21dc57c59785,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-workflow4f77w/series-workflow4f77w-build-action-1883783369/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-workflow4f77w/series-workflow4f77w-build-action-1962776182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 19:44:52 +0000 UTC FinishedAt: 2026-08-28 19:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 19:44:52 +0000 UTC FinishedAt: 2026-08-28 19:44:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},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-workflow4f77w/series-workflow4f77w-convert-artifact-1752809047/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 19:44:52 +0000 UTC FinishedAt: 2026-08-28 19:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 19:44:52 +0000 UTC FinishedAt: 2026-08-28 19:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 19:44:53 +0000 UTC FinishedAt: 2026-08-28 19:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 19:45:03 +0000 UTC FinishedAt: 2026-08-28 22:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4f77w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_new_quota_goal","damos_commit_quota_goals","damon_commit_ctx","damon_start","damon_sysfs_add_schemes","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","PSI"],"series_id":"03fa3d4f-39a6-473c-a659-d81737c27d7a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 19:45:03 +0000 UTC FinishedAt: 2026-08-28 22:50:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9f03264-9d7f-48a0-aa05-926212dd7086,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f5e9db22-826d-4c1f-b0c9-21dc57c59785,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-workflow4f77w/series-workflow4f77w-build-action-1883783369/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-workflow4f77w/series-workflow4f77w-build-action-1962776182/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-workflow4f77w/series-workflow4f77w-convert-artifact-1752809047/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,}