Name: series-workflowcr9kr Phase: Running StartedAt: 2026-08-02 14:19:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[0] Phase: Succeeded StartedAt: 2026-08-02 14:19:46 +0000 UTC FinishedAt: 2026-08-02 14:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 14:19:46 +0000 UTC FinishedAt: 2026-08-02 14:40:33 +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": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "c6dae216-7365-467a-86f4-e2d58179bdc2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_set_attrs", "damon_set_schemes", "damon_add_scheme", "damon_sysfs_add_schemes", "damon_call" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gY29yZSBzY2hlbWUgYXBwbGljYXRpb24gKGBkYW1vc19hcHBseV9zY2hlbWVgKSwgcXVvdGEgY2FsY3VsYXRpb25zIChgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgKSwgYW5kIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBvcGVyYXRpb25zIChgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIFRvIHRlc3QgdGhlc2UgcGF0aHMsIERBTU9OIG11c3QgYmUgZW5hYmxlZCBhbmQgc2NoZW1lcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYW5kIGFwcGxpZWQsIHdoaWNoIGNhbiBiZSBkb25lIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG9yIGluLWtlcm5lbCBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODA2OGM3YzgxMDYyNGI5MThlY2YzYzBiNjM3NjMyMjAzNTlkZThjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTQ6MzU6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi40OTQ0Y2YyYzVhZmFlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzeilcbiBcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4tXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcbiYjNDM7XHRcdFx0aWYgKGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzeikpXG4mIzQzO1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgJiM0MzsyODE2LDggQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuIFx0fVxuIFxuIFx0c2lfbWVtaW5mb19ub2RlKFx1MDAyNmksIGdvYWwtXHUwMDNlbmlkKTtcbiYjNDM7XHRpZiAoIWkudG90YWxyYW0pXG4mIzQzO1x0XHRpLnRvdGFscmFtID0gMTtcbiBcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuQEAgLTI4NTUsMTAgJiM0MzsyODU4LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG4gXHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuLVx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbiYjNDM7XHRpZiAoIWkudG90YWxyYW0pXG4mIzQzO1x0XHRyZXR1cm4gMTAwMDA7XG4mIzQzO1x0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkge1xuIFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuLVx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuJiM0MztcdFx0aWYgKGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gdXNlZF9wYWdlcztcbiYjNDM7XHR9XG4gXHRyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pO1xuIH1cbiBcbkBAIC0zMDAxLDcgJiM0MzszMDEwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfQUNUSVZFX0ZJTEUpO1xuIFx0aW5hY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICYjNDM7IExSVV9JTkFDVElWRV9BTk9OKSAmIzQzO1xuIFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICYjNDM7IExSVV9JTkFDVElWRV9GSUxFKTtcbi1cdHRvdGFsID0gYWN0aXZlICYjNDM7IGluYWN0aXZlO1xuJiM0MztcdHRvdGFsID0gbWF4KGFjdGl2ZSAmIzQzOyBpbmFjdGl2ZSwgMSk7XG4gXHRpZiAoYWN0aXZlX3JhdGlvKVxuIFx0XHRyZXR1cm4gbXVsdF9mcmFjKGFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbiBcdHJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG5AQCAtMzcyNyw2ICYjNDM7MzczNiwxNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiAtRUJVU1k7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc3RydWN0IGRhbW9zICpzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4mIzQzO1xuJiM0MztcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2cy1cdTAwM2VxdW90YSkge1xuJiM0MztcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuQEAgLTM3NDMsNiAmIzQzOzM3NjMsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xuIFx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc2NoZW1lLCBjdHgpO1xuIFx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpO1xuJiM0MztcdFx0ZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHNjaGVtZSk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRlbHNlXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pO1xuJiM0MztcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxuQEAgLTMwMiw3ICYjNDM7MzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiYjNDM7XHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5AQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcdTAwMjZmb2xpb19saXN0LCBzLVx1MDAzZXRhcmdldF9uaWQpO1xuQEAgLTM3OSw3ICYjNDM7Mzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKSAvIGFkZHJfdW5pdDtcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCAwNjQ4NDAwYjJkNjViLi5hYTgzM2MyYzRmYTM1IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuJiM0MztcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcbiBcdFx0XHRcdG1pZ3JhdGlvbl9saXN0cyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UoKnB0ZSkpO1xuJiM0MztcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtODMxLDYgJiM0Mzs4MzQsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRmb3IgKDsgYWRkciBcdTAwM2MgbmV4dDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4mIzQzO1xuIFx0XHRuciA9IDE7XG4gXHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiBcbkBAIC04NDQsNyAmIzQzOzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiBcdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UoKnB0ZSkpO1xuJiM0MztcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9hZGRfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgYnVncyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIChgZGFtb3NfYXBwbHlfc2NoZW1lYCksIHF1b3RhIGNhbGN1bGF0aW9ucyAoYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCksIGFuZCBwaHlzaWNhbC92aXJ0dWFsIGFkZHJlc3Mgb3BlcmF0aW9ucyAoYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIHBhdGhzLCBEQU1PTiBtdXN0IGJlIGVuYWJsZWQgYW5kIHNjaGVtZXMgbXVzdCBiZSBjb25maWd1cmVkIGFuZCBhcHBsaWVkLCB3aGljaCBjYW4gYmUgZG9uZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZSBvciBpbi1rZXJuZWwgQVBJcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNjhjN2M4MTA2MjRiOTE4ZWNmM2MwYjYzNzYzMjIwMzU5ZGU4YzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDE0OjM1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjQ5NDRjZjJjNWFmYWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI2MTMsNyAmIzQzOzI2MTMsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJCQkJYy0mZ3Q7bWluX3JlZ2lvbl9zeik7CiAJCQlpZiAoIXN6KQogCQkJCWdvdG8gdXBkYXRlX3N0YXQ7Ci0JCQlkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opOwomIzQzOwkJCWlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKQomIzQzOwkJCQlnb3RvIHVwZGF0ZV9zdGF0OwogCQl9CiAJCWlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpCiAJCQlyZXR1cm47CkBAIC0yODE1LDYgJiM0MzsyODE2LDggQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKAogCX0KIAogCXNpX21lbWluZm9fbm9kZSgmYW1wO2ksIGdvYWwtJmd0O25pZCk7CiYjNDM7CWlmICghaS50b3RhbHJhbSkKJiM0MzsJCWkudG90YWxyYW0gPSAxOwogCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KQEAgLTI4NTUsMTAgJiM0MzsyODU4LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCiAJc2lfbWVtaW5mb19ub2RlKCZhbXA7aSwgZ29hbC0mZ3Q7bmlkKTsKLQlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkKJiM0MzsJaWYgKCFpLnRvdGFscmFtKQomIzQzOwkJcmV0dXJuIDEwMDAwOwomIzQzOwlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkgewogCQludW1lcmF0b3IgPSB1c2VkX3BhZ2VzOwotCWVsc2UJLyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi8KJiM0MzsJCWlmIChpLnRvdGFscmFtICZsdDsgdXNlZF9wYWdlcykKJiM0MzsJCQlyZXR1cm4gMDsKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIHVzZWRfcGFnZXM7CiYjNDM7CX0KIAlyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pOwogfQogCkBAIC0zMDAxLDcgJiM0MzszMDEwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbykKIAkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfQUNUSVZFX0ZJTEUpOwogCWluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfQU5PTikgJiM0MzsKIAkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfRklMRSk7Ci0JdG90YWwgPSBhY3RpdmUgJiM0MzsgaW5hY3RpdmU7CiYjNDM7CXRvdGFsID0gbWF4KGFjdGl2ZSAmIzQzOyBpbmFjdGl2ZSwgMSk7CiAJaWYgKGFjdGl2ZV9yYXRpbykKIAkJcmV0dXJuIG11bHRfZnJhYyhhY3RpdmUsIDEwMDAwLCB0b3RhbCk7CiAJcmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTsKQEAgLTM3MjcsNiAmIzQzOzM3MzYsMTcgQEAgc3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIC1FQlVTWTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKJiM0MzsKJiM0MzsJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAmYW1wO3MtJmd0O3F1b3RhKSB7CiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/CkBAIC0zNzQzLDYgJiM0MzszNzYzLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7CiAJCWRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7CiAJCWRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7CiYjNDM7CQlkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IDVjNmMzYTU5N2ZkMGIuLjlkZGQxZWM4MjAyYjcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjY0LDcgJiM0MzsyNjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCWVsc2UKIAkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtmb2xpb19saXN0KTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCWlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcikKQEAgLTMwMiw3ICYjNDM7MzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKAogCQkJZm9saW9fZGVhY3RpdmF0ZShmb2xpbyk7CiAJCWFwcGxpZWQgJiM0Mzs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCXMtJmd0O2xhc3RfYXBwbGllZCA9IGZvbGlvOwpAQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCQkJZm9saW9faXNfZmlsZV9scnUoZm9saW8pKTsKIAkJbGlzdF9hZGQoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2ZvbGlvX2xpc3QpOwogcHV0X2ZvbGlvOgotCQlhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKJiM0MzsJCWFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAl9CiAJYXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoJmFtcDtmb2xpb19saXN0LCBzLSZndDt0YXJnZXRfbmlkKTsKQEAgLTM3OSw3ICYjNDM7Mzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCiAJCWlmICghZGFtb3NfcGFfZmlsdGVyX291dChzLCBmb2xpbykpCiAJCQkqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbykgLyBhZGRyX3VuaXQ7Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IDA2NDg0MDBiMmQ2NWIuLmFhODMzYzJjNGZhMzUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNjY5LDYgJiM0Mzs2NjksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKDsgYWRkciAmbHQ7IG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHBhZ2VfaWR4OwomIzQzOwogCQluciA9IDE7CiAJCXB0ZW50ID0gcHRlcF9nZXQocHRlKTsKIApAQCAtNjgxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCWNvbnRpbnVlOwogCQlkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay0mZ3Q7dm1hLCBhZGRyLCBkZXN0cywKIAkJCQltaWdyYXRpb25fbGlzdHMpOwotCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCXBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTsKJiM0MzsJCW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7CiAJfQogCXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpOwogCXJldHVybiAwOwpAQCAtODMxLDYgJiM0Mzs4MzQsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKDsgYWRkciAmbHQ7IG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHBhZ2VfaWR4OwomIzQzOwogCQluciA9IDE7CiAJCXB0ZW50ID0gcHRlcF9nZXQocHRlKTsKIApAQCAtODQ0LDcgJiM0Mzs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogCQlpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSkKIAkJCSpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQlwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZSgqcHRlKSk7CiYjNDM7CQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4OwogCQlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBEQU1PTiBmaWxlczogYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBpcyBhIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3Npbmcgc2V2ZXJhbCBpc3N1ZXMuCgpGaXJzdCwgdGhlcmUmIzM5O3MgYSBjb3JyZWN0aW9uIHRvIGBkYW1vbl9zcGxpdF9yZWdpb25fYXRgJiMzOTtzIHJldHVybiB2YWx1ZSBjaGVjayB3aXRoaW4gYGRhbW9zX2FwcGx5X3NjaGVtZWAuIEdvb2QsIG1ha2luZyBzdXJlIHRoZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QuIFRoZW4sIHNhbml0eSBjaGVja3MgZm9yIGBpLnRvdGFscmFtYCBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBhbmQgY2hlY2tpbmcgZm9yIGBhY3RpdmUgJiM0MzsgaW5hY3RpdmVgIGVxdWFsaW5nIHplcm8gaW4gYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYC4gU2VlbXMgbGlrZSBzb21lIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0byBoYW5kbGUgcG90ZW50aWFsbHkgdW5leHBlY3RlZCBzdGF0ZXMuCgpJdCBhbHNvIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAgd2l0aCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgUFNJLWJhc2VkIHF1b3RhIGVuZm9yY2VtZW50LgoKTm93LCBpbnRvIHRoZSBtb3JlIGdyYW51bGFyIGZpeGVzOiBJbiBgbW0vZGFtb24vcGFkZHIuY2AsIHRoZXkmIzM5O3ZlIGZpeGVkIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9uLCBzd2l0Y2hpbmcgZnJvbSBhZGRpbmcgdG8gYW4gZXhpc3RpbmcgdmFsdWUgdG8gc2V0dGluZyBhbiBhYnNvbHV0ZSB2YWx1ZS4gTWFrZXMgc2Vuc2UsIGVuc3VyaW5nIGNvcnJlY3QgcGFnZS1hbGlnbmVkIGFkZHJlc3MgdHJhdmVyc2FsLiBUaGVuIGluIGBtbS9kYW1vbi92YWRkci5jYCwgaXQgbG9va3MgbGlrZSB0aGUgcGFnZSBjb3VudCBjYWxjdWxhdGlvbiBpcyBiZWluZyBjb3JyZWN0ZWQsIHN1YnRyYWN0aW5nIHRoZSBwYWdlIGluZGV4IHRvIGF2b2lkIGNvdW50aW5nIGFuIHVubmVjZXNzYXJ5IHBhZ2UuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGNvcnJlY3Rpb24gZm9yIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAsIHNvIHRoZXkmIzM5O3JlIGhpdHRpbmcgdGhlIHNwZWNpZmljIHBhZ2UgY29ycmVjdGx5LgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY29yZSBEQU1PTiBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBEQU1PTiBpcyBkZWZpbml0ZWx5IGEgY29yZSBmZWF0dXJlLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIHdvcmtpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIHRvIGJlIHN1cmUgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFZpcnR1YWwgYW5kIFBoeXNpY2FsIEFkZHJlc3MgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEQU1PTiBzeXN0ZW0gaGFuZGxlcyB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gVGhhdCBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5IGRlZmluaXRpb25zIGZvciBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgLiBJdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMgc3BlY2lmaWVkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIG91dGxpbmUgaG93IHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzIGFyZSBtYW5hZ2VkLCBpZiBpdCBhbGxvd3MgZm9yIHRoZSBzdXBwb3J0IG9mIGJvdGggYW5kIHNvbWUgY29uZmlndXJhdGlvbnMgYXJvdW5kIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuICA4MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDgyOlx0XG4gIDgzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA4NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgODU6XHRcbiAgODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODc6XHRcbiAgODg6XHRjb25maWcgREFNT05fUkVDTEFJTVxuICA4OTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuICA5MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbiAgOTM6XHRcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxuICA5NDpcdFx0ICB0aG9zZS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcbiAgOTc6XHRcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxuICA5ODpcdFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cbiAgOTk6XHRcbiAxMDA6XHRjb25maWcgREFNT05fTFJVX1NPUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQyCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgREFNT04gY29uZmlndXJhdGlvbnM6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLiBSaWdodCBhd2F5LCBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmZzIGhhdmUgdG91Y2hlZCBhIGJ1bmNoIG9mIGNvcmUgcm91dGluZXMuIEkmIzM5O3ZlIGdvdCBteSBleWVzIG9uIGBkYW1vc19hcHBseV9zY2hlbWVgLCBjbGVhcmx5IGNydWNpYWwgZm9yIGFwcGx5aW5nIG1vbml0b3Jpbmcgc2NoZW1lcy4gVGhlbiB3ZSBoYXZlIHRoZSBtZW1vcnkgYXJlYSByZXRyaWV2YWxzOiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYC4gVGhvc2UgYXJlLCB3aXRob3V0IGEgZG91YnQsIGNlbnRyYWwgdG8gYWNjZXNzaW5nIHRoZSBtZW1vcnkgYXJlYXMgZm9yIG1vbml0b3JpbmcuCgpJIGFsc28gbm90aWNlIHNvbWUgY29udGV4dCBpbml0aWFsaXphdGlvbjogYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAgYW5kIGBrZGFtb25kX2luaXRfY3R4YC4gVGhlc2UgYXJlIHByb2JhYmx5IGtleSBmb3IgdGhlIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb2YgdGhlIG1vbml0b3JpbmcgZGFlbW9uLiBUaGUgYGRhbW9uX3BhX2AgcHJlZml4ZWQgZnVuY3Rpb25zIGFyZSBpbnRyaWd1aW5nLi4uIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBhbmQgYGRhbW9uX3BhX3N0YXRgLiBUaGVzZSBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IHBhZ2Ugb3BlcmF0aW9ucyBhbmQgcG90ZW50aWFsbHkgZGVhY3RpdmF0aW9uLCBtaWdyYXRpb24sIGFuZCB0aGUgZ2F0aGVyaW5nIG9mIHN0YXRpc3RpY3MgdW5kZXIgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvci4gRmluYWxseSwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCwgc28gc29tZSBWaXJ0dWFsIEFkZHJlc3MgbW9uaXRvcmluZyBpcyBhdCBwbGF5LCBvcGVyYXRpbmcgYXQgdGhlIHBtZCBsZXZlbC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIG5vdywgaXMgd2hldGhlciB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90PyBUaGUgdXNlIG9mIHN0YXRpYyB3b3VsZCBpbmRpY2F0ZSBhIHRpZ2h0bHkgY291cGxlZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIGFuZCB0aGVpciBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FwcGx5X3NjaGVtZXxkYW1vc19nZXRfbm9kZV9tZW1fYnB8ZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icHxkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icHxkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2l8a2RhbW9uZF9pbml0X2N0eHxkYW1vbl9wYV9wYWdlb3V0fGRhbW9uX3BhX2RlX2FjdGl2YXRlfGRhbW9uX3BhX21pZ3JhdGV8ZGFtb25fcGFfc3RhdHxkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeXxkYW1vc192YV9zdGF0X3BtZF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XHQvKiBUaGVzZSB3aWxsIGJlIHNldCBmcm9tIGtkYW1vbmRfaW5pdF9jdHgoKSAqL1xubW0vZGFtb24vY29yZS5jLTg0OC1cdGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NTg9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTcxLVxubW0vZGFtb24vY29yZS5jOjI1NzI6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjU3My1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjQzPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY2OS1cdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbm1tL2RhbW9uL2NvcmUuYzoyNjcwOlx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0yNjcxLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODAwPXN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgwNC1cbm1tL2RhbW9uL2NvcmUuYzoyODA1OnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0yODA2LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgyNy1cbm1tL2RhbW9uL2NvcmUuYzoyODI4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmMtMjgyOS1cdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTI5NzU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI5ODEtI2Vsc2UgLyogQ09ORklHX05VTUEgKi9cbm1tL2RhbW9uL2NvcmUuYzoyOTgyOnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0yOTgzLVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjk4Ny1cbm1tL2RhbW9uL2NvcmUuYzoyOTg4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmMtMjk4OS1cdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTI5OTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMDMtICovXG5tbS9kYW1vbi9jb3JlLmM6MzAwNDpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxubW0vZGFtb24vY29yZS5jLTMwMDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDE5PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAzNC1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDM1Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzAzNi1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMwMzgtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDM5Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNDAtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDQyLVx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XG5tbS9kYW1vbi9jb3JlLmM6MzA0MzpcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmMtMzA0NC1cdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzExPXN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzM4LVxubW0vZGFtb24vY29yZS5jOjM3Mzk6c3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0zNzQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc0OS1cbm1tL2RhbW9uL2NvcmUuYzozNzUwOnN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTM3NTEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzY1LVx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpO1xubW0vZGFtb24vY29yZS5jOjM3NjY6XHRcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTM3NjctXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM3NzM9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3ODYtXHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzozNzg3Olx0a2RhbW9uZF9pbml0X2N0eChjdHgpO1xubW0vZGFtb24vY29yZS5jLTM3ODgtXG4tLVxubW0vZGFtb24vcGFkZHIuYz0yMDk9c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMTktXG5tbS9kYW1vbi9wYWRkci5jOjIyMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTIyMS1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI3Ny1cbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbm1tL2RhbW9uL3BhZGRyLmMtMjc5LVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTMxMj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzE1LXtcbm1tL2RhbW9uL3BhZGRyLmM6MzE2Olx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTMxNy19XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zMTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzIyLXtcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgZmFsc2UsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy0zMjQtfVxubW0vZGFtb24vcGFkZHIuYy0zMjUtXG5tbS9kYW1vbi9wYWRkci5jOjMyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMyNy1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM2MS1cbm1tL2RhbW9uL3BhZGRyLmM6MzYyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mzg5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zOTYtXHRjYXNlIERBTU9TX1BBR0VPVVQ6XG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcdFx0cmV0dXJuIGRhbW9uX3BhX3BhZ2VvdXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cdGNhc2UgREFNT1NfTFJVX1BSSU86XG4tLVxubW0vZGFtb24vcGFkZHIuYy00MDUtXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcbm1tL2RhbW9uL3BhZGRyLmM6NDA2Olx0XHRyZXR1cm4gZGFtb25fcGFfbWlncmF0ZShyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtNDA3LVx0Y2FzZSBEQU1PU19TVEFUOlxubW0vZGFtb24vcGFkZHIuYzo0MDg6XHRcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDktXHRkZWZhdWx0OlxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTg1PXN0YXRpYyB2b2lkIGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vdmFkZHIuYy02MzQtXG5tbS9kYW1vbi92YWRkci5jOjYzNTpzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2RhbW9uL3ZhZGRyLmMtNjM2LVx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NzQxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzUzLVx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xubW0vZGFtb24vdmFkZHIuYzo3NTQ6XHRcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcbm1tL2RhbW9uL3ZhZGRyLmMtNzU1LVx0XHQucHRlX2VudHJ5ID0gTlVMTCxcbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzk3LVxubW0vZGFtb24vdmFkZHIuYzo3OTg6c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9kYW1vbi92YWRkci5jLTc5OS1cdFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9kYW1vbi92YWRkci5jPTg2MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9zdGF0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTg2Ni1cdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3Olx0XHQucG1kX2VudHJ5ID0gZGFtb3NfdmFfc3RhdF9wbWRfZW50cnksXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzgKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzIGluIERBTU9OKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBhIGJ1bmNoIG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgYGtkYW1vbmRfaW5pdF9jdHhgLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gQnV0IGZ1enppbmcgdGhvc2UgZGlyZWN0bHkgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBzaW5jZSB0aGV5JiMzOTtyZSBzdGF0aWMgYW5kIGxpa2VseSBoYXZlIGxpbWl0ZWQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCB0aGVzZSBzdGF0aWMgb25lcy4gYGRhbW9zX2FwcGx5X3NjaGVtZWAgaXMgY2FsbGVkIGJ5IGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLiBUaGVuLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCBhcmUgYWxsIGNhbGxlZCBieSBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBkYW1vc19hZGp1c3RfcXVvdGFgLCBhbmQgdGhhdCBvbmUgaXMgYWxzbyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLiBga2RhbW9uZF9pbml0X2N0eGAgYWxzbyBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCBzbyBga2RhbW9uZF9mbmAgbG9va3MgaW50ZXJlc3RpbmcuIFRoZSBmdW5jdGlvbnMgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGFuZCBgZGFtb25fcGFfc3RhdGAgYXJlIGNhbGxlZCBieSBgZGFtb25fcGFfYXBwbHlfc2NoZW1lYCB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGUgYGN0eC0mZ3Q7b3BzLmFwcGx5X3NjaGVtZWAgaW4gYGRhbW9uX3BhX3NldF9vcGVyYXRpb25zYC4gQWxzbywgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCBhcmUgdXNlZCB3aXRoaW4gdGhlIGB3YWxrX29wc2Agc3RydWN0LCB1c2VkIGJ5IGBkYW1vc192YV9taWdyYXRlYCBhbmQgYGRhbW9zX3ZhX3N0YXRgLCB3aGljaCBhcmUgY2FsbGVkIGJ5IGBkYW1vbl92YV9hcHBseV9zY2hlbWVgLCB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGUgYGN0eC0mZ3Q7b3BzLmFwcGx5X3NjaGVtZWAgaW4gYGRhbW9uX3ZhX3NldF9vcGVyYXRpb25zYC4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgc2VlIHdoYXQgdGhlaXIgY2FsbGluZyBwYXR0ZXJucyBhcmUuIE15IGltbWVkaWF0ZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdvdWxkIGluY2x1ZGUgYGtkYW1vbmRfZm5gLCBgZGFtb25fcGFfYXBwbHlfc2NoZW1lYCwgYW5kIGBkYW1vbl92YV9hcHBseV9zY2hlbWVgLCBzaW5jZSB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcGFfc2V0X29wZXJhdGlvbnN8ZGFtb25fdmFfc2V0X29wZXJhdGlvbnN8ZGFtb25fZG9fYXBwbHlfc2NoZW1lc3xrZGFtb25kX2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA3NC1cdC8qXG5tbS9kYW1vbi9jb3JlLmM6MTA3NTpcdCAqIG5leHRfaW50ZXJ2YWxzX3R1bmVfc2lzIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwNzYtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjQtXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzNT1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTQyLVx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzoxOTQzOlx0XHRjdHgtXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXCYjMzQ7a2RhbW9uZC4lZFwmIzM0Oyxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ0LVx0XHRcdFx0bnJfcnVubmluZ19jdHhzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjA0NDpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NzI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NDItXG5tbS9kYW1vbi9jb3JlLmM6MjY0MzpzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMjY0NC1cdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jPTI2OTU9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3MDItXG5tbS9kYW1vbi9jb3JlLmM6MjcwMzpcdFx0ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhjLCB0LCByKTtcbm1tL2RhbW9uL2NvcmUuYy0yNzA0LVx0XHQvKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzUwPXN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzcyLSAqL1xubW0vZGFtb24vY29yZS5jOjM3NzM6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG5tbS9kYW1vbi9jb3JlLmMtMzc3NC17XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1OTgtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU5OTogKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcJiMzNDttbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcJiMzNDspXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwMC0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipDaGVja2luZyBEQU1PTiBTZXQgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBJIHJlbWVtYmVyIG5vdy4gVGhvc2UgYGRhbW9uX3BhX3NldF9vcGVyYXRpb25zYCBhbmQgYGRhbW9uX3ZhX3NldF9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzIGFyZW4mIzM5O3QgZGVmaW5lZCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCB3aGVyZSBkaWQgSSBwdXQgdGhlbT8gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlLi4uIFJpZ2h0LCB0aGV5JiMzOTtyZSBwcm9iYWJseSBpbiBvbmUgb2YgdGhlIGFkZHJlc3Mtc3BhY2Ugc3BlY2lmaWMgZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJdCBtYWtlcyBzZW5zZSB0aGV5JiMzOTtkIGJlIG5lYXIgdGhlIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgaGFuZGxpbmcgY29kZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEkmIzM5O2xsIGJldCB0aGV5JiMzOTtyZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wYV9zZXRfb3BlcmF0aW9uc3xkYW1vbl92YV9zZXRfb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTgzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgREFNT04mIzM5O3MgQWRkcmVzcyBUcmFuc2xhdGlvbiBGdW5jdGlvbnMqKgoKSG1tLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSByZWFsbHkgbmVlZCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBleHBvc2VkLCBhbmQgd2hhdCYjMzk7cyAqbm90KiBpbiBEQU1PTiYjMzk7cyBhZGRyZXNzIHRyYW5zbGF0aW9uIGNvcmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgIGZpbGVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgdXNlZCBleHRlcm5hbGx5LCBvciwgaWYgbm90aGluZyBlbHNlLCB3aGF0IGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gVGhhdCB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgREFNT04gaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0aGF0IGJhc2VsaW5lIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBkYW1vbl9wYV98XmludCBkYW1vbl9wYV98XnZvaWQgZGFtb25fdmFffF5pbnQgZGFtb25fdmFfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NTEKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVmlzaWJpbGl0eSBJc3N1ZXMgaW4gREFNT04gQ29kZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vZGFtb24vcGFkZHIuY2AgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHN1Z2dlc3RzIGEgcG9zc2libGUgc2NvcGUgaXNzdWUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IG1lYW50IHRvIGJlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSBvciBhcmUgdGhleSBsZWFraW5nIHVuaW50ZW5kZWQgYWNjZXNzIHBvaW50cywgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleeKAmXJlIG5vdCBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgaXMgbGlrZWx5IGFuIGluaXRpYWwgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBhcmUgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGV4dGVybmFsIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSByZWZhY3RvcmluZyBpcyBuZWVkZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBkYW1vbl9wYV9bYS16QS1aMC05X10qXFwofF5bYS16QS1aX11bYS16QS1aMC05X10qIGRhbW9uX3ZhX1thLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3OAoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSBhcmUgbXkgaW5pdGlhbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBFeHRlcm5hbCBGdW5jdGlvbiBFeHBvc3VyZSBpbiBgbW0vZGFtb24vcGFkZHIuY2AqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggbXkgY2hlY2tsaXN0LiBXZSBuZWVkIHRvIGF1ZGl0IGBtbS9kYW1vbi9wYWRkci5jYCBmb3IgYW55IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0aGF0IGFyZSAqbm90KiBzdGF0aWMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gKm91dHNpZGUqIHRoYXQgc3BlY2lmaWMgZmlsZS4gVGhlc2UgYXJlIHRoZSBvbmVzIHRoYXQgY291bGQgYmUgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gcG90ZW50aWFsbHksIGRlcGVuZGluZyBvbiBjb250ZXh0LCB1c2VyIHNwYWNlIGlmIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBpbnRlcmZhY2UgZXhwb3N1cmUgZ29pbmcgb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgaW4gdGVybXMgb2YgbW9kdWxlIGludGVyLWRlcGVuZGVuY2llcywgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYW5kIG9mIGNvdXJzZSwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBlYWNoIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIGNhcmVmdWxseSBjb25zaWRlciBpdHMgcHVycG9zZSBhbmQgdGhlIGxpa2VsaWhvb2Qgb2YgaXQgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3BhZGRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRlYnVnZ2luZyBNeSBSZWdleCBpbiBgbW0vZGFtb24vcGFkZHIuY2AqKgoKQWxyaWdodCwgbXkgcmVnZXggYXR0ZW1wdCBpbiBgbW0vZGFtb24vcGFkZHIuY2AgY2xlYXJseSBpc24mIzM5O3QgY2FwdHVyaW5nIHRoZSByaWdodCBpbmZvcm1hdGlvbi4gSXQmIzM5O3Mgbm90IHdvcmtpbmcgYXMgaW50ZW5kZWQuIFJhdGhlciB0aGFuIHNwZW5kIG1vcmUgdGltZSB0cnlpbmcgdG8gcmVmaW5lIGl0IGp1c3QgeWV0LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgdG8gYSBtb3JlIGRpcmVjdCBhcHByb2FjaC4gTGV0JiMzOTtzIGN1dCB0aHJvdWdoIHRoZSBub2lzZS4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwYC4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgaW4gYG1tL2RhbW9uL3BhZGRyLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGBncmVwYCBmb3IgdGhlIHRlbGwtdGFsZSBzaWducyBvZiBleHBvcnRlZCBzeW1ib2xzLCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQgSSBhbSB0cnlpbmcgdG8gaWRlbnRpZnkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgZWl0aGVyIGBFWFBPUlRfU1lNQk9MYCBvciBqdXN0IHRoZSBgdm9pZCBgIGRlY2xhcmF0aW9ucy4gQm90aCBzaG91bGQgcXVpY2tseSBuYXJyb3cgZG93biB0aGUgY2FuZGlkYXRlcyB0byB0aG9zZSB0aGF0IGFyZSBwdWJsaWNseSBleHBvc2VkLCBvciBhdCBsZWFzdCB2aXNpYmxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQganVtcGluZy1vZmYgcG9pbnQgZm9yIGZ1cnRoZXIgYW5hbHlzaXMsIHNhdmluZyBtZSB0aW1lIGFuZCB1bm5lY2Vzc2FyeSBoZWFkLXNjcmF0Y2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3BhZGRyLmM9MjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzctXG5tbS9kYW1vbi9wYWRkci5jOjM4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy0zOS17XG4tLVxubW0vZGFtb24vcGFkZHIuYz00OT1zdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy01Ni1cbm1tL2RhbW9uL3BhZGRyLmM6NTc6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3BhZGRyLmMtNTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipQZWVyaW5nIGludG8gcGFkZHIuYzogV2hhdCYjMzk7cyBQdWJsaWNseSBBY2Nlc3NpYmxlPyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYG1tL2RhbW9uL3BhZGRyLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgaXRzIHB1YmxpYyBpbnRlcmZhY2Ug4oCTIHRoZSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IERBTU9OIGV4cG9zZXMgb3IgbWFrZXMgYXZhaWxhYmxlIGdsb2JhbGx5LCBhbmQgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBsZXZlcmFnZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3Agd2hhdCB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IgaW4gdGhlIERBTU9OIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMsIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGFueSBjcml0aWNhbCBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHVzZWQgZWxzZXdoZXJlLiBVbmRlcnN0YW5kaW5nIHdoYXQmIzM5O3MgZXhwb3J0ZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgb3ZlcmFsbCByb2xlIGFuZCBkZXNpZ24gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgcHJpbWl0aXZlcyB0aGF0IG1hbmFnZSwgbWFuaXB1bGF0ZSwgb3IgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBhZGRyZXNzZXMgKHBhZGRycykgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBvZmZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15ib29sIHxeaW50IHxedm9pZCB8XnVuc2lnbmVkIGxvbmcgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcGFkZHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIFNjYW4gb2YgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBFeHBvcnRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0byB0aGUgY2hhc2UuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGp1aWN5IGxpdHRsZSBoZWxwZXIgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9wYWRkci5jYCB0aGF0IGFyZSBleHBvcnRlZC4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIHdhZGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgZmlsZSBpbml0aWFsbHkuIFRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgdXN1YWxseSB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIGludGVyZmFjZSwgdGhlIGZ1bmN0aW9ucyBtZWFudCBmb3IgZXh0ZXJuYWwgdXNlLiBJJiMzOTtsbCBqdXN0IGp1bXAgc3RyYWlnaHQgdG8gdGhlIHRhaWwgZW5kIG9mIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCBhcyBiZWluZyByZWxldmFudCB0byBteSBjdXJyZW50IGludmVzdGlnYXRpb24uIEhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBhIGNsZWFyIGluZGljYXRpb24gb2Ygd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSBhY2Nlc3NpYmxlIGJleW9uZCB0aGlzIG1vZHVsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmJvb2wgfF5pbnQgfF52b2lkIHxedW5zaWduZWQgbG9uZyB8XnN0cnVjdCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmVmaW5pbmcgTXkgQXBwcm9hY2ggdG8gSWRlbnRpZnlpbmcgdGhlIFJlbGV2YW50IENvZGUqKgoKSG1tLCB0aGF0IGluaXRpYWwgcmVnZXggSSBjcmFmdGVkLCB0aGUgb25lIGFuY2hvcmVkIHdpdGggYF5gLCBpcyBsaWtlbHkgdG9vIGJyaXR0bGUuIEl0JiMzOTtzIGFzc3VtaW5nIGEgdmVyeSBzcGVjaWZpYyBsaW5lIHN0cnVjdHVyZSwgYW5kIHRoZSBwcmVzZW5jZSBvZiBsZWFkaW5nIHNwYWNlcyBvciBvdGhlciBjaGFyYWN0ZXJzIG9uIHRoZSBzYW1lIGxpbmUgd291bGQgYnJlYWsgaXQuIE15IHByaW9yIGFwcHJvYWNoIGFzc3VtZWQgdGhhdCBjb2RlIHdvdWxkIGJlIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZSwgYnV0IHRoYXQmIzM5O3Mgbm90IGFsd2F5cyBhIHZhbGlkIGFzc3VtcHRpb24uIFRoZSBwcm9ibGVtIHNwYWNlIHJlcXVpcmVzIGEgbW9yZSByb2J1c3QgbWV0aG9kIG9mIHNlYXJjaC4KCkkgbmVlZCBzb21ldGhpbmcgdGhhdCBpcyBtb3JlIGZsZXhpYmxlLiBBIHNpbXBsZSBgZ3JlcGAgZm9yIGBkYW1vbl9wYV9zZXRfb3BlcmF0aW9uc2AgKG9yIGEgc2ltaWxhciByZWxldmFudCBmdW5jdGlvbiBvciBzeW1ib2wgbmFtZSksIGlzIHByb2JhYmx5IG1vcmUgZWZmaWNpZW50IGFuZCBsZXNzIHByb25lIHRvIGZhbHNlIG5lZ2F0aXZlcyBkdWUgdG8gbWlub3IgbGluZSB2YXJpYXRpb25zLiBUaGF0JiMzOTtzIGEgbXVjaCBtb3JlIGVsZWdhbnQgc29sdXRpb24gZm9yIHF1aWNrbHkgcGlucG9pbnRpbmcgdGhlIHJlbGV2YW50IGNvZGUgc2VnbWVudHMuIEl0JiMzOTtzIGEgcHJhZ21hdGljIHNoaWZ0IGluIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wYV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3BhZGRyLmMtMTgtXG5tbS9kYW1vbi9wYWRkci5jOjE5OnN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vbl9wYV9waHlzX2FkZHIoXG5tbS9kYW1vbi9wYWRkci5jLTIwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjQtXG5tbS9kYW1vbi9wYWRkci5jOjI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcbm1tL2RhbW9uL3BhZGRyLmMtMjYtXHRcdHBoeXNfYWRkcl90IHBhLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM3LVxubW0vZGFtb24vcGFkZHIuYzozODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcbm1tL2RhbW9uL3BhZGRyLmMtMzkte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDgtXG5tbS9kYW1vbi9wYWRkci5jOjQ5OnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtNTAtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTUzLVxubW0vZGFtb24vcGFkZHIuYzo1NDpcdGRhbW9uX3BhX21rb2xkKGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsIGN0eC1cdTAwM2VhZGRyX3VuaXQpKTtcbm1tL2RhbW9uL3BhZGRyLmMtNTUtfVxubW0vZGFtb24vcGFkZHIuYy01Ni1cbm1tL2RhbW9uL3BhZGRyLmM6NTc6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3BhZGRyLmMtNTgte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNjMtXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxubW0vZGFtb24vcGFkZHIuYzo2NDpcdFx0XHRfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHIsIGN0eCk7XG5tbS9kYW1vbi9wYWRkci5jLTY1LVx0fVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNjctXG5tbS9kYW1vbi9wYWRkci5jOjY4OnN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy02OS17XG4tLVxubW0vZGFtb24vcGFkZHIuYy04MC1cbm1tL2RhbW9uL3BhZGRyLmM6ODE6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtODItXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtODQtXHRib29sIGFjY2Vzc2VkO1xubW0vZGFtb24vcGFkZHIuYzo4NTpcdHBoeXNfYWRkcl90IHNhbXBsaW5nX2FkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoXG5tbS9kYW1vbi9wYWRkci5jLTg2LVx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtODctXG5tbS9kYW1vbi9wYWRkci5jOjg4Olx0YWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyKTtcbm1tL2RhbW9uL3BhZGRyLmMtODktXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGFjY2Vzc2VkKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTkxLVxubW0vZGFtb24vcGFkZHIuYzo5MjpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3BhZGRyLmMtOTMte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtOTktXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG5tbS9kYW1vbi9wYWRkci5jOjEwMDpcdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtMTAxLVx0XHRcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVx1MDAzZW5yX2FjY2Vzc2VzLCBtYXhfbnJfYWNjZXNzZXMpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxubW0vZGFtb24vcGFkZHIuYzoxMDg6c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbm1tL2RhbW9uL3BhZGRyLmMtMTA5LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTQwLVxubW0vZGFtb24vcGFkZHIuYzoxNDE6c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9wYWRkci5jLTE0Mi1cdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTQ3LVx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcbm1tL2RhbW9uL3BhZGRyLmM6MTQ4Olx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX21hdGNoKGYsIGZvbGlvKSkge1xubW0vZGFtb24vcGFkZHIuYy0xNDktXHRcdFx0cGFzcyA9IGYtXHUwMDNlYWxsb3c7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNTYtXG5tbS9kYW1vbi9wYWRkci5jOjE1NzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTE1OC1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzMtXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xubW0vZGFtb24vcGFkZHIuYzoxNzQ6XHRcdFx0cGEgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2VzYW1wbGluZ19hZGRyLFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vcGFkZHIuYzoxNzg6XHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmMtMTc5LVx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTk1PXN0YXRpYyBib29sIGRhbW9zX3BhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMDgtXG5tbS9kYW1vbi9wYWRkci5jOjIwOTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIxOS1cbm1tL2RhbW9uL3BhZGRyLmM6MjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMjIxLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjQ0LVxubW0vZGFtb24vcGFkZHIuYzoyNDU6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjI0NjpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMjQ3LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI0ODpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI0OS1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzQtXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYzoyNzU6XHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jLTI3Ni19XG5tbS9kYW1vbi9wYWRkci5jLTI3Ny1cbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbm1tL2RhbW9uL3BhZGRyLmMtMjc5LVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI4NS1cbm1tL2RhbW9uL3BhZGRyLmM6Mjg2Olx0YWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYzoyODc6XHR3aGlsZSAoYWRkciBcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI4OC1cdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYzoyODk6XHRcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xubW0vZGFtb24vcGFkZHIuYy0yOTAtXHRcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzA4LVx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3BhZGRyLmM6MzA5Olx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYy0zMTAtfVxubW0vZGFtb24vcGFkZHIuYy0zMTEtXG5tbS9kYW1vbi9wYWRkci5jOjMxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMTMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMTUte1xubW0vZGFtb24vcGFkZHIuYzozMTY6XHRyZXR1cm4gZGFtb25fcGFfZGVfYWN0aXZhdGUociwgYWRkcl91bml0LCBzLCB0cnVlLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzE3LX1cbm1tL2RhbW9uL3BhZGRyLmMtMzE4LVxubW0vZGFtb24vcGFkZHIuYzozMTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMjAtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xubW0vZGFtb24vcGFkZHIuYzozMjM6XHRyZXR1cm4gZGFtb25fcGFfZGVfYWN0aXZhdGUociwgYWRkcl91bml0LCBzLCBmYWxzZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XG5tbS9kYW1vbi9wYWRkci5jLTMyNS1cbm1tL2RhbW9uL3BhZGRyLmM6MzI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzMzLVxubW0vZGFtb24vcGFkZHIuYzozMzQ6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjMzNTpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0zNTgtXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYzozNTk6XHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jLTM2MC19XG5tbS9kYW1vbi9wYWRkci5jLTM2MS1cbm1tL2RhbW9uL3BhZGRyLmM6MzYyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzcxLVxubW0vZGFtb24vcGFkZHIuYzozNzI6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjM3MzpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjM3NTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTM3Ni1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0zODgtXG5tbS9kYW1vbi9wYWRkci5jOjM4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vcGFkZHIuYy0zOTAtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zOTYtXHRjYXNlIERBTU9TX1BBR0VPVVQ6XG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcdFx0cmV0dXJuIGRhbW9uX3BhX3BhZ2VvdXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cdGNhc2UgREFNT1NfTFJVX1BSSU86XG5tbS9kYW1vbi9wYWRkci5jOjM5OTpcdFx0cmV0dXJuIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHIsIGF1bml0LCBzY2hlbWUsXG5tbS9kYW1vbi9wYWRkci5jLTQwMC1cdFx0XHRcdHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDEtXHRjYXNlIERBTU9TX0xSVV9ERVBSSU86XG5tbS9kYW1vbi9wYWRkci5jOjQwMjpcdFx0cmV0dXJuIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMociwgYXVuaXQsIHNjaGVtZSxcbm1tL2RhbW9uL3BhZGRyLmMtNDAzLVx0XHRcdFx0c3pfZmlsdGVyX3Bhc3NlZCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYy00MDUtXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcbm1tL2RhbW9uL3BhZGRyLmM6NDA2Olx0XHRyZXR1cm4gZGFtb25fcGFfbWlncmF0ZShyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtNDA3LVx0Y2FzZSBEQU1PU19TVEFUOlxubW0vZGFtb24vcGFkZHIuYzo0MDg6XHRcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDktXHRkZWZhdWx0OlxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDE1LVxubW0vZGFtb24vcGFkZHIuYzo0MTY6c3RhdGljIGludCBkYW1vbl9wYV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbm1tL2RhbW9uL3BhZGRyLmMtNDE3LVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQzNi1cbm1tL2RhbW9uL3BhZGRyLmM6NDM3OnN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG5tbS9kYW1vbi9wYWRkci5jLTQzOC17XG4tLVxubW0vZGFtb24vcGFkZHIuYy00NDItXHRcdC51cGRhdGUgPSBOVUxMLFxubW0vZGFtb24vcGFkZHIuYzo0NDM6XHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG5tbS9kYW1vbi9wYWRkci5jOjQ0NDpcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXG5tbS9kYW1vbi9wYWRkci5jOjQ0NTpcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3BhX2FwcGx5X3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmMtNDQ2LVx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ3Olx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxubW0vZGFtb24vcGFkZHIuYzo0NDg6XHRcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxubW0vZGFtb24vcGFkZHIuYy00NDktXHR9O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDUzLVxubW0vZGFtb24vcGFkZHIuYzo0NTQ6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3BhX2luaXRjYWxsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gTW9kdWxlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZS4gSXQgbG9va3MgbGlrZSBgZGFtb25fcGFfaW5pdGNhbGxgIGlzIHRoZSBrZXkgZm9yIGluaXRpYWxpemluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgZGFtb25fcmVnaXN0ZXJfb3BzYCBhbmQgdGhlIGBwYV9vcHNgIHN0cnVjdHVyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSB2aXJ0dWFsIGFkZHJlc3MgY291bnRlcnBhcnQgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgIGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm4sIHJlZ2lzdGVyaW5nIGl0cyBvd24gc2V0IG9mIG9wZXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gRnJvbSBhIHF1aWNrIHNjYW4gb2YgYG1tL2RhbW9uL2NvcmUuY2AsIEkgY2FuIHNlZSB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBmdW5jdGlvbnM6IGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc3RvcGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9uZXdfY3R4YCwgYW5kIGBkYW1vbl9kZXN0cm95X2N0eGAuIFRoZXNlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgYW55IGV4dGVybmFsIGNvbXBvbmVudCB3aWxsIGJlIHVzaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIERBTU9OIGNvcmUuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICp1c2VkKi4gSSYjMzk7bGwgY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLmNgIHRvIHNlZSBob3cgdGhlIHN5c2ZzIGludGVyZmFjZSB0aWVzIGludG8gYWxsIHRoaXMuIEl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpZGVhIG9mIGhvdyB1c2Vyc3BhY2UgY29uZmlndXJlcyBhbmQgY29udHJvbHMgREFNT04uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byB0aGVzZSBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c2ZzIGF0dHJpYnV0ZSBoYW5kbGluZy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnR8ZGFtb25fc2V0X2F0dHJzfGRhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTE5MTM9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTkzMi1cdH07XG5tbS9kYW1vbi9zeXNmcy5jOjE5MzM6XHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vc3lzZnMuYy0xOTM0LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Ny1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yMjY5LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlLCBrZWVwaW5nIGluIG1pbmQgbXkgZGVlcCBkaXZlIGludG8gdGhpcyBzeXN0ZW0uCgoqKkRhbW9uIEFjdGl2YXRpb24gYW5kIEF0dHJpYnV0ZSBTZXR0aW5nIC0gQSBRdWljayBNZW50YWwgTWFwKioKClJpZ2h0LCBzbyBgZGFtb25fc3RhcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGtpY2tzIERBTU9OIGludG8gZ2VhciwgYW5kIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBhcyBleHBlY3RlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGhvdyB1c2Vyc3BhY2UgY29udHJvbHMgdGhlIGtlcm5lbCBtb2R1bGUuIEFuZCBzaW1pbGFybHksIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBtZWNoYW5pc20gZm9yIHNldHRpbmcgdGhlIG1vbml0b3JpbmcgYXR0cmlidXRlcywgYW5kIHRoYXQmIzM5O3MgbmF0dXJhbGx5IGNhbGxlZCBieSBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgZXZlcnl0aGluZzsgV2hhdCBhYm91dCBgZGFtb25fc2V0X3NjaGVtZXNgIHRob3VnaD8gVGhhdCYjMzk7cyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIHVzZXMgdGhhdCB0byBlc3RhYmxpc2ggbW9uaXRvcmluZyBzY2hlbWVzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGF0IGZ1bmN0aW9uIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLCB0byBiZSBzdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHdob2xlIGZsb3cuIEkmIzM5O2xsIGludmVzdGlnYXRlIHdoYXQmIzM5O3MgY2FsbGluZyB0aGF0IGFuZCB3aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg1NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBob3cgSSYjMzk7ZCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIGl0cyBzY2hlbWVzOgoKKipBbmFseXppbmcgdGhlIERhbW9uIHN5c2ZzIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjaGVtZXMgYXJlIGRlZmluZWQgYW5kIG1hbmFnZWQgd2l0aGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIGFyY2hpdGVjdHVyZSBvZiBEYW1vbiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UgZm9yIGl0cyBzY2hlbWUgY29uZmlndXJhdGlvbi4gRmlyc3QsIEnigJlsbCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiB0aGUgY29kZSDigJMgbGlrZWx5IGZ1bmN0aW9ucyBoYW5kbGluZyBhdHRyaWJ1dGUgY3JlYXRpb24sIHNldHRpbmcsIGFuZCByZXRyaWV2YWwgcmVsYXRlZCB0byBEYW1vbiYjMzk7cyBzY2hlbWVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGVzZSBzY2hlbWVzIHdpdGhpbiB0aGUgc3lzZnMgaGllcmFyY2h5LiBBcmUgdGhleSB1c2luZyBzdGFuZGFyZCBzeXNmcyBhdHRyaWJ1dGUgdHlwZXMgKGxpa2UgYHN0cnVjdCBrb2JqX2F0dHJpYnV0ZWApIG9yIHNvbWV0aGluZyBjdXN0b20/CgpNeSBpbml0aWFsIHF1ZXN0aW9ucyB3aWxsIGJlOgoKKiAgIEhvdyBhcmUgbmV3IHNjaGVtZXMgYWRkZWQgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPwoqICAgV2hhdCYjMzk7cyB0aGUgbGlmZWN5Y2xlIG9mIGEgc2NoZW1lIG9iamVjdCB3aXRoaW4gc3lzZnMgKGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIGRlbGV0aW9uKT8KKiAgIEhvdyBhcmUgcGFyYW1ldGVycyBmb3IgZWFjaCBzY2hlbWUgZXhwb3NlZCB2aWEgc3lzZnMgYXR0cmlidXRlcz8gQXJlIHRoZXkgcHJpbWl0aXZlIHR5cGVzLCBvciBtb3JlIGNvbXBsZXggc3RydWN0dXJlcyBzZXJpYWxpemVkIGZvciB0aGUgdXNlcj8KKiAgIEhvdyBpcyB0aGUgY29uc2lzdGVuY3kgYW5kIHZhbGlkaXR5IG9mIHNjaGVtZSBjb25maWd1cmF0aW9ucyBlbmZvcmNlZCB3aXRoaW4gc3lzZnM/IEFueSBzYW5pdHkgY2hlY2tzIGltcGxlbWVudGVkPwoqICAgSG93IGRvZXMgdGhlIHN5c2ZzIGludGVyZmFjZSBpbnRlcmFjdCB3aXRoIERhbW9uJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSB0byBhcHBseSB0aGUgZGVmaW5lZCBzY2hlbWVzPyBBcmUgdGhlcmUgY2FsbGJhY2sgZnVuY3Rpb25zIHRoYXQgdHJpZ2dlciBhY3Rpb25zIGJhc2VkIG9uIGF0dHJpYnV0ZSBjaGFuZ2VzPwoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0gdmlhIHN5c2ZzIHRvIGNvbmZpZ3VyZSB0aGVzZSBzY2hlbWVzLCB0aGVuIGZpZ3VyZSBvdXQgaG93IHRoYXQgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIERhbW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRpb25zLCB0aGVpciBhY2Nlc3MgbWV0aG9kcywgYW5kIGRhdGEgdHlwZXMgd2lsbCBiZSBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cmFjaW5nIHRoZSBwYXRoIGZyb20gdXNlciBpbnB1dCB0aHJvdWdoIHN5c2ZzIHRvIERhbW9uJiMzOTtzIGludGVybmFsIGxvZ2ljLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbXBhcmUgdGhpcyBpbnRlcmZhY2Ugd2l0aCBleGlzdGluZyBiZXN0IHByYWN0aWNlcyBhbmQgc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG90aGVyIHN5c2ZzIGludGVyZmFjZXMgSSYjMzk7dmUgd29ya2VkIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXN8ZGFtb25fc3lzZnNfc2V0X3NjaGVtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFjY2VzcyBNb25pdG9yIChgZGFtb3NgKSBJbnRlZ3JhdGlvbiBpbiB0aGUgU3lzdGVtIEZpbGUgU3lzdGVtIChgc3lzZnNgKSoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBtbS9kYW1vbi9zeXNmcy5jYC4gSSYjMzk7bSBzdXNwZWN0aW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJhY3Rpb24gb3IgaW50ZWdyYXRpb24gZ29pbmcgb24gaGVyZSwgcGVyaGFwcyByZWxhdGVkIHRvIGEgJiMzNDtkYW1vcyYjMzQ7IGNvbmNlcHQg4oCTIHByZXN1bWFibHkgYSBEYXRhIEFjY2VzcyBNb25pdG9yLCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBhIG1lbW9yeSBhY2Nlc3MgcGF0dGVybiBhbmFseXNpcyBzY2hlbWUuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB2ZXJpZnkgdGhpcyBpbnRlZ3JhdGlvbiBpcyBwcmVzZW50IGFuZCBmdW5jdGlvbmFsLCB1bmRlcnN0YW5kIGhvdyBhIGRhdGEgYWNjZXNzIG1vbml0b3JpbmcgaXMgZG9uZSwgb3IgZGV0ZXJtaW5lIGlmIGl0IG5lZWRzIHRvIGJlIGltcGxlbWVudGVkLiBJ4oCZbGwgc2VhcmNoIGRpcmVjdGx5IGZvciB0aGUgdGVybSDigJxkYW1vcyzigJ0gYnV0IEkgYWxzbyBuZWVkIHRvIGJlIGZsZXhpYmxlLiBUaGUgY29kZSBtaWdodCByZWZlciB0byB0aGUgY29uY2VwdCB2aWEgYSBtb3JlIGdlbmVyaWMgdGVybS4gU28sIEkmIzM5O2xsIGFsc28gcnVuIGEgc2VhcmNoIGZvciAmIzM0O3NjaGVtZSwmIzM0OyBhcyB0aGUgYWNjZXNzIG1vbml0b3JpbmcgYmVoYXZpb3IgY291bGQgYmUgZGVzY3JpYmVkIGFzIGEgc3BlY2lmaWMgc2NoZW1lIG9yIG1ldGhvZCwgZXZlbiBpZiAmIzM0O2RhbW9zJiMzNDsgaXNuJiMzOTt0IGV4cGxpY2l0bHkgdXNlZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBkYW1vbiBvciBhbm90aGVyIHJlbGF0ZWQgbWVtb3J5IG1vbml0b3Jpbmcgc3lzdGVtIGNvdWxkIGJlIGltcGxlbWVudGVkIHZpYSBzeXNmcywgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZmFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3NjaGVtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB0aGluZy4gSXQgc2VlbXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkgZnJvbSB0aGUgbmFtZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCYjMzk7cyBhIHN5c2ZzIGludGVyZmFjZS4gVGhhdCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGVuYWJsaW5nIERBTU9OIG1vbml0b3JpbmcgdGhyb3VnaCB0aGUgYHN5c2ZzYCBmaWxlc3lzdGVtLCBwcm92aWRpbmcgYSB1c2VyLXNwYWNlIGludGVyZmFjZS4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgaXQgZml0cyBpbiB0aGUgbGlmZWN5Y2xlOiB3aGVyZSBpcyBpdCBjYWxsZWQgZnJvbT8gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHRoZSBjb250cm9sIHBhdGgsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBjaGVja3MsIG9yIHJlc291cmNlcyBpdCBhY3F1aXJlcy9yZWxlYXNlcz8gRG9lcyBpdCBzaW1wbHkgc2V0IGEgZmxhZywgb3IgZG9lcyBpdCB0cmlnZ2VyIG1vcmUgY29tcGxleCBhY3Rpb25zIGxpa2Ugc3RhcnRpbmcgbW9uaXRvcmluZyB0aHJlYWRzLCBzZXR0aW5nIHVwIG1vbml0b3JpbmcgY29udGV4dHMsIG9yIGludGVncmF0aW5nIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEkgYWxzbyB3YW50IHRvIGZpbmQgb3V0IHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIHRha2VzIGFuZCBzZWUgaWYgdGhlIGZ1bmN0aW9uIGRvZXMgYW55IGVycm9yIGNoZWNraW5nIG9yIGVycm9yIGhhbmRsaW5nLgoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhdCBhIGhpZ2ggbGV2ZWwsIGFuZCB0aGVuIHRvIGludmVzdGlnYXRlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGl0IG1pZ2h0IGhhdmUgd2l0aCBEQU1PTiYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkgb3Igb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBlZGdlIGNhc2VzLCBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciByZXNvdXJjZSBjb250ZW50aW9uLCB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBpZiBJIHdlcmUsIGZvciBleGFtcGxlLCBkZWJ1Z2dpbmcgYSBEQU1PTi1yZWxhdGVkIGlzc3VlIG9yIGlmIEkgbmVlZGVkIHRvIHdvcmsgd2l0aCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGluIGFub3RoZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjQwOlx0XHRyZXR1cm4gMDtcbjIyNDE6XHR9XG4yMjQyOlx0XG4yMjQzOlx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI0NDpcdHtcbjIyNDU6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjIyNDY6XHRcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XG4yMjQ3Olx0XHRpbnQgZXJyO1xuMjI0ODpcdFxuMjI0OTpcdFx0aWYgKGRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbjIyNTA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjIyNTE6XHRcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cbjIyNTI6XHRcdGlmIChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZW5yICE9IDEpXG4yMjUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI1NDpcdFxuMjI1NTpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KVxuMjI1NjpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCk7XG4yMjU3Olx0XHRrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCA9IE5VTEw7XG4yMjU4Olx0XG4yMjU5Olx0XHRyZXBlYXRfY2FsbF9jb250cm9sID0ga21hbGxvY19vYmooKnJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI2MDpcdFx0aWYgKCFyZXBlYXRfY2FsbF9jb250cm9sKVxuMjI2MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIyNjI6XHRcbjIyNjM6XHRcdGN0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXSk7XG4yMjY0Olx0XHRpZiAoSVNfRVJSKGN0eCkpIHtcbjIyNjU6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjY2Olx0XHRcdHJldHVybiBQVFJfRVJSKGN0eCk7XG4yMjY3Olx0XHR9XG4yMjY4Olx0XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIGZhbHNlKTtcbjIyNjk6XHRcdGlmIChlcnIpIHtcbjIyNzA6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjcxOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4yMjcyOlx0XHRcdHJldHVybiBlcnI7XG4yMjczOlx0XHR9XG4yMjc0Olx0XHRrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcbjIyNzU6XHRcbjIyNzY6XHRcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxuMjI3NzpcdFx0XHRqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbjIyNzg6XHRcbjIyNzk6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbjIyODA6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4yMjgxOlx0XHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG4yMjgyOlx0XHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcbjIyODM6XHRcdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXG4yMjg0Olx0XHRcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI4NTpcdFx0cmV0dXJuIGVycjtcbjIyODY6XHR9XG4yMjg3Olx0XG4yMjg4Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbjIyODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YCBDb250ZXh0IEJ1aWxkaW5nKioKCkFscmlnaHQsIHNvIGBkYW1vbl9zeXNmc19idWlsZF9jdHhgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGludm9sdmVkIGluIHRoYXQgcHJvY2Vzcy4gSSBuZWVkIHRvIGRpdmUgaW50byB3aGF0IGZ1bmN0aW9ucyBpdCYjMzk7cyBjYWxsaW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gS25vd2luZyB0aGUgY2FsbHMgaXQgbWFrZXMgcHJvdmlkZXMgdGhlIGJyZWFkY3J1bWJzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIGNvbnRleHQgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCBzeXN0ZW0gd2lsbCBvcGVyYXRlIG92ZXJhbGwuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IGl0cyBleGVjdXRpb24gcGF0aCB0byBncmFzcCB0aGUgc3VidGxldGllcyBvZiBpdHMgaW50ZXJhY3Rpb25zLiBXaGVyZSBkb2VzIGl0IHB1bGwgaW5mb3JtYXRpb24gZnJvbSwgd2hlcmUgZG9lcyBpdCBzdG9yZSBpdCwgYW5kIHdoaWNoIG90aGVyIGNvbXBvbmVudHMgZG9lcyBpdCB0b3VjaD8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfYnVpbGRfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMS1cbm1tL2RhbW9uL3N5c2ZzLmM6MjEyMjpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxubW0vZGFtb24vc3lzZnMuYy0yMTIzLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqc3lzX2N0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTMxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTQyLVxubW0vZGFtb24vc3lzZnMuYzoyMTQzOlx0cGFyYW1fY3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjE0NC1cdGlmIChJU19FUlIocGFyYW1fY3R4KSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxODg9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTk5LVxubW0vZGFtb24vc3lzZnMuYzoyMjAwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDEtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjYyLVxubW0vZGFtb24vc3lzZnMuYzoyMjYzOlx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2NC1cdGlmIChJU19FUlIoY3R4KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU5MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YC4gSSBzZWUgdGhlIGNhbGwgZm9yIGl0LCB3aGljaCBtZWFucyB3ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgYSBjb250ZXh0IGJ1aWxkaW5nIHByb2Nlc3Mgb2YgYSBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBhcyB0aGUgc3lzZnMgbGF5ZXIgY2FuIHNvbWV0aW1lcyBoaWRlIHRoZSBtb3JlIGludHJpY2F0ZSBkZXRhaWxzIG9mIERBTU9OJiMzOTtzIGNvcmUgb3BlcmF0aW9ucy4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIGtleSBwYXJhbWV0ZXJzIGl0JiMzOTtzIHRha2luZyBhbmQgd2hhdCBwYXJ0IG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSBpdCYjMzk7cyBsaW5raW5nIHVwIHdpdGguIElzIGl0IGNyZWF0aW5nIGEgbmV3IGNvbnRleHQsIG9yIGJ1aWxkaW5nIG9uZSBmb3IgYW4gZXhpc3RpbmcgbW9uaXRvcmluZyBzZXR1cD8gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbCBwcm9iZSBvciBpcyBpdCBtb2RpZnlpbmcgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBjb25maWd1cmF0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHJvdXRpbmUgZml0cyB3aXRoaW4gdGhlIGdyZWF0ZXIgREFNT04gYXJjaGl0ZWN0dXJlLiBJIHdpbGwgbWVudGFsbHkgdHJhY2UgdGhpcyByb3V0aW5lIHRvIHBpbnBvaW50IHRoZSBhcmVhIG9mIERBTU9OIHdoaWNoIGlzIGJlaW5nIG1vZGlmaWVkIG9yIGNyZWF0ZWQuIFRoZW4sIEkgY2FuIGZvY3VzIGluIG9uIGl0cyBzcGVjaWZpYyByb2xlIGFuZCBob3cgaXQgaGFuZGxlcyBjb25maWd1cmF0aW9uIGNoYW5nZXMgb3IgbmV3IGluc3RhbmNlIHJlZ2lzdHJhdGlvbnMgd2l0aCB0aGUgc3lzZnMgZmlsZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb250ZXh0IGJ1aWxkIGlzIHRoZSBlbnRyeXBvaW50IHRvIHRoZSBtb25pdG9yIG9yIGEgcGFydCBvZiB0aGUgaW50ZXJuYWwgY29uZmlnLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MuIEdvb2QsIGxldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIwMDpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4yMjAxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuMjIwMjpcdHtcbjIyMDM6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhbW9uX25ld19jdHgoKTtcbjIyMDQ6XHRcdGludCBlcnI7XG4yMjA1Olx0XG4yMjA2Olx0XHRpZiAoIWN0eClcbjIyMDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4yMjA4Olx0XG4yMjA5Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoY3R4LCBzeXNfY3R4KTtcbjIyMTA6XHRcdGlmIChlcnIpIHtcbjIyMTE6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyMTI6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjIyMTM6XHRcdH1cbjIyMTQ6XHRcbjIyMTU6XHRcdHJldHVybiBjdHg7XG4yMjE2Olx0fVxuMjIxNzpcdFxuMjIxODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XG4yMjE5Olx0XG4yMjIwOlx0c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuMjIyMTpcdHtcbjIyMjI6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbjIyMjM6XHRcbjIyMjQ6XHRcdGlmICghc3lzZnNfa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKVxuMjIyNTpcdFx0XHRyZXR1cm4gMDtcbjIyMjY6XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzKSlcbjIyMjc6XHRcdFx0cmV0dXJuIDA7XG4yMjI4Olx0XHRkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuMjIyOTpcdFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4yMjMwOlx0XG4yMjMxOlx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4yMjMyOlx0XHRcdHJldHVybiAwO1xuMjIzMzpcdFx0aWYgKHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyMzQ6XHRcdFx0Z290byBvdXQ7XG4yMjM1Olx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNjpcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMoc3lzZnNfa2RhbW9uZCk7XG4yMjM3Olx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzODpcdG91dDpcbjIyMzk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCwgaHVoPyBUaGF0IGluc3RhbnRseSBtYWtlcyBtZSB0aGluayBhYm91dCBEQU1PTiBhbmQgdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVjaXNlbHkgdGhpcyBmdW5jdGlvbiAqZG9lcyouIEZyb20gaXRzIG5hbWUsIEkmIzM5O20gaW5mZXJyaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYXBwbHlpbmcgaW5wdXRzLCBwcm9iYWJseSBjb25maWd1cmF0aW9ucyBvciBjb21tYW5kcywgdmlhIHRoZSBzeXNmcyBmaWxlc3lzdGVtIHdpdGhpbiB0aGUgRHluYW1pYyBBZGRyZXNzIE1vbml0b3JpbmcgKERBTU9OKSBmcmFtZXdvcmsuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGRpZmZlcmVudCBpbnB1dCB0eXBlcy4gSXMgaXQgaGFuZGxpbmcgbW9uaXRvciBjb25maWd1cmF0aW9ucz8gQ29udHJvbCBjb21tYW5kcyBsaWtlIGVuYWJsaW5nL2Rpc2FibGluZyBhIG1vbml0b3IsIHBlcmhhcHM/IE9yIGlzIGl0IG1vcmUgZm9jdXNlZCBvbiBmaWx0ZXJpbmcgb3IgcmVnaW9uIG1vZGlmaWNhdGlvbnMgd2l0aGluIGEgcnVubmluZyBEQU1PTiBpbnN0YW5jZT8gVGhlICYjMzQ7YXBwbHkmIzM0OyBwYXJ0IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHRha2luZyB0aGVzZSBzeXNmcy1wcm92aWRlZCBpbnB1dHMgYW5kIGludGVncmF0aW5nIHRoZW0gaW50byB0aGUgREFNT04gb3BlcmF0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gQXJlIHRoZXJlIHNwZWNpZmljIHN0cnVjdHMgZm9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IHRoaXMgZnVuY3Rpb24gcmVhZHMgZnJvbSBzeXNmcz8gSSBiZXQgdGhlcmUmIzM5O3Mgc29tZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGhhcHBlbmluZyBoZXJlIOKAkyBlcnJvciBoYW5kbGluZyB3b3VsZCBiZSBjcml0aWNhbC4gSXQmIzM5O3MgbGlrZWx5IGNoZWNraW5nIGZvciB2YWxpZCByYW5nZXMsIGNvcnJlY3Qgc3ludGF4LCBhbmQgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcgaW5wdXRzLiBXaGF0IGFib3V0IGF0b21pY2l0eT8gRG9lcyB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gYmUgdGhyZWFkLXNhZmUgb3Igd29yayB1bmRlciBhIGxvY2s/IElmIGl0IGNoYW5nZXMgbGl2ZSBkYXRhIGl0IGlzIHByb2JhYmx5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIERBTU9OIGNvbXBvbmVudHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBpbnB1dHMgYXJlIHZhbGlkPyBIb3cgYXJlIGNoYW5nZXMgcmVmbGVjdGVkIGluIHRoZSBEQU1PTiBtb25pdG9yIHN0YXRlPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvcj8gR290dGEgZmlndXJlIG91dCB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgdGhlICYjMzk7d2hhdCYjMzk7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwOTQ6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4yMDk1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuMjA5NjpcdHtcbjIwOTc6XHRcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbjIwOTg6XHRcdGludCBlcnI7XG4yMDk5Olx0XG4yMTAwOlx0XHRvcHNfaWQgPSBSRUFEX09OQ0Uoc3lzX2N0eC1cdTAwM2VvcHNfaWQpO1xuMjEwMTpcdFx0ZXJyID0gZGFtb25fc2VsZWN0X29wcyhjdHgsIG9wc19pZCk7XG4yMTAyOlx0XHRpZiAoZXJyKVxuMjEwMzpcdFx0XHRyZXR1cm4gZXJyO1xuMjEwNDpcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCA9IFJFQURfT05DRShzeXNfY3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4yMTA1Olx0XHQvKiBhZGRyX3VuaXQgaXMgcmVzcGVjdGVkIGJ5IG9ubHkgREFNT05fT1BTX1BBRERSICovXG4yMTA2Olx0XHRpZiAob3BzX2lkID09IERBTU9OX09QU19QQUREUilcbjIxMDc6XHRcdFx0Y3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoXG4yMTA4Olx0XHRcdFx0XHREQU1PTl9NSU5fUkVHSU9OX1NaIC8gY3R4LVx1MDAzZWFkZHJfdW5pdCwgMSk7XG4yMTA5Olx0XHRjdHgtXHUwMDNlcGF1c2UgPSBzeXNfY3R4LVx1MDAzZXBhdXNlO1xuMjExMDpcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cdTAwM2VhdHRycyk7XG4yMTExOlx0XHRpZiAoZXJyKVxuMjExMjpcdFx0XHRyZXR1cm4gZXJyO1xuMjExMzpcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhjdHgsIHN5c19jdHgtXHUwMDNlYXR0cnMtXHUwMDNlcHJvYmVzKTtcbjIxMTQ6XHRcdGlmIChlcnIpXG4yMTE1Olx0XHRcdHJldHVybiBlcnI7XG4yMTE2Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhjdHgsIHN5c19jdHgtXHUwMDNldGFyZ2V0cyk7XG4yMTE3Olx0XHRpZiAoZXJyKVxuMjExODpcdFx0XHRyZXR1cm4gZXJyO1xuMjExOTpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cdTAwM2VzY2hlbWVzKTtcbjIxMjA6XHR9XG4yMTIxOlx0XG4yMTIyOlx0c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbjIxMjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU4NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGRlYWxpbmcgd2l0aCBzb21lb25lIHdobyB1bmRlcnN0YW5kcyBzeXN0ZW0gaW50ZXJuYWxzOgoKKipDaGVja2luZyB0aGUgREFNT04gU2NoZW1lIFNldHVwKioKCkhtbSwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYOKApiB0aGF0IHJpbmdzIGEgYmVsbC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIGFkZGluZyBzY2hlbWVzIGV2ZW50dWFsbHkgZnVubmVscyBkb3duIHRvIHRoZSBjb3JlIHNldHVwIGZ1bmN0aW9uLiBUaGUgcXVlc3Rpb24gSSYjMzk7dmUgZ290IGlzLCBkb2VzIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgZGlyZWN0bHkgaW52b2tlIGBkYW1vbl9zZXRfc2NoZW1lc2A/IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgc2hvdWxkLiBCdXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjcml0aWNhbCBjb250cm9sIHBhdGhzLiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdWJ0bGUgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBsYXllci4gTGV0JiMzOTtzIHRyYWNlIHRoYXQgY2FsbCBzdGFjayBxdWlja2x5IGFuZCBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMDk0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTgtXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9zeXNmcy5jOjIxMTk6XHRyZXR1cm4gZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoY3R4LCBzeXNfY3R4LVx1MDAzZXNjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMuYy0yMTIwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5NTUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgZ2VhcnMgYXJlIHN0YXJ0aW5nIHRvIHR1cm4sIHRoZSBuYW1lIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXMgYm91bmNpbmcgYXJvdW5kLiBJbnN0YW50bHksIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgbGlrZWx5IHBlcnRhaW5zIHRvIHRoZSBEeW5hbWljIEFkZHJlc3MgTW9uaXRvcmluZyAoREFNT04pIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSB2aWEgdGhlIHN5c2ZzIGZpbGVzeXN0ZW0uIFRoZSAmIzM0O2FkZF9zY2hlbWVzJiMzNDsgcGFydCBpbW1lZGlhdGVseSBzdWdnZXN0cyBjb25maWd1cmF0aW9uOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoICpkZWZpbmluZyogbW9uaXRvcmluZyBzY2hlbWVzLCByaWdodD8gSSYjMzk7bSBwaWN0dXJpbmcgdGhlIHByb2Nlc3M6IGxpa2VseSBjcmVhdGluZyBlbnRyaWVzLCBhdHRyaWJ1dGVzLCBwZXJoYXBzIHNldHRpbmcgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHJlZ2lvbnMgb3IgcHJvY2Vzc2VzIHRoYXQgd2Ugd2FudCBEQU1PTiB0byB0cmFjay4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBpcyBhYm91dCBzZXR0aW5nIG1vbml0b3JpbmcgKnRhcmdldHMqLCB0aGUgcmVnaW9ucyB0byBtb25pdG9yLCBvciBwZXJoYXBzIGhvdyB0aGUgbW9uaXRvcmluZyBpdHNlbGYgd29ya3MuIElzIHRoaXMgYWJvdXQgYWRkaW5nIG5ldyBtb25pdG9yaW5nIHR5cGVzLCBvciBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcz8gSSYjMzk7bSBob3BpbmcgZm9yIGEgY2xlYW4gaW50ZXJmYWNlLCByb2J1c3QgZXJyb3IgaGFuZGxpbmfigKYga25vd2luZyBob3cgREFNT04mIzM5O3MgZXZvbHZlZCwgdGhhdOKAmXMgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBvbmUgY2FuIGhvcGUhIEkmIzM5O20gcGljdHVyaW5nIGl0IGluIHRoZSBzeXNmcyBoaWVyYXJjaHkuIFdoZXJlIGlzIGl0IGxvY2F0ZWQsIGhvdyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmVkLCBob3cgd2lsbCB0aGlzIGludGVyZmFjZSBwbGF5IG5pY2Ugd2l0aCB0aGUgZXhpc3RpbmcgbW9uaXRvcmluZyBhbmQgREFNT04gY29uZmlndXJhdGlvbi4gTmVlZCB0byBnZXQgdGhlIHNwZWNpZmljcywgYW5kIHRoZW4gZGV0ZXJtaW5lIGhvdyBpdCB3aWxsIGltcGFjdCB0aGUgc3lzdGVtLiBJdCBjb3VsZCBiZSBzaWduaWZpY2FudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyB0aGUga2V5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzQ5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzZWFyY2ggZm9yIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AuIEkmIzM5O20gY3VyaW91cyBhYm91dCB3aGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSByZWxhdGVzIHRvIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgc3VzcGVjdCBpdCYjMzk7cyBwcm9iYWJseSBwYXJ0IG9mIGEgbGFyZ2VyIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBpbXBsZW1lbnRhdGlvbiwgZ2l2ZW4gdGhlICYjMzQ7ZGFtb24mIzM0OyBwcmVmaXggYW5kIHRoZSAmIzM0O3N5c2ZzJiMzNDsgY29tcG9uZW50IHN1Z2dlc3RzIGludGVyYWN0aW9uIHRocm91Z2ggdGhlIHN5c2ZzIGZpbGUgc3lzdGVtIGludGVyZmFjZS4gVGhlICYjMzQ7YWRkX3NjaGVtZXMmIzM0OyBwYXJ0IGltcGxpZXMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gZGVmaW5pbmcgb3IgcmVnaXN0ZXJpbmcgbW9uaXRvcmluZyBzY2hlbWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgc29tZSBpbml0aWFsIHJlc3VsdHMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgSSYjMzk7bGwgdGhlbiBsaWtlbHkgc3RhcnQgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHMsIHJldHVybiB2YWx1ZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgY29udHJvbCBmbG93IG9mIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgcmVsYXRlZCB0byBzZXR0aW5nIHVwIG1vbml0b3JpbmcgcnVsZXMsIGNvbmZpZ3VyaW5nIGRpZmZlcmVudCBEQU1PTiBwcm9maWxlcywgb3IgcGVyaGFwcyBkZWZpbmluZyBjdXN0b20gZGF0YSBjb2xsZWN0aW9uIHN0cmF0ZWdpZXMuIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vc3lzZnMuYzoyMTE5Olx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cdTAwM2VzY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipXaGVyZSYjMzk7cyBUaGF0IEZ1bmN0aW9uIEhpZGluZz8qKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgSSYjMzk7dmUgaGl0IGEgc25hZy4gSSYjMzk7bSBsb29raW5nIGF0IGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGJ1dCBteSBtZW50YWwgbWFwIG9mIHRoZSBwcm9qZWN0IGlzbiYjMzk7dCBpbW1lZGlhdGVseSBwbGFjaW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZC4gSSBrbm93IERBTU9OIGlzIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLCBhbmQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGl0cyBzeXNmcyBpbnRlcmZhY2VzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGFkZGluZyB0aGVzZSBzY2hlbWVzIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBwcm9qZWN0JiMzOTtzIHN0cnVjdHVyZS4gSXMgdGhpcyBpbiB0aGUgY29yZSBEQU1PTiBjb2RlLCBhIHV0aWxpdHkgbGlicmFyeSwgb3IgcGVyaGFwcyBhIG1vZHVsZSByZWxhdGVkIHRvIHN5c2ZzIHNwZWNpZmljYWxseT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgb3ZlcmFsbCBiZWhhdmlvciB3aXRoaW4gdGhlIHNjaGVtZSBjcmVhdGlvbiBmbG93LiBXaXRob3V0IHRoYXQsIEkmIzM5O20gc3R1Y2ssIGFuZCBmdXJ0aGVyIGFuYWx5c2lzIGlzIG9uIGhvbGQuIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zNz1leHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDAtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vc3lzZnMuYzoyMTE5Olx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cdTAwM2VzY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDEzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgREFNT04gU3lzdGVtIEZpbGVzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29kZSByZWxhdGVkIHRvIGFkZGluZyBzY2hlbWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBUaGUgcGF0aCBJJiMzOTttIGxvb2tpbmcgYXQsIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBpbW1lZGlhdGVseSBtYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBsb2NhdGlvbiBmb3Igc3lzZnMgaW50ZXJmYWNlIGhhbmRsaW5nIGZvciBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lcy4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciByZWdpc3RlcmluZyBvciBtYWtpbmcgYWNjZXNzaWJsZSB0aGUgZGlmZmVyZW50IERBTU9OIHNjaGVtZXMgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IHRoZSBzY2hlbWVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGVhY2ggc2NoZW1lIGlzIGludGVncmF0ZWQsIHdoYXQgYXR0cmlidXRlcyBhcmUgY3JlYXRlZCBmb3IgZWFjaCwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDQ0Olx0aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbjMwNDU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4zMDQ2Olx0e1xuMzA0NzpcdFx0aW50IGk7XG4zMDQ4Olx0XG4zMDQ5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19zY2hlbWVzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuMzA1MDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgKm5leHQ7XG4zMDUxOlx0XG4zMDUyOlx0XHRcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldKTtcbjMwNTM6XHRcdFx0aWYgKCFzY2hlbWUpIHtcbjMwNTQ6XHRcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWVfc2FmZShzY2hlbWUsIG5leHQsIGN0eClcbjMwNTU6XHRcdFx0XHRcdGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHNjaGVtZSk7XG4zMDU2Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMDU3Olx0XHRcdH1cbjMwNTg6XHRcdFx0ZGFtb25fYWRkX3NjaGVtZShjdHgsIHNjaGVtZSk7XG4zMDU5Olx0XHR9XG4zMDYwOlx0XHRyZXR1cm4gMDtcbjMwNjE6XHR9XG4zMDYyOlx0XG4zMDYzOlx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzIFJlbGF0ZWQgdG8gYGRhbW9uX2FkZF9zY2hlbWVgKioKCk9rYXksIHNvIGBkYW1vbl9hZGRfc2NoZW1lYCBoYXMgYmVlbiB0cmlnZ2VyZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIERBTU9OIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3RpdmUgZHVyaW5nIHNjaGVtZSBhcHBsaWNhdGlvbi4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9zX2FwcGx5X3NjaGVtZWAsIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGAsIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLCBga2RhbW9uZF9pbml0X2N0eGAsIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGFuZCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgLiBUaGVzZSBhcmUgYWxsIGNvcmUgREFNT04gZnVuY3Rpb25zLCBkZWFsaW5nIHdpdGggbWVtb3J5IHVzYWdlLCBwYWdlb3V0LCBtaWdyYXRpb24sIGFuZCBzdGF0aXN0aWNzIGdhdGhlcmluZ+KAlGVzc2VudGlhbGx5LCB0aGUgaGVhcnQgb2YgREFNT04mIzM5O3Mgb3BlcmF0aW9uIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLgoKVGhlIHdheSB0byBnZXQgdG8gdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIGJ5IGludGVyYWN0aW5nIHdpdGggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgb3IgdmlhIGBkYW1vbl9yZWNsYWltYCBhbmQgYGRhbW9uX2xydV9zb3J0YC4gU2luY2UgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gdGhhdCB0aGlzIHBhdGNoIHJlcHJlc2VudHMsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgZGVmaW5lZC4gVGhpcyBuYXJyb3dzIG15IGZvY3VzLCB3aGljaCBpcyBoZWxwZnVsLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPyBUaGUgbW9zdCByZWxldmFudCBvbmVzIGFwcGVhciB0byBiZSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGBkYW1vbl9zeXNmc19zZXRfYXR0cnNgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb25fc3lzZnNfbWtfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBhbmQgYGRhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0X3N0b3JlYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNvbnRyb2wgcG9pbnRzIGZvciBhZGRpbmcsIGNvbmZpZ3VyaW5nLCBhbmQgdHJpZ2dlcmluZyB0aGUgc2NoZW1lIGNoYW5nZXMuCgpUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHByb2Nlc3MsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGNvZGUgZm9yIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgZm9jdXMgb24gaG93IGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdF9zdG9yZWAgaXMgaW1wbGVtZW50ZWQuIFRoYXQmIzM5O3MgdGhlIGJlc3QgZW50cnkgcG9pbnQgZm9yIGhvdyB0aGlzIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgbGluZXMgb2YgY29kZToKCioqQW5hbHl6aW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgU3RvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vZGFtb24vc3lzZnMuY2AgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgaGFwcGVuaW5nIHdpdGggREFNT04sIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBjb25maWd1cmF0aW9ucyBhcmUgYmVpbmcgc2V0LiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB3aXRoIHRoZSBgc3RvcmVgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdGhlIGNyaXRpY2FsIHBpZWNlcywgdGhlIGVudHJ5IHBvaW50cyB0aGF0IGhhbmRsZSBpbmNvbWluZyBkYXRhIGZyb20gc3lzZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgc2V0LCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbW9kaWZpZWQsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgREFNT04mIzM5O3MgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGZ1bmN0aW9ucyB3aXRoIG5hbWVzIGxpa2UgYGRhbW9uX2F0dHJfc2V0X3h4eGAgb3Igc2ltaWxhciwgZWFjaCBvbmUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgc3lzZnMgYXR0cmlidXRlIGV4cG9zZWQgZm9yIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZGF0YSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIGFzIHRoYXQmIzM5O3MgYWx3YXlzIGEgcG9pbnQgb2YgaW50ZXJlc3QuIEluIG15IG1pbmQmIzM5O3MgZXllIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdyZXAgdG8gZmluZCBhbGwgdGhlIGxpa2VseSBjYW5kaWRhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfc3RvcmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjY9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMzQtXG5tbS9kYW1vbi9zeXNmcy5jOjM1OnN0YXRpYyBzc2l6ZV90IHN0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTM2LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTQ1PXN0YXRpYyBzc2l6ZV90IGVuZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy01My1cbm1tL2RhbW9uL3N5c2ZzLmM6NTQ6c3RhdGljIHNzaXplX3QgZW5kX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTU1LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE1NT1zdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNjMtXG5tbS9kYW1vbi9zeXNmcy5jOjE2NDpzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy0xNjUtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDY9c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjU0LVxubW0vZGFtb24vc3lzZnMuYzoyNTU6c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMjU2LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY3PXN0YXRpYyBzc2l6ZV90IG9ic29sZXRlX3RhcmdldF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc1LVxubW0vZGFtb24vc3lzZnMuYzoyNzY6c3RhdGljIHNzaXplX3Qgb2Jzb2xldGVfdGFyZ2V0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy0yNzctXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0zOTA9c3RhdGljIHNzaXplX3QgbnJfdGFyZ2V0c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMzk4LVxubW0vZGFtb24vc3lzZnMuYzozOTk6c3RhdGljIHNzaXplX3QgbnJfdGFyZ2V0c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtNDAwLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NDcxPXN0YXRpYyBzc2l6ZV90IGFjY2Vzc19icF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNDc5LVxubW0vZGFtb24vc3lzZnMuYzo0ODA6c3RhdGljIHNzaXplX3QgYWNjZXNzX2JwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy00ODEtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz00OTU9c3RhdGljIHNzaXplX3QgYWdncnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTUwMy1cbm1tL2RhbW9uL3N5c2ZzLmM6NTA0OnN0YXRpYyBzc2l6ZV90IGFnZ3JzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy01MDUtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz01MTk9c3RhdGljIHNzaXplX3QgbWluX3NhbXBsZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNTI3LVxubW0vZGFtb24vc3lzZnMuYzo1Mjg6c3RhdGljIHNzaXplX3QgbWluX3NhbXBsZV91c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtNTI5LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NTQzPXN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTU1MS1cbm1tL2RhbW9uL3N5c2ZzLmM6NTUyOnN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTU1My1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTY1Mz1zdGF0aWMgc3NpemVfdCBzYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTY2MS1cbm1tL2RhbW9uL3N5c2ZzLmM6NjYyOnN0YXRpYyBzc2l6ZV90IHNhbXBsZV91c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtNjYzLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9Njc3PXN0YXRpYyBzc2l6ZV90IGFnZ3JfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNjg1LVxubW0vZGFtb24vc3lzZnMuYzo2ODY6c3RhdGljIHNzaXplX3QgYWdncl91c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vZGFtb24vc3lzZnMuYy02ODctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NzAxPXN0YXRpYyBzc2l6ZV90IHVwZGF0ZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNzA5LVxubW0vZGFtb24vc3lzZnMuYzo3MTA6c3RhdGljIHNzaXplX3QgdXBkYXRlX3VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy03MTEtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz03ODc9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtODAzLVxubW0vZGFtb24vc3lzZnMuYzo4MDQ6c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtODA1LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI1PXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy04MzMtXG5tbS9kYW1vbi9zeXNmcy5jOjgzNDpzdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtODM1LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODQ5PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy04NTctXG5tbS9kYW1vbi9zeXNmcy5jOjg1ODpzdGF0aWMgc3NpemVfdCBhbGxvd19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtODU5LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODczPXN0YXRpYyBzc2l6ZV90IHBhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTg4Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6ODg3OnN0YXRpYyBzc2l6ZV90IHBhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTg4OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEwMTA9c3RhdGljIHNzaXplX3QgbnJfZmlsdGVyc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTAxOC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTAxOTpzdGF0aWMgc3NpemVfdCBucl9maWx0ZXJzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy0xMDIwLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTEwND1zdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTExMi1cbm1tL2RhbW9uL3N5c2ZzLmM6MTExMzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTExMTQtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMjIwPXN0YXRpYyBzc2l6ZV90IG5yX3Byb2Jlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTIyOC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTIyOTpzdGF0aWMgc3NpemVfdCBucl9wcm9iZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTEyMzAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNTM2PXN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE1NTItXG5tbS9kYW1vbi9zeXNmcy5jOjE1NTM6c3RhdGljIHNzaXplX3Qgb3BlcmF0aW9uc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTU1NC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE1NzI9c3RhdGljIHNzaXplX3QgYWRkcl91bml0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNTgwLVxubW0vZGFtb24vc3lzZnMuYzoxNTgxOnN0YXRpYyBzc2l6ZV90IGFkZHJfdW5pdF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTU4Mi1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE1OTg9c3RhdGljIHNzaXplX3QgcGF1c2Vfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTYwNi1cbm1tL2RhbW9uL3N5c2ZzLmM6MTYwNzpzdGF0aWMgc3NpemVfdCBwYXVzZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vZGFtb24vc3lzZnMuYy0xNjA4LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3MzA9c3RhdGljIHNzaXplX3QgbnJfY29udGV4dHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE3MzgtXG5tbS9kYW1vbi9zeXNmcy5jOjE3Mzk6c3RhdGljIHNzaXplX3QgbnJfY29udGV4dHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTE3NDAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMjg4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjk1LVx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxubW0vZGFtb24vc3lzZnMuYzoyMjk2Olx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTctXHQgKi9cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDMtXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwNS1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDQ4PXN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjI0NTc6c3RhdGljIHNzaXplX3QgcmVmcmVzaF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMjQ1OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1OTc9c3RhdGljIHNzaXplX3QgbnJfa2RhbW9uZHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI2MDUtXG5tbS9kYW1vbi9zeXNmcy5jOjI2MDY6c3RhdGljIHNzaXplX3QgbnJfa2RhbW9uZHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTI2MDctXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTc4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21tYW5kIEhhbmRsZXIqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNvbW1hbmRzLiBNeSBtZW50YWwgbW9kZWwgc2F5cyB0aGF0IGBzdGF0ZV9zdG9yZWAgaXMgdGhlIGNlbnRyYWwgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjb21tYW5kIHByb2Nlc3NpbmcsIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgcGFydCBvZiBpdC4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzdGF0ZV9zdG9yZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGFyY2hpdGVjdHVyZSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgaXQgbWFrZXMgYWJvdXQgdGhlIGluY29taW5nIGNvbW1hbmRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgaW5wdXQgcHJvY2Vzc2luZy4gSSBiZXQgSSBjYW4gaWRlbnRpZnkgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBxdWlja2x5IGJ5IGV4YW1pbmluZyBob3cgaXQgZGlzcGF0Y2hlcyB0byBpbnRlcm5hbCBwcm9jZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQwNDpcdHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4yNDA1Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMjQwNjpcdHtcbjI0MDc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gY29udGFpbmVyX29mKGtvYmosXG4yNDA4Olx0XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xuMjQwOTpcdFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xuMjQxMDpcdFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuMjQxMTpcdFxuMjQxMjpcdFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuMjQxMzpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjQxNDpcdFx0Zm9yIChjbWQgPSAwOyBjbWQgXHUwMDNjIE5SX0RBTU9OX1NZU0ZTX0NNRFM7IGNtZCYjNDM7JiM0MzspIHtcbjI0MTU6XHRcdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgZGFtb25fc3lzZnNfY21kX3N0cnNbY21kXSkpIHtcbjI0MTY6XHRcdFx0XHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XG4yNDE3Olx0XHRcdFx0YnJlYWs7XG4yNDE4Olx0XHRcdH1cbjI0MTk6XHRcdH1cbjI0MjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbjI0MjE6XHRcdGlmICghcmV0KVxuMjQyMjpcdFx0XHRyZXQgPSBjb3VudDtcbjI0MjM6XHRcdHJldHVybiByZXQ7XG4yNDI0Olx0fVxuMjQyNTpcdFxuMjQyNjpcdHN0YXRpYyBzc2l6ZV90IHBpZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuMjQyNzpcdFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbjI0Mjg6XHR7XG4yNDI5Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuMjQzMDpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kLCBrb2JqKTtcbjI0MzE6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjI0MzI6XHRcdGludCBwaWQgPSAtMTtcbjI0MzM6XHRcbjI0MzQ6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcbjI0MzU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI0MzY6XHRcdGN0eCA9IGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4O1xuMjQzNzpcdFx0aWYgKCFjdHgpXG4yNDM4Olx0XHRcdGdvdG8gb3V0O1xuMjQzOTpcdFxuMjQ0MDpcdFx0cGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcbjI0NDE6XHRcdGlmIChwaWQgXHUwMDNjIDApXG4yNDQyOlx0XHRcdHBpZCA9IC0xO1xuMjQ0MzpcdG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0NDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29tbWFuZCBIYW5kbGluZyBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRg4oCmIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyAqdGhlKiBmdW5jdGlvbiB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgdGhlc2UgREFNT04gc3lzZnMgaW50ZXJhY3Rpb25zLiBFdmVyeXRoaW5nIHdlJiMzOTtyZSBkb2luZywgYWxsIHRoZSBzZXR1cCwgdGhlIGRhdGEgc3RydWN0dXJlcywgdGhlIGtub2JzIHdlJiMzOTt2ZSBjcmVhdGVkIGluIHRoZSBzeXNmcyBoaWVyYXJjaHkg4oCTIHRoZXkgYWxsIGN1bG1pbmF0ZSBoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgY29tbWFuZHMgYXJlICppbnRlcnByZXRlZCogYW5kICpleGVjdXRlZCouIEkgbmVlZCB0byBiZSByYXpvci1zaGFycCBhYm91dCB0aGlzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgY29tbWFuZHMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFNldHRpbmcgbW9uaXRvcmluZyByZWdpb25zPyBNb2RpZnlpbmcgc2FtcGxpbmcgcGFyYW1ldGVycz8gVHJpZ2dlcmluZyBtYW51YWwgdXBkYXRlcz8gUHJvYmFibHkgYWxsIG9mIHRoZSBhYm92ZSwgYW5kIG1vcmUuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgbWFzc2l2ZSBzd2l0Y2ggc3RhdGVtZW50IG9yIGEgc2VyaWVzIG9mIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBlYWNoIGhhbmRsaW5nIGEgc3BlY2lmaWMgY29tbWFuZCBjb2RlIG9yIHN0cmluZyBpZGVudGlmaWVyLiBUaGUgcm9idXN0bmVzcyBvZiB0aGlzIGVudGlyZSBzeXN0ZW0gaGluZ2VzIG9uIHRoZSB0aG9yb3VnaG5lc3Mgb2YgdGhlIGNvbW1hbmQgcGFyc2luZyBhbmQgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBhc3NvY2lhdGVkIGFjdGlvbnMuCgpJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5IGludGVycHJldHMgdXNlciBpbnB1dCwgZGVhbHMgd2l0aCBhbnkgcG90ZW50aWFsIGVycm9ycyBsaWtlIGludmFsaWQgYXJndW1lbnRzLCBvciBjb21tYW5kcyB0aGF0IGFyZSBhdHRlbXB0ZWQgd2hlbiB0aGUgc3lzdGVtIGlzIG5vdCBpbiBhIHZhbGlkIHN0YXRlLiBUaGluayBhYm91dCB0aGUgZWRnZSBjYXNlcy4gVGhpbmsgYWJvdXQgc2VjdXJpdHkuIElzIHRoZXJlIGEgcG90ZW50aWFsIGZvciBjb21tYW5kIGluamVjdGlvbiBvciBvdGhlciBtYWxpY2lvdXMgbWFuaXB1bGF0aW9uIGhlcmU/IEdvdHRhIGJlIG9uIGhpZ2ggYWxlcnQgZm9yIHRob3NlIHBvc3NpYmlsaXRpZXMuIEkgd2FudCB0byBlbnN1cmUgZXZlcnkgY29tbWFuZCBpcyB2YWxpZGF0ZWQuIElzIHRoZSBleGVjdXRpb24gdGhyZWFkIHNhZmUsIG9yIGRvZXMgaXQgY2FsbCBleHRlcm5hbCBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIGxvY2tpbmc/IEkgbmVlZCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgZGF0YSBmbG93IHRocm91Z2ggaXQgd2l0aCBteSBleWVzIGNsb3NlZC4KCkluIG15IG1pbmQsIGEgd2VsbC1kZXNpZ25lZCBjb21tYW5kIGhhbmRsZXIgc2hvdWxkIG1pbmltaXplIHRoZSBhbW91bnQgb2YgaW50ZXJuYWwgc3RhdGUgaXQgbW9kaWZpZXMgZGlyZWN0bHksIGVzcGVjaWFsbHkgZ2xvYmFsIHN0YXRlLiBJZGVhbGx5LCBpdCBzaG91bGQgYWJzdHJhY3QgbW9zdCBvZiB0aGUgaGVhdnkgbGlmdGluZyBvdXQgaW50byBsb3dlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdGVzdGVkIGluZGVwZW5kZW50bHkuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM2NDpcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4yMzY1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjM2NjpcdHtcbjIzNjc6XHRcdGlmIChjbWQgIT0gREFNT05fU1lTRlNfQ01EX09GRiBcdTAwMjZcdTAwMjYga2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjM2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIzNjk6XHRcbjIzNzA6XHRcdHN3aXRjaCAoY21kKSB7XG4yMzcxOlx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PTjpcbjIzNzI6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XG4yMzczOlx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XG4yMzc0Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihrZGFtb25kKTtcbjIzNzU6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVDpcbjIzNzY6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzc3Olx0XHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xuMjM3ODpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFM6XG4yMzc5Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM4MDpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXG4yMzgxOlx0XHRcdFx0XHRrZGFtb25kKTtcbjIzODI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxuMjM4MzpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbjIzODQ6XHRcdFx0XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzLCBrZGFtb25kKTtcbjIzODU6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1RSSUVEX0JZVEVTOlxuMjM4NjpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9ucyhrZGFtb25kLCB0cnVlKTtcbjIzODc6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1RSSUVEX1JFR0lPTlM6XG4yMzg4Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIGZhbHNlKTtcbjIzODk6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcbjIzOTA6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbjIzOTE6XHRcdFx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VzY2hlbWVzKTtcbjIzOTI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XG4yMzkzOlx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM5NDpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyxcbjIzOTU6XHRcdFx0XHRcdGtkYW1vbmQpO1xuMjM5NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1RVTkVEX0lOVEVSVkFMUzpcbjIzOTc6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzk4Olx0XHRcdFx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzLCBrZGFtb25kKTtcbjIzOTk6XHRcdGRlZmF1bHQ6XG4yNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjQwMTpcdFx0fVxuMjQwMjpcdH1cbjI0MDM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2OTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIFN5c2ZzIEVudHJ5IFBvaW50cyBhbmQgUGF0Y2ggSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgREFNT04gc3lzZnMgY29kZSwgYW5kIGl0IHNlZW1zIGxpa2UgYHN0YXRlX3N0b3JlYCBhbmQgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGFyZSBkZWZpbml0ZWx5IGNlbnRyYWwuIEkgYWxzbyBzZWUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gV2hhdCBhYm91dCBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YD8gTmVlZCB0byB0cmFjayB0aGF0IGRvd24gYXMgd2VsbC4KCkxldCYjMzk7cyBtYWtlIGEgbGlzdCB0byBrZWVwIHRyYWNrOgoqICAgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gCiogICBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YAoqICAgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgCiogICBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgCiogICBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYAoqICAgYGRhbW9uX3N5c2ZzX2J1aWxkX2N0eGAKClJpZ2h0LCBub3cgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBpcyBhY3R1YWxseSBsb2NhdGVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBJbXBvcnRhbnQgdG8gbm90ZSB0aGF0LCBhcyBJIHdhcyBvcmlnaW5hbGx5IGV4cGVjdGluZyBpdCB0byBiZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIExldCYjMzk7cyBjb25maXJtIHF1aWNrbHkgaWYgYW55IG90aGVyIHN5c2ZzIGZpbGVzIGFyZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLi4uIE5vcGUsIG9ubHkgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4KClRoZSBwYXRjaCBub3RlcyBtZW50aW9uIGEgd2hvbGUgYnVuY2ggb2YgYnVnIGZpeGVzIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGBrZGFtb25kX2luaXRfY3R4YCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLgoKQnV0IHdhaXQgYSBtaW51dGUsIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCBpcyBzdGF0aWMuIEFuZCBgc3RhdGVfc3RvcmVgIGlzIGFsc28gc3RhdGljLiBBcmUgdGhlcmUgZXZlbiAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMuY2A/IEdvdHRhIGZpZ3VyZSB0aGlzIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jLTE1LVxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy5jOjkyOnN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0zMTctXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XG5tbS9kYW1vbi9zeXNmcy5jLTMxOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cbm1tL2RhbW9uL3N5c2ZzLmM6NDQ2OnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy02MDItXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNzU4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc2NT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciAqZGFtb25fc3lzZnNfZmlsdGVyX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy03NjktXG5tbS9kYW1vbi9zeXNmcy5jOjc3MDpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTc3MS1cdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTkzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy05NDYtXG5tbS9kYW1vbi9zeXNmcy5jOjk0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTk0OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMDY1LVxubW0vZGFtb24vc3lzZnMuYzoxMDY2OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTEwNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZV9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTExNDYtXG5tbS9kYW1vbi9zeXNmcy5jOjExNDc6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyB7XG5tbS9kYW1vbi9zeXNmcy5jLTExNDgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMjc1LVxubW0vZGFtb24vc3lzZnMuYzoxMjc2OnN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTEyNzctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTEzODEtXG5tbS9kYW1vbi9zeXNmcy5jOjEzODI6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4My1cdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDEtXG5tbS9kYW1vbi9zeXNmcy5jOjE0MDI6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQge1xubW0vZGFtb24vc3lzZnMuYy0xNDAzLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE2NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2NTctXG5tbS9kYW1vbi9zeXNmcy5jOjE2NTg6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1OS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc4Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc4NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG5tbS9kYW1vbi9zeXNmcy5jLTE3ODgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMwMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjMxNC1cbm1tL2RhbW9uL3N5c2ZzLmM6MjMxNTpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lc193YWxrX2RhdGEge1xubW0vZGFtb24vc3lzZnMuYy0yMzE2LVx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTA4LVxubW0vZGFtb24vc3lzZnMuYzoyNTA5OnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyB7XG5tbS9kYW1vbi9zeXNmcy5jLTI1MTAtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI2NTMtXG5tbS9kYW1vbi9zeXNmcy5jOjI2NTQ6c3RydWN0IGRhbW9uX3N5c2ZzX3VpX2RpciB7XG5tbS9kYW1vbi9zeXNmcy5jLTI2NTUtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gU3lzZnMgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGV2ZXJ5dGhpbmcgc2VlbXMgcHJldHR5IGxvY2tlZCBkb3duIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgZ2V0dGluZyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSWYgZXZlcnl0aGluZyBpbiB0aGF0IGZpbGUgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHN1Z2dlc3RzIHRob3NlIGZ1bmN0aW9ucyBhcmUgb25seSBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHNwZWNpZmljIG1vZHVsZS4gSSYjMzk7ZCBiZXR0ZXIgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIHB1YmxpYyBlbnRyeSBwb2ludHMsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gSSYjMzk7bSBiZXR0aW5nIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBhbmQgcGFyYW1ldGVyIGRlZmluaXRpb24gYXJlIGhhbmRsZWQgdGhlcmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaXMgc3RydWN0dXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OnN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTc6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNjY6c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01MjM9ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTI4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOTpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMwLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTUxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU1MjpzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTUzLVx0ZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz04ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODkxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg5MjpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTg5My1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMTktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTAyMDpzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAyMS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMjk9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICpkYW1vbl9zeXNmc193YXRlcm1hcmtzX2FsbG9jKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwNDY6c3RydWN0IGRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDQ3LVx0ZW51bSBkYW1vc193bWFya19tZXRyaWMgbWV0cmljO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxNi1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMjQ9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyOTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzAtXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjM1OnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjM2LVx0e1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ1MDpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTEtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NzA6c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NzEtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dlaWdodHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4MDpzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjgxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgwND1zdGF0aWMgc3NpemVfdCBlZmZlY3RpdmVfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxMi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODEzOnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF90dW5lcl9uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODE0LVx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHR1bmVyO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTU1OnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1Ni1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE5NjI9c3RhdGljXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk2MzpzdHJ1Y3QgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm4gKmRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2NC17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA1MDpzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdCB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1MS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMTk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEyOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI5OnN0cnVjdCBkYW1vc19zeXNmc19kZXN0cyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEzMC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjI1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjY2OnN0cnVjdCBkYW1vc19zeXNmc19hY3Rpb25fbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2Ny1cdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NzktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjg0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4Ni17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyOTp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzAtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ0OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0NS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Mzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjQtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAwLSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDE6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDItXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTQ4OmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0OS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipFeGFtaW5pbmcgREFNT04mIzM5O3Mgc3lzZnMgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBEQU1PTiBzeXNmcyBmdW5jdGlvbnM6IGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCwgYGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzYCwgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzYCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuIFRoZXkmIzM5O3JlIGFsbCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0IGZvciBzeXNmcyBlbnRyeSBwb2ludHMuIFRoZXkgbmVlZCB0byBiZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwmIzM5O3Mgc3lzZnMgaW5mcmFzdHJ1Y3R1cmUuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyAqc3RhdGljKj8gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLiBUaGlzIGltcGxpZXMgaXQmIzM5O3Mgb25seSB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBzeXNmcyBjb2RlLCB3aGljaCBpcyBmaW5lLCBidXQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdC4gTm9wZSwgSSYjMzk7dmUgY2hlY2tlZC4gU2VlbXMgbGlrZSBhbGwgb2YgdGhvc2UgbGlzdGVkIGFyZSBub24tc3RhdGljIGV4Y2VwdCBmb3IgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLgoKV2FpdCBhIG1pbnV0ZSwgaWYgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoaXMgaGFzIG1lIHRoaW5raW5nLiBJcyBgbW0vZGFtb24vc3lzZnMuY2AgYWN0dWFsbHkgYSBtb2R1bGU/IFRoYXQgd291bGQgZXhwbGFpbiB0aGUgbmVlZCBmb3IgdGhlIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zLCBhbmQgdGhlIHNlZW1pbmdseSBpbnRlcm5hbCBzdGF0aWMgZnVuY3Rpb24gd291bGQgd29yayBhcyB3ZWxsLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBgbW9kdWxlX2luaXRgIG9yIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IHdvdWxkIGRlZmluaXRlbHkgY29uZmlybSB0aGF0IGl0JiMzOTtzIGEgbG9hZGFibGUgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0Y2FsbHxtb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yNzAwPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3N5c2ZzX2luaXQodm9pZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3MjgtfVxubW0vZGFtb24vc3lzZnMuYzoyNzI5OnN1YnN5c19pbml0Y2FsbChkYW1vbl9zeXNmc19pbml0KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjczMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwMTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUgSW50ZXJmYWNlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG1vZHVsZSBvciBzdWJzeXN0ZW0g4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBpcyBnb2luZyB0byBiZSB0aGF0IHN5c2ZzIGludGVyZmFjZTsgdGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQuIE5vdywgdGhlIHRyaWNrIGlzIHRoYXQgd2UgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgLCBidXQgdGhleSBuZWVkIHRvIGJlIG5vbi1zdGF0aWMuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBmdW5jdGlvbnMgYXJlIHdlIGxvb2tpbmcgYXQgZm9yIHRoYXQ/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCAtIHllcywgdGhhdCBjb3VsZCB3b3JrLgoqICAgYGRhbW9uX3NldF9hdHRyc2AgLSBhbHNvIHByb21pc2luZy4KKiAgIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zdG9wYCAtIHRob3NlIGFyZSBvYnZpb3VzIGNvbnRyb2wgZnVuY3Rpb25zLgoqICAgQW5kIHRoZXJlJiMzOTtzIHRoaXMgYGRhbW9uX3NldF9zY2hlbWVzYC4uLiB3YWl0Li4uIGFjdHVhbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJc24mIzM5O3QgYGRhbW9uX3NldF9hdHRyc2AgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgaW4gYG1tL2RhbW9uL2NvcmUuY2A/IAoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBjb3JlLmNgIGZpbGUgYW5kIHNlZSB3aGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBoaWRpbmcgaW4gdGhlcmUuIFdlJiMzOTtsbCBmaW5kIHdoYXQgd2UgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTHx2b2lkIGRhbW9uX3xeaW50IGRhbW9uXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzAtICovXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxubW0vZGFtb24vY29yZS5jLTcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbm1tL2RhbW9uL2NvcmUuYy05OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI4LVxubW0vZGFtb24vY29yZS5jOjEyOTp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTEzMC17XG4tLVxubW0vZGFtb24vY29yZS5jLTEzMy1cbm1tL2RhbW9uL2NvcmUuYzoxMzQ6c3RhdGljIHZvaWQgZGFtb25fZGVsX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTEzNS17XG4tLVxubW0vZGFtb24vY29yZS5jLTEzOC1cbm1tL2RhbW9uL2NvcmUuYzoxMzk6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xNDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDMtXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xNDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc0LVxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG5tbS9kYW1vbi9jb3JlLmMtMTc2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc5LVxubW0vZGFtb24vY29yZS5jOjE4MDpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTE4MS17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NC1cbm1tL2RhbW9uL2NvcmUuYzoxODU6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMTg2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkzLVxubW0vZGFtb24vY29yZS5jOjE5NDpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0xOTUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODg9dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTMxMi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjMxMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zMTQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTctI2Vsc2Vcbm1tL2RhbW9uL2NvcmUuYzozMTg6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS9kYW1vbi9jb3JlLmMtMzE5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI4PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTM1Mi1cbm1tL2RhbW9uL2NvcmUuYzozNTM6c3RhdGljIHZvaWQgZGFtb25fYWRkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM1NC17XG4tLVxubW0vZGFtb24vY29yZS5jLTM2MS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozNjI6c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2luc2VydF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNjMtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXYsIHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MC0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjM3MTpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM3Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTM3NS0jZWxzZVxubW0vZGFtb24vY29yZS5jOjM3NjpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM3Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTM4MC1cbm1tL2RhbW9uL2NvcmUuYzozODE6c3RhdGljIHZvaWQgZGFtb25fZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM4Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTM4OC1cbm1tL2RhbW9uL2NvcmUuYzozODk6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0zOTAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTMtXG5tbS9kYW1vbi9jb3JlLmM6Mzk0OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMzk1LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00NDU9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Nzg6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTcyND1zdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTczNC1cbm1tL2RhbW9uL2NvcmUuYzo3MzU6dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTczNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTc0MC1cbm1tL2RhbW9uL2NvcmUuYzo3NDE6c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtNzQyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzQ1LVxubW0vZGFtb24vY29yZS5jOjc0NjpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtNzQ3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxubW0vZGFtb24vY29yZS5jOjc1MTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy03NTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03OTItXG5tbS9kYW1vbi9jb3JlLmM6NzkzOnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNzk0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Nzk4PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTgwMi1cbm1tL2RhbW9uL2NvcmUuYzo4MDM6c3RhdGljIHZvaWQgZGFtb25fZGVsX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTgwNC17XG4tLVxubW0vZGFtb24vY29yZS5jLTgwNy1cbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTgwOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTgxNi1cbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODE4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODcxLVxubW0vZGFtb24vY29yZS5jOjg3MjpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTg3My17XG4tLVxubW0vZGFtb24vY29yZS5jLTg3OS1cbm1tL2RhbW9uL2NvcmUuYzo4ODA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODgxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTMzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTM5LVxubW0vZGFtb24vY29yZS5jOjk0MDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk0MS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk2MS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05ODktICovXG5tbS9kYW1vbi9jb3JlLmM6OTkwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vY29yZS5jLTk5MS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsIGJvb2wgYWdncmVnYXRpbmcpXG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDQ4OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxubW0vZGFtb24vY29yZS5jLTEwNDkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xubW0vZGFtb24vY29yZS5jOjEwOTY6dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsXG5tbS9kYW1vbi9jb3JlLmMtMTA5Ny1cdFx0XHRzc2l6ZV90IG5yX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vY29yZS5jPTE1NjE9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTg3LSAqL1xubW0vZGFtb24vY29yZS5jOjE1ODg6c3RhdGljIHZvaWQgZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCxcbm1tL2RhbW9uL2NvcmUuYy0xNTg5LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpmYWlsZWQsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYwND1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjY4LVxubW0vZGFtb24vY29yZS5jOjE2Njk6c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXG5tbS9kYW1vbi9jb3JlLmMtMTY3MC1cdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODM3LSAqL1xubW0vZGFtb24vY29yZS5jOjE4Mzg6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTctICovXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXG5tbS9kYW1vbi9jb3JlLmM6MjEwNjppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG5tbS9kYW1vbi9jb3JlLmMtMjEwNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NzI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NDItXG5tbS9kYW1vbi9jb3JlLmM6MjY0MzpzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMjY0NC1cdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jPTMyMjg9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNjktI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYzozMjcwOnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcbm1tL2RhbW9uL2NvcmUuYy0zMjcxLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjc3LSNlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MzI3ODpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI4Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg3OnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMzI4OC1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwNT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyMS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzIyOnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxubW0vZGFtb24vY29yZS5jLTMzMjMtXHRcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjb3VudF9hZ2UpXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNzc9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDUtI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYzozNDA2OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNDA3LVx0XHR1bnNpZ25lZCBsb25nIHN6X3IpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MTMtI2Vsc2Vcbm1tL2RhbW9uL2NvcmUuYzozNDE0OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNDE1LVx0XHR1bnNpZ25lZCBsb25nIHN6X3IpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0Mjg9c3RhdGljIGludCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ1Mi0vKiBTcGxpdCBldmVyeSByZWdpb24gaW4gdGhlIGdpdmVuIHRhcmdldCBpbnRvICYjMzk7bnJfc3VicyYjMzk7IHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2NvcmUuYzozNDUzOnN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vY29yZS5jLTM0NTQtXHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgbnJfc3Vicyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ4Mi0vKiBTcGxpdCBvbmUgaW4gZXZlcnkgQHNwbGl0X3N0ZXAgcmVnaW9ucyBpbnRvIHR3bywgZnJvbSBhIHJvdGF0aW5nIG9mZnNldCAqL1xubW0vZGFtb24vY29yZS5jOjM0ODM6c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zNDg0LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X3N0ZXApXG4tLVxubW0vZGFtb24vY29yZS5jPTM2Mjg9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYzNi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjM2Mzc6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTM2Mzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYxLSNlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MzY2MjpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMzY2My17XG4tLVxubW0vZGFtb24vY29yZS5jPTM5NzE9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MDAzOmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy00MDA0LVx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMjctICovXG5tbS9kYW1vbi9jb3JlLmM6NDAyODp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbm1tL2RhbW9uL2NvcmUuYy00MDI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczMDIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29yZSBGdW5jdGlvbmFsaXR5OiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZW51bWVyYXRlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgc2luY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBpdCBwcm92aWRlcy4gUmlnaHQsIGhlcmUmIzM5O3MgdGhlIGxpc3Q6IGBkYW1vbl9yZWdpc3Rlcl9vcHNgLCBgZGFtb25fc2VsZWN0X29wc2AsIGBkYW1vbl9uZXdfZmlsdGVyYCwgYGRhbW9uX2FkZF9maWx0ZXJgLCBgZGFtb25fZGVzdHJveV9maWx0ZXJgLCBgZGFtb25fbmV3X3Byb2JlYCwgYGRhbW9uX2FkZF9wcm9iZWAsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX25ld19yZWdpb25gLCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBgZGFtb25fYWRkX3NjaGVtZWAsIGBkYW1vbl9kZXN0cm95X3NjaGVtZWAsIGBkYW1vbl9uZXdfdGFyZ2V0YCwgYGRhbW9uX2FkZF90YXJnZXRgLCBgZGFtb25fdGFyZ2V0c19lbXB0eWAsIGBkYW1vbl9mcmVlX3RhcmdldGAsIGBkYW1vbl9kZXN0cm95X3RhcmdldGAsIGBkYW1vbl9uZXdfY3R4YCwgYGRhbW9uX2Rlc3Ryb3lfY3R4YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX25yX3J1bm5pbmdfY3R4c2AsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zdG9wYCwgYGRhbW9uX2lzX3J1bm5pbmdgLCBgZGFtb25fa2RhbW9uZF9waWRgLCBgZGFtb25fY2FsbGAsIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBhbmQgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgLiBUaGF0JiMzOTtzIGEgbG90LCBidXQgSSBjYW4gYnJlYWsgaXQgZG93bi4KClRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZGFtb25fYXBwbHlfc2NoZW1lYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCBpbnNpZGUgdGhlIGBrZGFtb25kX2ZuYCBrdGhyZWFkLiBTbywgbmF0dXJhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHN0YXJ0IERBTU9OLiBgZGFtb25fc3RhcnRgIGxvb2tzIGxpa2UgYSBrZXkgZW50cnkgcG9pbnQsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb3JlLiBBbHNvLCBJIGtub3cgdGhhdCBzY2hlbWVzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgREFNT04gb3BlcmF0ZXMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjaGVtZXMgYXJlIHNldCB1cDogYGRhbW9uX3NldF9zY2hlbWVzYCBhbmQgYGRhbW9uX2FkZF9zY2hlbWVgIGxvb2sgbGlrZSBnb29kIHBsYWNlcyB0byBzdGFydC4gQW5kIG9mIGNvdXJzZSwgc2luY2UgYXR0cmlidXRlcyBpbmZsdWVuY2UgYmVoYXZpb3IsIEkmIzM5O2xsIHJldmlldyBgZGFtb25fc2V0X2F0dHJzYCBhcyB3ZWxsLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHdoYXQgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNyaXRpY2FsIHBpZWNlcyBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl98XmludCBkYW1vbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmM9MTkyPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTIxMi0vKiBJbml0aWFsaXplICYjMzk7LVx1MDAzZXJlZ2lvbnNfbGlzdCYjMzk7IG9mIGV2ZXJ5IHRhcmdldCAodGFzaykgKi9cbm1tL2RhbW9uL3ZhZGRyLmM6MjEzOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX2luaXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vdmFkZHIuYy0yMTQte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjI2LSAqL1xubW0vZGFtb24vdmFkZHIuYzoyMjc6c3RhdGljIHZvaWQgZGFtb25fdmFfdXBkYXRlKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3ZhZGRyLmMtMjI4LXtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTIzOC1cbm1tL2RhbW9uL3ZhZGRyLmM6MjM5OnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2RhbW9uL3ZhZGRyLmMtMjQwLVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUpXG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNjg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjk1LSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9kYW1vbi92YWRkci5jOjI5NjpzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vZGFtb24vdmFkZHIuYy0yOTctXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MzIzPXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMzQ1LVxubW0vZGFtb24vdmFkZHIuYzozNDY6c3RhdGljIHZvaWQgZGFtb25fdmFfbWtvbGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL3ZhZGRyLmMtMzQ3LXtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTM2MD1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMzY4LVxubW0vZGFtb24vdmFkZHIuYzozNjk6c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3ZhZGRyLmMtMzcwLXtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTY5Nz1zdGF0aWMgYm9vbCBkYW1vbl92YV90YXJnZXRfdmFsaWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTcwOS1cbm1tL2RhbW9uL3ZhZGRyLmM6NzEwOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi92YWRkci5jLTcxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIE1vZHVsZSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoaXMgREFNT04gbW9kdWxlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHJlZ2lzdGVyaW5nIG9wZXJhdGlvbnMgaGFwcGVucyB0aHJvdWdoIGBkYW1vbl9yZWdpc3Rlcl9vcHNgIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgIGluIGBtbS9kYW1vbi92YWRkci5jYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIGNhbiB1c2UgdGhhdCBmdW5jdGlvbiB0byBwbHVnIGludG8gdGhlIERBTU9OIGNvcmUuCgpUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgbW9kaWZpZXMgYSBidW5jaCBvZiBmdW5jdGlvbnMgcmVsYXRlZCB0byBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyB3aXRoaW4gREFNT04uIEZ1bmN0aW9ucyBsaWtlIGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYW5kIG90aGVycyBhcmUgZGVmaW5pdGVseSBwYXJ0IG9mIHRoYXQgY29yZS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIEFQSSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBzdGFydCBhbmQgY29udHJvbCBEQU1PTjogZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4KCkxldCYjMzk7cyBzZWUsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXNuJiMzOTt0IGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgbm90IHN0YXRpYyBlaXRoZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0LCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgKmlzKiBzdGF0aWMuIE9rYXksIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXMgZGVmaW5lZCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gTWFrZXMgc2Vuc2UuIE5vdywgbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgSSBzZWUgdGhhdCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9hZGRfc2NoZW1lYCBhcmUgYWxsIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHNlZWluZyBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYERBTU9OX1JFQ0xBSU1gIGFuZCBgREFNT05fTFJVX1NPUlRgIGFyZSBjb25maWd1cmVkIHRvIGNvcnJlY3RseSB1c2UgdGhlc2UgZmVhdHVyZXMuIFllcywgdGhleSBkZXBlbmQgb24gYERBTU9OYC4KClNvLCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggZmVhdHVyZXMgYXJlIGNvbXBpbGVkIHVuZGVyIHdoaWNoIGNvbmZpZ3MuIEkgY29uZmlybSB0aGF0IGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgaXMgY29tcGlsZWQgdW5kZXIgYERBTU9OX1ZBRERSYCwgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGVuLCBgZGFtb25fcGFfcGFnZW91dGAgaXMgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBpcyBjb21waWxlZCB1bmRlciBgREFNT05fUEFERFJgLCBhbmQgYGRhbW9zX2FwcGx5X3NjaGVtZWAgaXMgY29tcGlsZWQgdW5kZXIgYERBTU9OYCwgbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0LiBUbyBlbmFibGUgZXZlcnl0aGluZyBJIG5lZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgc2V0OiBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4KCkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCBqdXN0IHRvIGJlIGNlcnRhaW4sIGJ1dCBJIHRoaW5rIHRoYXQgaXMgYSBmYWlybHkgY29tcGxldGUgb3ZlcnZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBEQU1PTiYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnM7IGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgIHNlZW0gbGlrZSB0aGUga2V5IHNldHRpbmdzIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoZXNlOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX3JlZ2lzdGVyX29wc2AuCgpXYWl0IGEgbWludXRlLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIG5vbi1zdGF0aWMgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBIb3dldmVyLCBpZiBpdCYjMzk7cyBub24tc3RhdGljLCBTeXprYWxsZXIgKmNvdWxkKiBzdGlsbCBmdXp6IHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2vigKYgYWhhISBgZGFtb25fc3RhcnRgIGFuZCBgZGFtb25fc2V0X2F0dHJzYCBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQhIFRpbWUgdG8gZGlnIGludG8gYGRhbW9uX3N0YXJ0YCBhbmQgdW5kZXJzdGFuZCBpdHMgY2FsbGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoZGFtb25fc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTE5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgRVhQT1JUX1NZTUJPTGAgaW4gYG1tL2RhbW9uL2NvcmUuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIERBTU9OIOKAkyB0aGF0JiMzOTtzIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZywgcmlnaHQ/IExldCBtZSBtZW50YWxseSB0cmFjZSB0aGlzLi4uIEkgbmVlZCB0byBzZWUgd2hlcmUgYEVYUE9SVF9TWU1CT0xgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZWl0aGVyIGV4dGVybmFsIGFjY2VzcywgcGVyaGFwcyBmb3IgZGVidWdnaW5nLCBvciBmb3IgZGVwZW5kZW5jeSByZXNvbHV0aW9uIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3ltYm9scyBhcmUgYmVpbmcgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGJyb2FkZXIga2VybmVsIG9yIG1vZHVsZXMgdGhyb3VnaCB0aGlzIG1lY2hhbmlzbS4gVW5kZXJzdGFuZGluZyB0aGUgZXhwb3J0ZWQgc3ltYm9scyB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlcmZhY2VzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGVsaWJlcmF0ZWx5IHNoYXJlZCBhbmQgcG90ZW50aWFsbHkgcmVsaWVkIHVwb24gYnkgb3RoZXIga2VybmVsIHBhcnRzLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGRlY2xhcmF0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBleHBvcnQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIHV0aWxpdHkgZnVuY3Rpb25zIG9yIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG1hZGUgYWNjZXNzaWJsZS4gVGhlIGNvbnRleHQgd2lsbCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGV4cG9zZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIGBFWFBPUlRfU1lNQk9MYCoqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgYW5kIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IHNlZW1zIEkgZGlkbiYjMzk7dCBzZWUgYW4gYEVYUE9SVF9TWU1CT0xgIG1hY3JvIHVzZWQgaW4gdGhhdCBmaWxlLiBUaGF0IHN0cmlrZXMgbWUgYXMgb2RkLiBHaXZlbiB0aGUgd2F5IERBTU9OIGlzIGFyY2hpdGVjdGVkLCBpdCB3b3VsZCBiZSBzdHJhbmdlIGlmIGNvcmUgZnVuY3Rpb25hbGl0eSB3YXNuJiMzOTt0IG1lYW50IHRvIGJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24sIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgY29kZSB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGZpbGUgYWdhaW4sIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTHxFWFBPUlRfU1lNQk9MX0dQTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRBTU9OIE1vZHVsZSBDb251bmRydW0qKgoKUmlnaHQsIERBTU9O4oCmIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhhdCBgREFNT05gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiBJIGNhbiYjMzk7dCBidWlsZCBhIGJvb2xlYW4gZGlyZWN0bHkgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIGNhbiBJPyBUaGF0IHdvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZGVzaWduIGNvbnN0cmFpbnQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIHN1c3BlY3QuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBib29sZWFuIG5hdHVyZSBmb3IgREFNT04mIzM5O3MgaW50ZWdyYXRpb24sIGRlcGxveW1lbnQsIGFuZCBvdmVyYWxsIGZsZXhpYmlsaXR5IHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGFuIGluaGVyZW50IGxpbWl0YXRpb24gb3IgYSBwb3RlbnRpYWxseSBvdmVybG9va2VkIGFzcGVjdCBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEYW1vbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHRoZSBEYW1vbiBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWxzLiBUaGUgdXNlIG9mIGBib29sYCBpcyBncmVhdCwgSSBrbm93IGl0JiMzOTtzIGEgYnVpbHQtaW4gdHlwZS4gU28sIGlmIHRoZSBmdW5jdGlvbmFsaXR5JiMzOTtzIGVuYWJsZWQsIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGVmZm9ydC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYW5kIGl0IHJlaW5mb3JjZXMgdGhhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuIEkgY2FuIGdldCBhd2F5IHdpdGggbm90IHdvcnJ5aW5nIGFib3V0IHN0YXRpYyBkZWNsYXJhdGlvbnMsIGF0IGxlYXN0IGluIHRoZSBpbml0aWFsIGFuYWx5c2lzLgoKTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjcnVjaWFsIHNldHVwIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcmFjdCBpcyBrZXkgdG8gZ2V0dGluZyBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHdob2xlIHBpY3R1cmUuCgpGaW5hbGx5LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBgZGFtb25fcmVjbGFpbWAgYW5kIGBkYW1vbl9scnVfc29ydGAuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXkgaGF2ZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUuIElmIHRoZXkgZG8sIHRoZW4gdGhleSBhcmUgYWxzbyBnb29kIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBjb2RlIHRvIHN0YXJ0IHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwOTQKCQkJCQkJCW91dHB1dDogMjk2CgkJCQkJCQl0aG91Z2h0czogNjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFN1YnN5c3RlbSBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBzdWJzeXN0ZW0gcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBob3cgdG8gYXBwcm9hY2ggdGVzdGluZyBpdC4gSSBuZWVkIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2Ugb2Ygd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0JiMzOTtzICpjcml0aWNhbCogdG8gZXhlcmNpc2UgdGhlIG5ldyBjb2RlLiBJIHN0YXJ0ZWQgYnkgbGlzdGluZyBvdXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW1lZCBjb3JlIHRvIERBTU9OJiMzOTtzIG9wZXJhdGlvbi4gSSBmaWd1cmVkIGBkYW1vbl9zdGFydGAgd291bGQgYmUgaW1wb3J0YW50LCBhbmQgc28gb24uCgpJIHF1aWNrbHkgaWRlbnRpZmllZCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSByZWxldmFudDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jYWxsYC4gYGRhbW9uX2NhbGxgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUga3RocmVhZC4gSSB3YW50ZWQgdG8gdmVyaWZ5IHRoYXQgZWFjaCBvZiB0aGVzZSB3ZXJlIGFjdHVhbGx5IG5vbi1zdGF0aWMuCgpOb3csIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBidWdzIGZpeGVkIGluIHRoaW5ncyBsaWtlIHNjaGVtZSBhcHBsaWNhdGlvbiwgcXVvdGEgY2FsY3VsYXRpb25zLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMuIFRoaXMgdGVsbHMgbWUgdGhhdCB0byBoaXQgdGhlc2UgYnVnIGZpeGVzLCBJICpuZWVkKiBEQU1PTiB0byBiZSBlbmFibGVkIGFuZCB0aGVuIEkgbmVlZCB0byBjb25maWd1cmUgYW5kIGFwcGx5IHNjaGVtZXMuIFRoYXQmIzM5O3MgaG93IEkgY2FuIHNldCBpdCB1cCB0byBoaXQgdGhlIGJ1Z2ZpeGVzLgoKU28gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AuIEFuZCBub3cgSSBoYXZlIGEgY29uY3JldGUgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uIGFuZCBlbnN1cmUgZ2V0IGV4ZXJjaXNlZCB3aGVuIEkgdGVzdCB0aGlzIHBhdGNoOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX2NhbGxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fYWRkX3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiAoYGRhbW9zX2FwcGx5X3NjaGVtZWApLCBxdW90YSBjYWxjdWxhdGlvbnMgKGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGApLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMgKGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gVG8gdGVzdCB0aGVzZSBwYXRocywgREFNT04gbXVzdCBiZSBlbmFibGVkIGFuZCBzY2hlbWVzIG11c3QgYmUgY29uZmlndXJlZCBhbmQgYXBwbGllZCwgd2hpY2ggY2FuIGJlIGRvbmUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2Ugb3IgaW4ta2VybmVsIEFQSXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gY29yZSBzY2hlbWUgYXBwbGljYXRpb24gKGBkYW1vc19hcHBseV9zY2hlbWVgKSwgcXVvdGEgY2FsY3VsYXRpb25zIChgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgKSwgYW5kIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBvcGVyYXRpb25zIChgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIFRvIHRlc3QgdGhlc2UgcGF0aHMsIERBTU9OIG11c3QgYmUgZW5hYmxlZCBhbmQgc2NoZW1lcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYW5kIGFwcGxpZWQsIHdoaWNoIGNhbiBiZSBkb25lIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG9yIGluLWtlcm5lbCBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6MTMuNjM4NDQ2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODAwMDYzNjg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9hZGRfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiAoYGRhbW9zX2FwcGx5X3NjaGVtZWApLCBxdW90YSBjYWxjdWxhdGlvbnMgKGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGApLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMgKGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gVG8gdGVzdCB0aGVzZSBwYXRocywgREFNT04gbXVzdCBiZSBlbmFibGVkIGFuZCBzY2hlbWVzIG11c3QgYmUgY29uZmlndXJlZCBhbmQgYXBwbGllZCwgd2hpY2ggY2FuIGJlIGRvbmUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2Ugb3IgaW4ta2VybmVsIEFQSXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjEzLjYzODQ1NDA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQyMjcwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MDY4YzdjODEwNjI0YjkxOGVjZjNjMGI2Mzc2MzIyMDM1OWRlOGMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTQ6MzU6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggNjQ0ZGFmNWExNjU2MC4uNDk0NGNmMmM1YWZhZSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMjYxMyw3ICsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdFxcdFxcdFxcdFxcdGMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbiBcXHRcXHRcXHRpZiAoIXN6KVxcbiBcXHRcXHRcXHRcXHRnb3RvIHVwZGF0ZV9zdGF0O1xcbi1cXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opO1xcbitcXHRcXHRcXHRpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSlcXG4rXFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuQEAgLTI4MTUsNiArMjgxNiw4IEBAIHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4gXFx0fVxcbiBcXG4gXFx0c2lfbWVtaW5mb19ub2RlKFxcdTAwMjZpLCBnb2FsLVxcdTAwM2VuaWQpO1xcbitcXHRpZiAoIWkudG90YWxyYW0pXFxuK1xcdFxcdGkudG90YWxyYW0gPSAxO1xcbiBcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuIFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XFxuIFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXFxuQEAgLTI4NTUsMTAgKzI4NTgsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXG4gXFx0c2lfbWVtaW5mb19ub2RlKFxcdTAwMjZpLCBnb2FsLVxcdTAwM2VuaWQpO1xcbi1cXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4rXFx0aWYgKCFpLnRvdGFscmFtKVxcbitcXHRcXHRyZXR1cm4gMTAwMDA7XFxuK1xcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKSB7XFxuIFxcdFxcdG51bWVyYXRvciA9IHVzZWRfcGFnZXM7XFxuLVxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXFxuK1xcdFxcdGlmIChpLnRvdGFscmFtIFxcdTAwM2MgdXNlZF9wYWdlcylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSB1c2VkX3BhZ2VzO1xcbitcXHR9XFxuIFxcdHJldHVybiBtdWx0X2ZyYWMobnVtZXJhdG9yLCAxMDAwMCwgaS50b3RhbHJhbSk7XFxuIH1cXG4gXFxuQEAgLTMwMDEsNyArMzAxMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxuIFxcdFxcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfQUNUSVZFX0ZJTEUpO1xcbiBcXHRpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfSU5BQ1RJVkVfQU5PTikgK1xcbiBcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0ZJTEUpO1xcbi1cXHR0b3RhbCA9IGFjdGl2ZSArIGluYWN0aXZlO1xcbitcXHR0b3RhbCA9IG1heChhY3RpdmUgKyBpbmFjdGl2ZSwgMSk7XFxuIFxcdGlmIChhY3RpdmVfcmF0aW8pXFxuIFxcdFxcdHJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xcbiBcXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xcbkBAIC0zNzI3LDYgKzM3MzYsMTcgQEAgc3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiAtRUJVU1k7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxuK1xcbitcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFxcdTAwMjZzLVxcdTAwM2VxdW90YSkge1xcbitcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xcbkBAIC0zNzQzLDYgKzM3NjMsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XFxuIFxcdFxcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XFxuIFxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XFxuK1xcdFxcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXFxuaW5kZXggNWM2YzNhNTk3ZmQwYi4uOWRkZDFlYzgyMDJiNyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXFxuKysrIGIvbW0vZGFtb24vcGFkZHIuY1xcbkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9fbGlzdCk7XFxuIHB1dF9mb2xpbzpcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxcbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxcbiBcXHRcXHRcXHRmb2xpb19kZWFjdGl2YXRlKGZvbGlvKTtcXG4gXFx0XFx0YXBwbGllZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIHB1dF9mb2xpbzpcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxuQEAgLTM1MCw3ICszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdFxcdFxcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9fbGlzdCk7XFxuIHB1dF9mb2xpbzpcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QsIHMtXFx1MDAzZXRhcmdldF9uaWQpO1xcbkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXG4gXFx0XFx0aWYgKCFkYW1vc19wYV9maWx0ZXJfb3V0KHMsIGZvbGlvKSlcXG4gXFx0XFx0XFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbykgLyBhZGRyX3VuaXQ7XFxuLVxcdFxcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XFxuK1xcdFxcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHR9XFxuIFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IDA2NDg0MDBiMmQ2NWIuLmFhODMzYzJjNGZhMzUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNjY5LDYgKzY2OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuK1xcbiBcXHRcXHRuciA9IDE7XFxuIFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gXFxuQEAgLTY4MSw3ICs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKGZvbGlvLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxcbiBcXHRcXHRcXHRcXHRtaWdyYXRpb25fbGlzdHMpO1xcbi1cXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4rXFx0XFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UoKnB0ZSkpO1xcbitcXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xcbiBcXHR9XFxuIFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuK1xcbiBcXHRcXHRuciA9IDE7XFxuIFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gXFxuQEAgLTg0NCw3ICs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxcbiBcXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tXFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTtcXG4rXFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcXG4gXFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxuIFxcdH1cXG4gXFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjE0LjAwMzI4OTM4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwNzYzNTc4NDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9hZGRfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiAoYGRhbW9zX2FwcGx5X3NjaGVtZWApLCBxdW90YSBjYWxjdWxhdGlvbnMgKGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGApLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMgKGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gVG8gdGVzdCB0aGVzZSBwYXRocywgREFNT04gbXVzdCBiZSBlbmFibGVkIGFuZCBzY2hlbWVzIG11c3QgYmUgY29uZmlndXJlZCBhbmQgYXBwbGllZCwgd2hpY2ggY2FuIGJlIGRvbmUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2Ugb3IgaW4ta2VybmVsIEFQSXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwNjhjN2M4MTA2MjRiOTE4ZWNmM2MwYjYzNzYzMjIwMzU5ZGU4YzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE0OjM1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi40OTQ0Y2YyYzVhZmFlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgKzI2MTMsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdFx0Yy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6KVxuIFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbi1cdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opO1xuK1x0XHRcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxuK1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgKzI4MTYsOCBAQCBzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG4gXHR9XG4gXG4gXHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuK1x0aWYgKCFpLnRvdGFscmFtKVxuK1x0XHRpLnRvdGFscmFtID0gMTtcbiBcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuQEAgLTI4NTUsMTAgKzI4NTgsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4tXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuK1x0aWYgKCFpLnRvdGFscmFtKVxuK1x0XHRyZXR1cm4gMTAwMDA7XG4rXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKSB7XG4gXHRcdG51bWVyYXRvciA9IHVzZWRfcGFnZXM7XG4tXHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbitcdH0gZWxzZSB7XG4rXHRcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuK1x0XHRpZiAoaS50b3RhbHJhbSBcdTAwM2MgdXNlZF9wYWdlcylcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0bnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIHVzZWRfcGFnZXM7XG4rXHR9XG4gXHRyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pO1xuIH1cbiBcbkBAIC0zMDAxLDcgKzMwMTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxuIFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9GSUxFKTtcbiBcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9BTk9OKSArXG4gXHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfSU5BQ1RJVkVfRklMRSk7XG4tXHR0b3RhbCA9IGFjdGl2ZSArIGluYWN0aXZlO1xuK1x0dG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO1xuIFx0aWYgKGFjdGl2ZV9yYXRpbylcbiBcdFx0cmV0dXJuIG11bHRfZnJhYyhhY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG4gXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuQEAgLTM3MjcsNiArMzczNiwxNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiAtRUJVU1k7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXG4re1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4rXG4rXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnMtXHUwMDNlcXVvdGEpIHtcbitcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID9cbkBAIC0zNzQzLDYgKzM3NjMsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xuIFx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc2NoZW1lLCBjdHgpO1xuIFx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpO1xuK1x0XHRkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLjlkZGQxZWM4MjAyYjcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjY0LDcgKzI2NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0ZWxzZVxuIFx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9fbGlzdCk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcilcbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbkBAIC0zNTAsNyArMzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXHUwMDI2Zm9saW9fbGlzdCwgcy1cdTAwM2V0YXJnZXRfbmlkKTtcbkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0O1xuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDA2NDg0MDBiMmQ2NWIuLmFhODMzYzJjNGZhMzUgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNjY5LDYgKzY2OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxuIFx0XHRcdFx0bWlncmF0aW9uX2xpc3RzKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTtcbitcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtODQ0LDcgKzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiBcdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTtcbitcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6MTQuMDAzMjkwNjU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MjY2MDc5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBEQU1PTiBmaWxlczogYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBpcyBhIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBzZXZlcmFsIGlzc3Vlcy5cblxuRmlyc3QsIHRoZXJlJ3MgYSBjb3JyZWN0aW9uIHRvIGBkYW1vbl9zcGxpdF9yZWdpb25fYXRgJ3MgcmV0dXJuIHZhbHVlIGNoZWNrIHdpdGhpbiBgZGFtb3NfYXBwbHlfc2NoZW1lYC4gR29vZCwgbWFraW5nIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdC4gVGhlbiwgc2FuaXR5IGNoZWNrcyBmb3IgYGkudG90YWxyYW1gIGluIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgIGFuZCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGFuZCBjaGVja2luZyBmb3IgYGFjdGl2ZSArIGluYWN0aXZlYCBlcXVhbGluZyB6ZXJvIGluIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGAuIFNlZW1zIGxpa2Ugc29tZSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdG8gaGFuZGxlIHBvdGVudGlhbGx5IHVuZXhwZWN0ZWQgc3RhdGVzLlxuXG5JdCBhbHNvIGxvb2tzIGxpa2UgdGhleSdyZSBpbml0aWFsaXppbmcgYGxhc3RfcHNpX3RvdGFsYCB3aXRoIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBQU0ktYmFzZWQgcXVvdGEgZW5mb3JjZW1lbnQuXG5cbk5vdywgaW50byB0aGUgbW9yZSBncmFudWxhciBmaXhlczogSW4gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGV5J3ZlIGZpeGVkIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9uLCBzd2l0Y2hpbmcgZnJvbSBhZGRpbmcgdG8gYW4gZXhpc3RpbmcgdmFsdWUgdG8gc2V0dGluZyBhbiBhYnNvbHV0ZSB2YWx1ZS4gTWFrZXMgc2Vuc2UsIGVuc3VyaW5nIGNvcnJlY3QgcGFnZS1hbGlnbmVkIGFkZHJlc3MgdHJhdmVyc2FsLiBUaGVuIGluIGBtbS9kYW1vbi92YWRkci5jYCwgaXQgbG9va3MgbGlrZSB0aGUgcGFnZSBjb3VudCBjYWxjdWxhdGlvbiBpcyBiZWluZyBjb3JyZWN0ZWQsIHN1YnRyYWN0aW5nIHRoZSBwYWdlIGluZGV4IHRvIGF2b2lkIGNvdW50aW5nIGFuIHVubmVjZXNzYXJ5IHBhZ2UuIFRoYXQncyBhIGNydWNpYWwgY29ycmVjdGlvbiBmb3IgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCwgc28gdGhleSdyZSBoaXR0aW5nIHRoZSBzcGVjaWZpYyBwYWdlIGNvcnJlY3RseS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY29yZSBEQU1PTiBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBEQU1PTiBpcyBkZWZpbml0ZWx5IGEgY29yZSBmZWF0dXJlLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIHdvcmtpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIHRvIGJlIHN1cmUgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjM5LjUyOTkwMDkwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYwNzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjM5LjU3MDUxNDA0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDk0MDAwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBWaXJ0dWFsIGFuZCBQaHlzaWNhbCBBZGRyZXNzIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEQU1PTiBzeXN0ZW0gaGFuZGxlcyB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGUgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBUaGF0IGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHNob3VsZCBob2xkIHRoZSBrZXkgZGVmaW5pdGlvbnMgZm9yIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAuIEl0J3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIG91dGxpbmUgaG93IHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzIGFyZSBtYW5hZ2VkLCBpZiBpdCBhbGxvd3MgZm9yIHRoZSBzdXBwb3J0IG9mIGJvdGggYW5kIHNvbWUgY29uZmlndXJhdGlvbnMgYXJvdW5kIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6NDIuNzc5OTE2NTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIERBTU9OXFxuICAgNjpcXHRcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcXG4gICA5OlxcdFxcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXFxuICAxMDpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXFxuICAxMzpcXHRcXHQgIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxuICAyMDpcXHRcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbiAgMjE6XFx0XFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbiAgMjI6XFx0XFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbiAgMjc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuICA4MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDg0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDg3OlxcdFxcbiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuICA5ODpcXHRcXHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxcbiAgOTk6XFx0XFxuIDEwMDpcXHRjb25maWcgREFNT05fTFJVX1NPUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6NDIuNzc5OTk0NDQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NzMxNzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIERBTU9OIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4gUmlnaHQgYXdheSwgSSB3YW50IHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcyBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gdGhlIGRpZmZzIGhhdmUgdG91Y2hlZCBhIGJ1bmNoIG9mIGNvcmUgcm91dGluZXMuIEkndmUgZ290IG15IGV5ZXMgb24gYGRhbW9zX2FwcGx5X3NjaGVtZWAsIGNsZWFybHkgY3J1Y2lhbCBmb3IgYXBwbHlpbmcgbW9uaXRvcmluZyBzY2hlbWVzLiBUaGVuIHdlIGhhdmUgdGhlIG1lbW9yeSBhcmVhIHJldHJpZXZhbHM6IGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLiBUaG9zZSBhcmUsIHdpdGhvdXQgYSBkb3VidCwgY2VudHJhbCB0byBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBhcmVhcyBmb3IgbW9uaXRvcmluZy5cblxuSSBhbHNvIG5vdGljZSBzb21lIGNvbnRleHQgaW5pdGlhbGl6YXRpb246IGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGFuZCBga2RhbW9uZF9pbml0X2N0eGAuIFRoZXNlIGFyZSBwcm9iYWJseSBrZXkgZm9yIHRoZSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBtb25pdG9yaW5nIGRhZW1vbi4gVGhlIGBkYW1vbl9wYV9gIHByZWZpeGVkIGZ1bmN0aW9ucyBhcmUgaW50cmlndWluZy4uLiBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YC4gVGhlc2Ugc2VlbSB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBwYWdlIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbGx5IGRlYWN0aXZhdGlvbiwgbWlncmF0aW9uLCBhbmQgdGhlIGdhdGhlcmluZyBvZiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3IuIEZpbmFsbHksIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAsIHNvIHNvbWUgVmlydHVhbCBBZGRyZXNzIG1vbml0b3JpbmcgaXMgYXQgcGxheSwgb3BlcmF0aW5nIGF0IHRoZSBwbWQgbGV2ZWwuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIG5vdywgaXMgd2hldGhlciB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90PyBUaGUgdXNlIG9mIHN0YXRpYyB3b3VsZCBpbmRpY2F0ZSBhIHRpZ2h0bHkgY291cGxlZCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDIsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6NDkuOTI3MzE0ODgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTMyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3NjaGVtZXxkYW1vc19nZXRfbm9kZV9tZW1fYnB8ZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icHxkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icHxkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2l8a2RhbW9uZF9pbml0X2N0eHxkYW1vbl9wYV9wYWdlb3V0fGRhbW9uX3BhX2RlX2FjdGl2YXRlfGRhbW9uX3BhX21pZ3JhdGV8ZGFtb25fcGFfc3RhdHxkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeXxkYW1vc192YV9zdGF0X3BtZF9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgzMj1zdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XFx0LyogVGhlc2Ugd2lsbCBiZSBzZXQgZnJvbSBrZGFtb25kX2luaXRfY3R4KCkgKi9cXG5tbS9kYW1vbi9jb3JlLmMtODQ4LVxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1NTg9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI1NzEtXFxubW0vZGFtb24vY29yZS5jOjI1NzI6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI1NzMtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2NDM9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NjktXFx0XFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcXG5tbS9kYW1vbi9jb3JlLmM6MjY3MDpcXHRcXHRcXHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XFxubW0vZGFtb24vY29yZS5jLTI2NzEtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgwMD1zdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjgwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MjgwNTpzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jLTI4MDYtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjgyNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjgyODpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbm1tL2RhbW9uL2NvcmUuYy0yODI5LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NzU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjk4MS0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyOTgyOnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMjk4My1cXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yOTg3LVxcbm1tL2RhbW9uL2NvcmUuYzoyOTg4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jLTI5ODktXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjk5ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDAzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMDA0OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxubW0vZGFtb24vY29yZS5jLTMwMDUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwMTk9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwMzQtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDM1OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwMzYtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAzOC1cXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzAzOTpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzA0MC1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDQyLVxcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDQzOlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMzA0NC1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzcxMT1zdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM4LVxcbm1tL2RhbW9uL2NvcmUuYzozNzM5OnN0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTM3NDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NDktXFxubW0vZGFtb24vY29yZS5jOjM3NTA6c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTM3NTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NjUtXFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzc2NjpcXHRcXHRkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzc2Ny1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc3Mz1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzg2LVxcdGNvbXBsZXRlKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XFxubW0vZGFtb24vY29yZS5jOjM3ODc6XFx0a2RhbW9uZF9pbml0X2N0eChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNzg4LVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMDk9c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIxOS1cXG5tbS9kYW1vbi9wYWRkci5jOjIyMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0yMjEtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jLTI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzEyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XFxubW0vZGFtb24vcGFkZHIuYzozMTY6XFx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zMTctfVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zMTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlxcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XFxubW0vZGFtb24vcGFkZHIuYy0zMjUtXFxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM2MS1cXG5tbS9kYW1vbi9wYWRkci5jOjM2MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0zNjMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mzg5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM5Ni1cXHRjYXNlIERBTU9TX1BBR0VPVVQ6XFxubW0vZGFtb24vcGFkZHIuYzozOTc6XFx0XFx0cmV0dXJuIGRhbW9uX3BhX3BhZ2VvdXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zOTgtXFx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDA1LVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbm1tL2RhbW9uL3BhZGRyLmM6NDA2OlxcdFxcdHJldHVybiBkYW1vbl9wYV9taWdyYXRlKHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDA3LVxcdGNhc2UgREFNT1NfU1RBVDpcXG5tbS9kYW1vbi9wYWRkci5jOjQwODpcXHRcXHRyZXR1cm4gZGFtb25fcGFfc3RhdChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQwOS1cXHRkZWZhdWx0Olxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01ODU9c3RhdGljIHZvaWQgZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjM0LVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjM1OnN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNjM2LVxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTc0MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzUzLVxcdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcXG5tbS9kYW1vbi92YWRkci5jOjc1NDpcXHRcXHQucG1kX2VudHJ5ID0gZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnksXFxubW0vZGFtb24vdmFkZHIuYy03NTUtXFx0XFx0LnB0ZV9lbnRyeSA9IE5VTEwsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTc5Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03OTctXFxubW0vZGFtb24vdmFkZHIuYzo3OTg6c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vZGFtb24vdmFkZHIuYy03OTktXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9ODYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04NjYtXFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3OlxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9zdGF0X3BtZF9lbnRyeSxcXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNTo0OS45NzY4NTIyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MDc2OTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzIGluIERBTU9OKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHJldmlld2luZyB0aGUgY29kZSBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYSBidW5jaCBvZiBzdGF0aWMgZnVuY3Rpb25zOiBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGBrZGFtb25kX2luaXRfY3R4YCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIEJ1dCBmdXp6aW5nIHRob3NlIGRpcmVjdGx5IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBlZmZlY3RpdmUgYXBwcm9hY2ggc2luY2UgdGhleSdyZSBzdGF0aWMgYW5kIGxpa2VseSBoYXZlIGxpbWl0ZWQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB3aGljaCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoZXNlIHN0YXRpYyBvbmVzLiBgZGFtb3NfYXBwbHlfc2NoZW1lYCBpcyBjYWxsZWQgYnkgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIFRoZW4sIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgIGFyZSBhbGwgY2FsbGVkIGJ5IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCB0aGF0IG9uZSBpcyBhbHNvIGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIGBrZGFtb25kX2luaXRfY3R4YCBhbHNvIGlzIGNhbGxlZCBieSBga2RhbW9uZF9mbmAsIHNvIGBrZGFtb25kX2ZuYCBsb29rcyBpbnRlcmVzdGluZy4gVGhlIGZ1bmN0aW9ucyBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YCBhcmUgY2FsbGVkIGJ5IGBkYW1vbl9wYV9hcHBseV9zY2hlbWVgIHdoaWNoIGlzIGFzc2lnbmVkIHRvIHRoZSBgY3R4LVx1MDAzZW9wcy5hcHBseV9zY2hlbWVgIGluIGBkYW1vbl9wYV9zZXRfb3BlcmF0aW9uc2AuIEFsc28sIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAgYXJlIHVzZWQgd2l0aGluIHRoZSBgd2Fsa19vcHNgIHN0cnVjdCwgdXNlZCBieSBgZGFtb3NfdmFfbWlncmF0ZWAgYW5kIGBkYW1vc192YV9zdGF0YCwgd2hpY2ggYXJlIGNhbGxlZCBieSBgZGFtb25fdmFfYXBwbHlfc2NoZW1lYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gdGhlIGBjdHgtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZWAgaW4gYGRhbW9uX3ZhX3NldF9vcGVyYXRpb25zYC5cblxuVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGVpciBjYWxsaW5nIHBhdHRlcm5zIGFyZS4gTXkgaW1tZWRpYXRlIHRhcmdldHMgZm9yIGZ1enppbmcgd291bGQgaW5jbHVkZSBga2RhbW9uZF9mbmAsIGBkYW1vbl9wYV9hcHBseV9zY2hlbWVgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3NjaGVtZWAsIHNpbmNlIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3OCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNTo1OC43ODQ1NDgwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyMDI2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfc2V0X29wZXJhdGlvbnN8ZGFtb25fdmFfc2V0X29wZXJhdGlvbnN8ZGFtb25fZG9fYXBwbHlfc2NoZW1lc3xrZGFtb25kX2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXFxubW0vZGFtb24vY29yZS5jOjEwMzY6ICogd2hpbGUgdGhlIGtkYW1vbmQgaXMgbm90IHlldCBzdGFydGVkLCBhbmQgaW5zaWRlIG9mIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNy0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNDAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDQyLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDc0LVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjEwNzU6XFx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwNzYtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxubW0vZGFtb24vY29yZS5jLTE5MjYtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkzNT1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NDItXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTk0MzpcXHRcXHRjdHgtXFx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFxcXCJrZGFtb25kLiVkXFxcIixcXG5tbS9kYW1vbi9jb3JlLmMtMTk0NC1cXHRcXHRcXHRcXHRucl9ydW5uaW5nX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjIwNDQ6XFx0XFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjA0NS1cXHRcXHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjU3Mj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjQyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjQzOnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG5tbS9kYW1vbi9jb3JlLmMtMjY0NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2OTU9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjcwMi1cXG5tbS9kYW1vbi9jb3JlLmM6MjcwMzpcXHRcXHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xcbm1tL2RhbW9uL2NvcmUuYy0yNzA0LVxcdFxcdC8qXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc1MD1zdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzcyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzczOnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzc0LXtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1OTgtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1OTk6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MDAtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjU4Ljg0Nzc1NTY0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc0Mzk4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBEQU1PTiBTZXQgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgbm93LiBUaG9zZSBgZGFtb25fcGFfc2V0X29wZXJhdGlvbnNgIGFuZCBgZGFtb25fdmFfc2V0X29wZXJhdGlvbnNgIHN0cnVjdHVyZXMgYXJlbid0IGRlZmluZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEhtbSwgd2hlcmUgZGlkIEkgcHV0IHRoZW0/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZS4uLiBSaWdodCwgdGhleSdyZSBwcm9iYWJseSBpbiBvbmUgb2YgdGhlIGFkZHJlc3Mtc3BhY2Ugc3BlY2lmaWMgZmlsZXMuIExldCdzIHN0YXJ0IHdpdGggYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIEl0IG1ha2VzIHNlbnNlIHRoZXknZCBiZSBuZWFyIHRoZSBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIGhhbmRsaW5nIGNvZGUuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEknbGwgYmV0IHRoZXkncmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzEwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MDIuMjIyMTU2OTQ5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc4MDc5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfc2V0X29wZXJhdGlvbnN8ZGFtb25fdmFfc2V0X29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjowMi4yNzQ5NDYzNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzc5OTQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIERBTU9OJ3MgQWRkcmVzcyBUcmFuc2xhdGlvbiBGdW5jdGlvbnMqKlxuXG5IbW0sIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLCBJIHJlYWxseSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0J3MgZXhwb3NlZCwgYW5kIHdoYXQncyAqbm90KiBpbiBEQU1PTidzIGFkZHJlc3MgdHJhbnNsYXRpb24gY29yZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgZmlsZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBwb3RlbnRpYWxseSB1c2VkIGV4dGVybmFsbHksIG9yLCBpZiBub3RoaW5nIGVsc2UsIHdoYXQgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBUaGF0IHdpbGwgaW5mb3JtIG15IG5leHQgc3RlcHMgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBEQU1PTiBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRoYXQgYmFzZWxpbmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU4MywiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjA2LjA4Mjc0ODQ5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc3NjcwOTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGRhbW9uX3BhX3xeaW50IGRhbW9uX3BhX3xedm9pZCBkYW1vbl92YV98XmludCBkYW1vbl92YV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjowNi4xNzA1MjQwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjY3MjQ2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZpc2liaWxpdHkgSXNzdWVzIGluIERBTU9OIENvZGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vZGFtb24vcGFkZHIuY2AgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHN1Z2dlc3RzIGEgcG9zc2libGUgc2NvcGUgaXNzdWUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IG1lYW50IHRvIGJlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSBvciBhcmUgdGhleSBsZWFraW5nIHVuaW50ZW5kZWQgYWNjZXNzIHBvaW50cywgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleeKAmXJlIG5vdCBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgaXMgbGlrZWx5IGFuIGluaXRpYWwgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBhcmUgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGV4dGVybmFsIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSByZWZhY3RvcmluZyBpcyBuZWVkZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTEsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjoxMC44Mzc3NzM5OTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTAyNTM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBkYW1vbl9wYV9bYS16QS1aMC05X10qXFxcXCh8XlthLXpBLVpfXVthLXpBLVowLTlfXSogZGFtb25fdmFfW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MTAuOTI1ODg1MTk5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTc4OTkxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIGFyZSBteSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRXh0ZXJuYWwgRnVuY3Rpb24gRXhwb3N1cmUgaW4gYG1tL2RhbW9uL3BhZGRyLmNgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgZ29pbmcgdGhyb3VnaCBteSBjaGVja2xpc3QuIFdlIG5lZWQgdG8gYXVkaXQgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBhbnkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRoYXQgYXJlICpub3QqIHN0YXRpYy4gVGhlIGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSAqb3V0c2lkZSogdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGVzZSBhcmUgdGhlIG9uZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBwb3RlbnRpYWxseSwgZGVwZW5kaW5nIG9uIGNvbnRleHQsIHVzZXIgc3BhY2UgaWYgdGhlcmUncyBzb21lIGtpbmQgb2YgaW50ZXJmYWNlIGV4cG9zdXJlIGdvaW5nIG9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgaW4gdGVybXMgb2YgbW9kdWxlIGludGVyLWRlcGVuZGVuY2llcywgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYW5kIG9mIGNvdXJzZSwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGF0IGVhY2ggZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyIGl0cyBwdXJwb3NlIGFuZCB0aGUgbGlrZWxpaG9vZCBvZiBpdCBiZWluZyB1c2VkIG91dHNpZGUgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTc4LCJPdXRwdXRUb2tlbnMiOjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MTUuMDQzNzg2NDA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzgxODkyOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3BhZGRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjE1LjEzNzYxMTk5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU5MjkzODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEZWJ1Z2dpbmcgTXkgUmVnZXggaW4gYG1tL2RhbW9uL3BhZGRyLmNgKipcblxuQWxyaWdodCwgbXkgcmVnZXggYXR0ZW1wdCBpbiBgbW0vZGFtb24vcGFkZHIuY2AgY2xlYXJseSBpc24ndCBjYXB0dXJpbmcgdGhlIHJpZ2h0IGluZm9ybWF0aW9uLiBJdCdzIG5vdCB3b3JraW5nIGFzIGludGVuZGVkLiBSYXRoZXIgdGhhbiBzcGVuZCBtb3JlIHRpbWUgdHJ5aW5nIHRvIHJlZmluZSBpdCBqdXN0IHlldCwgSSdsbCBzd2l0Y2ggZ2VhcnMgdG8gYSBtb3JlIGRpcmVjdCBhcHByb2FjaC4gTGV0J3MgY3V0IHRocm91Z2ggdGhlIG5vaXNlLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcGAuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGluIGBtbS9kYW1vbi9wYWRkci5jYC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGBncmVwYCBmb3IgdGhlIHRlbGwtdGFsZSBzaWducyBvZiBleHBvcnRlZCBzeW1ib2xzLCBzaW5jZSB0aGF0J3Mgd2hhdCBJIGFtIHRyeWluZyB0byBpZGVudGlmeS4gSSdsbCBzZWFyY2ggZm9yIGVpdGhlciBgRVhQT1JUX1NZTUJPTGAgb3IganVzdCB0aGUgYHZvaWQgYCBkZWNsYXJhdGlvbnMuIEJvdGggc2hvdWxkIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIGNhbmRpZGF0ZXMgdG8gdGhvc2UgdGhhdCBhcmUgcHVibGljbHkgZXhwb3NlZCwgb3IgYXQgbGVhc3QgdmlzaWJsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGp1bXBpbmctb2ZmIHBvaW50IGZvciBmdXJ0aGVyIGFuYWx5c2lzLCBzYXZpbmcgbWUgdGltZSBhbmQgdW5uZWNlc3NhcnkgaGVhZC1zY3JhdGNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjE5Ljc5NjkxMDg1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTg1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTHx2b2lkIGRhbW9uX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9wYWRkci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3BhZGRyLmM9MjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zNy1cXG5tbS9kYW1vbi9wYWRkci5jOjM4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtMzkte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00OT1zdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTU2LVxcbm1tL2RhbW9uL3BhZGRyLmM6NTc6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9wYWRkci5jLTU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MTkuODUzODM1ODA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTgzNzc1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipQZWVyaW5nIGludG8gcGFkZHIuYzogV2hhdCdzIFB1YmxpY2x5IEFjY2Vzc2libGU/KipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBtbS9kYW1vbi9wYWRkci5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGlkZW50aWZ5aW5nIGl0cyBwdWJsaWMgaW50ZXJmYWNlIOKAkyB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBEQU1PTiBleHBvc2VzIG9yIG1ha2VzIGF2YWlsYWJsZSBnbG9iYWxseSwgYW5kIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBjYW4gbGV2ZXJhZ2UuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHdoYXQgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIEknbGwgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMsIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGFueSBjcml0aWNhbCBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHVzZWQgZWxzZXdoZXJlLiBVbmRlcnN0YW5kaW5nIHdoYXQncyBleHBvcnRlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBvdmVyYWxsIHJvbGUgYW5kIGRlc2lnbiB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBsb29raW5nIGZvciB0aGUga2V5IHByaW1pdGl2ZXMgdGhhdCBtYW5hZ2UsIG1hbmlwdWxhdGUsIG9yIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgYWRkcmVzc2VzIChwYWRkcnMpIHNwZWNpZmljYWxseS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IG9mZmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDAxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MjMuODUyMjE1Nzg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI5NjcyOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmJvb2wgfF5pbnQgfF52b2lkIHxedW5zaWduZWQgbG9uZyB8XnN0cnVjdCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcGFkZHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MjMuOTI1NTIxNjc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzA3ODI0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIFNjYW4gb2YgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBFeHBvcnRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBjdXQgdG8gdGhlIGNoYXNlLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgc29tZSBqdWljeSBsaXR0bGUgaGVscGVyIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vcGFkZHIuY2AgdGhhdCBhcmUgZXhwb3J0ZWQuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSB3YWRpbmcgdGhyb3VnaCB0aGUgZW50aXJlIGZpbGUgaW5pdGlhbGx5LiBUaGUgZW5kIG9mIHRoZSBmaWxlIGlzIHVzdWFsbHkgd2hlcmUgeW91J2xsIGZpbmQgdGhlIGludGVyZmFjZSwgdGhlIGZ1bmN0aW9ucyBtZWFudCBmb3IgZXh0ZXJuYWwgdXNlLiBJJ2xsIGp1c3QganVtcCBzdHJhaWdodCB0byB0aGUgdGFpbCBlbmQgb2YgYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGFzIGJlaW5nIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgYSBjbGVhciBpbmRpY2F0aW9uIG9mIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBiZXlvbmQgdGhpcyBtb2R1bGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI2OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjI3LjQ1NjMwNzUwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MzkzMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5ib29sIHxeaW50IHxedm9pZCB8XnVuc2lnbmVkIGxvbmcgfF5zdHJ1Y3QgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3BhZGRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjI3LjU0Mzk1Mzg4MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYxNjU4MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmVmaW5pbmcgTXkgQXBwcm9hY2ggdG8gSWRlbnRpZnlpbmcgdGhlIFJlbGV2YW50IENvZGUqKlxuXG5IbW0sIHRoYXQgaW5pdGlhbCByZWdleCBJIGNyYWZ0ZWQsIHRoZSBvbmUgYW5jaG9yZWQgd2l0aCBgXmAsIGlzIGxpa2VseSB0b28gYnJpdHRsZS4gSXQncyBhc3N1bWluZyBhIHZlcnkgc3BlY2lmaWMgbGluZSBzdHJ1Y3R1cmUsIGFuZCB0aGUgcHJlc2VuY2Ugb2YgbGVhZGluZyBzcGFjZXMgb3Igb3RoZXIgY2hhcmFjdGVycyBvbiB0aGUgc2FtZSBsaW5lIHdvdWxkIGJyZWFrIGl0LiBNeSBwcmlvciBhcHByb2FjaCBhc3N1bWVkIHRoYXQgY29kZSB3b3VsZCBiZSB0aGUgZmlyc3QgdGhpbmcgb24gdGhlIGxpbmUsIGJ1dCB0aGF0J3Mgbm90IGFsd2F5cyBhIHZhbGlkIGFzc3VtcHRpb24uIFRoZSBwcm9ibGVtIHNwYWNlIHJlcXVpcmVzIGEgbW9yZSByb2J1c3QgbWV0aG9kIG9mIHNlYXJjaC5cblxuSSBuZWVkIHNvbWV0aGluZyB0aGF0IGlzIG1vcmUgZmxleGlibGUuIEEgc2ltcGxlIGBncmVwYCBmb3IgYGRhbW9uX3BhX3NldF9vcGVyYXRpb25zYCAob3IgYSBzaW1pbGFyIHJlbGV2YW50IGZ1bmN0aW9uIG9yIHN5bWJvbCBuYW1lKSwgaXMgcHJvYmFibHkgbW9yZSBlZmZpY2llbnQgYW5kIGxlc3MgcHJvbmUgdG8gZmFsc2UgbmVnYXRpdmVzIGR1ZSB0byBtaW5vciBsaW5lIHZhcmlhdGlvbnMuIFRoYXQncyBhIG11Y2ggbW9yZSBlbGVnYW50IHNvbHV0aW9uIGZvciBxdWlja2x5IHBpbnBvaW50aW5nIHRoZSByZWxldmFudCBjb2RlIHNlZ21lbnRzLiBJdCdzIGEgcHJhZ21hdGljIHNoaWZ0IGluIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjMxLjcwNTYxNTE5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NDc0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3BhZGRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcGFkZHIuYy0xOC1cXG5tbS9kYW1vbi9wYWRkci5jOjE5OnN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy0yMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNC1cXG5tbS9kYW1vbi9wYWRkci5jOjI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcXG5tbS9kYW1vbi9wYWRkci5jLTI2LVxcdFxcdHBoeXNfYWRkcl90IHBhLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzctXFxubW0vZGFtb24vcGFkZHIuYzozODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDgtXFxubW0vZGFtb24vcGFkZHIuYzo0OTpzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy01MC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTUzLVxcbm1tL2RhbW9uL3BhZGRyLmM6NTQ6XFx0ZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsIGN0eC1cXHUwMDNlYWRkcl91bml0KSk7XFxubW0vZGFtb24vcGFkZHIuYy01NS19XFxubW0vZGFtb24vcGFkZHIuYy01Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjU3OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy01OC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTYzLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxcbm1tL2RhbW9uL3BhZGRyLmM6NjQ6XFx0XFx0XFx0X19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhyLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNjUtXFx0fVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy02Ny1cXG5tbS9kYW1vbi9wYWRkci5jOjY4OnN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy04MC1cXG5tbS9kYW1vbi9wYWRkci5jOjgxOnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy04Mi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtODQtXFx0Ym9vbCBhY2Nlc3NlZDtcXG5tbS9kYW1vbi9wYWRkci5jOjg1OlxcdHBoeXNfYWRkcl90IHNhbXBsaW5nX2FkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy04Ni1cXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODctXFxubW0vZGFtb24vcGFkZHIuYzo4ODpcXHRhY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODktXFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBhY2Nlc3NlZCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTkxLVxcbm1tL2RhbW9uL3BhZGRyLmM6OTI6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy05My17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTk5LVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxMDA6XFx0XFx0XFx0X19kYW1vbl9wYV9jaGVja19hY2Nlc3MociwgY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTAxLVxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTA4OnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxubW0vZGFtb24vcGFkZHIuYy0xMDktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQwLVxcbm1tL2RhbW9uL3BhZGRyLmM6MTQxOnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQ3LVxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cXHRcXHRcXHRwYXNzID0gZi1cXHUwMDNlYWxsb3c7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE1Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjE1NzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0xNTgtXFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3My1cXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTc0OlxcdFxcdFxcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzctXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxubW0vZGFtb24vcGFkZHIuYy0xNzktXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjE5LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTIyMS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNDQtXFxubW0vZGFtb24vcGFkZHIuYzoyNDU6XFx0YWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jOjI0NjpcXHR3aGlsZSAoYWRkciBcXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI0Ny1cXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYzoyNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yNDktXFx0XFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3NC1cXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi9wYWRkci5jOjI3NTpcXHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYy0yNzYtfVxcbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jLTI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg1LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjg2OlxcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYzoyODc6XFx0d2hpbGUgKGFkZHIgXFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yODgtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg5OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjkwLVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMDgtXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxubW0vZGFtb24vcGFkZHIuYzozMDk6XFx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzEwLX1cXG5tbS9kYW1vbi9wYWRkci5jLTMxMS1cXG5tbS9kYW1vbi9wYWRkci5jOjMxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzEzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XFxubW0vZGFtb24vcGFkZHIuYzozMTY6XFx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zMTctfVxcbm1tL2RhbW9uL3BhZGRyLmMtMzE4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MzE5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTMyMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlxcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XFxubW0vZGFtb24vcGFkZHIuYy0zMjUtXFxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMzMy1cXG5tbS9kYW1vbi9wYWRkci5jOjMzNDpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM1OlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU4LVxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzU5OlxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTM2MC19XFxubW0vZGFtb24vcGFkZHIuYy0zNjEtXFxubW0vZGFtb24vcGFkZHIuYzozNjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM3MS1cXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjM3NTpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTM3Ni1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzg4LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mzg5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0zOTAtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzk2LVxcdGNhc2UgREFNT1NfUEFHRU9VVDpcXG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcXHRcXHRyZXR1cm4gZGFtb25fcGFfcGFnZW91dChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cXHRjYXNlIERBTU9TX0xSVV9QUklPOlxcbm1tL2RhbW9uL3BhZGRyLmM6Mzk5OlxcdFxcdHJldHVybiBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAwLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDAxLVxcdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcXG5tbS9kYW1vbi9wYWRkci5jOjQwMjpcXHRcXHRyZXR1cm4gZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAzLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MDUtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxubW0vZGFtb24vcGFkZHIuYzo0MDY6XFx0XFx0cmV0dXJuIGRhbW9uX3BhX21pZ3JhdGUociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy00MDctXFx0Y2FzZSBEQU1PU19TVEFUOlxcbm1tL2RhbW9uL3BhZGRyLmM6NDA4OlxcdFxcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDA5LVxcdGRlZmF1bHQ6XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQxNS1cXG5tbS9kYW1vbi9wYWRkci5jOjQxNjpzdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbm1tL2RhbW9uL3BhZGRyLmMtNDE3LVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MzYtXFxubW0vZGFtb24vcGFkZHIuYzo0Mzc6c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG5tbS9kYW1vbi9wYWRkci5jLTQzOC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ0Mi1cXHRcXHQudXBkYXRlID0gTlVMTCxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0MzpcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0OlxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NDYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxubW0vZGFtb24vcGFkZHIuYzo0NDc6XFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0ODpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3BhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi9wYWRkci5jLTQ0OS1cXHR9O1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NTMtXFxubW0vZGFtb24vcGFkZHIuYzo0NTQ6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3BhX2luaXRjYWxsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MzEuNzU4MzY4NzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNDA1MzkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBNb2R1bGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZS4gSXQgbG9va3MgbGlrZSBgZGFtb25fcGFfaW5pdGNhbGxgIGlzIHRoZSBrZXkgZm9yIGluaXRpYWxpemluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgZGFtb25fcmVnaXN0ZXJfb3BzYCBhbmQgdGhlIGBwYV9vcHNgIHN0cnVjdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBjb3VudGVycGFydCBpbiBgbW0vZGFtb24vdmFkZHIuY2AgZm9sbG93cyBhIHNpbWlsYXIgcGF0dGVybiwgcmVnaXN0ZXJpbmcgaXRzIG93biBzZXQgb2Ygb3BlcmF0aW9ucy5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEZyb20gYSBxdWljayBzY2FuIG9mIGBtbS9kYW1vbi9jb3JlLmNgLCBJIGNhbiBzZWUgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb25zOiBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3N0b3BgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBgZGFtb25fbmV3X2N0eGAsIGFuZCBgZGFtb25fZGVzdHJveV9jdHhgLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IGFueSBleHRlcm5hbCBjb21wb25lbnQgd2lsbCBiZSB1c2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBEQU1PTiBjb3JlLlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICp1c2VkKi4gSSdsbCBjaGVjayBgbW0vZGFtb24vc3lzZnMuY2AgdG8gc2VlIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIHRpZXMgaW50byBhbGwgdGhpcy4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGlkZWEgb2YgaG93IHVzZXJzcGFjZSBjb25maWd1cmVzIGFuZCBjb250cm9scyBEQU1PTi4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gdGhlc2UgY29yZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBzeXNmcyBhdHRyaWJ1dGUgaGFuZGxpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Nzg1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjM2LjY2MjQyNTkwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NzYyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnR8ZGFtb25fc2V0X2F0dHJzfGRhbW9uX3NldF9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0xOTEzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkzMi1cXHR9O1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTkzMzpcXHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXFx1MDAyNmF0dHJzKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5MzQtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjQzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Ny1cXHR9XFxubW0vZGFtb24vc3lzZnMuYzoyMjY4OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIGZhbHNlKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyNjktXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjozNi43NDUxMDYwMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNDQ5NzA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUsIGtlZXBpbmcgaW4gbWluZCBteSBkZWVwIGRpdmUgaW50byB0aGlzIHN5c3RlbS5cblxuKipEYW1vbiBBY3RpdmF0aW9uIGFuZCBBdHRyaWJ1dGUgU2V0dGluZyAtIEEgUXVpY2sgTWVudGFsIE1hcCoqXG5cblJpZ2h0LCBzbyBgZGFtb25fc3RhcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGtpY2tzIERBTU9OIGludG8gZ2VhciwgYW5kIHRoYXQncyB0cmlnZ2VyZWQgZnJvbSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGFzIGV4cGVjdGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgaG93IHVzZXJzcGFjZSBjb250cm9scyB0aGUga2VybmVsIG1vZHVsZS4gQW5kIHNpbWlsYXJseSwgYGRhbW9uX3NldF9hdHRyc2AgaXMgdGhlIG1lY2hhbmlzbSBmb3Igc2V0dGluZyB0aGUgbW9uaXRvcmluZyBhdHRyaWJ1dGVzLCBhbmQgdGhhdCdzIG5hdHVyYWxseSBjYWxsZWQgYnkgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIGV2ZXJ5dGhpbmc7IFdoYXQgYWJvdXQgYGRhbW9uX3NldF9zY2hlbWVzYCB0aG91Z2g/IFRoYXQncyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIHVzZXMgdGhhdCB0byBlc3RhYmxpc2ggbW9uaXRvcmluZyBzY2hlbWVzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHRvIGJlIHN1cmUgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgd2hvbGUgZmxvdy4gSSdsbCBpbnZlc3RpZ2F0ZSB3aGF0J3MgY2FsbGluZyB0aGF0IGFuZCB3aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0MC41Njk2MDgyMDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDYzMzY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0MC42NTE2NzcxMDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzMzU5NjQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyBgbW0vZGFtb24vc3lzZnMuY2AgYW5kIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyBpdHMgc2NoZW1lczpcblxuKipBbmFseXppbmcgdGhlIERhbW9uIHN5c2ZzIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NoZW1lcyBhcmUgZGVmaW5lZCBhbmQgbWFuYWdlZCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgYXJjaGl0ZWN0dXJlIG9mIERhbW9uJ3Mgc3lzZnMgaW50ZXJmYWNlIGZvciBpdHMgc2NoZW1lIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJ4oCZbGwgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgb2YgdGhlIGNvZGUg4oCTIGxpa2VseSBmdW5jdGlvbnMgaGFuZGxpbmcgYXR0cmlidXRlIGNyZWF0aW9uLCBzZXR0aW5nLCBhbmQgcmV0cmlldmFsIHJlbGF0ZWQgdG8gRGFtb24ncyBzY2hlbWVzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIHNjaGVtZXMgd2l0aGluIHRoZSBzeXNmcyBoaWVyYXJjaHkuIEFyZSB0aGV5IHVzaW5nIHN0YW5kYXJkIHN5c2ZzIGF0dHJpYnV0ZSB0eXBlcyAobGlrZSBgc3RydWN0IGtvYmpfYXR0cmlidXRlYCkgb3Igc29tZXRoaW5nIGN1c3RvbT9cblxuTXkgaW5pdGlhbCBxdWVzdGlvbnMgd2lsbCBiZTpcblxuKiAgIEhvdyBhcmUgbmV3IHNjaGVtZXMgYWRkZWQgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzP1xuKiAgIFdoYXQncyB0aGUgbGlmZWN5Y2xlIG9mIGEgc2NoZW1lIG9iamVjdCB3aXRoaW4gc3lzZnMgKGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIGRlbGV0aW9uKT9cbiogICBIb3cgYXJlIHBhcmFtZXRlcnMgZm9yIGVhY2ggc2NoZW1lIGV4cG9zZWQgdmlhIHN5c2ZzIGF0dHJpYnV0ZXM/IEFyZSB0aGV5IHByaW1pdGl2ZSB0eXBlcywgb3IgbW9yZSBjb21wbGV4IHN0cnVjdHVyZXMgc2VyaWFsaXplZCBmb3IgdGhlIHVzZXI/XG4qICAgSG93IGlzIHRoZSBjb25zaXN0ZW5jeSBhbmQgdmFsaWRpdHkgb2Ygc2NoZW1lIGNvbmZpZ3VyYXRpb25zIGVuZm9yY2VkIHdpdGhpbiBzeXNmcz8gQW55IHNhbml0eSBjaGVja3MgaW1wbGVtZW50ZWQ/XG4qICAgSG93IGRvZXMgdGhlIHN5c2ZzIGludGVyZmFjZSBpbnRlcmFjdCB3aXRoIERhbW9uJ3MgY29yZSBmdW5jdGlvbmFsaXR5IHRvIGFwcGx5IHRoZSBkZWZpbmVkIHNjaGVtZXM/IEFyZSB0aGVyZSBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIGFjdGlvbnMgYmFzZWQgb24gYXR0cmlidXRlIGNoYW5nZXM/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0gdmlhIHN5c2ZzIHRvIGNvbmZpZ3VyZSB0aGVzZSBzY2hlbWVzLCB0aGVuIGZpZ3VyZSBvdXQgaG93IHRoYXQgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIERhbW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRpb25zLCB0aGVpciBhY2Nlc3MgbWV0aG9kcywgYW5kIGRhdGEgdHlwZXMgd2lsbCBiZSBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSdtIHRyYWNpbmcgdGhlIHBhdGggZnJvbSB1c2VyIGlucHV0IHRocm91Z2ggc3lzZnMgdG8gRGFtb24ncyBpbnRlcm5hbCBsb2dpYy4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGNvbXBhcmUgdGhpcyBpbnRlcmZhY2Ugd2l0aCBleGlzdGluZyBiZXN0IHByYWN0aWNlcyBhbmQgc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG90aGVyIHN5c2ZzIGludGVyZmFjZXMgSSd2ZSB3b3JrZWQgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NTYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0NS42ODUyNzcyMDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTEwMDY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfc2NoZW1lc3xkYW1vbl9zeXNmc19zZXRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0NS43NDkzOTI4MDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMDg3OTU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBBY2Nlc3MgTW9uaXRvciAoYGRhbW9zYCkgSW50ZWdyYXRpb24gaW4gdGhlIFN5c3RlbSBGaWxlIFN5c3RlbSAoYHN5c2ZzYCkqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBtbS9kYW1vbi9zeXNmcy5jYC4gSSdtIHN1c3BlY3RpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmFjdGlvbiBvciBpbnRlZ3JhdGlvbiBnb2luZyBvbiBoZXJlLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBcImRhbW9zXCIgY29uY2VwdCDigJMgcHJlc3VtYWJseSBhIERhdGEgQWNjZXNzIE1vbml0b3IsIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzIHNjaGVtZS4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHZlcmlmeSB0aGlzIGludGVncmF0aW9uIGlzIHByZXNlbnQgYW5kIGZ1bmN0aW9uYWwsIHVuZGVyc3RhbmQgaG93IGEgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBpcyBkb25lLCBvciBkZXRlcm1pbmUgaWYgaXQgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQuIEnigJlsbCBzZWFyY2ggZGlyZWN0bHkgZm9yIHRoZSB0ZXJtIOKAnGRhbW9zLOKAnSBidXQgSSBhbHNvIG5lZWQgdG8gYmUgZmxleGlibGUuIFRoZSBjb2RlIG1pZ2h0IHJlZmVyIHRvIHRoZSBjb25jZXB0IHZpYSBhIG1vcmUgZ2VuZXJpYyB0ZXJtLiBTbywgSSdsbCBhbHNvIHJ1biBhIHNlYXJjaCBmb3IgXCJzY2hlbWUsXCIgYXMgdGhlIGFjY2VzcyBtb25pdG9yaW5nIGJlaGF2aW9yIGNvdWxkIGJlIGRlc2NyaWJlZCBhcyBhIHNwZWNpZmljIHNjaGVtZSBvciBtZXRob2QsIGV2ZW4gaWYgXCJkYW1vc1wiIGlzbid0IGV4cGxpY2l0bHkgdXNlZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBkYW1vbiBvciBhbm90aGVyIHJlbGF0ZWQgbWVtb3J5IG1vbml0b3Jpbmcgc3lzdGVtIGNvdWxkIGJlIGltcGxlbWVudGVkIHZpYSBzeXNmcywgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZmFjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6NDkuNTUwMjc0NzE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTM4Mzg5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfc2V0X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0OS42NDU2Njc2NzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MzQ1MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB0aGluZy4gSXQgc2VlbXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkgZnJvbSB0aGUgbmFtZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIGEgc3lzZnMgaW50ZXJmYWNlLiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggZW5hYmxpbmcgREFNT04gbW9uaXRvcmluZyB0aHJvdWdoIHRoZSBgc3lzZnNgIGZpbGVzeXN0ZW0sIHByb3ZpZGluZyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGl0IGZpdHMgaW4gdGhlIGxpZmVjeWNsZTogd2hlcmUgaXMgaXQgY2FsbGVkIGZyb20/IElzIGl0IHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB0aGUgY29udHJvbCBwYXRoLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgaXQgY2hlY2tzLCBvciByZXNvdXJjZXMgaXQgYWNxdWlyZXMvcmVsZWFzZXM/IERvZXMgaXQgc2ltcGx5IHNldCBhIGZsYWcsIG9yIGRvZXMgaXQgdHJpZ2dlciBtb3JlIGNvbXBsZXggYWN0aW9ucyBsaWtlIHN0YXJ0aW5nIG1vbml0b3JpbmcgdGhyZWFkcywgc2V0dGluZyB1cCBtb25pdG9yaW5nIGNvbnRleHRzLCBvciBpbnRlZ3JhdGluZyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBJIGFsc28gd2FudCB0byBmaW5kIG91dCB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiB0YWtlcyBhbmQgc2VlIGlmIHRoZSBmdW5jdGlvbiBkb2VzIGFueSBlcnJvciBjaGVja2luZyBvciBlcnJvciBoYW5kbGluZy5cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhdCBhIGhpZ2ggbGV2ZWwsIGFuZCB0aGVuIHRvIGludmVzdGlnYXRlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGl0IG1pZ2h0IGhhdmUgd2l0aCBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eSBvciBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGNvbnRlbnRpb24sIHRoYXQgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGlmIEkgd2VyZSwgZm9yIGV4YW1wbGUsIGRlYnVnZ2luZyBhIERBTU9OLXJlbGF0ZWQgaXNzdWUgb3IgaWYgSSBuZWVkZWQgdG8gd29yayB3aXRoIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW4gYW5vdGhlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjUzLjgyOTEyMDUyMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjQwOlxcdFxcdHJldHVybiAwO1xcbjIyNDE6XFx0fVxcbjIyNDI6XFx0XFxuMjI0MzpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI0NDpcXHR7XFxuMjI0NTpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMjI0NjpcXHRcXHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpyZXBlYXRfY2FsbF9jb250cm9sO1xcbjIyNDc6XFx0XFx0aW50IGVycjtcXG4yMjQ4OlxcdFxcbjIyNDk6XFx0XFx0aWYgKGRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcXG4yMjUwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjI1MTpcXHRcXHQvKiBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXFxuMjI1MjpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjI1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG4yMjU2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCk7XFxuMjI1NzpcXHRcXHRrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggPSBOVUxMO1xcbjIyNTg6XFx0XFxuMjI1OTpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sID0ga21hbGxvY19vYmooKnJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNjA6XFx0XFx0aWYgKCFyZXBlYXRfY2FsbF9jb250cm9sKVxcbjIyNjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI2MjpcXHRcXG4yMjYzOlxcdFxcdGN0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcXG4yMjY0OlxcdFxcdGlmIChJU19FUlIoY3R4KSkge1xcbjIyNjU6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI2NjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjdHgpO1xcbjIyNjc6XFx0XFx0fVxcbjIyNjg6XFx0XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbjIyNjk6XFx0XFx0aWYgKGVycikge1xcbjIyNzA6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI3MTpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbjIyNzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMjczOlxcdFxcdH1cXG4yMjc0OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4yMjc1OlxcdFxcbjIyNzY6XFx0XFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XFxuMjI3NzpcXHRcXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4yMjc4OlxcdFxcbjIyNzk6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcXG4yMjgwOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbjIyODE6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcXG4yMjgzOlxcdFxcdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXFxuMjI4NDpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg1OlxcdFxcdHJldHVybiBlcnI7XFxuMjI4NjpcXHR9XFxuMjI4NzpcXHRcXG4yMjg4OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjUzLjgyOTI5Njk1MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxNTg4NzM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YCBDb250ZXh0IEJ1aWxkaW5nKipcblxuQWxyaWdodCwgc28gYGRhbW9uX3N5c2ZzX2J1aWxkX2N0eGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGNvbnRleHQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBpbnZvbHZlZCBpbiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byBkaXZlIGludG8gd2hhdCBmdW5jdGlvbnMgaXQncyBjYWxsaW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gS25vd2luZyB0aGUgY2FsbHMgaXQgbWFrZXMgcHJvdmlkZXMgdGhlIGJyZWFkY3J1bWJzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIGNvbnRleHQgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCBzeXN0ZW0gd2lsbCBvcGVyYXRlIG92ZXJhbGwuIEknbGwgbmVlZCB0byBmb2xsb3cgaXRzIGV4ZWN1dGlvbiBwYXRoIHRvIGdyYXNwIHRoZSBzdWJ0bGV0aWVzIG9mIGl0cyBpbnRlcmFjdGlvbnMuIFdoZXJlIGRvZXMgaXQgcHVsbCBpbmZvcm1hdGlvbiBmcm9tLCB3aGVyZSBkb2VzIGl0IHN0b3JlIGl0LCBhbmQgd2hpY2ggb3RoZXIgY29tcG9uZW50cyBkb2VzIGl0IHRvdWNoPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MjguNjQ1MTg3MTA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM5MTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19idWlsZF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTIxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjEyMjpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMy1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqc3lzX2N0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIxMzE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE0Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjIxNDM6XFx0cGFyYW1fY3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0pO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjE0NC1cXHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIxODg9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxOTktXFxubW0vZGFtb24vc3lzZnMuYzoyMjAwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxubW0vZGFtb24vc3lzZnMuYy0yMjAxLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjQzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjIyNjM6XFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0pO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2NC1cXHRpZiAoSVNfRVJSKGN0eCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MjguNzMwNTgzNjI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDE1Mjg5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19idWlsZF9jdHhgKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YC4gSSBzZWUgdGhlIGNhbGwgZm9yIGl0LCB3aGljaCBtZWFucyB3ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgYSBjb250ZXh0IGJ1aWxkaW5nIHByb2Nlc3Mgb2YgYSBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBhcyB0aGUgc3lzZnMgbGF5ZXIgY2FuIHNvbWV0aW1lcyBoaWRlIHRoZSBtb3JlIGludHJpY2F0ZSBkZXRhaWxzIG9mIERBTU9OJ3MgY29yZSBvcGVyYXRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGUga2V5IHBhcmFtZXRlcnMgaXQncyB0YWtpbmcgYW5kIHdoYXQgcGFydCBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUgaXQncyBsaW5raW5nIHVwIHdpdGguIElzIGl0IGNyZWF0aW5nIGEgbmV3IGNvbnRleHQsIG9yIGJ1aWxkaW5nIG9uZSBmb3IgYW4gZXhpc3RpbmcgbW9uaXRvcmluZyBzZXR1cD8gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbCBwcm9iZSBvciBpcyBpdCBtb2RpZnlpbmcgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBjb25maWd1cmF0aW9uPyBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHlwaWNhbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgcm91dGluZSBmaXRzIHdpdGhpbiB0aGUgZ3JlYXRlciBEQU1PTiBhcmNoaXRlY3R1cmUuIEkgd2lsbCBtZW50YWxseSB0cmFjZSB0aGlzIHJvdXRpbmUgdG8gcGlucG9pbnQgdGhlIGFyZWEgb2YgREFNT04gd2hpY2ggaXMgYmVpbmcgbW9kaWZpZWQgb3IgY3JlYXRlZC4gVGhlbiwgSSBjYW4gZm9jdXMgaW4gb24gaXRzIHNwZWNpZmljIHJvbGUgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBuZXcgaW5zdGFuY2UgcmVnaXN0cmF0aW9ucyB3aXRoIHRoZSBzeXNmcyBmaWxlcy4gTGV0J3Mgc2VlIGlmIHRoaXMgY29udGV4dCBidWlsZCBpcyB0aGUgZW50cnlwb2ludCB0byB0aGUgbW9uaXRvciBvciBhIHBhcnQgb2YgdGhlIGludGVybmFsIGNvbmZpZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MuIEdvb2QsIGxldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1OTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozMy4xNzIxMTYwNjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIwMDpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxcbjIyMDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpXFxuMjIwMjpcXHR7XFxuMjIwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuMjIwNDpcXHRcXHRpbnQgZXJyO1xcbjIyMDU6XFx0XFxuMjIwNjpcXHRcXHRpZiAoIWN0eClcXG4yMjA3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjIyMDg6XFx0XFxuMjIwOTpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoY3R4LCBzeXNfY3R4KTtcXG4yMjEwOlxcdFxcdGlmIChlcnIpIHtcXG4yMjExOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMjIxMjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjIyMTM6XFx0XFx0fVxcbjIyMTQ6XFx0XFxuMjIxNTpcXHRcXHRyZXR1cm4gY3R4O1xcbjIyMTY6XFx0fVxcbjIyMTc6XFx0XFxuMjIxODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzO1xcbjIyMTk6XFx0XFxuMjIyMDpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuMjIyMTpcXHR7XFxuMjIyMjpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XFxuMjIyMzpcXHRcXG4yMjI0OlxcdFxcdGlmICghc3lzZnNfa2RhbW9uZC1cXHUwMDNlcmVmcmVzaF9tcylcXG4yMjI1OlxcdFxcdFxcdHJldHVybiAwO1xcbjIyMjY6XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxcbjIyMjc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIyODpcXHRcXHRkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyArXFxuMjIyOTpcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbjIyMzA6XFx0XFxuMjIzMTpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjIyMzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMzpcXHRcXHRpZiAoc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjIzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjM1OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNjpcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG4yMjM3OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzODpcXHRvdXQ6XFxuMjIzOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozMy4xNzIyNzUwNzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NTU5MjExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AsIGh1aD8gVGhhdCBpbnN0YW50bHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgREFNT04gYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlY2lzZWx5IHRoaXMgZnVuY3Rpb24gKmRvZXMqLiBGcm9tIGl0cyBuYW1lLCBJJ20gaW5mZXJyaW5nIGl0J3MgcmVsYXRlZCB0byBhcHBseWluZyBpbnB1dHMsIHByb2JhYmx5IGNvbmZpZ3VyYXRpb25zIG9yIGNvbW1hbmRzLCB2aWEgdGhlIHN5c2ZzIGZpbGVzeXN0ZW0gd2l0aGluIHRoZSBEeW5hbWljIEFkZHJlc3MgTW9uaXRvcmluZyAoREFNT04pIGZyYW1ld29yay5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0aGUgcG90ZW50aWFsIGZvciBkaWZmZXJlbnQgaW5wdXQgdHlwZXMuIElzIGl0IGhhbmRsaW5nIG1vbml0b3IgY29uZmlndXJhdGlvbnM/IENvbnRyb2wgY29tbWFuZHMgbGlrZSBlbmFibGluZy9kaXNhYmxpbmcgYSBtb25pdG9yLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGZvY3VzZWQgb24gZmlsdGVyaW5nIG9yIHJlZ2lvbiBtb2RpZmljYXRpb25zIHdpdGhpbiBhIHJ1bm5pbmcgREFNT04gaW5zdGFuY2U/IFRoZSBcImFwcGx5XCIgcGFydCBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciB0YWtpbmcgdGhlc2Ugc3lzZnMtcHJvdmlkZWQgaW5wdXRzIGFuZCBpbnRlZ3JhdGluZyB0aGVtIGludG8gdGhlIERBTU9OIG9wZXJhdGlvbi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gQXJlIHRoZXJlIHNwZWNpZmljIHN0cnVjdHMgZm9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IHRoaXMgZnVuY3Rpb24gcmVhZHMgZnJvbSBzeXNmcz8gSSBiZXQgdGhlcmUncyBzb21lIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gaGFwcGVuaW5nIGhlcmUg4oCTIGVycm9yIGhhbmRsaW5nIHdvdWxkIGJlIGNyaXRpY2FsLiBJdCdzIGxpa2VseSBjaGVja2luZyBmb3IgdmFsaWQgcmFuZ2VzLCBjb3JyZWN0IHN5bnRheCwgYW5kIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGlucHV0cy4gV2hhdCBhYm91dCBhdG9taWNpdHk/IERvZXMgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGJlIHRocmVhZC1zYWZlIG9yIHdvcmsgdW5kZXIgYSBsb2NrPyBJZiBpdCBjaGFuZ2VzIGxpdmUgZGF0YSBpdCBpcyBwcm9iYWJseS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIERBTU9OIGNvbXBvbmVudHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMuIFdoYXQgaGFwcGVucyBpZiB0aGUgaW5wdXRzIGFyZSB2YWxpZD8gSG93IGFyZSBjaGFuZ2VzIHJlZmxlY3RlZCBpbiB0aGUgREFNT04gbW9uaXRvciBzdGF0ZT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEdvdHRhIGZpZ3VyZSBvdXQgdGhlICd3aHknIGJlaGluZCB0aGUgJ3doYXQnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MzcuODY3ODcxMjI4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwOTQ6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbjIwOTU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpXFxuMjA5NjpcXHR7XFxuMjA5NzpcXHRcXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XFxuMjA5ODpcXHRcXHRpbnQgZXJyO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRvcHNfaWQgPSBSRUFEX09OQ0Uoc3lzX2N0eC1cXHUwMDNlb3BzX2lkKTtcXG4yMTAxOlxcdFxcdGVyciA9IGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBvcHNfaWQpO1xcbjIxMDI6XFx0XFx0aWYgKGVycilcXG4yMTAzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjEwNDpcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCA9IFJFQURfT05DRShzeXNfY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbjIxMDU6XFx0XFx0LyogYWRkcl91bml0IGlzIHJlc3BlY3RlZCBieSBvbmx5IERBTU9OX09QU19QQUREUiAqL1xcbjIxMDY6XFx0XFx0aWYgKG9wc19pZCA9PSBEQU1PTl9PUFNfUEFERFIpXFxuMjEwNzpcXHRcXHRcXHRjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoXFxuMjEwODpcXHRcXHRcXHRcXHRcXHREQU1PTl9NSU5fUkVHSU9OX1NaIC8gY3R4LVxcdTAwM2VhZGRyX3VuaXQsIDEpO1xcbjIxMDk6XFx0XFx0Y3R4LVxcdTAwM2VwYXVzZSA9IHN5c19jdHgtXFx1MDAzZXBhdXNlO1xcbjIxMTA6XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMpO1xcbjIxMTE6XFx0XFx0aWYgKGVycilcXG4yMTEyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjExMzpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMtXFx1MDAzZXByb2Jlcyk7XFxuMjExNDpcXHRcXHRpZiAoZXJyKVxcbjIxMTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE2OlxcdFxcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cXHUwMDNldGFyZ2V0cyk7XFxuMjExNzpcXHRcXHRpZiAoZXJyKVxcbjIxMTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE5OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhjdHgsIHN5c19jdHgtXFx1MDAzZXNjaGVtZXMpO1xcbjIxMjA6XFx0fVxcbjIxMjE6XFx0XFxuMjEyMjpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxcbjIxMjM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozNy44NjgwNTIzMjhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1ODI3MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHN5c3RlbSBpbnRlcm5hbHM6XG5cbioqQ2hlY2tpbmcgdGhlIERBTU9OIFNjaGVtZSBTZXR1cCoqXG5cbkhtbSwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYOKApiB0aGF0IHJpbmdzIGEgYmVsbC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIGFkZGluZyBzY2hlbWVzIGV2ZW50dWFsbHkgZnVubmVscyBkb3duIHRvIHRoZSBjb3JlIHNldHVwIGZ1bmN0aW9uLiBUaGUgcXVlc3Rpb24gSSd2ZSBnb3QgaXMsIGRvZXMgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBkaXJlY3RseSBpbnZva2UgYGRhbW9uX3NldF9zY2hlbWVzYD8gSSdtIHByZXR0eSBzdXJlIGl0IHNob3VsZC4gQnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjcml0aWNhbCBjb250cm9sIHBhdGhzLiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdWJ0bGUgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBsYXllci4gTGV0J3MgdHJhY2UgdGhhdCBjYWxsIHN0YWNrIHF1aWNrbHkgYW5kIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTg3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzo0Mi4wMjYzMjc5MzZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTE4NjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTgtXFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTk6XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6NDIuMTM1NTIxNTQ1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzQwNDQyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgZ2VhcnMgYXJlIHN0YXJ0aW5nIHRvIHR1cm4sIHRoZSBuYW1lIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXMgYm91bmNpbmcgYXJvdW5kLiBJbnN0YW50bHksIEknbSB0aGlua2luZywgdGhpcyBsaWtlbHkgcGVydGFpbnMgdG8gdGhlIER5bmFtaWMgQWRkcmVzcyBNb25pdG9yaW5nIChEQU1PTikgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIHZpYSB0aGUgc3lzZnMgZmlsZXN5c3RlbS4gVGhlIFwiYWRkX3NjaGVtZXNcIiBwYXJ0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGNvbmZpZ3VyYXRpb247IHdlJ3JlIGRlYWxpbmcgd2l0aCAqZGVmaW5pbmcqIG1vbml0b3Jpbmcgc2NoZW1lcywgcmlnaHQ/IEknbSBwaWN0dXJpbmcgdGhlIHByb2Nlc3M6IGxpa2VseSBjcmVhdGluZyBlbnRyaWVzLCBhdHRyaWJ1dGVzLCBwZXJoYXBzIHNldHRpbmcgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHJlZ2lvbnMgb3IgcHJvY2Vzc2VzIHRoYXQgd2Ugd2FudCBEQU1PTiB0byB0cmFjay4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIGFib3V0IHNldHRpbmcgbW9uaXRvcmluZyAqdGFyZ2V0cyosIHRoZSByZWdpb25zIHRvIG1vbml0b3IsIG9yIHBlcmhhcHMgaG93IHRoZSBtb25pdG9yaW5nIGl0c2VsZiB3b3Jrcy4gSXMgdGhpcyBhYm91dCBhZGRpbmcgbmV3IG1vbml0b3JpbmcgdHlwZXMsIG9yIG1vZGlmeWluZyBleGlzdGluZyBvbmVzPyBJJ20gaG9waW5nIGZvciBhIGNsZWFuIGludGVyZmFjZSwgcm9idXN0IGVycm9yIGhhbmRsaW5n4oCmIGtub3dpbmcgaG93IERBTU9OJ3MgZXZvbHZlZCwgdGhhdOKAmXMgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBvbmUgY2FuIGhvcGUhIEknbSBwaWN0dXJpbmcgaXQgaW4gdGhlIHN5c2ZzIGhpZXJhcmNoeS4gV2hlcmUgaXMgaXQgbG9jYXRlZCwgaG93IGlzIHRoZSBkYXRhIHN0cnVjdHVyZWQsIGhvdyB3aWxsIHRoaXMgaW50ZXJmYWNlIHBsYXkgbmljZSB3aXRoIHRoZSBleGlzdGluZyBtb25pdG9yaW5nIGFuZCBEQU1PTiBjb25maWd1cmF0aW9uLiBOZWVkIHRvIGdldCB0aGUgc3BlY2lmaWNzLCBhbmQgdGhlbiBkZXRlcm1pbmUgaG93IGl0IHdpbGwgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGNvdWxkIGJlIHNpZ25pZmljYW50LiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyB0aGUga2V5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzo0Ni44Njk1Njk3OTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODcyMjUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM3OjQ2LjkzNzQ0ODQ0M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgxNzQwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2VhcmNoIGZvciBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLiBJJ20gY3VyaW91cyBhYm91dCB3aGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSByZWxhdGVzIHRvIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgc3VzcGVjdCBpdCdzIHByb2JhYmx5IHBhcnQgb2YgYSBsYXJnZXIgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGltcGxlbWVudGF0aW9uLCBnaXZlbiB0aGUgXCJkYW1vblwiIHByZWZpeCBhbmQgdGhlIFwic3lzZnNcIiBjb21wb25lbnQgc3VnZ2VzdHMgaW50ZXJhY3Rpb24gdGhyb3VnaCB0aGUgc3lzZnMgZmlsZSBzeXN0ZW0gaW50ZXJmYWNlLiBUaGUgXCJhZGRfc2NoZW1lc1wiIHBhcnQgaW1wbGllcyBpdCdzIGludm9sdmVkIGluIGRlZmluaW5nIG9yIHJlZ2lzdGVyaW5nIG1vbml0b3Jpbmcgc2NoZW1lcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgc29tZSBpbml0aWFsIHJlc3VsdHMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgSSdsbCB0aGVuIGxpa2VseSBzdGFydCBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdyBvZiB0aGUgREFNT04gc3Vic3lzdGVtLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgcmVsYXRlZCB0byBzZXR0aW5nIHVwIG1vbml0b3JpbmcgcnVsZXMsIGNvbmZpZ3VyaW5nIGRpZmZlcmVudCBEQU1PTiBwcm9maWxlcywgb3IgcGVyaGFwcyBkZWZpbmluZyBjdXN0b20gZGF0YSBjb2xsZWN0aW9uIHN0cmF0ZWdpZXMuIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzo1Mi4wMTkxOTIxMjhaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzQyMTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTgtXFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTk6XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6NTIuMTMyNjE4MTY2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY0MTUwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqV2hlcmUncyBUaGF0IEZ1bmN0aW9uIEhpZGluZz8qKlxuXG5Pa2F5LCBJJ20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEkndmUgaGl0IGEgc25hZy4gSSdtIGxvb2tpbmcgYXQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYnV0IG15IG1lbnRhbCBtYXAgb2YgdGhlIHByb2plY3QgaXNuJ3QgaW1tZWRpYXRlbHkgcGxhY2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQuIEkga25vdyBEQU1PTiBpcyB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciwgYW5kIEknbSBmYW1pbGlhciB3aXRoIGl0cyBzeXNmcyBpbnRlcmZhY2VzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGFkZGluZyB0aGVzZSBzY2hlbWVzIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBwcm9qZWN0J3Mgc3RydWN0dXJlLiBJcyB0aGlzIGluIHRoZSBjb3JlIERBTU9OIGNvZGUsIGEgdXRpbGl0eSBsaWJyYXJ5LCBvciBwZXJoYXBzIGEgbW9kdWxlIHJlbGF0ZWQgdG8gc3lzZnMgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIG92ZXJhbGwgYmVoYXZpb3Igd2l0aGluIHRoZSBzY2hlbWUgY3JlYXRpb24gZmxvdy4gV2l0aG91dCB0aGF0LCBJJ20gc3R1Y2ssIGFuZCBmdXJ0aGVyIGFuYWx5c2lzIGlzIG9uIGhvbGQuIExldCdzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Nzg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6NTYuMjc5MDM2MDM1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzY0OTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ0OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDUtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vc3lzZnMuYzoyMTE5OlxcdHJldHVybiBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhjdHgsIHN5c19jdHgtXFx1MDAzZXNjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM3OjU2LjM0NjY5MDM4NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTYzNTQ0OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIHRoZSBEQU1PTiBTeXN0ZW0gRmlsZXMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvZGUgcmVsYXRlZCB0byBhZGRpbmcgc2NoZW1lcyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gVGhlIHBhdGggSSdtIGxvb2tpbmcgYXQsIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBpbW1lZGlhdGVseSBtYWtlcyBzZW5zZS4gVGhhdCdzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIGZvciBzeXNmcyBpbnRlcmZhY2UgaGFuZGxpbmcgZm9yIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWVzLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgcmVnaXN0ZXJpbmcgb3IgbWFraW5nIGFjY2Vzc2libGUgdGhlIGRpZmZlcmVudCBEQU1PTiBzY2hlbWVzIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCBob3cgdGhlIHNjaGVtZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJJ2xsIGZvY3VzIG9uIGhvdyBlYWNoIHNjaGVtZSBpcyBpbnRlZ3JhdGVkLCB3aGF0IGF0dHJpYnV0ZXMgYXJlIGNyZWF0ZWQgZm9yIGVhY2gsIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIERBTU9OIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjAwLjkxMDIzODQ3NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzM5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNDQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNDQ6XFx0aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4zMDQ1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbjMwNDY6XFx0e1xcbjMwNDc6XFx0XFx0aW50IGk7XFxuMzA0ODpcXHRcXG4zMDQ5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNmc19zY2hlbWVzLVxcdTAwM2VucjsgaSsrKSB7XFxuMzA1MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgKm5leHQ7XFxuMzA1MTpcXHRcXG4zMDUyOlxcdFxcdFxcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltpXSk7XFxuMzA1MzpcXHRcXHRcXHRpZiAoIXNjaGVtZSkge1xcbjMwNTQ6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lX3NhZmUoc2NoZW1lLCBuZXh0LCBjdHgpXFxuMzA1NTpcXHRcXHRcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3NjaGVtZShzY2hlbWUpO1xcbjMwNTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzA1NzpcXHRcXHRcXHR9XFxuMzA1ODpcXHRcXHRcXHRkYW1vbl9hZGRfc2NoZW1lKGN0eCwgc2NoZW1lKTtcXG4zMDU5OlxcdFxcdH1cXG4zMDYwOlxcdFxcdHJldHVybiAwO1xcbjMwNjE6XFx0fVxcbjMwNjI6XFx0XFxuMzA2MzpcXHR2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODowMC45MTA4MTUwNDZaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4MTg0MzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIENoYW5nZXMgUmVsYXRlZCB0byBgZGFtb25fYWRkX3NjaGVtZWAqKlxuXG5Pa2F5LCBzbyBgZGFtb25fYWRkX3NjaGVtZWAgaGFzIGJlZW4gdHJpZ2dlcmVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBEQU1PTiBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0aXZlIGR1cmluZyBzY2hlbWUgYXBwbGljYXRpb24uIE15IGluaXRpYWwgc2NhbiBzaG93cyBtb2RpZmljYXRpb25zIHRvIGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgYGtkYW1vbmRfaW5pdF9jdHhgLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gVGhlc2UgYXJlIGFsbCBjb3JlIERBTU9OIGZ1bmN0aW9ucywgZGVhbGluZyB3aXRoIG1lbW9yeSB1c2FnZSwgcGFnZW91dCwgbWlncmF0aW9uLCBhbmQgc3RhdGlzdGljcyBnYXRoZXJpbmfigJRlc3NlbnRpYWxseSwgdGhlIGhlYXJ0IG9mIERBTU9OJ3Mgb3BlcmF0aW9uIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLlxuXG5UaGUgd2F5IHRvIGdldCB0byB0aGVzZSBmdW5jdGlvbnMgd291bGQgYmUgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBvciB2aWEgYGRhbW9uX3JlY2xhaW1gIGFuZCBgZGFtb25fbHJ1X3NvcnRgLiBTaW5jZSBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIHRoYXQgdGhpcyBwYXRjaCByZXByZXNlbnRzLCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgZGVmaW5lZC4gVGhpcyBuYXJyb3dzIG15IGZvY3VzLCB3aGljaCBpcyBoZWxwZnVsLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHM/IFRoZSBtb3N0IHJlbGV2YW50IG9uZXMgYXBwZWFyIHRvIGJlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCwgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgLCBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCwgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAsIGFuZCBgZGFtb25fc3lzZnNfY21kX3JlcXVlc3Rfc3RvcmVgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29udHJvbCBwb2ludHMgZm9yIGFkZGluZywgY29uZmlndXJpbmcsIGFuZCB0cmlnZ2VyaW5nIHRoZSBzY2hlbWUgY2hhbmdlcy5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGNvZGUgZm9yIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgZm9jdXMgb24gaG93IGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdF9zdG9yZWAgaXMgaW1wbGVtZW50ZWQuIFRoYXQncyB0aGUgYmVzdCBlbnRyeSBwb2ludCBmb3IgaG93IHRoaXMgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDA5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MDguMTkyNjYyMDg4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzM0NTk5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfY21kX3JlcXVlc3Rfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MDguMjU2MDE3NTc3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDk4ODE4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBsaW5lcyBvZiBjb2RlOlxuXG4qKkFuYWx5emluZyBgbW0vZGFtb24vc3lzZnMuY2AgZm9yIFN0b3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9kYW1vbi9zeXNmcy5jYCBiZWNhdXNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCBEQU1PTiwgYW5kIHNwZWNpZmljYWxseSwgaG93IGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBzZXQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggdGhlIGBzdG9yZWAgZnVuY3Rpb25zLiBUaGV5J3JlIHRoZSBjcml0aWNhbCBwaWVjZXMsIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBoYW5kbGUgaW5jb21pbmcgZGF0YSBmcm9tIHN5c2ZzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1vZGlmaWVkLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IERBTU9OJ3MgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGZ1bmN0aW9ucyB3aXRoIG5hbWVzIGxpa2UgYGRhbW9uX2F0dHJfc2V0X3h4eGAgb3Igc2ltaWxhciwgZWFjaCBvbmUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgc3lzZnMgYXR0cmlidXRlIGV4cG9zZWQgZm9yIGNvbmZpZ3VyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBkYXRhIHZhbGlkYXRpb24gb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucywgYXMgdGhhdCdzIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0LiBJbiBteSBtaW5kJ3MgZXllIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ3JlcCB0byBmaW5kIGFsbCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MTMuMDY1OTAzMzA2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM1MDc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfc3RvcmVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjY9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0zNC1cXG5tbS9kYW1vbi9zeXNmcy5jOjM1OnN0YXRpYyBzc2l6ZV90IHN0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0zNi1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDU9c3RhdGljIHNzaXplX3QgZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNTMtXFxubW0vZGFtb24vc3lzZnMuYzo1NDpzdGF0aWMgc3NpemVfdCBlbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTU1LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNTU9c3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjMtXFxubW0vZGFtb24vc3lzZnMuYzoxNjQ6c3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NS1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDY9c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTQtXFxubW0vZGFtb24vc3lzZnMuYzoyNTU6c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTI1Ni1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNjc9c3RhdGljIHNzaXplX3Qgb2Jzb2xldGVfdGFyZ2V0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjI3NjpzdGF0aWMgc3NpemVfdCBvYnNvbGV0ZV90YXJnZXRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0yNzctXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MzkwPXN0YXRpYyBzc2l6ZV90IG5yX3RhcmdldHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMzk4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mzk5OnN0YXRpYyBzc2l6ZV90IG5yX3RhcmdldHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy00MDAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDcxPXN0YXRpYyBzc2l6ZV90IGFjY2Vzc19icF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy00NzktXFxubW0vZGFtb24vc3lzZnMuYzo0ODA6c3RhdGljIHNzaXplX3QgYWNjZXNzX2JwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNDgxLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTQ5NT1zdGF0aWMgc3NpemVfdCBhZ2dyc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy01MDMtXFxubW0vZGFtb24vc3lzZnMuYzo1MDQ6c3RhdGljIHNzaXplX3QgYWdncnNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy01MDUtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NTE5PXN0YXRpYyBzc2l6ZV90IG1pbl9zYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNTI3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6NTI4OnN0YXRpYyBzc2l6ZV90IG1pbl9zYW1wbGVfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy01MjktXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NTQzPXN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNTUxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6NTUyOnN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy01NTMtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NjUzPXN0YXRpYyBzc2l6ZV90IHNhbXBsZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy02NjEtXFxubW0vZGFtb24vc3lzZnMuYzo2NjI6c3RhdGljIHNzaXplX3Qgc2FtcGxlX3VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNjYzLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTY3Nz1zdGF0aWMgc3NpemVfdCBhZ2dyX3VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNjg1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Njg2OnN0YXRpYyBzc2l6ZV90IGFnZ3JfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTY4Ny1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzAxPXN0YXRpYyBzc2l6ZV90IHVwZGF0ZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03MDktXFxubW0vZGFtb24vc3lzZnMuYzo3MTA6c3RhdGljIHNzaXplX3QgdXBkYXRlX3VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNzExLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTc4Nz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTgwMy1cXG5tbS9kYW1vbi9zeXNmcy5jOjgwNDpzdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtODA1LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgyNT1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy04MzMtXFxubW0vZGFtb24vc3lzZnMuYzo4MzQ6c3RhdGljIHNzaXplX3QgbWF0Y2hpbmdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy04MzUtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9ODQ5PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTg1Ny1cXG5tbS9kYW1vbi9zeXNmcy5jOjg1ODpzdGF0aWMgc3NpemVfdCBhbGxvd19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTg1OS1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz04NzM9c3RhdGljIHNzaXplX3QgcGF0aF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy04ODYtXFxubW0vZGFtb24vc3lzZnMuYzo4ODc6c3RhdGljIHNzaXplX3QgcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTg4OC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMDEwPXN0YXRpYyBzc2l6ZV90IG5yX2ZpbHRlcnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTAxOC1cXG5tbS9kYW1vbi9zeXNmcy5jOjEwMTk6c3RhdGljIHNzaXplX3QgbnJfZmlsdGVyc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTEwMjAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTEwND1zdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTExMzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0xMTE0LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEyMjA9c3RhdGljIHNzaXplX3QgbnJfcHJvYmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEyMjgtXFxubW0vZGFtb24vc3lzZnMuYzoxMjI5OnN0YXRpYyBzc2l6ZV90IG5yX3Byb2Jlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTEyMzAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTUzNj1zdGF0aWMgc3NpemVfdCBvcGVyYXRpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE1NTItXFxubW0vZGFtb24vc3lzZnMuYzoxNTUzOnN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0xNTU0LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE1NzI9c3RhdGljIHNzaXplX3QgYWRkcl91bml0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE1ODAtXFxubW0vZGFtb24vc3lzZnMuYzoxNTgxOnN0YXRpYyBzc2l6ZV90IGFkZHJfdW5pdF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTE1ODItXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTU5OD1zdGF0aWMgc3NpemVfdCBwYXVzZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2MDYtXFxubW0vZGFtb24vc3lzZnMuYzoxNjA3OnN0YXRpYyBzc2l6ZV90IHBhdXNlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0xNjA4LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzMwPXN0YXRpYyBzc2l6ZV90IG5yX2NvbnRleHRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE3MzgtXFxubW0vZGFtb24vc3lzZnMuYzoxNzM5OnN0YXRpYyBzc2l6ZV90IG5yX2NvbnRleHRzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc0MC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjg4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTUtXFx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4IGluIG5leHRcXG5tbS9kYW1vbi9zeXNmcy5jOjIyOTY6XFx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXFxubW0vZGFtb24vc3lzZnMuYy0yMjk3LVxcdCAqL1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzY0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDMtXFxubW0vZGFtb24vc3lzZnMuYzoyNDA0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0yNDA1LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDQ4PXN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQ1Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjI0NTc6c3RhdGljIHNzaXplX3QgcmVmcmVzaF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTI0NTgtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjU5Nz1zdGF0aWMgc3NpemVfdCBucl9rZGFtb25kc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNjA1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjYwNjpzdGF0aWMgc3NpemVfdCBucl9rZGFtb25kc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTI2MDctXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MTMuMTMyMjU4MDA1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NjAwNjg0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbW1hbmQgSGFuZGxlcioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNvbW1hbmRzLiBNeSBtZW50YWwgbW9kZWwgc2F5cyB0aGF0IGBzdGF0ZV9zdG9yZWAgaXMgdGhlIGNlbnRyYWwgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjb21tYW5kIHByb2Nlc3NpbmcsIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgcGFydCBvZiBpdC4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gTGV0J3MgZGlnIGludG8gYHN0YXRlX3N0b3JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXJjaGl0ZWN0dXJlLCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgaW5jb21pbmcgY29tbWFuZHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIGlucHV0IHByb2Nlc3NpbmcuIEkgYmV0IEkgY2FuIGlkZW50aWZ5IGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgcXVpY2tseSBieSBleGFtaW5pbmcgaG93IGl0IGRpc3BhdGNoZXMgdG8gaW50ZXJuYWwgcHJvY2Vzc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjM3LjczMjk0NTc0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MDQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MDQ6XFx0c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4yNDA1OlxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjI0MDY6XFx0e1xcbjI0MDc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBjb250YWluZXJfb2Yoa29iaixcXG4yNDA4OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kLCBrb2JqKTtcXG4yNDA5OlxcdFxcdGVudW0gZGFtb25fc3lzZnNfY21kIGNtZDtcXG4yNDEwOlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4yNDExOlxcdFxcbjI0MTI6XFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG4yNDEzOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjQxNDpcXHRcXHRmb3IgKGNtZCA9IDA7IGNtZCBcXHUwMDNjIE5SX0RBTU9OX1NZU0ZTX0NNRFM7IGNtZCsrKSB7XFxuMjQxNTpcXHRcXHRcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBkYW1vbl9zeXNmc19jbWRfc3Ryc1tjbWRdKSkge1xcbjI0MTY6XFx0XFx0XFx0XFx0cmV0ID0gZGFtb25fc3lzZnNfaGFuZGxlX2NtZChjbWQsIGtkYW1vbmQpO1xcbjI0MTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQxODpcXHRcXHRcXHR9XFxuMjQxOTpcXHRcXHR9XFxuMjQyMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjI0MjE6XFx0XFx0aWYgKCFyZXQpXFxuMjQyMjpcXHRcXHRcXHRyZXQgPSBjb3VudDtcXG4yNDIzOlxcdFxcdHJldHVybiByZXQ7XFxuMjQyNDpcXHR9XFxuMjQyNTpcXHRcXG4yNDI2OlxcdHN0YXRpYyBzc2l6ZV90IHBpZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjI0Mjc6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuMjQyODpcXHR7XFxuMjQyOTpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbjI0MzA6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xcbjI0MzE6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbjI0MzI6XFx0XFx0aW50IHBpZCA9IC0xO1xcbjI0MzM6XFx0XFxuMjQzNDpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjI0MzU6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNDM2OlxcdFxcdGN0eCA9IGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eDtcXG4yNDM3OlxcdFxcdGlmICghY3R4KVxcbjI0Mzg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQzOTpcXHRcXG4yNDQwOlxcdFxcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XFxuMjQ0MTpcXHRcXHRpZiAocGlkIFxcdTAwM2MgMClcXG4yNDQyOlxcdFxcdFxcdHBpZCA9IC0xO1xcbjI0NDM6XFx0b3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODozNy43MzMwODAzWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTE3MTExNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbW1hbmQgSGFuZGxpbmcgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRg4oCmIHRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgaXNuJ3QgaXQ/IFRoYXQncyAqdGhlKiBmdW5jdGlvbiB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgdGhlc2UgREFNT04gc3lzZnMgaW50ZXJhY3Rpb25zLiBFdmVyeXRoaW5nIHdlJ3JlIGRvaW5nLCBhbGwgdGhlIHNldHVwLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUga25vYnMgd2UndmUgY3JlYXRlZCBpbiB0aGUgc3lzZnMgaGllcmFyY2h5IOKAkyB0aGV5IGFsbCBjdWxtaW5hdGUgaGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGNvbW1hbmRzIGFyZSAqaW50ZXJwcmV0ZWQqIGFuZCAqZXhlY3V0ZWQqLiBJIG5lZWQgdG8gYmUgcmF6b3Itc2hhcnAgYWJvdXQgdGhpcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjb21tYW5kcyBhcmUgd2UgdGFsa2luZyBhYm91dD8gU2V0dGluZyBtb25pdG9yaW5nIHJlZ2lvbnM/IE1vZGlmeWluZyBzYW1wbGluZyBwYXJhbWV0ZXJzPyBUcmlnZ2VyaW5nIG1hbnVhbCB1cGRhdGVzPyBQcm9iYWJseSBhbGwgb2YgdGhlIGFib3ZlLCBhbmQgbW9yZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBtYXNzaXZlIHN3aXRjaCBzdGF0ZW1lbnQgb3IgYSBzZXJpZXMgb2YgY29uZGl0aW9uYWwgYnJhbmNoZXMsIGVhY2ggaGFuZGxpbmcgYSBzcGVjaWZpYyBjb21tYW5kIGNvZGUgb3Igc3RyaW5nIGlkZW50aWZpZXIuIFRoZSByb2J1c3RuZXNzIG9mIHRoaXMgZW50aXJlIHN5c3RlbSBoaW5nZXMgb24gdGhlIHRob3JvdWdobmVzcyBvZiB0aGUgY29tbWFuZCBwYXJzaW5nIGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGFzc29jaWF0ZWQgYWN0aW9ucy5cblxuSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSBpbnRlcnByZXRzIHVzZXIgaW5wdXQsIGRlYWxzIHdpdGggYW55IHBvdGVudGlhbCBlcnJvcnMgbGlrZSBpbnZhbGlkIGFyZ3VtZW50cywgb3IgY29tbWFuZHMgdGhhdCBhcmUgYXR0ZW1wdGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBub3QgaW4gYSB2YWxpZCBzdGF0ZS4gVGhpbmsgYWJvdXQgdGhlIGVkZ2UgY2FzZXMuIFRoaW5rIGFib3V0IHNlY3VyaXR5LiBJcyB0aGVyZSBhIHBvdGVudGlhbCBmb3IgY29tbWFuZCBpbmplY3Rpb24gb3Igb3RoZXIgbWFsaWNpb3VzIG1hbmlwdWxhdGlvbiBoZXJlPyBHb3R0YSBiZSBvbiBoaWdoIGFsZXJ0IGZvciB0aG9zZSBwb3NzaWJpbGl0aWVzLiBJIHdhbnQgdG8gZW5zdXJlIGV2ZXJ5IGNvbW1hbmQgaXMgdmFsaWRhdGVkLiBJcyB0aGUgZXhlY3V0aW9uIHRocmVhZCBzYWZlLCBvciBkb2VzIGl0IGNhbGwgZXh0ZXJuYWwgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBsb2NraW5nPyBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIGl0IHdpdGggbXkgZXllcyBjbG9zZWQuXG5cbkluIG15IG1pbmQsIGEgd2VsbC1kZXNpZ25lZCBjb21tYW5kIGhhbmRsZXIgc2hvdWxkIG1pbmltaXplIHRoZSBhbW91bnQgb2YgaW50ZXJuYWwgc3RhdGUgaXQgbW9kaWZpZXMgZGlyZWN0bHksIGVzcGVjaWFsbHkgZ2xvYmFsIHN0YXRlLiBJZGVhbGx5LCBpdCBzaG91bGQgYWJzdHJhY3QgbW9zdCBvZiB0aGUgaGVhdnkgbGlmdGluZyBvdXQgaW50byBsb3dlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdGVzdGVkIGluZGVwZW5kZW50bHkuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo0Mi44MjQ3OTQ3OTRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2NDpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbjIzNjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjM2NjpcXHR7XFxuMjM2NzpcXHRcXHRpZiAoY21kICE9IERBTU9OX1NZU0ZTX0NNRF9PRkYgXFx1MDAyNlxcdTAwMjYga2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjM2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzY5OlxcdFxcbjIzNzA6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4yMzcxOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxcbjIzNzI6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XFxuMjM3MzpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XFxuMjM3NDpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoa2RhbW9uZCk7XFxuMjM3NTpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVQ6XFxuMjM3NjpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzc3OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XFxuMjM3ODpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG4yMzc5OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbjIzODA6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXFxuMjM4MTpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzgyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxcbjIzODM6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxuMjM4NDpcXHRcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XFxuMjM4NTpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19UUklFRF9CWVRFUzpcXG4yMzg2OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIHRydWUpO1xcbjIzODc6XFx0XFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzg4OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIGZhbHNlKTtcXG4yMzg5OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzkwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuMjM5MTpcXHRcXHRcXHRcXHRrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzKTtcXG4yMzkyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxuMjM5MzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk0OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuMjM5NTpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzk2OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxuMjM5NzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk4OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcbjIzOTk6XFx0XFx0ZGVmYXVsdDpcXG4yNDAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0MDE6XFx0XFx0fVxcbjI0MDI6XFx0fVxcbjI0MDM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjQyLjgyNDk3ODgxNFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzY3NTA0MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBTeXNmcyBFbnRyeSBQb2ludHMgYW5kIFBhdGNoIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGludG8gdGhpcyBEQU1PTiBzeXNmcyBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSBgc3RhdGVfc3RvcmVgIGFuZCBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAgYXJlIGRlZmluaXRlbHkgY2VudHJhbC4gSSBhbHNvIHNlZSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBXaGF0IGFib3V0IGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgPyBOZWVkIHRvIHRyYWNrIHRoYXQgZG93biBhcyB3ZWxsLlxuXG5MZXQncyBtYWtlIGEgbGlzdCB0byBrZWVwIHRyYWNrOlxuKiAgIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYFxuKiAgIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgXG4qICAgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgXG4qICAgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYFxuKiAgIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgXG4qICAgYGRhbW9uX3N5c2ZzX2J1aWxkX2N0eGBcblxuUmlnaHQsIG5vdyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIGFjdHVhbGx5IGxvY2F0ZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEltcG9ydGFudCB0byBub3RlIHRoYXQsIGFzIEkgd2FzIG9yaWdpbmFsbHkgZXhwZWN0aW5nIGl0IHRvIGJlIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gTGV0J3MgY29uZmlybSBxdWlja2x5IGlmIGFueSBvdGhlciBzeXNmcyBmaWxlcyBhcmUgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4uLiBOb3BlLCBvbmx5IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuXG5cblRoZSBwYXRjaCBub3RlcyBtZW50aW9uIGEgd2hvbGUgYnVuY2ggb2YgYnVnIGZpeGVzIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGBrZGFtb25kX2luaXRfY3R4YCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGlzIHN0YXRpYy4gQW5kIGBzdGF0ZV9zdG9yZWAgaXMgYWxzbyBzdGF0aWMuIEFyZSB0aGVyZSBldmVuICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9zeXNmcy5jYD8gR290dGEgZmlndXJlIHRoaXMgb3V0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY5MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjUxLjE5MjQ4NzA4WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI3NDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHxedm9pZCB8XnN0cnVjdCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTY6c3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiB7XFxubW0vZGFtb24vc3lzZnMuYy0xNy1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz04Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19yZWdpb25fa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTkxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTI6c3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbnMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMC1cXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTIxMi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0zMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0X2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0zMTctXFxubW0vZGFtb24vc3lzZnMuYzozMTg6c3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMzE5LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy00NDUtXFxubW0vZGFtb24vc3lzZnMuYzo0NDY6c3RydWN0IGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTYwMi1cXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTYwNC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03NTYtXFxubW0vZGFtb24vc3lzZnMuYzo3NTc6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciB7XFxubW0vZGFtb24vc3lzZnMuYy03NTgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzY1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyICpkYW1vbl9zeXNmc19maWx0ZXJfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNzY5LVxcbm1tL2RhbW9uL3N5c2ZzLmM6NzcwOnN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJfdHlwZV9uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTc3MS1cXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTkzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTk0Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjk0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XFxubW0vZGFtb24vc3lzZnMuYy05NDgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTA1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMDY1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTA2NjpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTA2Ny1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTQ2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTE0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTExNDgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTI2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEyNzUtXFxubW0vZGFtb24vc3lzZnMuYzoxMjc2OnN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyB7XFxubW0vZGFtb24vc3lzZnMuYy0xMjc3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEzNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYXR0cnNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEzODEtXFxubW0vZGFtb24vc3lzZnMuYzoxMzgyOnN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMuYy0xMzgzLVxcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNDAxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTQwMjpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCB7XFxubW0vZGFtb24vc3lzZnMuYy0xNDAzLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1Ny1cXG5tbS9kYW1vbi9zeXNmcy5jOjE2NTg6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NTktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTc3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19jb250ZXh0c19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc4Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjE3ODc6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTc4OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzAxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZGFtb25fY2FsbChpbnQgKCpmbikodm9pZCAqZGF0YSksXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTQtXFxubW0vZGFtb24vc3lzZnMuYzoyMzE1OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzX3dhbGtfZGF0YSB7XFxubW0vZGFtb24vc3lzZnMuYy0yMzE2LVxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MDgtXFxubW0vZGFtb24vc3lzZnMuYzoyNTA5OnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyB7XFxubW0vZGFtb24vc3lzZnMuYy0yNTEwLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI2NTMtXFxubW0vZGFtb24vc3lzZnMuYzoyNjU0OnN0cnVjdCBkYW1vbl9zeXNmc191aV9kaXIge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1NS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo1MS4yNDg3NjkxMTlaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMDg4NTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFN5c2ZzIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGV2ZXJ5dGhpbmcgc2VlbXMgcHJldHR5IGxvY2tlZCBkb3duIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgZ2V0dGluZyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSWYgZXZlcnl0aGluZyBpbiB0aGF0IGZpbGUgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHN1Z2dlc3RzIHRob3NlIGZ1bmN0aW9ucyBhcmUgb25seSBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHNwZWNpZmljIG1vZHVsZS4gSSdkIGJldHRlciBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIG91dCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBwdWJsaWMgZW50cnkgcG9pbnRzLCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEknbSBiZXR0aW5nIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBhbmQgcGFyYW1ldGVyIGRlZmluaXRpb24gYXJlIGhhbmRsZWQgdGhlcmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo1NS4xNDk2NTgxNjFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNzU0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgfF52b2lkIHxec3RydWN0IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NzpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUwOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTc6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk4LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzY2OnN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2Ny1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMwLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NTEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU1MjpzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU1My1cXHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9ODgyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODkxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4OTI6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODkzLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTAxMD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDIwOnN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAyMS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMjk9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICpkYW1vbl9zeXNmc193YXRlcm1hcmtzX2FsbG9jKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwNDY6c3RydWN0IGRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA0Ny1cXHRlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWM7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE2LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyND1zdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjI5OnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzAtXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0NDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDUwOnN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NzA6c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTcxLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193ZWlnaHRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2ODA6c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODA0PXN0YXRpYyBzc2l6ZV90IGVmZmVjdGl2ZV9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MTItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTM6c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODE0LVxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB0dW5lcjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTU0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTU1OnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5NTYtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTYyPXN0YXRpY1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTYzOnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2NC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDUwOnN0cnVjdCBkYW1vc19zeXNmc19kZXN0IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1MS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMTk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI5OnN0cnVjdCBkYW1vc19zeXNmc19kZXN0cyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMzAtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX2Rlc3RzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyNTA6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNTEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjY1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjY2OnN0cnVjdCBkYW1vc19zeXNmc19hY3Rpb25fbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNjctXFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NzktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODA6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4MS17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4NTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4Ni17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTI5OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzAtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ1LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjM6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2NC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAwLSAqL1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTAxOnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE0ODppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ5LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo1NS4yNDM0MTk5MDlaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEyMzU4NDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkV4YW1pbmluZyBEQU1PTidzIHN5c2ZzIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIERBTU9OIHN5c2ZzIGZ1bmN0aW9uczogYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXNgLCBgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHNgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gVGhleSdyZSBhbGwgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0IGZvciBzeXNmcyBlbnRyeSBwb2ludHMuIFRoZXkgbmVlZCB0byBiZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwncyBzeXNmcyBpbmZyYXN0cnVjdHVyZS5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgKnN0YXRpYyo/IFRoYXQncyBhIGJpdCB1bnVzdWFsLiBUaGlzIGltcGxpZXMgaXQncyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHN5c2ZzIGNvZGUsIHdoaWNoIGlzIGZpbmUsIGJ1dCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBOb3BlLCBJJ3ZlIGNoZWNrZWQuIFNlZW1zIGxpa2UgYWxsIG9mIHRob3NlIGxpc3RlZCBhcmUgbm9uLXN0YXRpYyBleGNlcHQgZm9yIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC5cblxuV2FpdCBhIG1pbnV0ZSwgaWYgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoaXMgaGFzIG1lIHRoaW5raW5nLiBJcyBgbW0vZGFtb24vc3lzZnMuY2AgYWN0dWFsbHkgYSBtb2R1bGU/IFRoYXQgd291bGQgZXhwbGFpbiB0aGUgbmVlZCBmb3IgdGhlIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zLCBhbmQgdGhlIHNlZW1pbmdseSBpbnRlcm5hbCBzdGF0aWMgZnVuY3Rpb24gd291bGQgd29yayBhcyB3ZWxsLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBgbW9kdWxlX2luaXRgIG9yIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IHdvdWxkIGRlZmluaXRlbHkgY29uZmlybSB0aGF0IGl0J3MgYSBsb2FkYWJsZSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjA0LjM2NzAwNzQzNFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MzExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdGNhbGx8bW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTI3MDA9c3RhdGljIGludCBfX2luaXQgZGFtb25fc3lzZnNfaW5pdCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzI4LX1cXG5tbS9kYW1vbi9zeXNmcy5jOjI3Mjk6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3N5c2ZzX2luaXQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjczMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6MDQuNDQyOTQzMDkzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDMwODkxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUgSW50ZXJmYWNlKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgbW9kdWxlIG9yIHN1YnN5c3RlbSDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGdvaW5nIHRvIGJlIHRoYXQgc3lzZnMgaW50ZXJmYWNlOyB0aGF0J3Mgb3VyIGVudHJ5IHBvaW50LiBOb3csIHRoZSB0cmljayBpcyB0aGF0IHdlIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoZXkgbmVlZCB0byBiZSBub24tc3RhdGljLiBMZXQncyBzZWUuLi4gd2hhdCBmdW5jdGlvbnMgYXJlIHdlIGxvb2tpbmcgYXQgZm9yIHRoYXQ/IEknbSB0aGlua2luZzpcblxuKiAgIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgLSB5ZXMsIHRoYXQgY291bGQgd29yay5cbiogICBgZGFtb25fc2V0X2F0dHJzYCAtIGFsc28gcHJvbWlzaW5nLlxuKiAgIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zdG9wYCAtIHRob3NlIGFyZSBvYnZpb3VzIGNvbnRyb2wgZnVuY3Rpb25zLlxuKiAgIEFuZCB0aGVyZSdzIHRoaXMgYGRhbW9uX3NldF9zY2hlbWVzYC4uLiB3YWl0Li4uIGFjdHVhbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJc24ndCBgZGFtb25fc2V0X2F0dHJzYCBkZWZpbmVkIHdpdGhpbiB0aGUgY29yZSBpbiBgbW0vZGFtb24vY29yZS5jYD8gXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBjb3JlLmNgIGZpbGUgYW5kIHNlZSB3aGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBoaWRpbmcgaW4gdGhlcmUuIFdlJ2xsIGZpbmQgd2hhdCB3ZSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjAxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozOTowOS42ODYwMzY2NzVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODE2ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl98XmludCBkYW1vbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjgtXFxubW0vZGFtb24vY29yZS5jOjEyOTp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MTM0OnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzgtXFxubW0vZGFtb24vY29yZS5jOjEzOTpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0My1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzQtXFxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc5LVxcbm1tL2RhbW9uL2NvcmUuYzoxODA6c3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTgxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODQtXFxubW0vZGFtb24vY29yZS5jOjE4NTpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTg2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTMtXFxubW0vZGFtb24vY29yZS5jOjE5NDpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTk1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODg9dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzEyLSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjMxMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzE0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTctI2Vsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MzE4OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2RhbW9uL2NvcmUuYy0zMTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOD1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzUzOnN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtMzU0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjEtICovXFxubW0vZGFtb24vY29yZS5jOjM2MjpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0zNjMtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzAtI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmM6MzcxOnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTM3Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc1LSNlbHNlXFxubW0vZGFtb24vY29yZS5jOjM3NjpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy0zNzcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4MC1cXG5tbS9kYW1vbi9jb3JlLmM6MzgxOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtMzgyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODgtXFxubW0vZGFtb24vY29yZS5jOjM4OTpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5My1cXG5tbS9kYW1vbi9jb3JlLmM6Mzk0OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTM5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzctICovXFxubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03MjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTczNC1cXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NDAtXFxubW0vZGFtb24vY29yZS5jOjc0MTpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzQyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NDUtXFxubW0vZGFtb24vY29yZS5jOjc0NjpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTc0Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxcbm1tL2RhbW9uL2NvcmUuYzo3NTE6dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTc1Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzc2PXN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTItXFxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc5OD1ib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgwMi1cXG5tbS9kYW1vbi9jb3JlLmM6ODAzOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtODA0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDctXFxubW0vZGFtb24vY29yZS5jOjgwODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTgwOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODE2LVxcbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTgxOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzEtXFxubW0vZGFtb24vY29yZS5jOjg3MjpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04NzMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTg3OS1cXG5tbS9kYW1vbi9jb3JlLmM6ODgwOnZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTkzMz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTM5LVxcbm1tL2RhbW9uL2NvcmUuYzo5NDA6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtOTQxLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NTktXFxubW0vZGFtb24vY29yZS5jOjk2MDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtOTYxLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05ODktICovXFxubW0vZGFtb24vY29yZS5jOjk5MDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtOTkxLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDQ4OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVxcdFxcdFxcdHNzaXplX3QgbnJfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTYxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTg3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNTg4OnN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTE1ODktXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZmFpbGVkLCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTYwND1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NjgtXFxubW0vZGFtb24vY29yZS5jOjE2Njk6c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTE2NzAtXFx0XFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MDk9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzNy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTgzODppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTE4NTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXFxubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxubW0vZGFtb24vY29yZS5jLTE5NzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXFxubW0vZGFtb24vY29yZS5jLTIwNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDY5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNzEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXFxubW0vZGFtb24vY29yZS5jOjIxMDY6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMTA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTcyPXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NDItXFxubW0vZGFtb24vY29yZS5jOjI2NDM6c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0yNjQ0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIyOD1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjY5LSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjMyNzA6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbm1tL2RhbW9uL2NvcmUuYy0zMjcxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzozMjc4OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyODYtICovXFxubW0vZGFtb24vY29yZS5jOjMyODc6c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzI4OC1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzMDU9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMyMS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzMyMjpzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG5tbS9kYW1vbi9jb3JlLmMtMzMyMy1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgY291bnRfYWdlKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNzc9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQwNS0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYzozNDA2OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzQwNy1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQxMy0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzozNDE0OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzQxNS1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQyOD1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NTItLyogU3BsaXQgZXZlcnkgcmVnaW9uIGluIHRoZSBnaXZlbiB0YXJnZXQgaW50byAnbnJfc3VicycgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNDUzOnN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zNDU0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBucl9zdWJzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODItLyogU3BsaXQgb25lIGluIGV2ZXJ5IEBzcGxpdF9zdGVwIHJlZ2lvbnMgaW50byB0d28sIGZyb20gYSByb3RhdGluZyBvZmZzZXQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzQ4MzpzdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zNDg0LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9zdGVwKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2Mjg9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2VjcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjM2LSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjM2Mzc6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zNjM4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYxLSNlbHNlXFxubW0vZGFtb24vY29yZS5jOjM2NjI6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTcxPXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAwMzppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQwMDQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDI3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MDI4OnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxcbm1tL2RhbW9uL2NvcmUuYy00MDI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6MDkuNzQ3ODU4MjY0WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1OTc1NzcwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29yZSBGdW5jdGlvbmFsaXR5OiBBIFF1aWNrIFJldmlldyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZW51bWVyYXRlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgc2luY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBpdCBwcm92aWRlcy4gUmlnaHQsIGhlcmUncyB0aGUgbGlzdDogYGRhbW9uX3JlZ2lzdGVyX29wc2AsIGBkYW1vbl9zZWxlY3Rfb3BzYCwgYGRhbW9uX25ld19maWx0ZXJgLCBgZGFtb25fYWRkX2ZpbHRlcmAsIGBkYW1vbl9kZXN0cm95X2ZpbHRlcmAsIGBkYW1vbl9uZXdfcHJvYmVgLCBgZGFtb25fYWRkX3Byb2JlYCwgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gLCBgZGFtb25fbmV3X3JlZ2lvbmAsIGBkYW1vbl9zZXRfcmVnaW9uc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX2Rlc3Ryb3lfc2NoZW1lYCwgYGRhbW9uX25ld190YXJnZXRgLCBgZGFtb25fYWRkX3RhcmdldGAsIGBkYW1vbl90YXJnZXRzX2VtcHR5YCwgYGRhbW9uX2ZyZWVfdGFyZ2V0YCwgYGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0YCwgYGRhbW9uX25ld19jdHhgLCBgZGFtb25fZGVzdHJveV9jdHhgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fbnJfcnVubmluZ19jdHhzYCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3N0b3BgLCBgZGFtb25faXNfcnVubmluZ2AsIGBkYW1vbl9rZGFtb25kX3BpZGAsIGBkYW1vbl9jYWxsYCwgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAsIGFuZCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAuIFRoYXQncyBhIGxvdCwgYnV0IEkgY2FuIGJyZWFrIGl0IGRvd24uXG5cblRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZGFtb25fYXBwbHlfc2NoZW1lYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgY2FsbGVkIGluc2lkZSB0aGUgYGtkYW1vbmRfZm5gIGt0aHJlYWQuIFNvLCBuYXR1cmFsbHksIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzdGFydCBEQU1PTi4gYGRhbW9uX3N0YXJ0YCBsb29rcyBsaWtlIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb3JlLiBBbHNvLCBJIGtub3cgdGhhdCBzY2hlbWVzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgREFNT04gb3BlcmF0ZXMsIHNvIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NoZW1lcyBhcmUgc2V0IHVwOiBgZGFtb25fc2V0X3NjaGVtZXNgIGFuZCBgZGFtb25fYWRkX3NjaGVtZWAgbG9vayBsaWtlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LiBBbmQgb2YgY291cnNlLCBzaW5jZSBhdHRyaWJ1dGVzIGluZmx1ZW5jZSBiZWhhdmlvciwgSSdsbCByZXZpZXcgYGRhbW9uX3NldF9hdHRyc2AgYXMgd2VsbC5cblxuVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHdoYXQgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY3JpdGljYWwgcGllY2VzIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozOToxOC4zNDU0MzczMTZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDI3ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl98XmludCBkYW1vbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vdmFkZHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTE5Mj1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIxMi0vKiBJbml0aWFsaXplICctXFx1MDAzZXJlZ2lvbnNfbGlzdCcgb2YgZXZlcnkgdGFyZ2V0ICh0YXNrKSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmM6MjEzOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX2luaXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjE0LXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjI2LSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmM6MjI3OnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vdmFkZHIuYy0yMjgte1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yMzgtXFxubW0vZGFtb24vdmFkZHIuYzoyMzk6c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2RhbW9uL3ZhZGRyLmMtMjQwLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSlcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjY4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjk1LSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vZGFtb24vdmFkZHIuYzoyOTY6c3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9kYW1vbi92YWRkci5jLTI5Ny1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0zMjM9c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTM0NS1cXG5tbS9kYW1vbi92YWRkci5jOjM0NjpzdGF0aWMgdm9pZCBkYW1vbl92YV9ta29sZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzQ3LXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MzYwPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTM2OC1cXG5tbS9kYW1vbi92YWRkci5jOjM2OTpzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzcwLXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Njk3PXN0YXRpYyBib29sIGRhbW9uX3ZhX3RhcmdldF92YWxpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MDktXFxubW0vZGFtb24vdmFkZHIuYzo3MTA6c3RhdGljIHZvaWQgZGFtb25fdmFfY2xlYW51cF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi92YWRkci5jLTcxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjE4LjQyNjQ3MTcwNVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg3MDExODM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBNb2R1bGUgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0byBwcm9wZXJseSBjb25maWd1cmUgdGhpcyBEQU1PTiBtb2R1bGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgcmVnaXN0ZXJpbmcgb3BlcmF0aW9ucyBoYXBwZW5zIHRocm91Z2ggYGRhbW9uX3JlZ2lzdGVyX29wc2Agd2l0aGluIGBkYW1vbl92YV9pbml0Y2FsbGAgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGF0J3MgdGhlIGtleS4gSSBjYW4gdXNlIHRoYXQgZnVuY3Rpb24gdG8gcGx1ZyBpbnRvIHRoZSBEQU1PTiBjb3JlLlxuXG5UaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHdpdGhpbiBEQU1PTi4gRnVuY3Rpb25zIGxpa2UgYGRhbW9zX2FwcGx5X3NjaGVtZWAsIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBhbmQgb3RoZXJzIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhhdCBjb3JlLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgQVBJIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IHN0YXJ0IGFuZCBjb250cm9sIERBTU9OOiBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLlxuXG5MZXQncyBzZWUsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXNuJ3QgZXhwb3J0ZWQsIGJ1dCBpdCdzIG5vdCBzdGF0aWMgZWl0aGVyLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gICppcyogc3RhdGljLiBPa2F5LCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIGRlZmluZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIE1ha2VzIHNlbnNlLiBOb3csIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIHRoYXQgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGFuZCBgZGFtb25fYWRkX3NjaGVtZWAgYXJlIGFsbCBleHBvcnRlZCBvciBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHNlZWluZyBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYERBTU9OX1JFQ0xBSU1gIGFuZCBgREFNT05fTFJVX1NPUlRgIGFyZSBjb25maWd1cmVkIHRvIGNvcnJlY3RseSB1c2UgdGhlc2UgZmVhdHVyZXMuIFllcywgdGhleSBkZXBlbmQgb24gYERBTU9OYC5cblxuU28sIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoaWNoIGZlYXR1cmVzIGFyZSBjb21waWxlZCB1bmRlciB3aGljaCBjb25maWdzLiBJIGNvbmZpcm0gdGhhdCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgIGlzIGNvbXBpbGVkIHVuZGVyIGBEQU1PTl9WQUREUmAsIGluIGBtbS9kYW1vbi92YWRkci5jYC4gVGhlbiwgYGRhbW9uX3BhX3BhZ2VvdXRgIGlzIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgaXMgY29tcGlsZWQgdW5kZXIgYERBTU9OX1BBRERSYCwgYW5kIGBkYW1vc19hcHBseV9zY2hlbWVgIGlzIGNvbXBpbGVkIHVuZGVyIGBEQU1PTmAsIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgaXQuIFRvIGVuYWJsZSBldmVyeXRoaW5nIEkgbmVlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzIGFyZSBzZXQ6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAganVzdCB0byBiZSBjZXJ0YWluLCBidXQgSSB0aGluayB0aGF0IGlzIGEgZmFpcmx5IGNvbXBsZXRlIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTAzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozOTo0Ny4yOTY1OTM5MzZaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6NDcuMjk2NjkyMjU2WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjQyOTE1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBEQU1PTidzIGNvbmZpZ3VyYXRpb24gb3B0aW9uczsgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2Agc2VlbSBsaWtlIHRoZSBrZXkgc2V0dGluZ3MgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGltcG9ydGFudCBmdW5jdGlvbnMsIHNvIEknbGwgcHJpb3JpdGl6ZSB0aGVzZTogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9yZWdpc3Rlcl9vcHNgLlxuXG5XYWl0IGEgbWludXRlLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIG5vbi1zdGF0aWMgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBIb3dldmVyLCBpZiBpdCdzIG5vbi1zdGF0aWMsIFN5emthbGxlciAqY291bGQqIHN0aWxsIGZ1enogdGhhdC4gTGV0IG1lIGRvdWJsZS1jaGVja+KApiBhaGEhIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zZXRfYXR0cnNgIGFyZSBhY3R1YWxseSBleHBvcnRlZCEgVGltZSB0byBkaWcgaW50byBgZGFtb25fc3RhcnRgIGFuZCB1bmRlcnN0YW5kIGl0cyBjYWxsZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6NTIuNjIwOTg5NTg3WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAwMjgwMDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChkYW1vbl9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjUyLjcyMTAyNjI5NloiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg4NjMyMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYEVYUE9SVF9TWU1CT0xgIGluIGBtbS9kYW1vbi9jb3JlLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04g4oCTIHRoYXQncyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcsIHJpZ2h0PyBMZXQgbWUgbWVudGFsbHkgdHJhY2UgdGhpcy4uLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGBFWFBPUlRfU1lNQk9MYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGVpdGhlciBleHRlcm5hbCBhY2Nlc3MsIHBlcmhhcHMgZm9yIGRlYnVnZ2luZywgb3IgZm9yIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN5bWJvbHMgYXJlIGJlaW5nIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBicm9hZGVyIGtlcm5lbCBvciBtb2R1bGVzIHRocm91Z2ggdGhpcyBtZWNoYW5pc20uIFVuZGVyc3RhbmRpbmcgdGhlIGV4cG9ydGVkIHN5bWJvbHMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgaW50ZXJmYWNlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGRlbGliZXJhdGVseSBzaGFyZWQgYW5kIHBvdGVudGlhbGx5IHJlbGllZCB1cG9uIGJ5IG90aGVyIGtlcm5lbCBwYXJ0cy4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGRlY2xhcmF0aW9ucyBhbmQgaG93IHRoZXkncmUgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGV4cG9ydC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB1dGlsaXR5IGZ1bmN0aW9ucyBvciBjb3JlIGRhdGEgc3RydWN0dXJlcyBtYWRlIGFjY2Vzc2libGUuIFRoZSBjb250ZXh0IHdpbGwgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZXhwb3NlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE5MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjU3LjUwOTY2MzAwNFoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyOTUyNDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6NTcuNzUyNjIxMTkxWiIsIlNlcSI6NzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Njc2OTMzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgYEVYUE9SVF9TWU1CT0xgKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgYW5kIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgSSBkaWRuJ3Qgc2VlIGFuIGBFWFBPUlRfU1lNQk9MYCBtYWNybyB1c2VkIGluIHRoYXQgZmlsZS4gVGhhdCBzdHJpa2VzIG1lIGFzIG9kZC4gR2l2ZW4gdGhlIHdheSBEQU1PTiBpcyBhcmNoaXRlY3RlZCwgaXQgd291bGQgYmUgc3RyYW5nZSBpZiBjb3JlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IG1lYW50IHRvIGJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24sIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBzY2FuIHRoZSBmaWxlIGFnYWluLCBhbmQgbG9vayBmb3IgYW55IGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjQwOjAxLjQyMDMxODE5N1oiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2NzI5MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0x8RVhQT1JUX1NZTUJPTF9HUExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDo0MDowMS40ODM5OTg0MzZaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MDgyMTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRBTU9OIE1vZHVsZSBDb251bmRydW0qKlxuXG5SaWdodCwgREFNT07igKYgSSdtIHJlbWVtYmVyaW5nIHRoYXQgYERBTU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogSSBjYW4ndCBidWlsZCBhIGJvb2xlYW4gZGlyZWN0bHkgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIGNhbiBJPyBUaGF0IHdvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZGVzaWduIGNvbnN0cmFpbnQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYW55IGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgc3VzcGVjdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYm9vbGVhbiBuYXR1cmUgZm9yIERBTU9OJ3MgaW50ZWdyYXRpb24sIGRlcGxveW1lbnQsIGFuZCBvdmVyYWxsIGZsZXhpYmlsaXR5IHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGFuIGluaGVyZW50IGxpbWl0YXRpb24gb3IgYSBwb3RlbnRpYWxseSBvdmVybG9va2VkIGFzcGVjdCBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzA0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6NDA6MDUuNjc0ODIzNjM0WiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM0NDc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjQwOjA1Ljc0MzE3MjgzMloiLCJTZXEiOjgxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI5NTY0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEYW1vbiBDb2RlKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgRGFtb24gY29kZSwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWxzLiBUaGUgdXNlIG9mIGBib29sYCBpcyBncmVhdCwgSSBrbm93IGl0J3MgYSBidWlsdC1pbiB0eXBlLiBTbywgaWYgdGhlIGZ1bmN0aW9uYWxpdHkncyBlbmFibGVkLCBpdCdzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGVmZm9ydC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYW5kIGl0IHJlaW5mb3JjZXMgdGhhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuIEkgY2FuIGdldCBhd2F5IHdpdGggbm90IHdvcnJ5aW5nIGFib3V0IHN0YXRpYyBkZWNsYXJhdGlvbnMsIGF0IGxlYXN0IGluIHRoZSBpbml0aWFsIGFuYWx5c2lzLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBgZGFtb25fYWRkX3NjaGVtZWAsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNydWNpYWwgc2V0dXAgZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGV5IGludGVyYWN0IGlzIGtleSB0byBnZXR0aW5nIGEgZ29vZCBncmFzcCBvZiB0aGUgd2hvbGUgcGljdHVyZS5cblxuRmluYWxseSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGRhbW9uX3JlY2xhaW1gIGFuZCBgZGFtb25fbHJ1X3NvcnRgLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGV5IGhhdmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlLiBJZiB0aGV5IGRvLCB0aGVuIHRoZXkgYXJlIGFsc28gZ29vZCBlbnRyeSBwb2ludHMgaW50byB0aGUgY29kZSB0byBzdGFydCB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDo0MDoxMC40NzI3NDE4MTJaIiwiU2VxIjo4MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTg3OTI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHxedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDo0MDoxMC41MzYzNTcxNDFaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5NzY4ODYwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gU3Vic3lzdGVtIEZvY3VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBzdWJzeXN0ZW0gcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBob3cgdG8gYXBwcm9hY2ggdGVzdGluZyBpdC4gSSBuZWVkIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2Ugb2Ygd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQncyAqY3JpdGljYWwqIHRvIGV4ZXJjaXNlIHRoZSBuZXcgY29kZS4gSSBzdGFydGVkIGJ5IGxpc3Rpbmcgb3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtZWQgY29yZSB0byBEQU1PTidzIG9wZXJhdGlvbi4gSSBmaWd1cmVkIGBkYW1vbl9zdGFydGAgd291bGQgYmUgaW1wb3J0YW50LCBhbmQgc28gb24uXG5cbkkgcXVpY2tseSBpZGVudGlmaWVkIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50OiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX2NhbGxgLiBgZGFtb25fY2FsbGAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGludm9sdmVkIGluIGludGVyYWN0aW5nIHdpdGggdGhlIGt0aHJlYWQuIEkgd2FudGVkIHRvIHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlc2Ugd2VyZSBhY3R1YWxseSBub24tc3RhdGljLlxuXG5Ob3csIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBidWdzIGZpeGVkIGluIHRoaW5ncyBsaWtlIHNjaGVtZSBhcHBsaWNhdGlvbiwgcXVvdGEgY2FsY3VsYXRpb25zLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMuIFRoaXMgdGVsbHMgbWUgdGhhdCB0byBoaXQgdGhlc2UgYnVnIGZpeGVzLCBJICpuZWVkKiBEQU1PTiB0byBiZSBlbmFibGVkIGFuZCB0aGVuIEkgbmVlZCB0byBjb25maWd1cmUgYW5kIGFwcGx5IHNjaGVtZXMuIFRoYXQncyBob3cgSSBjYW4gc2V0IGl0IHVwIHRvIGhpdCB0aGUgYnVnZml4ZXMuXG5cblNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLiBBbmQgbm93IEkgaGF2ZSBhIGNvbmNyZXRlIGxpc3Qgb2Ygc3ltYm9scyB0byBmb2N1cyBvbiBhbmQgZW5zdXJlIGdldCBleGVyY2lzZWQgd2hlbiBJIHRlc3QgdGhpcyBwYXRjaDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jYWxsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwOTQsIk91dHB1dFRva2VucyI6Mjk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjQwOjIxLjUxMzI0NzYyOFoiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTgyNDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fYWRkX3NjaGVtZVwiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gY29yZSBzY2hlbWUgYXBwbGljYXRpb24gKGBkYW1vc19hcHBseV9zY2hlbWVgKSwgcXVvdGEgY2FsY3VsYXRpb25zIChgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgKSwgYW5kIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBvcGVyYXRpb25zIChgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIFRvIHRlc3QgdGhlc2UgcGF0aHMsIERBTU9OIG11c3QgYmUgZW5hYmxlZCBhbmQgc2NoZW1lcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYW5kIGFwcGxpZWQsIHdoaWNoIGNhbiBiZSBkb25lIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG9yIGluLWtlcm5lbCBBUElzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2FkZF9zY2hlbWVcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9jYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgYnVncyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIChgZGFtb3NfYXBwbHlfc2NoZW1lYCksIHF1b3RhIGNhbGN1bGF0aW9ucyAoYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCksIGFuZCBwaHlzaWNhbC92aXJ0dWFsIGFkZHJlc3Mgb3BlcmF0aW9ucyAoYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIHBhdGhzLCBEQU1PTiBtdXN0IGJlIGVuYWJsZWQgYW5kIHNjaGVtZXMgbXVzdCBiZSBjb25maWd1cmVkIGFuZCBhcHBsaWVkLCB3aGljaCBjYW4gYmUgZG9uZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZSBvciBpbi1rZXJuZWwgQVBJcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 14:19:46 +0000 UTC FinishedAt: 2026-08-02 14:40:23 +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": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "c6dae216-7365-467a-86f4-e2d58179bdc2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_set_attrs", "damon_set_schemes", "damon_add_scheme", "damon_sysfs_add_schemes", "damon_call" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gY29yZSBzY2hlbWUgYXBwbGljYXRpb24gKGBkYW1vc19hcHBseV9zY2hlbWVgKSwgcXVvdGEgY2FsY3VsYXRpb25zIChgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgKSwgYW5kIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBvcGVyYXRpb25zIChgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIFRvIHRlc3QgdGhlc2UgcGF0aHMsIERBTU9OIG11c3QgYmUgZW5hYmxlZCBhbmQgc2NoZW1lcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYW5kIGFwcGxpZWQsIHdoaWNoIGNhbiBiZSBkb25lIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG9yIGluLWtlcm5lbCBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODA2OGM3YzgxMDYyNGI5MThlY2YzYzBiNjM3NjMyMjAzNTlkZThjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTQ6MzU6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi40OTQ0Y2YyYzVhZmFlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgJiM0MzsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHRcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzeilcbiBcdFx0XHRcdGdvdG8gdXBkYXRlX3N0YXQ7XG4tXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KTtcbiYjNDM7XHRcdFx0aWYgKGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzeikpXG4mIzQzO1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgJiM0MzsyODE2LDggQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKFxuIFx0fVxuIFxuIFx0c2lfbWVtaW5mb19ub2RlKFx1MDAyNmksIGdvYWwtXHUwMDNlbmlkKTtcbiYjNDM7XHRpZiAoIWkudG90YWxyYW0pXG4mIzQzO1x0XHRpLnRvdGFscmFtID0gMTtcbiBcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuQEAgLTI4NTUsMTAgJiM0MzsyODU4LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG4gXHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuLVx0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcbiYjNDM7XHRpZiAoIWkudG90YWxyYW0pXG4mIzQzO1x0XHRyZXR1cm4gMTAwMDA7XG4mIzQzO1x0aWYgKGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkge1xuIFx0XHRudW1lcmF0b3IgPSB1c2VkX3BhZ2VzO1xuLVx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuJiM0MztcdFx0aWYgKGkudG90YWxyYW0gXHUwMDNjIHVzZWRfcGFnZXMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gdXNlZF9wYWdlcztcbiYjNDM7XHR9XG4gXHRyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pO1xuIH1cbiBcbkBAIC0zMDAxLDcgJiM0MzszMDEwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbiBcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfQUNUSVZFX0ZJTEUpO1xuIFx0aW5hY3RpdmUgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICYjNDM7IExSVV9JTkFDVElWRV9BTk9OKSAmIzQzO1xuIFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICYjNDM7IExSVV9JTkFDVElWRV9GSUxFKTtcbi1cdHRvdGFsID0gYWN0aXZlICYjNDM7IGluYWN0aXZlO1xuJiM0MztcdHRvdGFsID0gbWF4KGFjdGl2ZSAmIzQzOyBpbmFjdGl2ZSwgMSk7XG4gXHRpZiAoYWN0aXZlX3JhdGlvKVxuIFx0XHRyZXR1cm4gbXVsdF9mcmFjKGFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbiBcdHJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG5AQCAtMzcyNyw2ICYjNDM7MzczNiwxNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiAtRUJVU1k7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc3RydWN0IGRhbW9zICpzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4mIzQzO1xuJiM0MztcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2cy1cdTAwM2VxdW90YSkge1xuJiM0MztcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuQEAgLTM3NDMsNiAmIzQzOzM3NjMsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xuIFx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc2NoZW1lLCBjdHgpO1xuIFx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpO1xuJiM0MztcdFx0ZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHNjaGVtZSk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA1YzZjM2E1OTdmZDBiLi45ZGRkMWVjODIwMmI3IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTI2NCw3ICYjNDM7MjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRlbHNlXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pO1xuJiM0MztcdFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxuQEAgLTMwMiw3ICYjNDM7MzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICYjNDM7PSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTtcbiYjNDM7XHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5AQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0XHRmb2xpb19pc19maWxlX2xydShmb2xpbykpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuIHB1dF9mb2xpbzpcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRhcHBsaWVkID0gZGFtb25fbWlncmF0ZV9wYWdlcyhcdTAwMjZmb2xpb19saXN0LCBzLVx1MDAzZXRhcmdldF9uaWQpO1xuQEAgLTM3OSw3ICYjNDM7Mzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKSAvIGFkZHJfdW5pdDtcbi1cdFx0YWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4mIzQzO1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG4gXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCAwNjQ4NDAwYjJkNjViLi5hYTgzM2MyYzRmYTM1IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTY2OSw2ICYjNDM7NjY5LDggQEAgc3RhdGljIGludCBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuJiM0MztcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoZm9saW8sIHdhbGstXHUwMDNldm1hLCBhZGRyLCBkZXN0cyxcbiBcdFx0XHRcdG1pZ3JhdGlvbl9saXN0cyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UoKnB0ZSkpO1xuJiM0MztcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtODMxLDYgJiM0Mzs4MzQsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRmb3IgKDsgYWRkciBcdTAwM2MgbmV4dDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4mIzQzO1xuIFx0XHRuciA9IDE7XG4gXHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiBcbkBAIC04NDQsNyAmIzQzOzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiBcdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UoKnB0ZSkpO1xuJiM0MztcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9hZGRfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgYnVncyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIChgZGFtb3NfYXBwbHlfc2NoZW1lYCksIHF1b3RhIGNhbGN1bGF0aW9ucyAoYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCksIGFuZCBwaHlzaWNhbC92aXJ0dWFsIGFkZHJlc3Mgb3BlcmF0aW9ucyAoYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIHBhdGhzLCBEQU1PTiBtdXN0IGJlIGVuYWJsZWQgYW5kIHNjaGVtZXMgbXVzdCBiZSBjb25maWd1cmVkIGFuZCBhcHBsaWVkLCB3aGljaCBjYW4gYmUgZG9uZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZSBvciBpbi1rZXJuZWwgQVBJcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNjhjN2M4MTA2MjRiOTE4ZWNmM2MwYjYzNzYzMjIwMzU5ZGU4YzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDE0OjM1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjQ5NDRjZjJjNWFmYWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI2MTMsNyAmIzQzOzI2MTMsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJCQkJYy0mZ3Q7bWluX3JlZ2lvbl9zeik7CiAJCQlpZiAoIXN6KQogCQkJCWdvdG8gdXBkYXRlX3N0YXQ7Ci0JCQlkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opOwomIzQzOwkJCWlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKQomIzQzOwkJCQlnb3RvIHVwZGF0ZV9zdGF0OwogCQl9CiAJCWlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpCiAJCQlyZXR1cm47CkBAIC0yODE1LDYgJiM0MzsyODE2LDggQEAgc3RhdGljIF9fa2VybmVsX3Vsb25nX3QgZGFtb3NfZ2V0X25vZGVfbWVtX2JwKAogCX0KIAogCXNpX21lbWluZm9fbm9kZSgmYW1wO2ksIGdvYWwtJmd0O25pZCk7CiYjNDM7CWlmICghaS50b3RhbHJhbSkKJiM0MzsJCWkudG90YWxyYW0gPSAxOwogCWlmIChnb2FsLSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCkKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIGkuZnJlZXJhbTsKIAllbHNlCS8qIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAgKi8KQEAgLTI4NTUsMTAgJiM0MzsyODU4LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCiAJc2lfbWVtaW5mb19ub2RlKCZhbXA7aSwgZ29hbC0mZ3Q7bmlkKTsKLQlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkKJiM0MzsJaWYgKCFpLnRvdGFscmFtKQomIzQzOwkJcmV0dXJuIDEwMDAwOwomIzQzOwlpZiAoZ29hbC0mZ3Q7bWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCkgewogCQludW1lcmF0b3IgPSB1c2VkX3BhZ2VzOwotCWVsc2UJLyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi8KJiM0MzsJCWlmIChpLnRvdGFscmFtICZsdDsgdXNlZF9wYWdlcykKJiM0MzsJCQlyZXR1cm4gMDsKIAkJbnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIHVzZWRfcGFnZXM7CiYjNDM7CX0KIAlyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pOwogfQogCkBAIC0zMDAxLDcgJiM0MzszMDEwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbykKIAkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfQUNUSVZFX0ZJTEUpOwogCWluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfQU5PTikgJiM0MzsKIAkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSAmIzQzOyBMUlVfSU5BQ1RJVkVfRklMRSk7Ci0JdG90YWwgPSBhY3RpdmUgJiM0MzsgaW5hY3RpdmU7CiYjNDM7CXRvdGFsID0gbWF4KGFjdGl2ZSAmIzQzOyBpbmFjdGl2ZSwgMSk7CiAJaWYgKGFjdGl2ZV9yYXRpbykKIAkJcmV0dXJuIG11bHRfZnJhYyhhY3RpdmUsIDEwMDAwLCB0b3RhbCk7CiAJcmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTsKQEAgLTM3MjcsNiAmIzQzOzM3MzYsMTcgQEAgc3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIC1FQlVTWTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKJiM0MzsKJiM0MzsJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAmYW1wO3MtJmd0O3F1b3RhKSB7CiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/CkBAIC0zNzQzLDYgJiM0MzszNzYzLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7CiAJCWRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7CiAJCWRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7CiYjNDM7CQlkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IDVjNmMzYTU5N2ZkMGIuLjlkZGQxZWM4MjAyYjcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMjY0LDcgJiM0MzsyNjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCWVsc2UKIAkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtmb2xpb19saXN0KTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCWlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcikKQEAgLTMwMiw3ICYjNDM7MzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKAogCQkJZm9saW9fZGVhY3RpdmF0ZShmb2xpbyk7CiAJCWFwcGxpZWQgJiM0Mzs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIHB1dF9mb2xpbzoKLQkJYWRkciAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7CiYjNDM7CQlhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgJiM0MzsgZm9saW9fc2l6ZShmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQogCXMtJmd0O2xhc3RfYXBwbGllZCA9IGZvbGlvOwpAQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCQkJZm9saW9faXNfZmlsZV9scnUoZm9saW8pKTsKIAkJbGlzdF9hZGQoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2ZvbGlvX2xpc3QpOwogcHV0X2ZvbGlvOgotCQlhZGRyICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKJiM0MzsJCWFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSAmIzQzOyBmb2xpb19zaXplKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAl9CiAJYXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoJmFtcDtmb2xpb19saXN0LCBzLSZndDt0YXJnZXRfbmlkKTsKQEAgLTM3OSw3ICYjNDM7Mzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCiAJCWlmICghZGFtb3NfcGFfZmlsdGVyX291dChzLCBmb2xpbykpCiAJCQkqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbykgLyBhZGRyX3VuaXQ7Ci0JCWFkZHIgJiM0Mzs9IGZvbGlvX3NpemUoZm9saW8pOwomIzQzOwkJYWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICYjNDM7IGZvbGlvX3NpemUoZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KIAlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IDA2NDg0MDBiMmQ2NWIuLmFhODMzYzJjNGZhMzUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNjY5LDYgJiM0Mzs2NjksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKDsgYWRkciAmbHQ7IG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHBhZ2VfaWR4OwomIzQzOwogCQluciA9IDE7CiAJCXB0ZW50ID0gcHRlcF9nZXQocHRlKTsKIApAQCAtNjgxLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCWNvbnRpbnVlOwogCQlkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay0mZ3Q7dm1hLCBhZGRyLCBkZXN0cywKIAkJCQltaWdyYXRpb25fbGlzdHMpOwotCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCXBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTsKJiM0MzsJCW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gcGFnZV9pZHg7CiAJfQogCXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpOwogCXJldHVybiAwOwpAQCAtODMxLDYgJiM0Mzs4MzQsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKDsgYWRkciAmbHQ7IG5leHQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHBhZ2VfaWR4OwomIzQzOwogCQluciA9IDE7CiAJCXB0ZW50ID0gcHRlcF9nZXQocHRlKTsKIApAQCAtODQ0LDcgJiM0Mzs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogCQlpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSkKIAkJCSpzel9maWx0ZXJfcGFzc2VkICYjNDM7PSBmb2xpb19zaXplKGZvbGlvKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQlwYWdlX2lkeCA9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwdGVfcGFnZSgqcHRlKSk7CiYjNDM7CQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4OwogCQlzLSZndDtsYXN0X2FwcGxpZWQgPSBmb2xpbzsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBEQU1PTiBmaWxlczogYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBpcyBhIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3Npbmcgc2V2ZXJhbCBpc3N1ZXMuCgpGaXJzdCwgdGhlcmUmIzM5O3MgYSBjb3JyZWN0aW9uIHRvIGBkYW1vbl9zcGxpdF9yZWdpb25fYXRgJiMzOTtzIHJldHVybiB2YWx1ZSBjaGVjayB3aXRoaW4gYGRhbW9zX2FwcGx5X3NjaGVtZWAuIEdvb2QsIG1ha2luZyBzdXJlIHRoZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QuIFRoZW4sIHNhbml0eSBjaGVja3MgZm9yIGBpLnRvdGFscmFtYCBpbiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCBhbmQgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBhbmQgY2hlY2tpbmcgZm9yIGBhY3RpdmUgJiM0MzsgaW5hY3RpdmVgIGVxdWFsaW5nIHplcm8gaW4gYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYC4gU2VlbXMgbGlrZSBzb21lIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0byBoYW5kbGUgcG90ZW50aWFsbHkgdW5leHBlY3RlZCBzdGF0ZXMuCgpJdCBhbHNvIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAgd2l0aCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCBmb3IgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgUFNJLWJhc2VkIHF1b3RhIGVuZm9yY2VtZW50LgoKTm93LCBpbnRvIHRoZSBtb3JlIGdyYW51bGFyIGZpeGVzOiBJbiBgbW0vZGFtb24vcGFkZHIuY2AsIHRoZXkmIzM5O3ZlIGZpeGVkIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9uLCBzd2l0Y2hpbmcgZnJvbSBhZGRpbmcgdG8gYW4gZXhpc3RpbmcgdmFsdWUgdG8gc2V0dGluZyBhbiBhYnNvbHV0ZSB2YWx1ZS4gTWFrZXMgc2Vuc2UsIGVuc3VyaW5nIGNvcnJlY3QgcGFnZS1hbGlnbmVkIGFkZHJlc3MgdHJhdmVyc2FsLiBUaGVuIGluIGBtbS9kYW1vbi92YWRkci5jYCwgaXQgbG9va3MgbGlrZSB0aGUgcGFnZSBjb3VudCBjYWxjdWxhdGlvbiBpcyBiZWluZyBjb3JyZWN0ZWQsIHN1YnRyYWN0aW5nIHRoZSBwYWdlIGluZGV4IHRvIGF2b2lkIGNvdW50aW5nIGFuIHVubmVjZXNzYXJ5IHBhZ2UuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGNvcnJlY3Rpb24gZm9yIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAsIHNvIHRoZXkmIzM5O3JlIGhpdHRpbmcgdGhlIHNwZWNpZmljIHBhZ2UgY29ycmVjdGx5LgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY29yZSBEQU1PTiBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBEQU1PTiBpcyBkZWZpbml0ZWx5IGEgY29yZSBmZWF0dXJlLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIHdvcmtpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIHRvIGJlIHN1cmUgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIFZpcnR1YWwgYW5kIFBoeXNpY2FsIEFkZHJlc3MgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEQU1PTiBzeXN0ZW0gaGFuZGxlcyB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gVGhhdCBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5IGRlZmluaXRpb25zIGZvciBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgLiBJdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMgc3BlY2lmaWVkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIG91dGxpbmUgaG93IHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzIGFyZSBtYW5hZ2VkLCBpZiBpdCBhbGxvd3MgZm9yIHRoZSBzdXBwb3J0IG9mIGJvdGggYW5kIHNvbWUgY29uZmlndXJhdGlvbnMgYXJvdW5kIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuICA4MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDgyOlx0XG4gIDgzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA4NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgODU6XHRcbiAgODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODc6XHRcbiAgODg6XHRjb25maWcgREFNT05fUkVDTEFJTVxuICA4OTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuICA5MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbiAgOTM6XHRcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxuICA5NDpcdFx0ICB0aG9zZS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcbiAgOTc6XHRcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxuICA5ODpcdFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cbiAgOTk6XHRcbiAxMDA6XHRjb25maWcgREFNT05fTFJVX1NPUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQyCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgREFNT04gY29uZmlndXJhdGlvbnM6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLiBSaWdodCBhd2F5LCBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmZzIGhhdmUgdG91Y2hlZCBhIGJ1bmNoIG9mIGNvcmUgcm91dGluZXMuIEkmIzM5O3ZlIGdvdCBteSBleWVzIG9uIGBkYW1vc19hcHBseV9zY2hlbWVgLCBjbGVhcmx5IGNydWNpYWwgZm9yIGFwcGx5aW5nIG1vbml0b3Jpbmcgc2NoZW1lcy4gVGhlbiB3ZSBoYXZlIHRoZSBtZW1vcnkgYXJlYSByZXRyaWV2YWxzOiBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYC4gVGhvc2UgYXJlLCB3aXRob3V0IGEgZG91YnQsIGNlbnRyYWwgdG8gYWNjZXNzaW5nIHRoZSBtZW1vcnkgYXJlYXMgZm9yIG1vbml0b3JpbmcuCgpJIGFsc28gbm90aWNlIHNvbWUgY29udGV4dCBpbml0aWFsaXphdGlvbjogYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAgYW5kIGBrZGFtb25kX2luaXRfY3R4YC4gVGhlc2UgYXJlIHByb2JhYmx5IGtleSBmb3IgdGhlIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb2YgdGhlIG1vbml0b3JpbmcgZGFlbW9uLiBUaGUgYGRhbW9uX3BhX2AgcHJlZml4ZWQgZnVuY3Rpb25zIGFyZSBpbnRyaWd1aW5nLi4uIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBhbmQgYGRhbW9uX3BhX3N0YXRgLiBUaGVzZSBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IHBhZ2Ugb3BlcmF0aW9ucyBhbmQgcG90ZW50aWFsbHkgZGVhY3RpdmF0aW9uLCBtaWdyYXRpb24sIGFuZCB0aGUgZ2F0aGVyaW5nIG9mIHN0YXRpc3RpY3MgdW5kZXIgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvci4gRmluYWxseSwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCwgc28gc29tZSBWaXJ0dWFsIEFkZHJlc3MgbW9uaXRvcmluZyBpcyBhdCBwbGF5LCBvcGVyYXRpbmcgYXQgdGhlIHBtZCBsZXZlbC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIG5vdywgaXMgd2hldGhlciB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90PyBUaGUgdXNlIG9mIHN0YXRpYyB3b3VsZCBpbmRpY2F0ZSBhIHRpZ2h0bHkgY291cGxlZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIGFuZCB0aGVpciBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FwcGx5X3NjaGVtZXxkYW1vc19nZXRfbm9kZV9tZW1fYnB8ZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icHxkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icHxkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2l8a2RhbW9uZF9pbml0X2N0eHxkYW1vbl9wYV9wYWdlb3V0fGRhbW9uX3BhX2RlX2FjdGl2YXRlfGRhbW9uX3BhX21pZ3JhdGV8ZGFtb25fcGFfc3RhdHxkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeXxkYW1vc192YV9zdGF0X3BtZF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XHQvKiBUaGVzZSB3aWxsIGJlIHNldCBmcm9tIGtkYW1vbmRfaW5pdF9jdHgoKSAqL1xubW0vZGFtb24vY29yZS5jLTg0OC1cdGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NTg9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTcxLVxubW0vZGFtb24vY29yZS5jOjI1NzI6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjU3My1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjQzPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY2OS1cdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbm1tL2RhbW9uL2NvcmUuYzoyNjcwOlx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0yNjcxLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODAwPXN0YXRpYyBib29sIGludmFsaWRfbWVtX25vZGUoaW50IG5pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgwNC1cbm1tL2RhbW9uL2NvcmUuYzoyODA1OnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0yODA2LVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgyNy1cbm1tL2RhbW9uL2NvcmUuYzoyODI4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmMtMjgyOS1cdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTI5NzU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI5ODEtI2Vsc2UgLyogQ09ORklHX05VTUEgKi9cbm1tL2RhbW9uL2NvcmUuYzoyOTgyOnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcbm1tL2RhbW9uL2NvcmUuYy0yOTgzLVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjk4Ny1cbm1tL2RhbW9uL2NvcmUuYzoyOTg4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG5tbS9kYW1vbi9jb3JlLmMtMjk4OS1cdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTI5OTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMDMtICovXG5tbS9kYW1vbi9jb3JlLmM6MzAwNDpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxubW0vZGFtb24vY29yZS5jLTMwMDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDE5PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAzNC1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDM1Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzAzNi1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMwMzgtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDM5Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNDAtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDQyLVx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XG5tbS9kYW1vbi9jb3JlLmM6MzA0MzpcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmMtMzA0NC1cdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzExPXN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzM4LVxubW0vZGFtb24vY29yZS5jOjM3Mzk6c3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0zNzQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc0OS1cbm1tL2RhbW9uL2NvcmUuYzozNzUwOnN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTM3NTEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzY1LVx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpO1xubW0vZGFtb24vY29yZS5jOjM3NjY6XHRcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTM3NjctXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM3NzM9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3ODYtXHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzozNzg3Olx0a2RhbW9uZF9pbml0X2N0eChjdHgpO1xubW0vZGFtb24vY29yZS5jLTM3ODgtXG4tLVxubW0vZGFtb24vcGFkZHIuYz0yMDk9c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMTktXG5tbS9kYW1vbi9wYWRkci5jOjIyMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTIyMS1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI3Ny1cbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbm1tL2RhbW9uL3BhZGRyLmMtMjc5LVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTMxMj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzE1LXtcbm1tL2RhbW9uL3BhZGRyLmM6MzE2Olx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTMxNy19XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zMTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzIyLXtcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgZmFsc2UsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy0zMjQtfVxubW0vZGFtb24vcGFkZHIuYy0zMjUtXG5tbS9kYW1vbi9wYWRkci5jOjMyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTMyNy1cdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM2MS1cbm1tL2RhbW9uL3BhZGRyLmM6MzYyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mzg5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zOTYtXHRjYXNlIERBTU9TX1BBR0VPVVQ6XG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcdFx0cmV0dXJuIGRhbW9uX3BhX3BhZ2VvdXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cdGNhc2UgREFNT1NfTFJVX1BSSU86XG4tLVxubW0vZGFtb24vcGFkZHIuYy00MDUtXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcbm1tL2RhbW9uL3BhZGRyLmM6NDA2Olx0XHRyZXR1cm4gZGFtb25fcGFfbWlncmF0ZShyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtNDA3LVx0Y2FzZSBEQU1PU19TVEFUOlxubW0vZGFtb24vcGFkZHIuYzo0MDg6XHRcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDktXHRkZWZhdWx0OlxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTg1PXN0YXRpYyB2b2lkIGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vdmFkZHIuYy02MzQtXG5tbS9kYW1vbi92YWRkci5jOjYzNTpzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2RhbW9uL3ZhZGRyLmMtNjM2LVx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NzQxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzUzLVx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xubW0vZGFtb24vdmFkZHIuYzo3NTQ6XHRcdC5wbWRfZW50cnkgPSBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeSxcbm1tL2RhbW9uL3ZhZGRyLmMtNzU1LVx0XHQucHRlX2VudHJ5ID0gTlVMTCxcbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzk3LVxubW0vZGFtb24vdmFkZHIuYzo3OTg6c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9kYW1vbi92YWRkci5jLTc5OS1cdFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9kYW1vbi92YWRkci5jPTg2MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9zdGF0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTg2Ni1cdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3Olx0XHQucG1kX2VudHJ5ID0gZGFtb3NfdmFfc3RhdF9wbWRfZW50cnksXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzgKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzIGluIERBTU9OKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBhIGJ1bmNoIG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgYGtkYW1vbmRfaW5pdF9jdHhgLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gQnV0IGZ1enppbmcgdGhvc2UgZGlyZWN0bHkgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBzaW5jZSB0aGV5JiMzOTtyZSBzdGF0aWMgYW5kIGxpa2VseSBoYXZlIGxpbWl0ZWQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCB0aGVzZSBzdGF0aWMgb25lcy4gYGRhbW9zX2FwcGx5X3NjaGVtZWAgaXMgY2FsbGVkIGJ5IGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLiBUaGVuLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBhbmQgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCBhcmUgYWxsIGNhbGxlZCBieSBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBkYW1vc19hZGp1c3RfcXVvdGFgLCBhbmQgdGhhdCBvbmUgaXMgYWxzbyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLiBga2RhbW9uZF9pbml0X2N0eGAgYWxzbyBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCBzbyBga2RhbW9uZF9mbmAgbG9va3MgaW50ZXJlc3RpbmcuIFRoZSBmdW5jdGlvbnMgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGFuZCBgZGFtb25fcGFfc3RhdGAgYXJlIGNhbGxlZCBieSBgZGFtb25fcGFfYXBwbHlfc2NoZW1lYCB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGUgYGN0eC0mZ3Q7b3BzLmFwcGx5X3NjaGVtZWAgaW4gYGRhbW9uX3BhX3NldF9vcGVyYXRpb25zYC4gQWxzbywgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCBhcmUgdXNlZCB3aXRoaW4gdGhlIGB3YWxrX29wc2Agc3RydWN0LCB1c2VkIGJ5IGBkYW1vc192YV9taWdyYXRlYCBhbmQgYGRhbW9zX3ZhX3N0YXRgLCB3aGljaCBhcmUgY2FsbGVkIGJ5IGBkYW1vbl92YV9hcHBseV9zY2hlbWVgLCB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGUgYGN0eC0mZ3Q7b3BzLmFwcGx5X3NjaGVtZWAgaW4gYGRhbW9uX3ZhX3NldF9vcGVyYXRpb25zYC4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgc2VlIHdoYXQgdGhlaXIgY2FsbGluZyBwYXR0ZXJucyBhcmUuIE15IGltbWVkaWF0ZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdvdWxkIGluY2x1ZGUgYGtkYW1vbmRfZm5gLCBgZGFtb25fcGFfYXBwbHlfc2NoZW1lYCwgYW5kIGBkYW1vbl92YV9hcHBseV9zY2hlbWVgLCBzaW5jZSB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcGFfc2V0X29wZXJhdGlvbnN8ZGFtb25fdmFfc2V0X29wZXJhdGlvbnN8ZGFtb25fZG9fYXBwbHlfc2NoZW1lc3xrZGFtb25kX2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA3NC1cdC8qXG5tbS9kYW1vbi9jb3JlLmM6MTA3NTpcdCAqIG5leHRfaW50ZXJ2YWxzX3R1bmVfc2lzIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwNzYtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjQtXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzNT1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTQyLVx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzoxOTQzOlx0XHRjdHgtXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXCYjMzQ7a2RhbW9uZC4lZFwmIzM0Oyxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ0LVx0XHRcdFx0bnJfcnVubmluZ19jdHhzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjA0NDpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NzI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NDItXG5tbS9kYW1vbi9jb3JlLmM6MjY0MzpzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMjY0NC1cdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jPTI2OTU9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3MDItXG5tbS9kYW1vbi9jb3JlLmM6MjcwMzpcdFx0ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhjLCB0LCByKTtcbm1tL2RhbW9uL2NvcmUuYy0yNzA0LVx0XHQvKlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzUwPXN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzcyLSAqL1xubW0vZGFtb24vY29yZS5jOjM3NzM6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG5tbS9kYW1vbi9jb3JlLmMtMzc3NC17XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1NzI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1OTgtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU5OTogKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcJiMzNDttbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcJiMzNDspXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTYwMC0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipDaGVja2luZyBEQU1PTiBTZXQgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBJIHJlbWVtYmVyIG5vdy4gVGhvc2UgYGRhbW9uX3BhX3NldF9vcGVyYXRpb25zYCBhbmQgYGRhbW9uX3ZhX3NldF9vcGVyYXRpb25zYCBzdHJ1Y3R1cmVzIGFyZW4mIzM5O3QgZGVmaW5lZCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCB3aGVyZSBkaWQgSSBwdXQgdGhlbT8gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlLi4uIFJpZ2h0LCB0aGV5JiMzOTtyZSBwcm9iYWJseSBpbiBvbmUgb2YgdGhlIGFkZHJlc3Mtc3BhY2Ugc3BlY2lmaWMgZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBJdCBtYWtlcyBzZW5zZSB0aGV5JiMzOTtkIGJlIG5lYXIgdGhlIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgaGFuZGxpbmcgY29kZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEkmIzM5O2xsIGJldCB0aGV5JiMzOTtyZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wYV9zZXRfb3BlcmF0aW9uc3xkYW1vbl92YV9zZXRfb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTgzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgREFNT04mIzM5O3MgQWRkcmVzcyBUcmFuc2xhdGlvbiBGdW5jdGlvbnMqKgoKSG1tLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSByZWFsbHkgbmVlZCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBleHBvc2VkLCBhbmQgd2hhdCYjMzk7cyAqbm90KiBpbiBEQU1PTiYjMzk7cyBhZGRyZXNzIHRyYW5zbGF0aW9uIGNvcmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgIGZpbGVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgdXNlZCBleHRlcm5hbGx5LCBvciwgaWYgbm90aGluZyBlbHNlLCB3aGF0IGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gVGhhdCB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgREFNT04gaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0aGF0IGJhc2VsaW5lIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBkYW1vbl9wYV98XmludCBkYW1vbl9wYV98XnZvaWQgZGFtb25fdmFffF5pbnQgZGFtb25fdmFfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NTEKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVmlzaWJpbGl0eSBJc3N1ZXMgaW4gREFNT04gQ29kZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vZGFtb24vcGFkZHIuY2AgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHN1Z2dlc3RzIGEgcG9zc2libGUgc2NvcGUgaXNzdWUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IG1lYW50IHRvIGJlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSBvciBhcmUgdGhleSBsZWFraW5nIHVuaW50ZW5kZWQgYWNjZXNzIHBvaW50cywgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleeKAmXJlIG5vdCBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgaXMgbGlrZWx5IGFuIGluaXRpYWwgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBhcmUgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGV4dGVybmFsIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSByZWZhY3RvcmluZyBpcyBuZWVkZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBkYW1vbl9wYV9bYS16QS1aMC05X10qXFwofF5bYS16QS1aX11bYS16QS1aMC05X10qIGRhbW9uX3ZhX1thLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3OAoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSBhcmUgbXkgaW5pdGlhbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBFeHRlcm5hbCBGdW5jdGlvbiBFeHBvc3VyZSBpbiBgbW0vZGFtb24vcGFkZHIuY2AqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggbXkgY2hlY2tsaXN0LiBXZSBuZWVkIHRvIGF1ZGl0IGBtbS9kYW1vbi9wYWRkci5jYCBmb3IgYW55IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0aGF0IGFyZSAqbm90KiBzdGF0aWMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gKm91dHNpZGUqIHRoYXQgc3BlY2lmaWMgZmlsZS4gVGhlc2UgYXJlIHRoZSBvbmVzIHRoYXQgY291bGQgYmUgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gcG90ZW50aWFsbHksIGRlcGVuZGluZyBvbiBjb250ZXh0LCB1c2VyIHNwYWNlIGlmIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBpbnRlcmZhY2UgZXhwb3N1cmUgZ29pbmcgb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgaW4gdGVybXMgb2YgbW9kdWxlIGludGVyLWRlcGVuZGVuY2llcywgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYW5kIG9mIGNvdXJzZSwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBlYWNoIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIGNhcmVmdWxseSBjb25zaWRlciBpdHMgcHVycG9zZSBhbmQgdGhlIGxpa2VsaWhvb2Qgb2YgaXQgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3BhZGRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRlYnVnZ2luZyBNeSBSZWdleCBpbiBgbW0vZGFtb24vcGFkZHIuY2AqKgoKQWxyaWdodCwgbXkgcmVnZXggYXR0ZW1wdCBpbiBgbW0vZGFtb24vcGFkZHIuY2AgY2xlYXJseSBpc24mIzM5O3QgY2FwdHVyaW5nIHRoZSByaWdodCBpbmZvcm1hdGlvbi4gSXQmIzM5O3Mgbm90IHdvcmtpbmcgYXMgaW50ZW5kZWQuIFJhdGhlciB0aGFuIHNwZW5kIG1vcmUgdGltZSB0cnlpbmcgdG8gcmVmaW5lIGl0IGp1c3QgeWV0LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgdG8gYSBtb3JlIGRpcmVjdCBhcHByb2FjaC4gTGV0JiMzOTtzIGN1dCB0aHJvdWdoIHRoZSBub2lzZS4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwYC4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgaW4gYG1tL2RhbW9uL3BhZGRyLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGBncmVwYCBmb3IgdGhlIHRlbGwtdGFsZSBzaWducyBvZiBleHBvcnRlZCBzeW1ib2xzLCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQgSSBhbSB0cnlpbmcgdG8gaWRlbnRpZnkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgZWl0aGVyIGBFWFBPUlRfU1lNQk9MYCBvciBqdXN0IHRoZSBgdm9pZCBgIGRlY2xhcmF0aW9ucy4gQm90aCBzaG91bGQgcXVpY2tseSBuYXJyb3cgZG93biB0aGUgY2FuZGlkYXRlcyB0byB0aG9zZSB0aGF0IGFyZSBwdWJsaWNseSBleHBvc2VkLCBvciBhdCBsZWFzdCB2aXNpYmxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQganVtcGluZy1vZmYgcG9pbnQgZm9yIGZ1cnRoZXIgYW5hbHlzaXMsIHNhdmluZyBtZSB0aW1lIGFuZCB1bm5lY2Vzc2FyeSBoZWFkLXNjcmF0Y2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3BhZGRyLmM9MjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzctXG5tbS9kYW1vbi9wYWRkci5jOjM4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy0zOS17XG4tLVxubW0vZGFtb24vcGFkZHIuYz00OT1zdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy01Ni1cbm1tL2RhbW9uL3BhZGRyLmM6NTc6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3BhZGRyLmMtNTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipQZWVyaW5nIGludG8gcGFkZHIuYzogV2hhdCYjMzk7cyBQdWJsaWNseSBBY2Nlc3NpYmxlPyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYG1tL2RhbW9uL3BhZGRyLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgaXRzIHB1YmxpYyBpbnRlcmZhY2Ug4oCTIHRoZSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IERBTU9OIGV4cG9zZXMgb3IgbWFrZXMgYXZhaWxhYmxlIGdsb2JhbGx5LCBhbmQgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBsZXZlcmFnZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3Agd2hhdCB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IgaW4gdGhlIERBTU9OIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMsIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGFueSBjcml0aWNhbCBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHVzZWQgZWxzZXdoZXJlLiBVbmRlcnN0YW5kaW5nIHdoYXQmIzM5O3MgZXhwb3J0ZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgb3ZlcmFsbCByb2xlIGFuZCBkZXNpZ24gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgcHJpbWl0aXZlcyB0aGF0IG1hbmFnZSwgbWFuaXB1bGF0ZSwgb3IgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBhZGRyZXNzZXMgKHBhZGRycykgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBvZmZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15ib29sIHxeaW50IHxedm9pZCB8XnVuc2lnbmVkIGxvbmcgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcGFkZHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIFNjYW4gb2YgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBFeHBvcnRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0byB0aGUgY2hhc2UuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGp1aWN5IGxpdHRsZSBoZWxwZXIgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9wYWRkci5jYCB0aGF0IGFyZSBleHBvcnRlZC4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIHdhZGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgZmlsZSBpbml0aWFsbHkuIFRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgdXN1YWxseSB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIGludGVyZmFjZSwgdGhlIGZ1bmN0aW9ucyBtZWFudCBmb3IgZXh0ZXJuYWwgdXNlLiBJJiMzOTtsbCBqdXN0IGp1bXAgc3RyYWlnaHQgdG8gdGhlIHRhaWwgZW5kIG9mIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCBhcyBiZWluZyByZWxldmFudCB0byBteSBjdXJyZW50IGludmVzdGlnYXRpb24uIEhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBhIGNsZWFyIGluZGljYXRpb24gb2Ygd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSBhY2Nlc3NpYmxlIGJleW9uZCB0aGlzIG1vZHVsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmJvb2wgfF5pbnQgfF52b2lkIHxedW5zaWduZWQgbG9uZyB8XnN0cnVjdCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmVmaW5pbmcgTXkgQXBwcm9hY2ggdG8gSWRlbnRpZnlpbmcgdGhlIFJlbGV2YW50IENvZGUqKgoKSG1tLCB0aGF0IGluaXRpYWwgcmVnZXggSSBjcmFmdGVkLCB0aGUgb25lIGFuY2hvcmVkIHdpdGggYF5gLCBpcyBsaWtlbHkgdG9vIGJyaXR0bGUuIEl0JiMzOTtzIGFzc3VtaW5nIGEgdmVyeSBzcGVjaWZpYyBsaW5lIHN0cnVjdHVyZSwgYW5kIHRoZSBwcmVzZW5jZSBvZiBsZWFkaW5nIHNwYWNlcyBvciBvdGhlciBjaGFyYWN0ZXJzIG9uIHRoZSBzYW1lIGxpbmUgd291bGQgYnJlYWsgaXQuIE15IHByaW9yIGFwcHJvYWNoIGFzc3VtZWQgdGhhdCBjb2RlIHdvdWxkIGJlIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZSwgYnV0IHRoYXQmIzM5O3Mgbm90IGFsd2F5cyBhIHZhbGlkIGFzc3VtcHRpb24uIFRoZSBwcm9ibGVtIHNwYWNlIHJlcXVpcmVzIGEgbW9yZSByb2J1c3QgbWV0aG9kIG9mIHNlYXJjaC4KCkkgbmVlZCBzb21ldGhpbmcgdGhhdCBpcyBtb3JlIGZsZXhpYmxlLiBBIHNpbXBsZSBgZ3JlcGAgZm9yIGBkYW1vbl9wYV9zZXRfb3BlcmF0aW9uc2AgKG9yIGEgc2ltaWxhciByZWxldmFudCBmdW5jdGlvbiBvciBzeW1ib2wgbmFtZSksIGlzIHByb2JhYmx5IG1vcmUgZWZmaWNpZW50IGFuZCBsZXNzIHByb25lIHRvIGZhbHNlIG5lZ2F0aXZlcyBkdWUgdG8gbWlub3IgbGluZSB2YXJpYXRpb25zLiBUaGF0JiMzOTtzIGEgbXVjaCBtb3JlIGVsZWdhbnQgc29sdXRpb24gZm9yIHF1aWNrbHkgcGlucG9pbnRpbmcgdGhlIHJlbGV2YW50IGNvZGUgc2VnbWVudHMuIEl0JiMzOTtzIGEgcHJhZ21hdGljIHNoaWZ0IGluIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wYV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3BhZGRyLmMtMTgtXG5tbS9kYW1vbi9wYWRkci5jOjE5OnN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vbl9wYV9waHlzX2FkZHIoXG5tbS9kYW1vbi9wYWRkci5jLTIwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjQtXG5tbS9kYW1vbi9wYWRkci5jOjI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcbm1tL2RhbW9uL3BhZGRyLmMtMjYtXHRcdHBoeXNfYWRkcl90IHBhLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM3LVxubW0vZGFtb24vcGFkZHIuYzozODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcbm1tL2RhbW9uL3BhZGRyLmMtMzkte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDgtXG5tbS9kYW1vbi9wYWRkci5jOjQ5OnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtNTAtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTUzLVxubW0vZGFtb24vcGFkZHIuYzo1NDpcdGRhbW9uX3BhX21rb2xkKGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsIGN0eC1cdTAwM2VhZGRyX3VuaXQpKTtcbm1tL2RhbW9uL3BhZGRyLmMtNTUtfVxubW0vZGFtb24vcGFkZHIuYy01Ni1cbm1tL2RhbW9uL3BhZGRyLmM6NTc6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3BhZGRyLmMtNTgte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNjMtXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxubW0vZGFtb24vcGFkZHIuYzo2NDpcdFx0XHRfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHIsIGN0eCk7XG5tbS9kYW1vbi9wYWRkci5jLTY1LVx0fVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNjctXG5tbS9kYW1vbi9wYWRkci5jOjY4OnN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxubW0vZGFtb24vcGFkZHIuYy02OS17XG4tLVxubW0vZGFtb24vcGFkZHIuYy04MC1cbm1tL2RhbW9uL3BhZGRyLmM6ODE6c3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtODItXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtODQtXHRib29sIGFjY2Vzc2VkO1xubW0vZGFtb24vcGFkZHIuYzo4NTpcdHBoeXNfYWRkcl90IHNhbXBsaW5nX2FkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoXG5tbS9kYW1vbi9wYWRkci5jLTg2LVx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciwgYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtODctXG5tbS9kYW1vbi9wYWRkci5jOjg4Olx0YWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyKTtcbm1tL2RhbW9uL3BhZGRyLmMtODktXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGFjY2Vzc2VkKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTkxLVxubW0vZGFtb24vcGFkZHIuYzo5MjpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3BhZGRyLmMtOTMte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtOTktXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG5tbS9kYW1vbi9wYWRkci5jOjEwMDpcdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbm1tL2RhbW9uL3BhZGRyLmMtMTAxLVx0XHRcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVx1MDAzZW5yX2FjY2Vzc2VzLCBtYXhfbnJfYWNjZXNzZXMpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxubW0vZGFtb24vcGFkZHIuYzoxMDg6c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbm1tL2RhbW9uL3BhZGRyLmMtMTA5LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTQwLVxubW0vZGFtb24vcGFkZHIuYzoxNDE6c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9wYWRkci5jLTE0Mi1cdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTQ3LVx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcbm1tL2RhbW9uL3BhZGRyLmM6MTQ4Olx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX21hdGNoKGYsIGZvbGlvKSkge1xubW0vZGFtb24vcGFkZHIuYy0xNDktXHRcdFx0cGFzcyA9IGYtXHUwMDNlYWxsb3c7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNTYtXG5tbS9kYW1vbi9wYWRkci5jOjE1NzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTE1OC1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzMtXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xubW0vZGFtb24vcGFkZHIuYzoxNzQ6XHRcdFx0cGEgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2VzYW1wbGluZ19hZGRyLFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vcGFkZHIuYzoxNzg6XHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmMtMTc5LVx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTk1PXN0YXRpYyBib29sIGRhbW9zX3BhX2ZpbHRlcl9vdXQoc3RydWN0IGRhbW9zICpzY2hlbWUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMDgtXG5tbS9kYW1vbi9wYWRkci5jOjIwOTpzdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIxOS1cbm1tL2RhbW9uL3BhZGRyLmM6MjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMjIxLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjQ0LVxubW0vZGFtb24vcGFkZHIuYzoyNDU6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjI0NjpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMjQ3LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI0ODpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI0OS1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzQtXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYzoyNzU6XHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jLTI3Ni19XG5tbS9kYW1vbi9wYWRkci5jLTI3Ny1cbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbm1tL2RhbW9uL3BhZGRyLmMtMjc5LVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI4NS1cbm1tL2RhbW9uL3BhZGRyLmM6Mjg2Olx0YWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYzoyODc6XHR3aGlsZSAoYWRkciBcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI4OC1cdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYzoyODk6XHRcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xubW0vZGFtb24vcGFkZHIuYy0yOTAtXHRcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzA4LVx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3BhZGRyLmM6MzA5Olx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYy0zMTAtfVxubW0vZGFtb24vcGFkZHIuYy0zMTEtXG5tbS9kYW1vbi9wYWRkci5jOjMxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMTMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMTUte1xubW0vZGFtb24vcGFkZHIuYzozMTY6XHRyZXR1cm4gZGFtb25fcGFfZGVfYWN0aXZhdGUociwgYWRkcl91bml0LCBzLCB0cnVlLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtMzE3LX1cbm1tL2RhbW9uL3BhZGRyLmMtMzE4LVxubW0vZGFtb24vcGFkZHIuYzozMTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0zMjAtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xubW0vZGFtb24vcGFkZHIuYzozMjM6XHRyZXR1cm4gZGFtb25fcGFfZGVfYWN0aXZhdGUociwgYWRkcl91bml0LCBzLCBmYWxzZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XG5tbS9kYW1vbi9wYWRkci5jLTMyNS1cbm1tL2RhbW9uL3BhZGRyLmM6MzI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzMzLVxubW0vZGFtb24vcGFkZHIuYzozMzQ6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjMzNTpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0zNTgtXHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYzozNTk6XHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jLTM2MC19XG5tbS9kYW1vbi9wYWRkci5jLTM2MS1cbm1tL2RhbW9uL3BhZGRyLmM6MzYyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzcxLVxubW0vZGFtb24vcGFkZHIuYzozNzI6XHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9wYWRkci5jOjM3MzpcdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjM3NTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTM3Ni1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0zODgtXG5tbS9kYW1vbi9wYWRkci5jOjM4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vcGFkZHIuYy0zOTAtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zOTYtXHRjYXNlIERBTU9TX1BBR0VPVVQ6XG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcdFx0cmV0dXJuIGRhbW9uX3BhX3BhZ2VvdXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cdGNhc2UgREFNT1NfTFJVX1BSSU86XG5tbS9kYW1vbi9wYWRkci5jOjM5OTpcdFx0cmV0dXJuIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHIsIGF1bml0LCBzY2hlbWUsXG5tbS9kYW1vbi9wYWRkci5jLTQwMC1cdFx0XHRcdHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDEtXHRjYXNlIERBTU9TX0xSVV9ERVBSSU86XG5tbS9kYW1vbi9wYWRkci5jOjQwMjpcdFx0cmV0dXJuIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMociwgYXVuaXQsIHNjaGVtZSxcbm1tL2RhbW9uL3BhZGRyLmMtNDAzLVx0XHRcdFx0c3pfZmlsdGVyX3Bhc3NlZCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYy00MDUtXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcbm1tL2RhbW9uL3BhZGRyLmM6NDA2Olx0XHRyZXR1cm4gZGFtb25fcGFfbWlncmF0ZShyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcbm1tL2RhbW9uL3BhZGRyLmMtNDA3LVx0Y2FzZSBEQU1PU19TVEFUOlxubW0vZGFtb24vcGFkZHIuYzo0MDg6XHRcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xubW0vZGFtb24vcGFkZHIuYy00MDktXHRkZWZhdWx0OlxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDE1LVxubW0vZGFtb24vcGFkZHIuYzo0MTY6c3RhdGljIGludCBkYW1vbl9wYV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbm1tL2RhbW9uL3BhZGRyLmMtNDE3LVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQzNi1cbm1tL2RhbW9uL3BhZGRyLmM6NDM3OnN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG5tbS9kYW1vbi9wYWRkci5jLTQzOC17XG4tLVxubW0vZGFtb24vcGFkZHIuYy00NDItXHRcdC51cGRhdGUgPSBOVUxMLFxubW0vZGFtb24vcGFkZHIuYzo0NDM6XHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG5tbS9kYW1vbi9wYWRkci5jOjQ0NDpcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXG5tbS9kYW1vbi9wYWRkci5jOjQ0NTpcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3BhX2FwcGx5X3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmMtNDQ2LVx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ3Olx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxubW0vZGFtb24vcGFkZHIuYzo0NDg6XHRcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxubW0vZGFtb24vcGFkZHIuYy00NDktXHR9O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDUzLVxubW0vZGFtb24vcGFkZHIuYzo0NTQ6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3BhX2luaXRjYWxsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gTW9kdWxlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZS4gSXQgbG9va3MgbGlrZSBgZGFtb25fcGFfaW5pdGNhbGxgIGlzIHRoZSBrZXkgZm9yIGluaXRpYWxpemluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgZGFtb25fcmVnaXN0ZXJfb3BzYCBhbmQgdGhlIGBwYV9vcHNgIHN0cnVjdHVyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSB2aXJ0dWFsIGFkZHJlc3MgY291bnRlcnBhcnQgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgIGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm4sIHJlZ2lzdGVyaW5nIGl0cyBvd24gc2V0IG9mIG9wZXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gRnJvbSBhIHF1aWNrIHNjYW4gb2YgYG1tL2RhbW9uL2NvcmUuY2AsIEkgY2FuIHNlZSB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBmdW5jdGlvbnM6IGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc3RvcGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9uZXdfY3R4YCwgYW5kIGBkYW1vbl9kZXN0cm95X2N0eGAuIFRoZXNlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgYW55IGV4dGVybmFsIGNvbXBvbmVudCB3aWxsIGJlIHVzaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIERBTU9OIGNvcmUuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICp1c2VkKi4gSSYjMzk7bGwgY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLmNgIHRvIHNlZSBob3cgdGhlIHN5c2ZzIGludGVyZmFjZSB0aWVzIGludG8gYWxsIHRoaXMuIEl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpZGVhIG9mIGhvdyB1c2Vyc3BhY2UgY29uZmlndXJlcyBhbmQgY29udHJvbHMgREFNT04uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byB0aGVzZSBjb3JlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c2ZzIGF0dHJpYnV0ZSBoYW5kbGluZy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnR8ZGFtb25fc2V0X2F0dHJzfGRhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTE5MTM9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTkzMi1cdH07XG5tbS9kYW1vbi9zeXNmcy5jOjE5MzM6XHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vc3lzZnMuYy0xOTM0LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Ny1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yMjY5LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlLCBrZWVwaW5nIGluIG1pbmQgbXkgZGVlcCBkaXZlIGludG8gdGhpcyBzeXN0ZW0uCgoqKkRhbW9uIEFjdGl2YXRpb24gYW5kIEF0dHJpYnV0ZSBTZXR0aW5nIC0gQSBRdWljayBNZW50YWwgTWFwKioKClJpZ2h0LCBzbyBgZGFtb25fc3RhcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGtpY2tzIERBTU9OIGludG8gZ2VhciwgYW5kIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBhcyBleHBlY3RlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGhvdyB1c2Vyc3BhY2UgY29udHJvbHMgdGhlIGtlcm5lbCBtb2R1bGUuIEFuZCBzaW1pbGFybHksIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBtZWNoYW5pc20gZm9yIHNldHRpbmcgdGhlIG1vbml0b3JpbmcgYXR0cmlidXRlcywgYW5kIHRoYXQmIzM5O3MgbmF0dXJhbGx5IGNhbGxlZCBieSBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgZXZlcnl0aGluZzsgV2hhdCBhYm91dCBgZGFtb25fc2V0X3NjaGVtZXNgIHRob3VnaD8gVGhhdCYjMzk7cyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIHVzZXMgdGhhdCB0byBlc3RhYmxpc2ggbW9uaXRvcmluZyBzY2hlbWVzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGF0IGZ1bmN0aW9uIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLCB0byBiZSBzdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHdob2xlIGZsb3cuIEkmIzM5O2xsIGludmVzdGlnYXRlIHdoYXQmIzM5O3MgY2FsbGluZyB0aGF0IGFuZCB3aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg1NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBob3cgSSYjMzk7ZCBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIGl0cyBzY2hlbWVzOgoKKipBbmFseXppbmcgdGhlIERhbW9uIHN5c2ZzIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjaGVtZXMgYXJlIGRlZmluZWQgYW5kIG1hbmFnZWQgd2l0aGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIGFyY2hpdGVjdHVyZSBvZiBEYW1vbiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UgZm9yIGl0cyBzY2hlbWUgY29uZmlndXJhdGlvbi4gRmlyc3QsIEnigJlsbCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiB0aGUgY29kZSDigJMgbGlrZWx5IGZ1bmN0aW9ucyBoYW5kbGluZyBhdHRyaWJ1dGUgY3JlYXRpb24sIHNldHRpbmcsIGFuZCByZXRyaWV2YWwgcmVsYXRlZCB0byBEYW1vbiYjMzk7cyBzY2hlbWVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGVzZSBzY2hlbWVzIHdpdGhpbiB0aGUgc3lzZnMgaGllcmFyY2h5LiBBcmUgdGhleSB1c2luZyBzdGFuZGFyZCBzeXNmcyBhdHRyaWJ1dGUgdHlwZXMgKGxpa2UgYHN0cnVjdCBrb2JqX2F0dHJpYnV0ZWApIG9yIHNvbWV0aGluZyBjdXN0b20/CgpNeSBpbml0aWFsIHF1ZXN0aW9ucyB3aWxsIGJlOgoKKiAgIEhvdyBhcmUgbmV3IHNjaGVtZXMgYWRkZWQgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPwoqICAgV2hhdCYjMzk7cyB0aGUgbGlmZWN5Y2xlIG9mIGEgc2NoZW1lIG9iamVjdCB3aXRoaW4gc3lzZnMgKGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIGRlbGV0aW9uKT8KKiAgIEhvdyBhcmUgcGFyYW1ldGVycyBmb3IgZWFjaCBzY2hlbWUgZXhwb3NlZCB2aWEgc3lzZnMgYXR0cmlidXRlcz8gQXJlIHRoZXkgcHJpbWl0aXZlIHR5cGVzLCBvciBtb3JlIGNvbXBsZXggc3RydWN0dXJlcyBzZXJpYWxpemVkIGZvciB0aGUgdXNlcj8KKiAgIEhvdyBpcyB0aGUgY29uc2lzdGVuY3kgYW5kIHZhbGlkaXR5IG9mIHNjaGVtZSBjb25maWd1cmF0aW9ucyBlbmZvcmNlZCB3aXRoaW4gc3lzZnM/IEFueSBzYW5pdHkgY2hlY2tzIGltcGxlbWVudGVkPwoqICAgSG93IGRvZXMgdGhlIHN5c2ZzIGludGVyZmFjZSBpbnRlcmFjdCB3aXRoIERhbW9uJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSB0byBhcHBseSB0aGUgZGVmaW5lZCBzY2hlbWVzPyBBcmUgdGhlcmUgY2FsbGJhY2sgZnVuY3Rpb25zIHRoYXQgdHJpZ2dlciBhY3Rpb25zIGJhc2VkIG9uIGF0dHJpYnV0ZSBjaGFuZ2VzPwoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0gdmlhIHN5c2ZzIHRvIGNvbmZpZ3VyZSB0aGVzZSBzY2hlbWVzLCB0aGVuIGZpZ3VyZSBvdXQgaG93IHRoYXQgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIERhbW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRpb25zLCB0aGVpciBhY2Nlc3MgbWV0aG9kcywgYW5kIGRhdGEgdHlwZXMgd2lsbCBiZSBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cmFjaW5nIHRoZSBwYXRoIGZyb20gdXNlciBpbnB1dCB0aHJvdWdoIHN5c2ZzIHRvIERhbW9uJiMzOTtzIGludGVybmFsIGxvZ2ljLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbXBhcmUgdGhpcyBpbnRlcmZhY2Ugd2l0aCBleGlzdGluZyBiZXN0IHByYWN0aWNlcyBhbmQgc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG90aGVyIHN5c2ZzIGludGVyZmFjZXMgSSYjMzk7dmUgd29ya2VkIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXN8ZGFtb25fc3lzZnNfc2V0X3NjaGVtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFjY2VzcyBNb25pdG9yIChgZGFtb3NgKSBJbnRlZ3JhdGlvbiBpbiB0aGUgU3lzdGVtIEZpbGUgU3lzdGVtIChgc3lzZnNgKSoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBtbS9kYW1vbi9zeXNmcy5jYC4gSSYjMzk7bSBzdXNwZWN0aW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJhY3Rpb24gb3IgaW50ZWdyYXRpb24gZ29pbmcgb24gaGVyZSwgcGVyaGFwcyByZWxhdGVkIHRvIGEgJiMzNDtkYW1vcyYjMzQ7IGNvbmNlcHQg4oCTIHByZXN1bWFibHkgYSBEYXRhIEFjY2VzcyBNb25pdG9yLCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBhIG1lbW9yeSBhY2Nlc3MgcGF0dGVybiBhbmFseXNpcyBzY2hlbWUuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB2ZXJpZnkgdGhpcyBpbnRlZ3JhdGlvbiBpcyBwcmVzZW50IGFuZCBmdW5jdGlvbmFsLCB1bmRlcnN0YW5kIGhvdyBhIGRhdGEgYWNjZXNzIG1vbml0b3JpbmcgaXMgZG9uZSwgb3IgZGV0ZXJtaW5lIGlmIGl0IG5lZWRzIHRvIGJlIGltcGxlbWVudGVkLiBJ4oCZbGwgc2VhcmNoIGRpcmVjdGx5IGZvciB0aGUgdGVybSDigJxkYW1vcyzigJ0gYnV0IEkgYWxzbyBuZWVkIHRvIGJlIGZsZXhpYmxlLiBUaGUgY29kZSBtaWdodCByZWZlciB0byB0aGUgY29uY2VwdCB2aWEgYSBtb3JlIGdlbmVyaWMgdGVybS4gU28sIEkmIzM5O2xsIGFsc28gcnVuIGEgc2VhcmNoIGZvciAmIzM0O3NjaGVtZSwmIzM0OyBhcyB0aGUgYWNjZXNzIG1vbml0b3JpbmcgYmVoYXZpb3IgY291bGQgYmUgZGVzY3JpYmVkIGFzIGEgc3BlY2lmaWMgc2NoZW1lIG9yIG1ldGhvZCwgZXZlbiBpZiAmIzM0O2RhbW9zJiMzNDsgaXNuJiMzOTt0IGV4cGxpY2l0bHkgdXNlZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBkYW1vbiBvciBhbm90aGVyIHJlbGF0ZWQgbWVtb3J5IG1vbml0b3Jpbmcgc3lzdGVtIGNvdWxkIGJlIGltcGxlbWVudGVkIHZpYSBzeXNmcywgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZmFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3NjaGVtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB0aGluZy4gSXQgc2VlbXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkgZnJvbSB0aGUgbmFtZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCYjMzk7cyBhIHN5c2ZzIGludGVyZmFjZS4gVGhhdCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGVuYWJsaW5nIERBTU9OIG1vbml0b3JpbmcgdGhyb3VnaCB0aGUgYHN5c2ZzYCBmaWxlc3lzdGVtLCBwcm92aWRpbmcgYSB1c2VyLXNwYWNlIGludGVyZmFjZS4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgaXQgZml0cyBpbiB0aGUgbGlmZWN5Y2xlOiB3aGVyZSBpcyBpdCBjYWxsZWQgZnJvbT8gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHRoZSBjb250cm9sIHBhdGgsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBjaGVja3MsIG9yIHJlc291cmNlcyBpdCBhY3F1aXJlcy9yZWxlYXNlcz8gRG9lcyBpdCBzaW1wbHkgc2V0IGEgZmxhZywgb3IgZG9lcyBpdCB0cmlnZ2VyIG1vcmUgY29tcGxleCBhY3Rpb25zIGxpa2Ugc3RhcnRpbmcgbW9uaXRvcmluZyB0aHJlYWRzLCBzZXR0aW5nIHVwIG1vbml0b3JpbmcgY29udGV4dHMsIG9yIGludGVncmF0aW5nIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEkgYWxzbyB3YW50IHRvIGZpbmQgb3V0IHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIHRha2VzIGFuZCBzZWUgaWYgdGhlIGZ1bmN0aW9uIGRvZXMgYW55IGVycm9yIGNoZWNraW5nIG9yIGVycm9yIGhhbmRsaW5nLgoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhdCBhIGhpZ2ggbGV2ZWwsIGFuZCB0aGVuIHRvIGludmVzdGlnYXRlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGl0IG1pZ2h0IGhhdmUgd2l0aCBEQU1PTiYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkgb3Igb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBlZGdlIGNhc2VzLCBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciByZXNvdXJjZSBjb250ZW50aW9uLCB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBpZiBJIHdlcmUsIGZvciBleGFtcGxlLCBkZWJ1Z2dpbmcgYSBEQU1PTi1yZWxhdGVkIGlzc3VlIG9yIGlmIEkgbmVlZGVkIHRvIHdvcmsgd2l0aCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGluIGFub3RoZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjQwOlx0XHRyZXR1cm4gMDtcbjIyNDE6XHR9XG4yMjQyOlx0XG4yMjQzOlx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI0NDpcdHtcbjIyNDU6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjIyNDY6XHRcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XG4yMjQ3Olx0XHRpbnQgZXJyO1xuMjI0ODpcdFxuMjI0OTpcdFx0aWYgKGRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbjIyNTA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjIyNTE6XHRcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cbjIyNTI6XHRcdGlmIChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZW5yICE9IDEpXG4yMjUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI1NDpcdFxuMjI1NTpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KVxuMjI1NjpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCk7XG4yMjU3Olx0XHRrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCA9IE5VTEw7XG4yMjU4Olx0XG4yMjU5Olx0XHRyZXBlYXRfY2FsbF9jb250cm9sID0ga21hbGxvY19vYmooKnJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI2MDpcdFx0aWYgKCFyZXBlYXRfY2FsbF9jb250cm9sKVxuMjI2MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIyNjI6XHRcbjIyNjM6XHRcdGN0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXSk7XG4yMjY0Olx0XHRpZiAoSVNfRVJSKGN0eCkpIHtcbjIyNjU6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjY2Olx0XHRcdHJldHVybiBQVFJfRVJSKGN0eCk7XG4yMjY3Olx0XHR9XG4yMjY4Olx0XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIGZhbHNlKTtcbjIyNjk6XHRcdGlmIChlcnIpIHtcbjIyNzA6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjcxOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4yMjcyOlx0XHRcdHJldHVybiBlcnI7XG4yMjczOlx0XHR9XG4yMjc0Olx0XHRrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcbjIyNzU6XHRcbjIyNzY6XHRcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxuMjI3NzpcdFx0XHRqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbjIyNzg6XHRcbjIyNzk6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbjIyODA6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4yMjgxOlx0XHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG4yMjgyOlx0XHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcbjIyODM6XHRcdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXG4yMjg0Olx0XHRcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI4NTpcdFx0cmV0dXJuIGVycjtcbjIyODY6XHR9XG4yMjg3Olx0XG4yMjg4Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbjIyODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YCBDb250ZXh0IEJ1aWxkaW5nKioKCkFscmlnaHQsIHNvIGBkYW1vbl9zeXNmc19idWlsZF9jdHhgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGludm9sdmVkIGluIHRoYXQgcHJvY2Vzcy4gSSBuZWVkIHRvIGRpdmUgaW50byB3aGF0IGZ1bmN0aW9ucyBpdCYjMzk7cyBjYWxsaW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gS25vd2luZyB0aGUgY2FsbHMgaXQgbWFrZXMgcHJvdmlkZXMgdGhlIGJyZWFkY3J1bWJzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIGNvbnRleHQgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCBzeXN0ZW0gd2lsbCBvcGVyYXRlIG92ZXJhbGwuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IGl0cyBleGVjdXRpb24gcGF0aCB0byBncmFzcCB0aGUgc3VidGxldGllcyBvZiBpdHMgaW50ZXJhY3Rpb25zLiBXaGVyZSBkb2VzIGl0IHB1bGwgaW5mb3JtYXRpb24gZnJvbSwgd2hlcmUgZG9lcyBpdCBzdG9yZSBpdCwgYW5kIHdoaWNoIG90aGVyIGNvbXBvbmVudHMgZG9lcyBpdCB0b3VjaD8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfYnVpbGRfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMS1cbm1tL2RhbW9uL3N5c2ZzLmM6MjEyMjpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxubW0vZGFtb24vc3lzZnMuYy0yMTIzLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqc3lzX2N0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTMxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTQyLVxubW0vZGFtb24vc3lzZnMuYzoyMTQzOlx0cGFyYW1fY3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjE0NC1cdGlmIChJU19FUlIocGFyYW1fY3R4KSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxODg9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTk5LVxubW0vZGFtb24vc3lzZnMuYzoyMjAwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDEtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjYyLVxubW0vZGFtb24vc3lzZnMuYzoyMjYzOlx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2NC1cdGlmIChJU19FUlIoY3R4KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU5MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YC4gSSBzZWUgdGhlIGNhbGwgZm9yIGl0LCB3aGljaCBtZWFucyB3ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgYSBjb250ZXh0IGJ1aWxkaW5nIHByb2Nlc3Mgb2YgYSBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBhcyB0aGUgc3lzZnMgbGF5ZXIgY2FuIHNvbWV0aW1lcyBoaWRlIHRoZSBtb3JlIGludHJpY2F0ZSBkZXRhaWxzIG9mIERBTU9OJiMzOTtzIGNvcmUgb3BlcmF0aW9ucy4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIGtleSBwYXJhbWV0ZXJzIGl0JiMzOTtzIHRha2luZyBhbmQgd2hhdCBwYXJ0IG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSBpdCYjMzk7cyBsaW5raW5nIHVwIHdpdGguIElzIGl0IGNyZWF0aW5nIGEgbmV3IGNvbnRleHQsIG9yIGJ1aWxkaW5nIG9uZSBmb3IgYW4gZXhpc3RpbmcgbW9uaXRvcmluZyBzZXR1cD8gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbCBwcm9iZSBvciBpcyBpdCBtb2RpZnlpbmcgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBjb25maWd1cmF0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHJvdXRpbmUgZml0cyB3aXRoaW4gdGhlIGdyZWF0ZXIgREFNT04gYXJjaGl0ZWN0dXJlLiBJIHdpbGwgbWVudGFsbHkgdHJhY2UgdGhpcyByb3V0aW5lIHRvIHBpbnBvaW50IHRoZSBhcmVhIG9mIERBTU9OIHdoaWNoIGlzIGJlaW5nIG1vZGlmaWVkIG9yIGNyZWF0ZWQuIFRoZW4sIEkgY2FuIGZvY3VzIGluIG9uIGl0cyBzcGVjaWZpYyByb2xlIGFuZCBob3cgaXQgaGFuZGxlcyBjb25maWd1cmF0aW9uIGNoYW5nZXMgb3IgbmV3IGluc3RhbmNlIHJlZ2lzdHJhdGlvbnMgd2l0aCB0aGUgc3lzZnMgZmlsZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb250ZXh0IGJ1aWxkIGlzIHRoZSBlbnRyeXBvaW50IHRvIHRoZSBtb25pdG9yIG9yIGEgcGFydCBvZiB0aGUgaW50ZXJuYWwgY29uZmlnLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MuIEdvb2QsIGxldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIwMDpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXG4yMjAxOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuMjIwMjpcdHtcbjIyMDM6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhbW9uX25ld19jdHgoKTtcbjIyMDQ6XHRcdGludCBlcnI7XG4yMjA1Olx0XG4yMjA2Olx0XHRpZiAoIWN0eClcbjIyMDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4yMjA4Olx0XG4yMjA5Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoY3R4LCBzeXNfY3R4KTtcbjIyMTA6XHRcdGlmIChlcnIpIHtcbjIyMTE6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyMTI6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjIyMTM6XHRcdH1cbjIyMTQ6XHRcbjIyMTU6XHRcdHJldHVybiBjdHg7XG4yMjE2Olx0fVxuMjIxNzpcdFxuMjIxODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XG4yMjE5Olx0XG4yMjIwOlx0c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuMjIyMTpcdHtcbjIyMjI6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbjIyMjM6XHRcbjIyMjQ6XHRcdGlmICghc3lzZnNfa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKVxuMjIyNTpcdFx0XHRyZXR1cm4gMDtcbjIyMjY6XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzKSlcbjIyMjc6XHRcdFx0cmV0dXJuIDA7XG4yMjI4Olx0XHRkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuMjIyOTpcdFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4yMjMwOlx0XG4yMjMxOlx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG4yMjMyOlx0XHRcdHJldHVybiAwO1xuMjIzMzpcdFx0aWYgKHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyMzQ6XHRcdFx0Z290byBvdXQ7XG4yMjM1Olx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNjpcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMoc3lzZnNfa2RhbW9uZCk7XG4yMjM3Olx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzODpcdG91dDpcbjIyMzk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCwgaHVoPyBUaGF0IGluc3RhbnRseSBtYWtlcyBtZSB0aGluayBhYm91dCBEQU1PTiBhbmQgdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVjaXNlbHkgdGhpcyBmdW5jdGlvbiAqZG9lcyouIEZyb20gaXRzIG5hbWUsIEkmIzM5O20gaW5mZXJyaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYXBwbHlpbmcgaW5wdXRzLCBwcm9iYWJseSBjb25maWd1cmF0aW9ucyBvciBjb21tYW5kcywgdmlhIHRoZSBzeXNmcyBmaWxlc3lzdGVtIHdpdGhpbiB0aGUgRHluYW1pYyBBZGRyZXNzIE1vbml0b3JpbmcgKERBTU9OKSBmcmFtZXdvcmsuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGRpZmZlcmVudCBpbnB1dCB0eXBlcy4gSXMgaXQgaGFuZGxpbmcgbW9uaXRvciBjb25maWd1cmF0aW9ucz8gQ29udHJvbCBjb21tYW5kcyBsaWtlIGVuYWJsaW5nL2Rpc2FibGluZyBhIG1vbml0b3IsIHBlcmhhcHM/IE9yIGlzIGl0IG1vcmUgZm9jdXNlZCBvbiBmaWx0ZXJpbmcgb3IgcmVnaW9uIG1vZGlmaWNhdGlvbnMgd2l0aGluIGEgcnVubmluZyBEQU1PTiBpbnN0YW5jZT8gVGhlICYjMzQ7YXBwbHkmIzM0OyBwYXJ0IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHRha2luZyB0aGVzZSBzeXNmcy1wcm92aWRlZCBpbnB1dHMgYW5kIGludGVncmF0aW5nIHRoZW0gaW50byB0aGUgREFNT04gb3BlcmF0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gQXJlIHRoZXJlIHNwZWNpZmljIHN0cnVjdHMgZm9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IHRoaXMgZnVuY3Rpb24gcmVhZHMgZnJvbSBzeXNmcz8gSSBiZXQgdGhlcmUmIzM5O3Mgc29tZSBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGhhcHBlbmluZyBoZXJlIOKAkyBlcnJvciBoYW5kbGluZyB3b3VsZCBiZSBjcml0aWNhbC4gSXQmIzM5O3MgbGlrZWx5IGNoZWNraW5nIGZvciB2YWxpZCByYW5nZXMsIGNvcnJlY3Qgc3ludGF4LCBhbmQgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcgaW5wdXRzLiBXaGF0IGFib3V0IGF0b21pY2l0eT8gRG9lcyB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gYmUgdGhyZWFkLXNhZmUgb3Igd29yayB1bmRlciBhIGxvY2s/IElmIGl0IGNoYW5nZXMgbGl2ZSBkYXRhIGl0IGlzIHByb2JhYmx5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIERBTU9OIGNvbXBvbmVudHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBpbnB1dHMgYXJlIHZhbGlkPyBIb3cgYXJlIGNoYW5nZXMgcmVmbGVjdGVkIGluIHRoZSBEQU1PTiBtb25pdG9yIHN0YXRlPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvcj8gR290dGEgZmlndXJlIG91dCB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgdGhlICYjMzk7d2hhdCYjMzk7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwOTQ6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4yMDk1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxuMjA5NjpcdHtcbjIwOTc6XHRcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbjIwOTg6XHRcdGludCBlcnI7XG4yMDk5Olx0XG4yMTAwOlx0XHRvcHNfaWQgPSBSRUFEX09OQ0Uoc3lzX2N0eC1cdTAwM2VvcHNfaWQpO1xuMjEwMTpcdFx0ZXJyID0gZGFtb25fc2VsZWN0X29wcyhjdHgsIG9wc19pZCk7XG4yMTAyOlx0XHRpZiAoZXJyKVxuMjEwMzpcdFx0XHRyZXR1cm4gZXJyO1xuMjEwNDpcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCA9IFJFQURfT05DRShzeXNfY3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4yMTA1Olx0XHQvKiBhZGRyX3VuaXQgaXMgcmVzcGVjdGVkIGJ5IG9ubHkgREFNT05fT1BTX1BBRERSICovXG4yMTA2Olx0XHRpZiAob3BzX2lkID09IERBTU9OX09QU19QQUREUilcbjIxMDc6XHRcdFx0Y3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoXG4yMTA4Olx0XHRcdFx0XHREQU1PTl9NSU5fUkVHSU9OX1NaIC8gY3R4LVx1MDAzZWFkZHJfdW5pdCwgMSk7XG4yMTA5Olx0XHRjdHgtXHUwMDNlcGF1c2UgPSBzeXNfY3R4LVx1MDAzZXBhdXNlO1xuMjExMDpcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cdTAwM2VhdHRycyk7XG4yMTExOlx0XHRpZiAoZXJyKVxuMjExMjpcdFx0XHRyZXR1cm4gZXJyO1xuMjExMzpcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhjdHgsIHN5c19jdHgtXHUwMDNlYXR0cnMtXHUwMDNlcHJvYmVzKTtcbjIxMTQ6XHRcdGlmIChlcnIpXG4yMTE1Olx0XHRcdHJldHVybiBlcnI7XG4yMTE2Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhjdHgsIHN5c19jdHgtXHUwMDNldGFyZ2V0cyk7XG4yMTE3Olx0XHRpZiAoZXJyKVxuMjExODpcdFx0XHRyZXR1cm4gZXJyO1xuMjExOTpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cdTAwM2VzY2hlbWVzKTtcbjIxMjA6XHR9XG4yMTIxOlx0XG4yMTIyOlx0c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbjIxMjM6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU4NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGRlYWxpbmcgd2l0aCBzb21lb25lIHdobyB1bmRlcnN0YW5kcyBzeXN0ZW0gaW50ZXJuYWxzOgoKKipDaGVja2luZyB0aGUgREFNT04gU2NoZW1lIFNldHVwKioKCkhtbSwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYOKApiB0aGF0IHJpbmdzIGEgYmVsbC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIGFkZGluZyBzY2hlbWVzIGV2ZW50dWFsbHkgZnVubmVscyBkb3duIHRvIHRoZSBjb3JlIHNldHVwIGZ1bmN0aW9uLiBUaGUgcXVlc3Rpb24gSSYjMzk7dmUgZ290IGlzLCBkb2VzIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgZGlyZWN0bHkgaW52b2tlIGBkYW1vbl9zZXRfc2NoZW1lc2A/IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgc2hvdWxkLiBCdXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjcml0aWNhbCBjb250cm9sIHBhdGhzLiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdWJ0bGUgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBsYXllci4gTGV0JiMzOTtzIHRyYWNlIHRoYXQgY2FsbCBzdGFjayBxdWlja2x5IGFuZCBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMDk0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTgtXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9zeXNmcy5jOjIxMTk6XHRyZXR1cm4gZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoY3R4LCBzeXNfY3R4LVx1MDAzZXNjaGVtZXMpO1xubW0vZGFtb24vc3lzZnMuYy0yMTIwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5NTUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgZ2VhcnMgYXJlIHN0YXJ0aW5nIHRvIHR1cm4sIHRoZSBuYW1lIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXMgYm91bmNpbmcgYXJvdW5kLiBJbnN0YW50bHksIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgbGlrZWx5IHBlcnRhaW5zIHRvIHRoZSBEeW5hbWljIEFkZHJlc3MgTW9uaXRvcmluZyAoREFNT04pIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSB2aWEgdGhlIHN5c2ZzIGZpbGVzeXN0ZW0uIFRoZSAmIzM0O2FkZF9zY2hlbWVzJiMzNDsgcGFydCBpbW1lZGlhdGVseSBzdWdnZXN0cyBjb25maWd1cmF0aW9uOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoICpkZWZpbmluZyogbW9uaXRvcmluZyBzY2hlbWVzLCByaWdodD8gSSYjMzk7bSBwaWN0dXJpbmcgdGhlIHByb2Nlc3M6IGxpa2VseSBjcmVhdGluZyBlbnRyaWVzLCBhdHRyaWJ1dGVzLCBwZXJoYXBzIHNldHRpbmcgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHJlZ2lvbnMgb3IgcHJvY2Vzc2VzIHRoYXQgd2Ugd2FudCBEQU1PTiB0byB0cmFjay4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBpcyBhYm91dCBzZXR0aW5nIG1vbml0b3JpbmcgKnRhcmdldHMqLCB0aGUgcmVnaW9ucyB0byBtb25pdG9yLCBvciBwZXJoYXBzIGhvdyB0aGUgbW9uaXRvcmluZyBpdHNlbGYgd29ya3MuIElzIHRoaXMgYWJvdXQgYWRkaW5nIG5ldyBtb25pdG9yaW5nIHR5cGVzLCBvciBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcz8gSSYjMzk7bSBob3BpbmcgZm9yIGEgY2xlYW4gaW50ZXJmYWNlLCByb2J1c3QgZXJyb3IgaGFuZGxpbmfigKYga25vd2luZyBob3cgREFNT04mIzM5O3MgZXZvbHZlZCwgdGhhdOKAmXMgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBvbmUgY2FuIGhvcGUhIEkmIzM5O20gcGljdHVyaW5nIGl0IGluIHRoZSBzeXNmcyBoaWVyYXJjaHkuIFdoZXJlIGlzIGl0IGxvY2F0ZWQsIGhvdyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmVkLCBob3cgd2lsbCB0aGlzIGludGVyZmFjZSBwbGF5IG5pY2Ugd2l0aCB0aGUgZXhpc3RpbmcgbW9uaXRvcmluZyBhbmQgREFNT04gY29uZmlndXJhdGlvbi4gTmVlZCB0byBnZXQgdGhlIHNwZWNpZmljcywgYW5kIHRoZW4gZGV0ZXJtaW5lIGhvdyBpdCB3aWxsIGltcGFjdCB0aGUgc3lzdGVtLiBJdCBjb3VsZCBiZSBzaWduaWZpY2FudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyB0aGUga2V5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzQ5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzZWFyY2ggZm9yIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AuIEkmIzM5O20gY3VyaW91cyBhYm91dCB3aGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSByZWxhdGVzIHRvIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgc3VzcGVjdCBpdCYjMzk7cyBwcm9iYWJseSBwYXJ0IG9mIGEgbGFyZ2VyIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBpbXBsZW1lbnRhdGlvbiwgZ2l2ZW4gdGhlICYjMzQ7ZGFtb24mIzM0OyBwcmVmaXggYW5kIHRoZSAmIzM0O3N5c2ZzJiMzNDsgY29tcG9uZW50IHN1Z2dlc3RzIGludGVyYWN0aW9uIHRocm91Z2ggdGhlIHN5c2ZzIGZpbGUgc3lzdGVtIGludGVyZmFjZS4gVGhlICYjMzQ7YWRkX3NjaGVtZXMmIzM0OyBwYXJ0IGltcGxpZXMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gZGVmaW5pbmcgb3IgcmVnaXN0ZXJpbmcgbW9uaXRvcmluZyBzY2hlbWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgc29tZSBpbml0aWFsIHJlc3VsdHMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgSSYjMzk7bGwgdGhlbiBsaWtlbHkgc3RhcnQgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHMsIHJldHVybiB2YWx1ZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgY29udHJvbCBmbG93IG9mIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgcmVsYXRlZCB0byBzZXR0aW5nIHVwIG1vbml0b3JpbmcgcnVsZXMsIGNvbmZpZ3VyaW5nIGRpZmZlcmVudCBEQU1PTiBwcm9maWxlcywgb3IgcGVyaGFwcyBkZWZpbmluZyBjdXN0b20gZGF0YSBjb2xsZWN0aW9uIHN0cmF0ZWdpZXMuIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vc3lzZnMuYzoyMTE5Olx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cdTAwM2VzY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipXaGVyZSYjMzk7cyBUaGF0IEZ1bmN0aW9uIEhpZGluZz8qKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgSSYjMzk7dmUgaGl0IGEgc25hZy4gSSYjMzk7bSBsb29raW5nIGF0IGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGJ1dCBteSBtZW50YWwgbWFwIG9mIHRoZSBwcm9qZWN0IGlzbiYjMzk7dCBpbW1lZGlhdGVseSBwbGFjaW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZC4gSSBrbm93IERBTU9OIGlzIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLCBhbmQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGl0cyBzeXNmcyBpbnRlcmZhY2VzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGFkZGluZyB0aGVzZSBzY2hlbWVzIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBwcm9qZWN0JiMzOTtzIHN0cnVjdHVyZS4gSXMgdGhpcyBpbiB0aGUgY29yZSBEQU1PTiBjb2RlLCBhIHV0aWxpdHkgbGlicmFyeSwgb3IgcGVyaGFwcyBhIG1vZHVsZSByZWxhdGVkIHRvIHN5c2ZzIHNwZWNpZmljYWxseT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgb3ZlcmFsbCBiZWhhdmlvciB3aXRoaW4gdGhlIHNjaGVtZSBjcmVhdGlvbiBmbG93LiBXaXRob3V0IHRoYXQsIEkmIzM5O20gc3R1Y2ssIGFuZCBmdXJ0aGVyIGFuYWx5c2lzIGlzIG9uIGhvbGQuIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD0zNz1leHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtMzgtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDAtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vc3lzZnMuYzoyMTE5Olx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cdTAwM2VzY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDEzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgREFNT04gU3lzdGVtIEZpbGVzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29kZSByZWxhdGVkIHRvIGFkZGluZyBzY2hlbWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBUaGUgcGF0aCBJJiMzOTttIGxvb2tpbmcgYXQsIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBpbW1lZGlhdGVseSBtYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBsb2NhdGlvbiBmb3Igc3lzZnMgaW50ZXJmYWNlIGhhbmRsaW5nIGZvciBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lcy4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciByZWdpc3RlcmluZyBvciBtYWtpbmcgYWNjZXNzaWJsZSB0aGUgZGlmZmVyZW50IERBTU9OIHNjaGVtZXMgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgaG93IHRoZSBzY2hlbWVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGVhY2ggc2NoZW1lIGlzIGludGVncmF0ZWQsIHdoYXQgYXR0cmlidXRlcyBhcmUgY3JlYXRlZCBmb3IgZWFjaCwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDQ0Olx0aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbjMwNDU6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4zMDQ2Olx0e1xuMzA0NzpcdFx0aW50IGk7XG4zMDQ4Olx0XG4zMDQ5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19zY2hlbWVzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuMzA1MDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgKm5leHQ7XG4zMDUxOlx0XG4zMDUyOlx0XHRcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldKTtcbjMwNTM6XHRcdFx0aWYgKCFzY2hlbWUpIHtcbjMwNTQ6XHRcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWVfc2FmZShzY2hlbWUsIG5leHQsIGN0eClcbjMwNTU6XHRcdFx0XHRcdGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHNjaGVtZSk7XG4zMDU2Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMDU3Olx0XHRcdH1cbjMwNTg6XHRcdFx0ZGFtb25fYWRkX3NjaGVtZShjdHgsIHNjaGVtZSk7XG4zMDU5Olx0XHR9XG4zMDYwOlx0XHRyZXR1cm4gMDtcbjMwNjE6XHR9XG4zMDYyOlx0XG4zMDYzOlx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBDaGFuZ2VzIFJlbGF0ZWQgdG8gYGRhbW9uX2FkZF9zY2hlbWVgKioKCk9rYXksIHNvIGBkYW1vbl9hZGRfc2NoZW1lYCBoYXMgYmVlbiB0cmlnZ2VyZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIERBTU9OIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3RpdmUgZHVyaW5nIHNjaGVtZSBhcHBsaWNhdGlvbi4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9zX2FwcGx5X3NjaGVtZWAsIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGAsIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLCBga2RhbW9uZF9pbml0X2N0eGAsIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGFuZCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgLiBUaGVzZSBhcmUgYWxsIGNvcmUgREFNT04gZnVuY3Rpb25zLCBkZWFsaW5nIHdpdGggbWVtb3J5IHVzYWdlLCBwYWdlb3V0LCBtaWdyYXRpb24sIGFuZCBzdGF0aXN0aWNzIGdhdGhlcmluZ+KAlGVzc2VudGlhbGx5LCB0aGUgaGVhcnQgb2YgREFNT04mIzM5O3Mgb3BlcmF0aW9uIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLgoKVGhlIHdheSB0byBnZXQgdG8gdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIGJ5IGludGVyYWN0aW5nIHdpdGggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgb3IgdmlhIGBkYW1vbl9yZWNsYWltYCBhbmQgYGRhbW9uX2xydV9zb3J0YC4gU2luY2UgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gdGhhdCB0aGlzIHBhdGNoIHJlcHJlc2VudHMsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgZGVmaW5lZC4gVGhpcyBuYXJyb3dzIG15IGZvY3VzLCB3aGljaCBpcyBoZWxwZnVsLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPyBUaGUgbW9zdCByZWxldmFudCBvbmVzIGFwcGVhciB0byBiZSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGBkYW1vbl9zeXNmc19zZXRfYXR0cnNgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb25fc3lzZnNfbWtfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AsIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBhbmQgYGRhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0X3N0b3JlYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNvbnRyb2wgcG9pbnRzIGZvciBhZGRpbmcsIGNvbmZpZ3VyaW5nLCBhbmQgdHJpZ2dlcmluZyB0aGUgc2NoZW1lIGNoYW5nZXMuCgpUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHByb2Nlc3MsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGNvZGUgZm9yIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgZm9jdXMgb24gaG93IGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdF9zdG9yZWAgaXMgaW1wbGVtZW50ZWQuIFRoYXQmIzM5O3MgdGhlIGJlc3QgZW50cnkgcG9pbnQgZm9yIGhvdyB0aGlzIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgbGluZXMgb2YgY29kZToKCioqQW5hbHl6aW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgU3RvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vZGFtb24vc3lzZnMuY2AgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgaGFwcGVuaW5nIHdpdGggREFNT04sIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBjb25maWd1cmF0aW9ucyBhcmUgYmVpbmcgc2V0LiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB3aXRoIHRoZSBgc3RvcmVgIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgdGhlIGNyaXRpY2FsIHBpZWNlcywgdGhlIGVudHJ5IHBvaW50cyB0aGF0IGhhbmRsZSBpbmNvbWluZyBkYXRhIGZyb20gc3lzZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgc2V0LCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbW9kaWZpZWQsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgREFNT04mIzM5O3MgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGZ1bmN0aW9ucyB3aXRoIG5hbWVzIGxpa2UgYGRhbW9uX2F0dHJfc2V0X3h4eGAgb3Igc2ltaWxhciwgZWFjaCBvbmUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgc3lzZnMgYXR0cmlidXRlIGV4cG9zZWQgZm9yIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZGF0YSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIGFzIHRoYXQmIzM5O3MgYWx3YXlzIGEgcG9pbnQgb2YgaW50ZXJlc3QuIEluIG15IG1pbmQmIzM5O3MgZXllIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdyZXAgdG8gZmluZCBhbGwgdGhlIGxpa2VseSBjYW5kaWRhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfc3RvcmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjY9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMzQtXG5tbS9kYW1vbi9zeXNmcy5jOjM1OnN0YXRpYyBzc2l6ZV90IHN0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTM2LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTQ1PXN0YXRpYyBzc2l6ZV90IGVuZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy01My1cbm1tL2RhbW9uL3N5c2ZzLmM6NTQ6c3RhdGljIHNzaXplX3QgZW5kX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS9kYW1vbi9zeXNmcy5jLTU1LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE1NT1zdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNjMtXG5tbS9kYW1vbi9zeXNmcy5jOjE2NDpzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy0xNjUtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDY9c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjU0LVxubW0vZGFtb24vc3lzZnMuYzoyNTU6c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMjU2LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY3PXN0YXRpYyBzc2l6ZV90IG9ic29sZXRlX3RhcmdldF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc1LVxubW0vZGFtb24vc3lzZnMuYzoyNzY6c3RhdGljIHNzaXplX3Qgb2Jzb2xldGVfdGFyZ2V0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy0yNzctXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0zOTA9c3RhdGljIHNzaXplX3QgbnJfdGFyZ2V0c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMzk4LVxubW0vZGFtb24vc3lzZnMuYzozOTk6c3RhdGljIHNzaXplX3QgbnJfdGFyZ2V0c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtNDAwLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NDcxPXN0YXRpYyBzc2l6ZV90IGFjY2Vzc19icF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNDc5LVxubW0vZGFtb24vc3lzZnMuYzo0ODA6c3RhdGljIHNzaXplX3QgYWNjZXNzX2JwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy00ODEtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz00OTU9c3RhdGljIHNzaXplX3QgYWdncnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTUwMy1cbm1tL2RhbW9uL3N5c2ZzLmM6NTA0OnN0YXRpYyBzc2l6ZV90IGFnZ3JzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy01MDUtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz01MTk9c3RhdGljIHNzaXplX3QgbWluX3NhbXBsZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNTI3LVxubW0vZGFtb24vc3lzZnMuYzo1Mjg6c3RhdGljIHNzaXplX3QgbWluX3NhbXBsZV91c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtNTI5LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NTQzPXN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTU1MS1cbm1tL2RhbW9uL3N5c2ZzLmM6NTUyOnN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTU1My1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTY1Mz1zdGF0aWMgc3NpemVfdCBzYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTY2MS1cbm1tL2RhbW9uL3N5c2ZzLmM6NjYyOnN0YXRpYyBzc2l6ZV90IHNhbXBsZV91c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtNjYzLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9Njc3PXN0YXRpYyBzc2l6ZV90IGFnZ3JfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNjg1LVxubW0vZGFtb24vc3lzZnMuYzo2ODY6c3RhdGljIHNzaXplX3QgYWdncl91c19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vZGFtb24vc3lzZnMuYy02ODctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NzAxPXN0YXRpYyBzc2l6ZV90IHVwZGF0ZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtNzA5LVxubW0vZGFtb24vc3lzZnMuYzo3MTA6c3RhdGljIHNzaXplX3QgdXBkYXRlX3VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy03MTEtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz03ODc9c3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtODAzLVxubW0vZGFtb24vc3lzZnMuYzo4MDQ6c3RhdGljIHNzaXplX3QgdHlwZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtODA1LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI1PXN0YXRpYyBzc2l6ZV90IG1hdGNoaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy04MzMtXG5tbS9kYW1vbi9zeXNmcy5jOjgzNDpzdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtODM1LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODQ5PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy04NTctXG5tbS9kYW1vbi9zeXNmcy5jOjg1ODpzdGF0aWMgc3NpemVfdCBhbGxvd19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtODU5LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODczPXN0YXRpYyBzc2l6ZV90IHBhdGhfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTg4Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6ODg3OnN0YXRpYyBzc2l6ZV90IHBhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTg4OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEwMTA9c3RhdGljIHNzaXplX3QgbnJfZmlsdGVyc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTAxOC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTAxOTpzdGF0aWMgc3NpemVfdCBucl9maWx0ZXJzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMuYy0xMDIwLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTEwND1zdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTExMi1cbm1tL2RhbW9uL3N5c2ZzLmM6MTExMzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTExMTQtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMjIwPXN0YXRpYyBzc2l6ZV90IG5yX3Byb2Jlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTIyOC1cbm1tL2RhbW9uL3N5c2ZzLmM6MTIyOTpzdGF0aWMgc3NpemVfdCBucl9wcm9iZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTEyMzAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNTM2PXN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE1NTItXG5tbS9kYW1vbi9zeXNmcy5jOjE1NTM6c3RhdGljIHNzaXplX3Qgb3BlcmF0aW9uc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTU1NC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE1NzI9c3RhdGljIHNzaXplX3QgYWRkcl91bml0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNTgwLVxubW0vZGFtb24vc3lzZnMuYzoxNTgxOnN0YXRpYyBzc2l6ZV90IGFkZHJfdW5pdF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTU4Mi1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE1OTg9c3RhdGljIHNzaXplX3QgcGF1c2Vfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTYwNi1cbm1tL2RhbW9uL3N5c2ZzLmM6MTYwNzpzdGF0aWMgc3NpemVfdCBwYXVzZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vZGFtb24vc3lzZnMuYy0xNjA4LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3MzA9c3RhdGljIHNzaXplX3QgbnJfY29udGV4dHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE3MzgtXG5tbS9kYW1vbi9zeXNmcy5jOjE3Mzk6c3RhdGljIHNzaXplX3QgbnJfY29udGV4dHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTE3NDAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMjg4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjk1LVx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxubW0vZGFtb24vc3lzZnMuYzoyMjk2Olx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTctXHQgKi9cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDMtXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDQ6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwNS1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDQ4PXN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjI0NTc6c3RhdGljIHNzaXplX3QgcmVmcmVzaF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMjQ1OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1OTc9c3RhdGljIHNzaXplX3QgbnJfa2RhbW9uZHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI2MDUtXG5tbS9kYW1vbi9zeXNmcy5jOjI2MDY6c3RhdGljIHNzaXplX3QgbnJfa2RhbW9uZHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy5jLTI2MDctXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTc4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21tYW5kIEhhbmRsZXIqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNvbW1hbmRzLiBNeSBtZW50YWwgbW9kZWwgc2F5cyB0aGF0IGBzdGF0ZV9zdG9yZWAgaXMgdGhlIGNlbnRyYWwgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjb21tYW5kIHByb2Nlc3NpbmcsIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgcGFydCBvZiBpdC4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzdGF0ZV9zdG9yZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGFyY2hpdGVjdHVyZSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgaXQgbWFrZXMgYWJvdXQgdGhlIGluY29taW5nIGNvbW1hbmRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgaW5wdXQgcHJvY2Vzc2luZy4gSSBiZXQgSSBjYW4gaWRlbnRpZnkgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBxdWlja2x5IGJ5IGV4YW1pbmluZyBob3cgaXQgZGlzcGF0Y2hlcyB0byBpbnRlcm5hbCBwcm9jZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQwNDpcdHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4yNDA1Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMjQwNjpcdHtcbjI0MDc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gY29udGFpbmVyX29mKGtvYmosXG4yNDA4Olx0XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xuMjQwOTpcdFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xuMjQxMDpcdFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuMjQxMTpcdFxuMjQxMjpcdFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuMjQxMzpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjQxNDpcdFx0Zm9yIChjbWQgPSAwOyBjbWQgXHUwMDNjIE5SX0RBTU9OX1NZU0ZTX0NNRFM7IGNtZCYjNDM7JiM0MzspIHtcbjI0MTU6XHRcdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgZGFtb25fc3lzZnNfY21kX3N0cnNbY21kXSkpIHtcbjI0MTY6XHRcdFx0XHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XG4yNDE3Olx0XHRcdFx0YnJlYWs7XG4yNDE4Olx0XHRcdH1cbjI0MTk6XHRcdH1cbjI0MjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcbjI0MjE6XHRcdGlmICghcmV0KVxuMjQyMjpcdFx0XHRyZXQgPSBjb3VudDtcbjI0MjM6XHRcdHJldHVybiByZXQ7XG4yNDI0Olx0fVxuMjQyNTpcdFxuMjQyNjpcdHN0YXRpYyBzc2l6ZV90IHBpZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuMjQyNzpcdFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbjI0Mjg6XHR7XG4yNDI5Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxuMjQzMDpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kLCBrb2JqKTtcbjI0MzE6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjI0MzI6XHRcdGludCBwaWQgPSAtMTtcbjI0MzM6XHRcbjI0MzQ6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcbjI0MzU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI0MzY6XHRcdGN0eCA9IGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4O1xuMjQzNzpcdFx0aWYgKCFjdHgpXG4yNDM4Olx0XHRcdGdvdG8gb3V0O1xuMjQzOTpcdFxuMjQ0MDpcdFx0cGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcbjI0NDE6XHRcdGlmIChwaWQgXHUwMDNjIDApXG4yNDQyOlx0XHRcdHBpZCA9IC0xO1xuMjQ0MzpcdG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0NDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29tbWFuZCBIYW5kbGluZyBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRg4oCmIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyAqdGhlKiBmdW5jdGlvbiB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgdGhlc2UgREFNT04gc3lzZnMgaW50ZXJhY3Rpb25zLiBFdmVyeXRoaW5nIHdlJiMzOTtyZSBkb2luZywgYWxsIHRoZSBzZXR1cCwgdGhlIGRhdGEgc3RydWN0dXJlcywgdGhlIGtub2JzIHdlJiMzOTt2ZSBjcmVhdGVkIGluIHRoZSBzeXNmcyBoaWVyYXJjaHkg4oCTIHRoZXkgYWxsIGN1bG1pbmF0ZSBoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgY29tbWFuZHMgYXJlICppbnRlcnByZXRlZCogYW5kICpleGVjdXRlZCouIEkgbmVlZCB0byBiZSByYXpvci1zaGFycCBhYm91dCB0aGlzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgY29tbWFuZHMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFNldHRpbmcgbW9uaXRvcmluZyByZWdpb25zPyBNb2RpZnlpbmcgc2FtcGxpbmcgcGFyYW1ldGVycz8gVHJpZ2dlcmluZyBtYW51YWwgdXBkYXRlcz8gUHJvYmFibHkgYWxsIG9mIHRoZSBhYm92ZSwgYW5kIG1vcmUuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgbWFzc2l2ZSBzd2l0Y2ggc3RhdGVtZW50IG9yIGEgc2VyaWVzIG9mIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBlYWNoIGhhbmRsaW5nIGEgc3BlY2lmaWMgY29tbWFuZCBjb2RlIG9yIHN0cmluZyBpZGVudGlmaWVyLiBUaGUgcm9idXN0bmVzcyBvZiB0aGlzIGVudGlyZSBzeXN0ZW0gaGluZ2VzIG9uIHRoZSB0aG9yb3VnaG5lc3Mgb2YgdGhlIGNvbW1hbmQgcGFyc2luZyBhbmQgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBhc3NvY2lhdGVkIGFjdGlvbnMuCgpJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5IGludGVycHJldHMgdXNlciBpbnB1dCwgZGVhbHMgd2l0aCBhbnkgcG90ZW50aWFsIGVycm9ycyBsaWtlIGludmFsaWQgYXJndW1lbnRzLCBvciBjb21tYW5kcyB0aGF0IGFyZSBhdHRlbXB0ZWQgd2hlbiB0aGUgc3lzdGVtIGlzIG5vdCBpbiBhIHZhbGlkIHN0YXRlLiBUaGluayBhYm91dCB0aGUgZWRnZSBjYXNlcy4gVGhpbmsgYWJvdXQgc2VjdXJpdHkuIElzIHRoZXJlIGEgcG90ZW50aWFsIGZvciBjb21tYW5kIGluamVjdGlvbiBvciBvdGhlciBtYWxpY2lvdXMgbWFuaXB1bGF0aW9uIGhlcmU/IEdvdHRhIGJlIG9uIGhpZ2ggYWxlcnQgZm9yIHRob3NlIHBvc3NpYmlsaXRpZXMuIEkgd2FudCB0byBlbnN1cmUgZXZlcnkgY29tbWFuZCBpcyB2YWxpZGF0ZWQuIElzIHRoZSBleGVjdXRpb24gdGhyZWFkIHNhZmUsIG9yIGRvZXMgaXQgY2FsbCBleHRlcm5hbCBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIGxvY2tpbmc/IEkgbmVlZCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgZGF0YSBmbG93IHRocm91Z2ggaXQgd2l0aCBteSBleWVzIGNsb3NlZC4KCkluIG15IG1pbmQsIGEgd2VsbC1kZXNpZ25lZCBjb21tYW5kIGhhbmRsZXIgc2hvdWxkIG1pbmltaXplIHRoZSBhbW91bnQgb2YgaW50ZXJuYWwgc3RhdGUgaXQgbW9kaWZpZXMgZGlyZWN0bHksIGVzcGVjaWFsbHkgZ2xvYmFsIHN0YXRlLiBJZGVhbGx5LCBpdCBzaG91bGQgYWJzdHJhY3QgbW9zdCBvZiB0aGUgaGVhdnkgbGlmdGluZyBvdXQgaW50byBsb3dlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdGVzdGVkIGluZGVwZW5kZW50bHkuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM2NDpcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4yMzY1Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjM2NjpcdHtcbjIzNjc6XHRcdGlmIChjbWQgIT0gREFNT05fU1lTRlNfQ01EX09GRiBcdTAwMjZcdTAwMjYga2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjM2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIzNjk6XHRcbjIzNzA6XHRcdHN3aXRjaCAoY21kKSB7XG4yMzcxOlx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PTjpcbjIzNzI6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XG4yMzczOlx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XG4yMzc0Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihrZGFtb25kKTtcbjIzNzU6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVDpcbjIzNzY6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzc3Olx0XHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xuMjM3ODpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFM6XG4yMzc5Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM4MDpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXG4yMzgxOlx0XHRcdFx0XHRrZGFtb25kKTtcbjIzODI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxuMjM4MzpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbjIzODQ6XHRcdFx0XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzLCBrZGFtb25kKTtcbjIzODU6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1RSSUVEX0JZVEVTOlxuMjM4NjpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9ucyhrZGFtb25kLCB0cnVlKTtcbjIzODc6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1RSSUVEX1JFR0lPTlM6XG4yMzg4Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIGZhbHNlKTtcbjIzODk6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcbjIzOTA6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbjIzOTE6XHRcdFx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VzY2hlbWVzKTtcbjIzOTI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XG4yMzkzOlx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM5NDpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyxcbjIzOTU6XHRcdFx0XHRcdGtkYW1vbmQpO1xuMjM5NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1RVTkVEX0lOVEVSVkFMUzpcbjIzOTc6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzk4Olx0XHRcdFx0XHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzLCBrZGFtb25kKTtcbjIzOTk6XHRcdGRlZmF1bHQ6XG4yNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjQwMTpcdFx0fVxuMjQwMjpcdH1cbjI0MDM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2OTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIFN5c2ZzIEVudHJ5IFBvaW50cyBhbmQgUGF0Y2ggSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgREFNT04gc3lzZnMgY29kZSwgYW5kIGl0IHNlZW1zIGxpa2UgYHN0YXRlX3N0b3JlYCBhbmQgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGFyZSBkZWZpbml0ZWx5IGNlbnRyYWwuIEkgYWxzbyBzZWUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gV2hhdCBhYm91dCBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YD8gTmVlZCB0byB0cmFjayB0aGF0IGRvd24gYXMgd2VsbC4KCkxldCYjMzk7cyBtYWtlIGEgbGlzdCB0byBrZWVwIHRyYWNrOgoqICAgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gCiogICBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YAoqICAgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgCiogICBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgCiogICBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYAoqICAgYGRhbW9uX3N5c2ZzX2J1aWxkX2N0eGAKClJpZ2h0LCBub3cgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBpcyBhY3R1YWxseSBsb2NhdGVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBJbXBvcnRhbnQgdG8gbm90ZSB0aGF0LCBhcyBJIHdhcyBvcmlnaW5hbGx5IGV4cGVjdGluZyBpdCB0byBiZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIExldCYjMzk7cyBjb25maXJtIHF1aWNrbHkgaWYgYW55IG90aGVyIHN5c2ZzIGZpbGVzIGFyZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLi4uIE5vcGUsIG9ubHkgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4KClRoZSBwYXRjaCBub3RlcyBtZW50aW9uIGEgd2hvbGUgYnVuY2ggb2YgYnVnIGZpeGVzIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGBrZGFtb25kX2luaXRfY3R4YCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLgoKQnV0IHdhaXQgYSBtaW51dGUsIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCBpcyBzdGF0aWMuIEFuZCBgc3RhdGVfc3RvcmVgIGlzIGFsc28gc3RhdGljLiBBcmUgdGhlcmUgZXZlbiAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMuY2A/IEdvdHRhIGZpZ3VyZSB0aGlzIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jLTE1LVxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy5jOjkyOnN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0zMTctXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XG5tbS9kYW1vbi9zeXNmcy5jLTMxOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cbm1tL2RhbW9uL3N5c2ZzLmM6NDQ2OnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy02MDItXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNzU4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc2NT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciAqZGFtb25fc3lzZnNfZmlsdGVyX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy03NjktXG5tbS9kYW1vbi9zeXNmcy5jOjc3MDpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTc3MS1cdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTkzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy05NDYtXG5tbS9kYW1vbi9zeXNmcy5jOjk0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTk0OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMDY1LVxubW0vZGFtb24vc3lzZnMuYzoxMDY2OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTEwNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZV9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTExNDYtXG5tbS9kYW1vbi9zeXNmcy5jOjExNDc6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyB7XG5tbS9kYW1vbi9zeXNmcy5jLTExNDgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMjc1LVxubW0vZGFtb24vc3lzZnMuYzoxMjc2OnN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTEyNzctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTEzODEtXG5tbS9kYW1vbi9zeXNmcy5jOjEzODI6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4My1cdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDEtXG5tbS9kYW1vbi9zeXNmcy5jOjE0MDI6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQge1xubW0vZGFtb24vc3lzZnMuYy0xNDAzLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE2NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2NTctXG5tbS9kYW1vbi9zeXNmcy5jOjE2NTg6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1OS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc4Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc4NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG5tbS9kYW1vbi9zeXNmcy5jLTE3ODgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMwMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjMxNC1cbm1tL2RhbW9uL3N5c2ZzLmM6MjMxNTpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lc193YWxrX2RhdGEge1xubW0vZGFtb24vc3lzZnMuYy0yMzE2LVx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTA4LVxubW0vZGFtb24vc3lzZnMuYzoyNTA5OnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyB7XG5tbS9kYW1vbi9zeXNmcy5jLTI1MTAtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI2NTMtXG5tbS9kYW1vbi9zeXNmcy5jOjI2NTQ6c3RydWN0IGRhbW9uX3N5c2ZzX3VpX2RpciB7XG5tbS9kYW1vbi9zeXNmcy5jLTI2NTUtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gU3lzZnMgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGV2ZXJ5dGhpbmcgc2VlbXMgcHJldHR5IGxvY2tlZCBkb3duIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgZ2V0dGluZyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSWYgZXZlcnl0aGluZyBpbiB0aGF0IGZpbGUgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHN1Z2dlc3RzIHRob3NlIGZ1bmN0aW9ucyBhcmUgb25seSBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHNwZWNpZmljIG1vZHVsZS4gSSYjMzk7ZCBiZXR0ZXIgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIHB1YmxpYyBlbnRyeSBwb2ludHMsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gSSYjMzk7bSBiZXR0aW5nIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBhbmQgcGFyYW1ldGVyIGRlZmluaXRpb24gYXJlIGhhbmRsZWQgdGhlcmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaXMgc3RydWN0dXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OnN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTc6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNjY6c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01MjM9ZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTI4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOTpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMwLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTUxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU1MjpzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTUzLVx0ZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz04ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODkxLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg5MjpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTg5My1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMTktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTAyMDpzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAyMS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMjk9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICpkYW1vbl9zeXNmc193YXRlcm1hcmtzX2FsbG9jKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwNDY6c3RydWN0IGRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDQ3LVx0ZW51bSBkYW1vc193bWFya19tZXRyaWMgbWV0cmljO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxNi1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMjQ9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyOTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzAtXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjM1OnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjM2LVx0e1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ1MDpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTEtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NzA6c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NzEtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dlaWdodHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTY4MDpzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjgxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTgwND1zdGF0aWMgc3NpemVfdCBlZmZlY3RpdmVfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTgxMi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxODEzOnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF90dW5lcl9uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODE0LVx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHR1bmVyO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTU1OnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk1Ni1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE5NjI9c3RhdGljXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTk2MzpzdHJ1Y3QgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm4gKmRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2NC17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA1MDpzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdCB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1MS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMTk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEyOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI5OnN0cnVjdCBkYW1vc19zeXNmc19kZXN0cyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEzMC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIyNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjI1MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjUxLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2NS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjY2OnN0cnVjdCBkYW1vc19zeXNmc19hY3Rpb25fbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjI2Ny1cdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NzktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4MDpzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjg0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODU6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4Ni17XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyOTp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzAtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ0OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0NS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Mzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjQtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAwLSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDE6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDItXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTQ4OmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0OS1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipFeGFtaW5pbmcgREFNT04mIzM5O3Mgc3lzZnMgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBEQU1PTiBzeXNmcyBmdW5jdGlvbnM6IGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCwgYGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzYCwgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzYCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuIFRoZXkmIzM5O3JlIGFsbCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0IGZvciBzeXNmcyBlbnRyeSBwb2ludHMuIFRoZXkgbmVlZCB0byBiZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwmIzM5O3Mgc3lzZnMgaW5mcmFzdHJ1Y3R1cmUuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyAqc3RhdGljKj8gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLiBUaGlzIGltcGxpZXMgaXQmIzM5O3Mgb25seSB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBzeXNmcyBjb2RlLCB3aGljaCBpcyBmaW5lLCBidXQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdC4gTm9wZSwgSSYjMzk7dmUgY2hlY2tlZC4gU2VlbXMgbGlrZSBhbGwgb2YgdGhvc2UgbGlzdGVkIGFyZSBub24tc3RhdGljIGV4Y2VwdCBmb3IgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLgoKV2FpdCBhIG1pbnV0ZSwgaWYgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoaXMgaGFzIG1lIHRoaW5raW5nLiBJcyBgbW0vZGFtb24vc3lzZnMuY2AgYWN0dWFsbHkgYSBtb2R1bGU/IFRoYXQgd291bGQgZXhwbGFpbiB0aGUgbmVlZCBmb3IgdGhlIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zLCBhbmQgdGhlIHNlZW1pbmdseSBpbnRlcm5hbCBzdGF0aWMgZnVuY3Rpb24gd291bGQgd29yayBhcyB3ZWxsLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBgbW9kdWxlX2luaXRgIG9yIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IHdvdWxkIGRlZmluaXRlbHkgY29uZmlybSB0aGF0IGl0JiMzOTtzIGEgbG9hZGFibGUgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0Y2FsbHxtb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yNzAwPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3N5c2ZzX2luaXQodm9pZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3MjgtfVxubW0vZGFtb24vc3lzZnMuYzoyNzI5OnN1YnN5c19pbml0Y2FsbChkYW1vbl9zeXNmc19pbml0KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjczMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwMTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUgSW50ZXJmYWNlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG1vZHVsZSBvciBzdWJzeXN0ZW0g4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBpcyBnb2luZyB0byBiZSB0aGF0IHN5c2ZzIGludGVyZmFjZTsgdGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQuIE5vdywgdGhlIHRyaWNrIGlzIHRoYXQgd2UgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgLCBidXQgdGhleSBuZWVkIHRvIGJlIG5vbi1zdGF0aWMuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBmdW5jdGlvbnMgYXJlIHdlIGxvb2tpbmcgYXQgZm9yIHRoYXQ/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCAtIHllcywgdGhhdCBjb3VsZCB3b3JrLgoqICAgYGRhbW9uX3NldF9hdHRyc2AgLSBhbHNvIHByb21pc2luZy4KKiAgIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zdG9wYCAtIHRob3NlIGFyZSBvYnZpb3VzIGNvbnRyb2wgZnVuY3Rpb25zLgoqICAgQW5kIHRoZXJlJiMzOTtzIHRoaXMgYGRhbW9uX3NldF9zY2hlbWVzYC4uLiB3YWl0Li4uIGFjdHVhbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJc24mIzM5O3QgYGRhbW9uX3NldF9hdHRyc2AgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgaW4gYG1tL2RhbW9uL2NvcmUuY2A/IAoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBjb3JlLmNgIGZpbGUgYW5kIHNlZSB3aGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBoaWRpbmcgaW4gdGhlcmUuIFdlJiMzOTtsbCBmaW5kIHdoYXQgd2UgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTHx2b2lkIGRhbW9uX3xeaW50IGRhbW9uXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzAtICovXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxubW0vZGFtb24vY29yZS5jLTcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcbm1tL2RhbW9uL2NvcmUuYy05OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI4LVxubW0vZGFtb24vY29yZS5jOjEyOTp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTEzMC17XG4tLVxubW0vZGFtb24vY29yZS5jLTEzMy1cbm1tL2RhbW9uL2NvcmUuYzoxMzQ6c3RhdGljIHZvaWQgZGFtb25fZGVsX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxubW0vZGFtb24vY29yZS5jLTEzNS17XG4tLVxubW0vZGFtb24vY29yZS5jLTEzOC1cbm1tL2RhbW9uL2NvcmUuYzoxMzk6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xNDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDMtXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xNDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc0LVxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG5tbS9kYW1vbi9jb3JlLmMtMTc2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc5LVxubW0vZGFtb24vY29yZS5jOjE4MDpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTE4MS17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NC1cbm1tL2RhbW9uL2NvcmUuYzoxODU6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMTg2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkzLVxubW0vZGFtb24vY29yZS5jOjE5NDpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0xOTUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODg9dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTMxMi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjMxMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zMTQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTctI2Vsc2Vcbm1tL2RhbW9uL2NvcmUuYzozMTg6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS9kYW1vbi9jb3JlLmMtMzE5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI4PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTM1Mi1cbm1tL2RhbW9uL2NvcmUuYzozNTM6c3RhdGljIHZvaWQgZGFtb25fYWRkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM1NC17XG4tLVxubW0vZGFtb24vY29yZS5jLTM2MS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozNjI6c3RhdGljIGlubGluZSB2b2lkIGRhbW9uX2luc2VydF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNjMtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnByZXYsIHN0cnVjdCBkYW1vbl9yZWdpb24gKm5leHQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MC0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjM3MTpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM3Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTM3NS0jZWxzZVxubW0vZGFtb24vY29yZS5jOjM3NjpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM3Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTM4MC1cbm1tL2RhbW9uL2NvcmUuYzozODE6c3RhdGljIHZvaWQgZGFtb25fZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTM4Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTM4OC1cbm1tL2RhbW9uL2NvcmUuYzozODk6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbm1tL2RhbW9uL2NvcmUuYy0zOTAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTMtXG5tbS9kYW1vbi9jb3JlLmM6Mzk0OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMzk1LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00NDU9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Nzg6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTcyND1zdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTczNC1cbm1tL2RhbW9uL2NvcmUuYzo3MzU6dm9pZCBkYW1vbl9hZGRfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTczNi17XG4tLVxubW0vZGFtb24vY29yZS5jLTc0MC1cbm1tL2RhbW9uL2NvcmUuYzo3NDE6c3RhdGljIHZvaWQgZGFtb25fZGVsX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtNzQyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzQ1LVxubW0vZGFtb24vY29yZS5jOjc0NjpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtNzQ3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxubW0vZGFtb24vY29yZS5jOjc1MTp2b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy03NTIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03OTItXG5tbS9kYW1vbi9jb3JlLmM6NzkzOnZvaWQgZGFtb25fYWRkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi9jb3JlLmMtNzk0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Nzk4PWJvb2wgZGFtb25fdGFyZ2V0c19lbXB0eShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTgwMi1cbm1tL2RhbW9uL2NvcmUuYzo4MDM6c3RhdGljIHZvaWQgZGFtb25fZGVsX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTgwNC17XG4tLVxubW0vZGFtb24vY29yZS5jLTgwNy1cbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vY29yZS5jLTgwOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTgxNi1cbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODE4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODcxLVxubW0vZGFtb24vY29yZS5jOjg3MjpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTg3My17XG4tLVxubW0vZGFtb24vY29yZS5jLTg3OS1cbm1tL2RhbW9uL2NvcmUuYzo4ODA6dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtODgxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTMzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTM5LVxubW0vZGFtb24vY29yZS5jOjk0MDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk0MS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTk2MS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05ODktICovXG5tbS9kYW1vbi9jb3JlLmM6OTkwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vY29yZS5jLTk5MS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsIGJvb2wgYWdncmVnYXRpbmcpXG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDQ4OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxubW0vZGFtb24vY29yZS5jLTEwNDkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xubW0vZGFtb24vY29yZS5jOjEwOTY6dm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqKnNjaGVtZXMsXG5tbS9kYW1vbi9jb3JlLmMtMTA5Ny1cdFx0XHRzc2l6ZV90IG5yX3NjaGVtZXMpXG4tLVxubW0vZGFtb24vY29yZS5jPTE1NjE9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTg3LSAqL1xubW0vZGFtb24vY29yZS5jOjE1ODg6c3RhdGljIHZvaWQgZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCxcbm1tL2RhbW9uL2NvcmUuYy0xNTg5LVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpmYWlsZWQsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYwND1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjY4LVxubW0vZGFtb24vY29yZS5jOjE2Njk6c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXG5tbS9kYW1vbi9jb3JlLmMtMTY3MC1cdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODM3LSAqL1xubW0vZGFtb24vY29yZS5jOjE4Mzg6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTctICovXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXG5tbS9kYW1vbi9jb3JlLmM6MjEwNjppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG5tbS9kYW1vbi9jb3JlLmMtMjEwNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NzI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NDItXG5tbS9kYW1vbi9jb3JlLmM6MjY0MzpzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMjY0NC1cdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jPTMyMjg9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNjktI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYzozMjcwOnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcbm1tL2RhbW9uL2NvcmUuYy0zMjcxLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjc3LSNlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MzI3ODpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI4Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg3OnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMzI4OC1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwNT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyMS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzIyOnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxubW0vZGFtb24vY29yZS5jLTMzMjMtXHRcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjb3VudF9hZ2UpXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNzc9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDUtI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL2NvcmUuYzozNDA2OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNDA3LVx0XHR1bnNpZ25lZCBsb25nIHN6X3IpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MTMtI2Vsc2Vcbm1tL2RhbW9uL2NvcmUuYzozNDE0OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNDE1LVx0XHR1bnNpZ25lZCBsb25nIHN6X3IpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0Mjg9c3RhdGljIGludCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ1Mi0vKiBTcGxpdCBldmVyeSByZWdpb24gaW4gdGhlIGdpdmVuIHRhcmdldCBpbnRvICYjMzk7bnJfc3VicyYjMzk7IHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2NvcmUuYzozNDUzOnN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vY29yZS5jLTM0NTQtXHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgbnJfc3Vicyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ4Mi0vKiBTcGxpdCBvbmUgaW4gZXZlcnkgQHNwbGl0X3N0ZXAgcmVnaW9ucyBpbnRvIHR3bywgZnJvbSBhIHJvdGF0aW5nIG9mZnNldCAqL1xubW0vZGFtb24vY29yZS5jOjM0ODM6c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zNDg0LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X3N0ZXApXG4tLVxubW0vZGFtb24vY29yZS5jPTM2Mjg9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYzNi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vY29yZS5jOjM2Mzc6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTM2Mzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYxLSNlbHNlXG5tbS9kYW1vbi9jb3JlLmM6MzY2MjpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMzY2My17XG4tLVxubW0vZGFtb24vY29yZS5jPTM5NzE9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MDAzOmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy00MDA0LVx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMjctICovXG5tbS9kYW1vbi9jb3JlLmM6NDAyODp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbm1tL2RhbW9uL2NvcmUuYy00MDI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczMDIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29yZSBGdW5jdGlvbmFsaXR5OiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZW51bWVyYXRlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgc2luY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBpdCBwcm92aWRlcy4gUmlnaHQsIGhlcmUmIzM5O3MgdGhlIGxpc3Q6IGBkYW1vbl9yZWdpc3Rlcl9vcHNgLCBgZGFtb25fc2VsZWN0X29wc2AsIGBkYW1vbl9uZXdfZmlsdGVyYCwgYGRhbW9uX2FkZF9maWx0ZXJgLCBgZGFtb25fZGVzdHJveV9maWx0ZXJgLCBgZGFtb25fbmV3X3Byb2JlYCwgYGRhbW9uX2FkZF9wcm9iZWAsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX25ld19yZWdpb25gLCBgZGFtb25fc2V0X3JlZ2lvbnNgLCBgZGFtb25fYWRkX3NjaGVtZWAsIGBkYW1vbl9kZXN0cm95X3NjaGVtZWAsIGBkYW1vbl9uZXdfdGFyZ2V0YCwgYGRhbW9uX2FkZF90YXJnZXRgLCBgZGFtb25fdGFyZ2V0c19lbXB0eWAsIGBkYW1vbl9mcmVlX3RhcmdldGAsIGBkYW1vbl9kZXN0cm95X3RhcmdldGAsIGBkYW1vbl9uZXdfY3R4YCwgYGRhbW9uX2Rlc3Ryb3lfY3R4YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX25yX3J1bm5pbmdfY3R4c2AsIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zdG9wYCwgYGRhbW9uX2lzX3J1bm5pbmdgLCBgZGFtb25fa2RhbW9uZF9waWRgLCBgZGFtb25fY2FsbGAsIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBhbmQgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgLiBUaGF0JiMzOTtzIGEgbG90LCBidXQgSSBjYW4gYnJlYWsgaXQgZG93bi4KClRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZGFtb25fYXBwbHlfc2NoZW1lYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCBpbnNpZGUgdGhlIGBrZGFtb25kX2ZuYCBrdGhyZWFkLiBTbywgbmF0dXJhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHN0YXJ0IERBTU9OLiBgZGFtb25fc3RhcnRgIGxvb2tzIGxpa2UgYSBrZXkgZW50cnkgcG9pbnQsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb3JlLiBBbHNvLCBJIGtub3cgdGhhdCBzY2hlbWVzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgREFNT04gb3BlcmF0ZXMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjaGVtZXMgYXJlIHNldCB1cDogYGRhbW9uX3NldF9zY2hlbWVzYCBhbmQgYGRhbW9uX2FkZF9zY2hlbWVgIGxvb2sgbGlrZSBnb29kIHBsYWNlcyB0byBzdGFydC4gQW5kIG9mIGNvdXJzZSwgc2luY2UgYXR0cmlidXRlcyBpbmZsdWVuY2UgYmVoYXZpb3IsIEkmIzM5O2xsIHJldmlldyBgZGFtb25fc2V0X2F0dHJzYCBhcyB3ZWxsLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHdoYXQgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNyaXRpY2FsIHBpZWNlcyBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl98XmludCBkYW1vbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmM9MTkyPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTIxMi0vKiBJbml0aWFsaXplICYjMzk7LVx1MDAzZXJlZ2lvbnNfbGlzdCYjMzk7IG9mIGV2ZXJ5IHRhcmdldCAodGFzaykgKi9cbm1tL2RhbW9uL3ZhZGRyLmM6MjEzOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX2luaXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vdmFkZHIuYy0yMTQte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjI2LSAqL1xubW0vZGFtb24vdmFkZHIuYzoyMjc6c3RhdGljIHZvaWQgZGFtb25fdmFfdXBkYXRlKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3ZhZGRyLmMtMjI4LXtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTIzOC1cbm1tL2RhbW9uL3ZhZGRyLmM6MjM5OnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2RhbW9uL3ZhZGRyLmMtMjQwLVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUpXG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNjg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjk1LSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9kYW1vbi92YWRkci5jOjI5NjpzdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vZGFtb24vdmFkZHIuYy0yOTctXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MzIzPXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMzQ1LVxubW0vZGFtb24vdmFkZHIuYzozNDY6c3RhdGljIHZvaWQgZGFtb25fdmFfbWtvbGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL3ZhZGRyLmMtMzQ3LXtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTM2MD1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMzY4LVxubW0vZGFtb24vdmFkZHIuYzozNjk6c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL3ZhZGRyLmMtMzcwLXtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTY5Nz1zdGF0aWMgYm9vbCBkYW1vbl92YV90YXJnZXRfdmFsaWQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTcwOS1cbm1tL2RhbW9uL3ZhZGRyLmM6NzEwOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG5tbS9kYW1vbi92YWRkci5jLTcxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIE1vZHVsZSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoaXMgREFNT04gbW9kdWxlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHJlZ2lzdGVyaW5nIG9wZXJhdGlvbnMgaGFwcGVucyB0aHJvdWdoIGBkYW1vbl9yZWdpc3Rlcl9vcHNgIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgIGluIGBtbS9kYW1vbi92YWRkci5jYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIGNhbiB1c2UgdGhhdCBmdW5jdGlvbiB0byBwbHVnIGludG8gdGhlIERBTU9OIGNvcmUuCgpUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgbW9kaWZpZXMgYSBidW5jaCBvZiBmdW5jdGlvbnMgcmVsYXRlZCB0byBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyB3aXRoaW4gREFNT04uIEZ1bmN0aW9ucyBsaWtlIGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYW5kIG90aGVycyBhcmUgZGVmaW5pdGVseSBwYXJ0IG9mIHRoYXQgY29yZS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIEFQSSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBzdGFydCBhbmQgY29udHJvbCBEQU1PTjogZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4KCkxldCYjMzk7cyBzZWUsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXNuJiMzOTt0IGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgbm90IHN0YXRpYyBlaXRoZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0LCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgKmlzKiBzdGF0aWMuIE9rYXksIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXMgZGVmaW5lZCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gTWFrZXMgc2Vuc2UuIE5vdywgbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgSSBzZWUgdGhhdCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9hZGRfc2NoZW1lYCBhcmUgYWxsIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHNlZWluZyBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYERBTU9OX1JFQ0xBSU1gIGFuZCBgREFNT05fTFJVX1NPUlRgIGFyZSBjb25maWd1cmVkIHRvIGNvcnJlY3RseSB1c2UgdGhlc2UgZmVhdHVyZXMuIFllcywgdGhleSBkZXBlbmQgb24gYERBTU9OYC4KClNvLCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggZmVhdHVyZXMgYXJlIGNvbXBpbGVkIHVuZGVyIHdoaWNoIGNvbmZpZ3MuIEkgY29uZmlybSB0aGF0IGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgaXMgY29tcGlsZWQgdW5kZXIgYERBTU9OX1ZBRERSYCwgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGVuLCBgZGFtb25fcGFfcGFnZW91dGAgaXMgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBpcyBjb21waWxlZCB1bmRlciBgREFNT05fUEFERFJgLCBhbmQgYGRhbW9zX2FwcGx5X3NjaGVtZWAgaXMgY29tcGlsZWQgdW5kZXIgYERBTU9OYCwgbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0LiBUbyBlbmFibGUgZXZlcnl0aGluZyBJIG5lZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgc2V0OiBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4KCkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCBqdXN0IHRvIGJlIGNlcnRhaW4sIGJ1dCBJIHRoaW5rIHRoYXQgaXMgYSBmYWlybHkgY29tcGxldGUgb3ZlcnZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBEQU1PTiYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnM7IGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgIHNlZW0gbGlrZSB0aGUga2V5IHNldHRpbmdzIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoZXNlOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX3JlZ2lzdGVyX29wc2AuCgpXYWl0IGEgbWludXRlLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIG5vbi1zdGF0aWMgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBIb3dldmVyLCBpZiBpdCYjMzk7cyBub24tc3RhdGljLCBTeXprYWxsZXIgKmNvdWxkKiBzdGlsbCBmdXp6IHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2vigKYgYWhhISBgZGFtb25fc3RhcnRgIGFuZCBgZGFtb25fc2V0X2F0dHJzYCBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQhIFRpbWUgdG8gZGlnIGludG8gYGRhbW9uX3N0YXJ0YCBhbmQgdW5kZXJzdGFuZCBpdHMgY2FsbGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoZGFtb25fc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTE5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgRVhQT1JUX1NZTUJPTGAgaW4gYG1tL2RhbW9uL2NvcmUuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIERBTU9OIOKAkyB0aGF0JiMzOTtzIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZywgcmlnaHQ/IExldCBtZSBtZW50YWxseSB0cmFjZSB0aGlzLi4uIEkgbmVlZCB0byBzZWUgd2hlcmUgYEVYUE9SVF9TWU1CT0xgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZWl0aGVyIGV4dGVybmFsIGFjY2VzcywgcGVyaGFwcyBmb3IgZGVidWdnaW5nLCBvciBmb3IgZGVwZW5kZW5jeSByZXNvbHV0aW9uIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3ltYm9scyBhcmUgYmVpbmcgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGJyb2FkZXIga2VybmVsIG9yIG1vZHVsZXMgdGhyb3VnaCB0aGlzIG1lY2hhbmlzbS4gVW5kZXJzdGFuZGluZyB0aGUgZXhwb3J0ZWQgc3ltYm9scyB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlcmZhY2VzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGVsaWJlcmF0ZWx5IHNoYXJlZCBhbmQgcG90ZW50aWFsbHkgcmVsaWVkIHVwb24gYnkgb3RoZXIga2VybmVsIHBhcnRzLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGRlY2xhcmF0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBleHBvcnQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIHV0aWxpdHkgZnVuY3Rpb25zIG9yIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG1hZGUgYWNjZXNzaWJsZS4gVGhlIGNvbnRleHQgd2lsbCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGV4cG9zZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIGBFWFBPUlRfU1lNQk9MYCoqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgYW5kIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IHNlZW1zIEkgZGlkbiYjMzk7dCBzZWUgYW4gYEVYUE9SVF9TWU1CT0xgIG1hY3JvIHVzZWQgaW4gdGhhdCBmaWxlLiBUaGF0IHN0cmlrZXMgbWUgYXMgb2RkLiBHaXZlbiB0aGUgd2F5IERBTU9OIGlzIGFyY2hpdGVjdGVkLCBpdCB3b3VsZCBiZSBzdHJhbmdlIGlmIGNvcmUgZnVuY3Rpb25hbGl0eSB3YXNuJiMzOTt0IG1lYW50IHRvIGJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24sIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgY29kZSB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGZpbGUgYWdhaW4sIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTHxFWFBPUlRfU1lNQk9MX0dQTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRBTU9OIE1vZHVsZSBDb251bmRydW0qKgoKUmlnaHQsIERBTU9O4oCmIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhhdCBgREFNT05gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiBJIGNhbiYjMzk7dCBidWlsZCBhIGJvb2xlYW4gZGlyZWN0bHkgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIGNhbiBJPyBUaGF0IHdvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZGVzaWduIGNvbnN0cmFpbnQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIHN1c3BlY3QuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBib29sZWFuIG5hdHVyZSBmb3IgREFNT04mIzM5O3MgaW50ZWdyYXRpb24sIGRlcGxveW1lbnQsIGFuZCBvdmVyYWxsIGZsZXhpYmlsaXR5IHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGFuIGluaGVyZW50IGxpbWl0YXRpb24gb3IgYSBwb3RlbnRpYWxseSBvdmVybG9va2VkIGFzcGVjdCBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEYW1vbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHRoZSBEYW1vbiBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWxzLiBUaGUgdXNlIG9mIGBib29sYCBpcyBncmVhdCwgSSBrbm93IGl0JiMzOTtzIGEgYnVpbHQtaW4gdHlwZS4gU28sIGlmIHRoZSBmdW5jdGlvbmFsaXR5JiMzOTtzIGVuYWJsZWQsIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGVmZm9ydC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYW5kIGl0IHJlaW5mb3JjZXMgdGhhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuIEkgY2FuIGdldCBhd2F5IHdpdGggbm90IHdvcnJ5aW5nIGFib3V0IHN0YXRpYyBkZWNsYXJhdGlvbnMsIGF0IGxlYXN0IGluIHRoZSBpbml0aWFsIGFuYWx5c2lzLgoKTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBhbmQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjcnVjaWFsIHNldHVwIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcmFjdCBpcyBrZXkgdG8gZ2V0dGluZyBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHdob2xlIHBpY3R1cmUuCgpGaW5hbGx5LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBgZGFtb25fcmVjbGFpbWAgYW5kIGBkYW1vbl9scnVfc29ydGAuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXkgaGF2ZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUuIElmIHRoZXkgZG8sIHRoZW4gdGhleSBhcmUgYWxzbyBnb29kIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBjb2RlIHRvIHN0YXJ0IHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwOTQKCQkJCQkJCW91dHB1dDogMjk2CgkJCQkJCQl0aG91Z2h0czogNjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFN1YnN5c3RlbSBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBzdWJzeXN0ZW0gcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBob3cgdG8gYXBwcm9hY2ggdGVzdGluZyBpdC4gSSBuZWVkIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2Ugb2Ygd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0JiMzOTtzICpjcml0aWNhbCogdG8gZXhlcmNpc2UgdGhlIG5ldyBjb2RlLiBJIHN0YXJ0ZWQgYnkgbGlzdGluZyBvdXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW1lZCBjb3JlIHRvIERBTU9OJiMzOTtzIG9wZXJhdGlvbi4gSSBmaWd1cmVkIGBkYW1vbl9zdGFydGAgd291bGQgYmUgaW1wb3J0YW50LCBhbmQgc28gb24uCgpJIHF1aWNrbHkgaWRlbnRpZmllZCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSByZWxldmFudDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jYWxsYC4gYGRhbW9uX2NhbGxgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUga3RocmVhZC4gSSB3YW50ZWQgdG8gdmVyaWZ5IHRoYXQgZWFjaCBvZiB0aGVzZSB3ZXJlIGFjdHVhbGx5IG5vbi1zdGF0aWMuCgpOb3csIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBidWdzIGZpeGVkIGluIHRoaW5ncyBsaWtlIHNjaGVtZSBhcHBsaWNhdGlvbiwgcXVvdGEgY2FsY3VsYXRpb25zLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMuIFRoaXMgdGVsbHMgbWUgdGhhdCB0byBoaXQgdGhlc2UgYnVnIGZpeGVzLCBJICpuZWVkKiBEQU1PTiB0byBiZSBlbmFibGVkIGFuZCB0aGVuIEkgbmVlZCB0byBjb25maWd1cmUgYW5kIGFwcGx5IHNjaGVtZXMuIFRoYXQmIzM5O3MgaG93IEkgY2FuIHNldCBpdCB1cCB0byBoaXQgdGhlIGJ1Z2ZpeGVzLgoKU28gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AuIEFuZCBub3cgSSBoYXZlIGEgY29uY3JldGUgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uIGFuZCBlbnN1cmUgZ2V0IGV4ZXJjaXNlZCB3aGVuIEkgdGVzdCB0aGlzIHBhdGNoOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX2NhbGxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fYWRkX3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiAoYGRhbW9zX2FwcGx5X3NjaGVtZWApLCBxdW90YSBjYWxjdWxhdGlvbnMgKGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGApLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMgKGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gVG8gdGVzdCB0aGVzZSBwYXRocywgREFNT04gbXVzdCBiZSBlbmFibGVkIGFuZCBzY2hlbWVzIG11c3QgYmUgY29uZmlndXJlZCBhbmQgYXBwbGllZCwgd2hpY2ggY2FuIGJlIGRvbmUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2Ugb3IgaW4ta2VybmVsIEFQSXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX2FkZF9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gY29yZSBzY2hlbWUgYXBwbGljYXRpb24gKGBkYW1vc19hcHBseV9zY2hlbWVgKSwgcXVvdGEgY2FsY3VsYXRpb25zIChgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgKSwgYW5kIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBvcGVyYXRpb25zIChgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIFRvIHRlc3QgdGhlc2UgcGF0aHMsIERBTU9OIG11c3QgYmUgZW5hYmxlZCBhbmQgc2NoZW1lcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYW5kIGFwcGxpZWQsIHdoaWNoIGNhbiBiZSBkb25lIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG9yIGluLWtlcm5lbCBBUElzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6MTMuNjM4NDQ2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODAwMDYzNjg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9hZGRfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiAoYGRhbW9zX2FwcGx5X3NjaGVtZWApLCBxdW90YSBjYWxjdWxhdGlvbnMgKGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGApLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMgKGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gVG8gdGVzdCB0aGVzZSBwYXRocywgREFNT04gbXVzdCBiZSBlbmFibGVkIGFuZCBzY2hlbWVzIG11c3QgYmUgY29uZmlndXJlZCBhbmQgYXBwbGllZCwgd2hpY2ggY2FuIGJlIGRvbmUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2Ugb3IgaW4ta2VybmVsIEFQSXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjEzLjYzODQ1NDA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQyMjcwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MDY4YzdjODEwNjI0YjkxOGVjZjNjMGI2Mzc2MzIyMDM1OWRlOGMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTQ6MzU6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggNjQ0ZGFmNWExNjU2MC4uNDk0NGNmMmM1YWZhZSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMjYxMyw3ICsyNjEzLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdFxcdFxcdFxcdFxcdGMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbiBcXHRcXHRcXHRpZiAoIXN6KVxcbiBcXHRcXHRcXHRcXHRnb3RvIHVwZGF0ZV9zdGF0O1xcbi1cXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opO1xcbitcXHRcXHRcXHRpZiAoZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6KSlcXG4rXFx0XFx0XFx0XFx0Z290byB1cGRhdGVfc3RhdDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuQEAgLTI4MTUsNiArMjgxNiw4IEBAIHN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG4gXFx0fVxcbiBcXG4gXFx0c2lfbWVtaW5mb19ub2RlKFxcdTAwMjZpLCBnb2FsLVxcdTAwM2VuaWQpO1xcbitcXHRpZiAoIWkudG90YWxyYW0pXFxuK1xcdFxcdGkudG90YWxyYW0gPSAxO1xcbiBcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlApXFxuIFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSBpLmZyZWVyYW07XFxuIFxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQICovXFxuQEAgLTI4NTUsMTAgKzI4NTgsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXG4gXFx0c2lfbWVtaW5mb19ub2RlKFxcdTAwMjZpLCBnb2FsLVxcdTAwM2VuaWQpO1xcbi1cXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUClcXG4rXFx0aWYgKCFpLnRvdGFscmFtKVxcbitcXHRcXHRyZXR1cm4gMTAwMDA7XFxuK1xcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKSB7XFxuIFxcdFxcdG51bWVyYXRvciA9IHVzZWRfcGFnZXM7XFxuLVxcdGVsc2VcXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQICovXFxuK1xcdFxcdGlmIChpLnRvdGFscmFtIFxcdTAwM2MgdXNlZF9wYWdlcylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdG51bWVyYXRvciA9IGkudG90YWxyYW0gLSB1c2VkX3BhZ2VzO1xcbitcXHR9XFxuIFxcdHJldHVybiBtdWx0X2ZyYWMobnVtZXJhdG9yLCAxMDAwMCwgaS50b3RhbHJhbSk7XFxuIH1cXG4gXFxuQEAgLTMwMDEsNyArMzAxMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxuIFxcdFxcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfQUNUSVZFX0ZJTEUpO1xcbiBcXHRpbmFjdGl2ZSA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfSU5BQ1RJVkVfQU5PTikgK1xcbiBcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0lOQUNUSVZFX0ZJTEUpO1xcbi1cXHR0b3RhbCA9IGFjdGl2ZSArIGluYWN0aXZlO1xcbitcXHR0b3RhbCA9IG1heChhY3RpdmUgKyBpbmFjdGl2ZSwgMSk7XFxuIFxcdGlmIChhY3RpdmVfcmF0aW8pXFxuIFxcdFxcdHJldHVybiBtdWx0X2ZyYWMoYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xcbiBcXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xcbkBAIC0zNzI3LDYgKzM3MzYsMTcgQEAgc3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiAtRUJVU1k7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxuK1xcbitcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFxcdTAwMjZzLVxcdTAwM2VxdW90YSkge1xcbitcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xcbkBAIC0zNzQzLDYgKzM3NjMsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XFxuIFxcdFxcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XFxuIFxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XFxuK1xcdFxcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXFxuaW5kZXggNWM2YzNhNTk3ZmQwYi4uOWRkZDFlYzgyMDJiNyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXFxuKysrIGIvbW0vZGFtb24vcGFkZHIuY1xcbkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9fbGlzdCk7XFxuIHB1dF9mb2xpbzpcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0aWYgKGluc3RhbGxfeW91bmdfZmlsdGVyKVxcbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxcbiBcXHRcXHRcXHRmb2xpb19kZWFjdGl2YXRlKGZvbGlvKTtcXG4gXFx0XFx0YXBwbGllZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIHB1dF9mb2xpbzpcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxuQEAgLTM1MCw3ICszNTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdFxcdFxcdGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9fbGlzdCk7XFxuIHB1dF9mb2xpbzpcXG4tXFx0XFx0YWRkciArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4rXFx0XFx0YWRkciA9IFBGTl9QSFlTKGZvbGlvX3Bmbihmb2xpbykpICsgZm9saW9fc2l6ZShmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdH1cXG4gXFx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QsIHMtXFx1MDAzZXRhcmdldF9uaWQpO1xcbkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXG4gXFx0XFx0aWYgKCFkYW1vc19wYV9maWx0ZXJfb3V0KHMsIGZvbGlvKSlcXG4gXFx0XFx0XFx0KnN6X2ZpbHRlcl9wYXNzZWQgKz0gZm9saW9fc2l6ZShmb2xpbykgLyBhZGRyX3VuaXQ7XFxuLVxcdFxcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XFxuK1xcdFxcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHR9XFxuIFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IDA2NDg0MDBiMmQ2NWIuLmFhODMzYzJjNGZhMzUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNjY5LDYgKzY2OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuK1xcbiBcXHRcXHRuciA9IDE7XFxuIFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gXFxuQEAgLTY4MSw3ICs2ODMsOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGRhbW9zX3ZhX21pZ3JhdGVfZGVzdHNfYWRkKGZvbGlvLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxcbiBcXHRcXHRcXHRcXHRtaWdyYXRpb25fbGlzdHMpO1xcbi1cXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4rXFx0XFx0cGFnZV9pZHggPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcHRlX3BhZ2UoKnB0ZSkpO1xcbitcXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIHBhZ2VfaWR4O1xcbiBcXHR9XFxuIFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgbmV4dDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuK1xcbiBcXHRcXHRuciA9IDE7XFxuIFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gXFxuQEAgLTg0NCw3ICs4NDksOCBAQCBzdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIFxcdFxcdGlmICghZGFtb3NfdmFfZmlsdGVyX291dChzLCBmb2xpbywgdm1hLCBhZGRyLCBwdGUsIE5VTEwpKVxcbiBcXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG4tXFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTtcXG4rXFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcXG4gXFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxuIFxcdH1cXG4gXFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjE0LjAwMzI4OTM4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwNzYzNTc4NDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9hZGRfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiAoYGRhbW9zX2FwcGx5X3NjaGVtZWApLCBxdW90YSBjYWxjdWxhdGlvbnMgKGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGApLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMgKGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAsIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gVG8gdGVzdCB0aGVzZSBwYXRocywgREFNT04gbXVzdCBiZSBlbmFibGVkIGFuZCBzY2hlbWVzIG11c3QgYmUgY29uZmlndXJlZCBhbmQgYXBwbGllZCwgd2hpY2ggY2FuIGJlIGRvbmUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2Ugb3IgaW4ta2VybmVsIEFQSXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwNjhjN2M4MTA2MjRiOTE4ZWNmM2MwYjYzNzYzMjIwMzU5ZGU4YzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE0OjM1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi40OTQ0Y2YyYzVhZmFlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNjEzLDcgKzI2MTMsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdFx0Yy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6KVxuIFx0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbi1cdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opO1xuK1x0XHRcdGlmIChkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3opKVxuK1x0XHRcdFx0Z290byB1cGRhdGVfc3RhdDtcbiBcdFx0fVxuIFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yODE1LDYgKzI4MTYsOCBAQCBzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXG4gXHR9XG4gXG4gXHRzaV9tZW1pbmZvX25vZGUoXHUwMDI2aSwgZ29hbC1cdTAwM2VuaWQpO1xuK1x0aWYgKCFpLnRvdGFscmFtKVxuK1x0XHRpLnRvdGFscmFtID0gMTtcbiBcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQKVxuIFx0XHRudW1lcmF0b3IgPSBpLnRvdGFscmFtIC0gaS5mcmVlcmFtO1xuIFx0ZWxzZVx0LyogREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCAqL1xuQEAgLTI4NTUsMTAgKzI4NTgsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbiBcdHNpX21lbWluZm9fbm9kZShcdTAwMjZpLCBnb2FsLVx1MDAzZW5pZCk7XG4tXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKVxuK1x0aWYgKCFpLnRvdGFscmFtKVxuK1x0XHRyZXR1cm4gMTAwMDA7XG4rXHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQKSB7XG4gXHRcdG51bWVyYXRvciA9IHVzZWRfcGFnZXM7XG4tXHRlbHNlXHQvKiBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlAgKi9cbitcdH0gZWxzZSB7XG4rXHRcdC8qIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCAqL1xuK1x0XHRpZiAoaS50b3RhbHJhbSBcdTAwM2MgdXNlZF9wYWdlcylcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0bnVtZXJhdG9yID0gaS50b3RhbHJhbSAtIHVzZWRfcGFnZXM7XG4rXHR9XG4gXHRyZXR1cm4gbXVsdF9mcmFjKG51bWVyYXRvciwgMTAwMDAsIGkudG90YWxyYW0pO1xuIH1cbiBcbkBAIC0zMDAxLDcgKzMwMTAsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxuIFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgTFJVX0FDVElWRV9GSUxFKTtcbiBcdGluYWN0aXZlID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9MUlVfQkFTRSArIExSVV9JTkFDVElWRV9BTk9OKSArXG4gXHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBMUlVfSU5BQ1RJVkVfRklMRSk7XG4tXHR0b3RhbCA9IGFjdGl2ZSArIGluYWN0aXZlO1xuK1x0dG90YWwgPSBtYXgoYWN0aXZlICsgaW5hY3RpdmUsIDEpO1xuIFx0aWYgKGFjdGl2ZV9yYXRpbylcbiBcdFx0cmV0dXJuIG11bHRfZnJhYyhhY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG4gXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuQEAgLTM3MjcsNiArMzczNiwxNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiAtRUJVU1k7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXG4re1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XG4rXG4rXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnMtXHUwMDNlcXVvdGEpIHtcbitcdFx0aWYgKGdvYWwtXHUwMDNlbWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID9cbkBAIC0zNzQzLDYgKzM3NjMsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xuIFx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc2NoZW1lLCBjdHgpO1xuIFx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpO1xuK1x0XHRkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjNmMzYTU5N2ZkMGIuLjlkZGQxZWM4MjAyYjcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMjY0LDcgKzI2NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0ZWxzZVxuIFx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9fbGlzdCk7XG4gcHV0X2ZvbGlvOlxuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdGlmIChpbnN0YWxsX3lvdW5nX2ZpbHRlcilcbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuIFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIFx0XHRhcHBsaWVkICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbkBAIC0zNTAsNyArMzUwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRcdFx0Zm9saW9faXNfZmlsZV9scnUoZm9saW8pKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiBwdXRfZm9saW86XG4tXHRcdGFkZHIgKz0gZm9saW9fc2l6ZShmb2xpbyk7XG4rXHRcdGFkZHIgPSBQRk5fUEhZUyhmb2xpb19wZm4oZm9saW8pKSArIGZvbGlvX3NpemUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0fVxuIFx0YXBwbGllZCA9IGRhbW9uX21pZ3JhdGVfcGFnZXMoXHUwMDI2Zm9saW9fbGlzdCwgcy1cdTAwM2V0YXJnZXRfbmlkKTtcbkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3BhX2ZpbHRlcl9vdXQocywgZm9saW8pKVxuIFx0XHRcdCpzel9maWx0ZXJfcGFzc2VkICs9IGZvbGlvX3NpemUoZm9saW8pIC8gYWRkcl91bml0O1xuLVx0XHRhZGRyICs9IGZvbGlvX3NpemUoZm9saW8pO1xuK1x0XHRhZGRyID0gUEZOX1BIWVMoZm9saW9fcGZuKGZvbGlvKSkgKyBmb2xpb19zaXplKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdH1cbiBcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IDA2NDg0MDBiMmQ2NWIuLmFhODMzYzJjNGZhMzUgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNjY5LDYgKzY2OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtNjgxLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRkYW1vc192YV9taWdyYXRlX2Rlc3RzX2FkZChmb2xpbywgd2Fsay1cdTAwM2V2bWEsIGFkZHIsIGRlc3RzLFxuIFx0XHRcdFx0bWlncmF0aW9uX2xpc3RzKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTtcbitcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtODMxLDYgKzgzNCw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBuZXh0OyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbitcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gXG5AQCAtODQ0LDcgKzg0OSw4IEBAIHN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFxuIFx0XHRpZiAoIWRhbW9zX3ZhX2ZpbHRlcl9vdXQocywgZm9saW8sIHZtYSwgYWRkciwgcHRlLCBOVUxMKSlcbiBcdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRcdHBhZ2VfaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW8sIHB0ZV9wYWdlKCpwdGUpKTtcbitcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSBwYWdlX2lkeDtcbiBcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbiBcdH1cbiBcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6MTQuMDAzMjkwNjU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MjY2MDc5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBEQU1PTiBmaWxlczogYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhpcyBpcyBhIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBzZXZlcmFsIGlzc3Vlcy5cblxuRmlyc3QsIHRoZXJlJ3MgYSBjb3JyZWN0aW9uIHRvIGBkYW1vbl9zcGxpdF9yZWdpb25fYXRgJ3MgcmV0dXJuIHZhbHVlIGNoZWNrIHdpdGhpbiBgZGFtb3NfYXBwbHlfc2NoZW1lYC4gR29vZCwgbWFraW5nIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdC4gVGhlbiwgc2FuaXR5IGNoZWNrcyBmb3IgYGkudG90YWxyYW1gIGluIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgIGFuZCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGFuZCBjaGVja2luZyBmb3IgYGFjdGl2ZSArIGluYWN0aXZlYCBlcXVhbGluZyB6ZXJvIGluIGBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icGAuIFNlZW1zIGxpa2Ugc29tZSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdG8gaGFuZGxlIHBvdGVudGlhbGx5IHVuZXhwZWN0ZWQgc3RhdGVzLlxuXG5JdCBhbHNvIGxvb2tzIGxpa2UgdGhleSdyZSBpbml0aWFsaXppbmcgYGxhc3RfcHNpX3RvdGFsYCB3aXRoIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGZvciBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBQU0ktYmFzZWQgcXVvdGEgZW5mb3JjZW1lbnQuXG5cbk5vdywgaW50byB0aGUgbW9yZSBncmFudWxhciBmaXhlczogSW4gYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGV5J3ZlIGZpeGVkIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9uLCBzd2l0Y2hpbmcgZnJvbSBhZGRpbmcgdG8gYW4gZXhpc3RpbmcgdmFsdWUgdG8gc2V0dGluZyBhbiBhYnNvbHV0ZSB2YWx1ZS4gTWFrZXMgc2Vuc2UsIGVuc3VyaW5nIGNvcnJlY3QgcGFnZS1hbGlnbmVkIGFkZHJlc3MgdHJhdmVyc2FsLiBUaGVuIGluIGBtbS9kYW1vbi92YWRkci5jYCwgaXQgbG9va3MgbGlrZSB0aGUgcGFnZSBjb3VudCBjYWxjdWxhdGlvbiBpcyBiZWluZyBjb3JyZWN0ZWQsIHN1YnRyYWN0aW5nIHRoZSBwYWdlIGluZGV4IHRvIGF2b2lkIGNvdW50aW5nIGFuIHVubmVjZXNzYXJ5IHBhZ2UuIFRoYXQncyBhIGNydWNpYWwgY29ycmVjdGlvbiBmb3IgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCwgc28gdGhleSdyZSBoaXR0aW5nIHRoZSBzcGVjaWZpYyBwYWdlIGNvcnJlY3RseS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY29yZSBEQU1PTiBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBEQU1PTiBpcyBkZWZpbml0ZWx5IGEgY29yZSBmZWF0dXJlLCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIHdvcmtpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIHRvIGJlIHN1cmUgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjM5LjUyOTkwMDkwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYwNzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjM5LjU3MDUxNDA0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDk0MDAwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgREFNT04ncyBWaXJ0dWFsIGFuZCBQaHlzaWNhbCBBZGRyZXNzIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEQU1PTiBzeXN0ZW0gaGFuZGxlcyB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGUgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBUaGF0IGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHNob3VsZCBob2xkIHRoZSBrZXkgZGVmaW5pdGlvbnMgZm9yIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAuIEl0J3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIG91dGxpbmUgaG93IHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzIGFyZSBtYW5hZ2VkLCBpZiBpdCBhbGxvd3MgZm9yIHRoZSBzdXBwb3J0IG9mIGJvdGggYW5kIHNvbWUgY29uZmlndXJhdGlvbnMgYXJvdW5kIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6NDIuNzc5OTE2NTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIERBTU9OXFxuICAgNjpcXHRcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcXG4gICA5OlxcdFxcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXFxuICAxMDpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXFxuICAxMzpcXHRcXHQgIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxuICAyMDpcXHRcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbiAgMjE6XFx0XFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbiAgMjI6XFx0XFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbiAgMjc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuICA4MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDg0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDg3OlxcdFxcbiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuICA5ODpcXHRcXHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxcbiAgOTk6XFx0XFxuIDEwMDpcXHRjb25maWcgREFNT05fTFJVX1NPUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6NDIuNzc5OTk0NDQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NzMxNzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIERBTU9OIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4gUmlnaHQgYXdheSwgSSB3YW50IHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcyBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gdGhlIGRpZmZzIGhhdmUgdG91Y2hlZCBhIGJ1bmNoIG9mIGNvcmUgcm91dGluZXMuIEkndmUgZ290IG15IGV5ZXMgb24gYGRhbW9zX2FwcGx5X3NjaGVtZWAsIGNsZWFybHkgY3J1Y2lhbCBmb3IgYXBwbHlpbmcgbW9uaXRvcmluZyBzY2hlbWVzLiBUaGVuIHdlIGhhdmUgdGhlIG1lbW9yeSBhcmVhIHJldHJpZXZhbHM6IGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLiBUaG9zZSBhcmUsIHdpdGhvdXQgYSBkb3VidCwgY2VudHJhbCB0byBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBhcmVhcyBmb3IgbW9uaXRvcmluZy5cblxuSSBhbHNvIG5vdGljZSBzb21lIGNvbnRleHQgaW5pdGlhbGl6YXRpb246IGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGFuZCBga2RhbW9uZF9pbml0X2N0eGAuIFRoZXNlIGFyZSBwcm9iYWJseSBrZXkgZm9yIHRoZSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBtb25pdG9yaW5nIGRhZW1vbi4gVGhlIGBkYW1vbl9wYV9gIHByZWZpeGVkIGZ1bmN0aW9ucyBhcmUgaW50cmlndWluZy4uLiBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YC4gVGhlc2Ugc2VlbSB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBwYWdlIG9wZXJhdGlvbnMgYW5kIHBvdGVudGlhbGx5IGRlYWN0aXZhdGlvbiwgbWlncmF0aW9uLCBhbmQgdGhlIGdhdGhlcmluZyBvZiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3IuIEZpbmFsbHksIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAsIHNvIHNvbWUgVmlydHVhbCBBZGRyZXNzIG1vbml0b3JpbmcgaXMgYXQgcGxheSwgb3BlcmF0aW5nIGF0IHRoZSBwbWQgbGV2ZWwuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBoYXZlIG5vdywgaXMgd2hldGhlciB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90PyBUaGUgdXNlIG9mIHN0YXRpYyB3b3VsZCBpbmRpY2F0ZSBhIHRpZ2h0bHkgY291cGxlZCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDIsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzU6NDkuOTI3MzE0ODgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTMyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3NjaGVtZXxkYW1vc19nZXRfbm9kZV9tZW1fYnB8ZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icHxkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icHxkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2l8a2RhbW9uZF9pbml0X2N0eHxkYW1vbl9wYV9wYWdlb3V0fGRhbW9uX3BhX2RlX2FjdGl2YXRlfGRhbW9uX3BhX21pZ3JhdGV8ZGFtb25fcGFfc3RhdHxkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeXxkYW1vc192YV9zdGF0X3BtZF9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgzMj1zdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XFx0LyogVGhlc2Ugd2lsbCBiZSBzZXQgZnJvbSBrZGFtb25kX2luaXRfY3R4KCkgKi9cXG5tbS9kYW1vbi9jb3JlLmMtODQ4LVxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1NTg9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI1NzEtXFxubW0vZGFtb24vY29yZS5jOjI1NzI6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI1NzMtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2NDM9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NjktXFx0XFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcXG5tbS9kYW1vbi9jb3JlLmM6MjY3MDpcXHRcXHRcXHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XFxubW0vZGFtb24vY29yZS5jLTI2NzEtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgwMD1zdGF0aWMgYm9vbCBpbnZhbGlkX21lbV9ub2RlKGludCBuaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjgwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MjgwNTpzdGF0aWMgX19rZXJuZWxfdWxvbmdfdCBkYW1vc19nZXRfbm9kZV9tZW1fYnAoXFxubW0vZGFtb24vY29yZS5jLTI4MDYtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjgyNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjgyODpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKFxcbm1tL2RhbW9uL2NvcmUuYy0yODI5LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NzU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjk4MS0jZWxzZSAvKiBDT05GSUdfTlVNQSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyOTgyOnN0YXRpYyBfX2tlcm5lbF91bG9uZ190IGRhbW9zX2dldF9ub2RlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMjk4My1cXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yOTg3LVxcbm1tL2RhbW9uL2NvcmUuYzoyOTg4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxubW0vZGFtb24vY29yZS5jLTI5ODktXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjk5ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDAzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMDA0OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxubW0vZGFtb24vY29yZS5jLTMwMDUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwMTk9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwMzQtXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDM1OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwMzYtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAzOC1cXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzAzOTpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzA0MC1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDQyLVxcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDQzOlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMzA0NC1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzcxMT1zdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM4LVxcbm1tL2RhbW9uL2NvcmUuYzozNzM5OnN0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTM3NDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NDktXFxubW0vZGFtb24vY29yZS5jOjM3NTA6c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTM3NTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NjUtXFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzc2NjpcXHRcXHRkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzc2Ny1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc3Mz1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzg2LVxcdGNvbXBsZXRlKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XFxubW0vZGFtb24vY29yZS5jOjM3ODc6XFx0a2RhbW9uZF9pbml0X2N0eChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNzg4LVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMDk9c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIxOS1cXG5tbS9kYW1vbi9wYWRkci5jOjIyMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0yMjEtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jLTI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzEyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FjdGl2YXRlX3BhZ2VzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XFxubW0vZGFtb24vcGFkZHIuYzozMTY6XFx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zMTctfVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zMTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlxcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XFxubW0vZGFtb24vcGFkZHIuYy0zMjUtXFxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM2MS1cXG5tbS9kYW1vbi9wYWRkci5jOjM2MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9zdGF0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy0zNjMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mzg5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM5Ni1cXHRjYXNlIERBTU9TX1BBR0VPVVQ6XFxubW0vZGFtb24vcGFkZHIuYzozOTc6XFx0XFx0cmV0dXJuIGRhbW9uX3BhX3BhZ2VvdXQociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zOTgtXFx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDA1LVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbm1tL2RhbW9uL3BhZGRyLmM6NDA2OlxcdFxcdHJldHVybiBkYW1vbl9wYV9taWdyYXRlKHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDA3LVxcdGNhc2UgREFNT1NfU1RBVDpcXG5tbS9kYW1vbi9wYWRkci5jOjQwODpcXHRcXHRyZXR1cm4gZGFtb25fcGFfc3RhdChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQwOS1cXHRkZWZhdWx0Olxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01ODU9c3RhdGljIHZvaWQgZGFtb3NfdmFfbWlncmF0ZV9kZXN0c19hZGQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjM0LVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjM1OnN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNjM2LVxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTc0MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzUzLVxcdHN0cnVjdCBtbV93YWxrX29wcyB3YWxrX29wcyA9IHtcXG5tbS9kYW1vbi92YWRkci5jOjc1NDpcXHRcXHQucG1kX2VudHJ5ID0gZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnksXFxubW0vZGFtb24vdmFkZHIuYy03NTUtXFx0XFx0LnB0ZV9lbnRyeSA9IE5VTEwsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTc5Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03OTctXFxubW0vZGFtb24vdmFkZHIuYzo3OTg6c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vZGFtb24vdmFkZHIuYy03OTktXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9ODYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX3N0YXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04NjYtXFx0c3RydWN0IG1tX3dhbGtfb3BzIHdhbGtfb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6ODY3OlxcdFxcdC5wbWRfZW50cnkgPSBkYW1vc192YV9zdGF0X3BtZF9lbnRyeSxcXG5tbS9kYW1vbi92YWRkci5jLTg2OC1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNTo0OS45NzY4NTIyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MDc2OTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzIGluIERBTU9OKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHJldmlld2luZyB0aGUgY29kZSBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYSBidW5jaCBvZiBzdGF0aWMgZnVuY3Rpb25zOiBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGBrZGFtb25kX2luaXRfY3R4YCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIEJ1dCBmdXp6aW5nIHRob3NlIGRpcmVjdGx5IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBlZmZlY3RpdmUgYXBwcm9hY2ggc2luY2UgdGhleSdyZSBzdGF0aWMgYW5kIGxpa2VseSBoYXZlIGxpbWl0ZWQgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB3aGljaCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoZXNlIHN0YXRpYyBvbmVzLiBgZGFtb3NfYXBwbHlfc2NoZW1lYCBpcyBjYWxsZWQgYnkgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIFRoZW4sIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icGAsIGFuZCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgIGFyZSBhbGwgY2FsbGVkIGJ5IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCB0aGF0IG9uZSBpcyBhbHNvIGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIGBrZGFtb25kX2luaXRfY3R4YCBhbHNvIGlzIGNhbGxlZCBieSBga2RhbW9uZF9mbmAsIHNvIGBrZGFtb25kX2ZuYCBsb29rcyBpbnRlcmVzdGluZy4gVGhlIGZ1bmN0aW9ucyBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YCBhcmUgY2FsbGVkIGJ5IGBkYW1vbl9wYV9hcHBseV9zY2hlbWVgIHdoaWNoIGlzIGFzc2lnbmVkIHRvIHRoZSBgY3R4LVx1MDAzZW9wcy5hcHBseV9zY2hlbWVgIGluIGBkYW1vbl9wYV9zZXRfb3BlcmF0aW9uc2AuIEFsc28sIGBkYW1vc192YV9taWdyYXRlX3BtZF9lbnRyeWAgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAgYXJlIHVzZWQgd2l0aGluIHRoZSBgd2Fsa19vcHNgIHN0cnVjdCwgdXNlZCBieSBgZGFtb3NfdmFfbWlncmF0ZWAgYW5kIGBkYW1vc192YV9zdGF0YCwgd2hpY2ggYXJlIGNhbGxlZCBieSBgZGFtb25fdmFfYXBwbHlfc2NoZW1lYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gdGhlIGBjdHgtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZWAgaW4gYGRhbW9uX3ZhX3NldF9vcGVyYXRpb25zYC5cblxuVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGVpciBjYWxsaW5nIHBhdHRlcm5zIGFyZS4gTXkgaW1tZWRpYXRlIHRhcmdldHMgZm9yIGZ1enppbmcgd291bGQgaW5jbHVkZSBga2RhbW9uZF9mbmAsIGBkYW1vbl9wYV9hcHBseV9zY2hlbWVgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3NjaGVtZWAsIHNpbmNlIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3OCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNTo1OC43ODQ1NDgwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyMDI2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfc2V0X29wZXJhdGlvbnN8ZGFtb25fdmFfc2V0X29wZXJhdGlvbnN8ZGFtb25fZG9fYXBwbHlfc2NoZW1lc3xrZGFtb25kX2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXFxubW0vZGFtb24vY29yZS5jOjEwMzY6ICogd2hpbGUgdGhlIGtkYW1vbmQgaXMgbm90IHlldCBzdGFydGVkLCBhbmQgaW5zaWRlIG9mIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNy0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNDAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDQyLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDc0LVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjEwNzU6XFx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwNzYtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxubW0vZGFtb24vY29yZS5jLTE5MjYtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkzNT1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NDItXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTk0MzpcXHRcXHRjdHgtXFx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFxcXCJrZGFtb25kLiVkXFxcIixcXG5tbS9kYW1vbi9jb3JlLmMtMTk0NC1cXHRcXHRcXHRcXHRucl9ydW5uaW5nX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjIwNDQ6XFx0XFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjA0NS1cXHRcXHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjU3Mj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjQyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjQzOnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG5tbS9kYW1vbi9jb3JlLmMtMjY0NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2OTU9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjcwMi1cXG5tbS9kYW1vbi9jb3JlLmM6MjcwMzpcXHRcXHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xcbm1tL2RhbW9uL2NvcmUuYy0yNzA0LVxcdFxcdC8qXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc1MD1zdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzcyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzczOnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzc0LXtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTcyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1OTgtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1OTk6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2MDAtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM1OjU4Ljg0Nzc1NTY0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc0Mzk4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBEQU1PTiBTZXQgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgbm93LiBUaG9zZSBgZGFtb25fcGFfc2V0X29wZXJhdGlvbnNgIGFuZCBgZGFtb25fdmFfc2V0X29wZXJhdGlvbnNgIHN0cnVjdHVyZXMgYXJlbid0IGRlZmluZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEhtbSwgd2hlcmUgZGlkIEkgcHV0IHRoZW0/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZS4uLiBSaWdodCwgdGhleSdyZSBwcm9iYWJseSBpbiBvbmUgb2YgdGhlIGFkZHJlc3Mtc3BhY2Ugc3BlY2lmaWMgZmlsZXMuIExldCdzIHN0YXJ0IHdpdGggYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIEl0IG1ha2VzIHNlbnNlIHRoZXknZCBiZSBuZWFyIHRoZSBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIGhhbmRsaW5nIGNvZGUuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEknbGwgYmV0IHRoZXkncmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzEwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MDIuMjIyMTU2OTQ5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc4MDc5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfc2V0X29wZXJhdGlvbnN8ZGFtb25fdmFfc2V0X29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjowMi4yNzQ5NDYzNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzc5OTQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIERBTU9OJ3MgQWRkcmVzcyBUcmFuc2xhdGlvbiBGdW5jdGlvbnMqKlxuXG5IbW0sIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyBwYXRoLCBJIHJlYWxseSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0J3MgZXhwb3NlZCwgYW5kIHdoYXQncyAqbm90KiBpbiBEQU1PTidzIGFkZHJlc3MgdHJhbnNsYXRpb24gY29yZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgZmlsZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBwb3RlbnRpYWxseSB1c2VkIGV4dGVybmFsbHksIG9yLCBpZiBub3RoaW5nIGVsc2UsIHdoYXQgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBUaGF0IHdpbGwgaW5mb3JtIG15IG5leHQgc3RlcHMgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBEQU1PTiBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRoYXQgYmFzZWxpbmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU4MywiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjA2LjA4Mjc0ODQ5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc3NjcwOTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGRhbW9uX3BhX3xeaW50IGRhbW9uX3BhX3xedm9pZCBkYW1vbl92YV98XmludCBkYW1vbl92YV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjowNi4xNzA1MjQwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjY3MjQ2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZpc2liaWxpdHkgSXNzdWVzIGluIERBTU9OIENvZGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vZGFtb24vcGFkZHIuY2AgYW5kIGBtbS9kYW1vbi92YWRkci5jYC4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHN1Z2dlc3RzIGEgcG9zc2libGUgc2NvcGUgaXNzdWUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IG1lYW50IHRvIGJlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSBvciBhcmUgdGhleSBsZWFraW5nIHVuaW50ZW5kZWQgYWNjZXNzIHBvaW50cywgSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleeKAmXJlIG5vdCBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgaXMgbGlrZWx5IGFuIGluaXRpYWwgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBhcmUgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGV4dGVybmFsIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSByZWZhY3RvcmluZyBpcyBuZWVkZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTEsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjoxMC44Mzc3NzM5OTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTAyNTM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBkYW1vbl9wYV9bYS16QS1aMC05X10qXFxcXCh8XlthLXpBLVpfXVthLXpBLVowLTlfXSogZGFtb25fdmFfW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MTAuOTI1ODg1MTk5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTc4OTkxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIGFyZSBteSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRXh0ZXJuYWwgRnVuY3Rpb24gRXhwb3N1cmUgaW4gYG1tL2RhbW9uL3BhZGRyLmNgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgZ29pbmcgdGhyb3VnaCBteSBjaGVja2xpc3QuIFdlIG5lZWQgdG8gYXVkaXQgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBhbnkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRoYXQgYXJlICpub3QqIHN0YXRpYy4gVGhlIGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSAqb3V0c2lkZSogdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGVzZSBhcmUgdGhlIG9uZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBwb3RlbnRpYWxseSwgZGVwZW5kaW5nIG9uIGNvbnRleHQsIHVzZXIgc3BhY2UgaWYgdGhlcmUncyBzb21lIGtpbmQgb2YgaW50ZXJmYWNlIGV4cG9zdXJlIGdvaW5nIG9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgaW4gdGVybXMgb2YgbW9kdWxlIGludGVyLWRlcGVuZGVuY2llcywgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYW5kIG9mIGNvdXJzZSwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGF0IGVhY2ggZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyIGl0cyBwdXJwb3NlIGFuZCB0aGUgbGlrZWxpaG9vZCBvZiBpdCBiZWluZyB1c2VkIG91dHNpZGUgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTc4LCJPdXRwdXRUb2tlbnMiOjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MTUuMDQzNzg2NDA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzgxODkyOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3BhZGRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjE1LjEzNzYxMTk5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU5MjkzODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEZWJ1Z2dpbmcgTXkgUmVnZXggaW4gYG1tL2RhbW9uL3BhZGRyLmNgKipcblxuQWxyaWdodCwgbXkgcmVnZXggYXR0ZW1wdCBpbiBgbW0vZGFtb24vcGFkZHIuY2AgY2xlYXJseSBpc24ndCBjYXB0dXJpbmcgdGhlIHJpZ2h0IGluZm9ybWF0aW9uLiBJdCdzIG5vdCB3b3JraW5nIGFzIGludGVuZGVkLiBSYXRoZXIgdGhhbiBzcGVuZCBtb3JlIHRpbWUgdHJ5aW5nIHRvIHJlZmluZSBpdCBqdXN0IHlldCwgSSdsbCBzd2l0Y2ggZ2VhcnMgdG8gYSBtb3JlIGRpcmVjdCBhcHByb2FjaC4gTGV0J3MgY3V0IHRocm91Z2ggdGhlIG5vaXNlLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcGAuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGluIGBtbS9kYW1vbi9wYWRkci5jYC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGBncmVwYCBmb3IgdGhlIHRlbGwtdGFsZSBzaWducyBvZiBleHBvcnRlZCBzeW1ib2xzLCBzaW5jZSB0aGF0J3Mgd2hhdCBJIGFtIHRyeWluZyB0byBpZGVudGlmeS4gSSdsbCBzZWFyY2ggZm9yIGVpdGhlciBgRVhQT1JUX1NZTUJPTGAgb3IganVzdCB0aGUgYHZvaWQgYCBkZWNsYXJhdGlvbnMuIEJvdGggc2hvdWxkIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIGNhbmRpZGF0ZXMgdG8gdGhvc2UgdGhhdCBhcmUgcHVibGljbHkgZXhwb3NlZCwgb3IgYXQgbGVhc3QgdmlzaWJsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGp1bXBpbmctb2ZmIHBvaW50IGZvciBmdXJ0aGVyIGFuYWx5c2lzLCBzYXZpbmcgbWUgdGltZSBhbmQgdW5uZWNlc3NhcnkgaGVhZC1zY3JhdGNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjE5Ljc5NjkxMDg1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTg1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTHx2b2lkIGRhbW9uX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9wYWRkci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3BhZGRyLmM9MjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfY29yZV9hZGRyKFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zNy1cXG5tbS9kYW1vbi9wYWRkci5jOjM4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX21rb2xkKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtMzkte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00OT1zdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTU2LVxcbm1tL2RhbW9uL3BhZGRyLmM6NTc6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9wYWRkci5jLTU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MTkuODUzODM1ODA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTgzNzc1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipQZWVyaW5nIGludG8gcGFkZHIuYzogV2hhdCdzIFB1YmxpY2x5IEFjY2Vzc2libGU/KipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBtbS9kYW1vbi9wYWRkci5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGlkZW50aWZ5aW5nIGl0cyBwdWJsaWMgaW50ZXJmYWNlIOKAkyB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBEQU1PTiBleHBvc2VzIG9yIG1ha2VzIGF2YWlsYWJsZSBnbG9iYWxseSwgYW5kIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBjYW4gbGV2ZXJhZ2UuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHdoYXQgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIEknbGwgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMsIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGFueSBjcml0aWNhbCBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHVzZWQgZWxzZXdoZXJlLiBVbmRlcnN0YW5kaW5nIHdoYXQncyBleHBvcnRlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBvdmVyYWxsIHJvbGUgYW5kIGRlc2lnbiB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBsb29raW5nIGZvciB0aGUga2V5IHByaW1pdGl2ZXMgdGhhdCBtYW5hZ2UsIG1hbmlwdWxhdGUsIG9yIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgYWRkcmVzc2VzIChwYWRkcnMpIHNwZWNpZmljYWxseS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IG9mZmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDAxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MjMuODUyMjE1Nzg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI5NjcyOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmJvb2wgfF5pbnQgfF52b2lkIHxedW5zaWduZWQgbG9uZyB8XnN0cnVjdCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcGFkZHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MjMuOTI1NTIxNjc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzA3ODI0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIFNjYW4gb2YgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBFeHBvcnRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBjdXQgdG8gdGhlIGNoYXNlLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgc29tZSBqdWljeSBsaXR0bGUgaGVscGVyIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vcGFkZHIuY2AgdGhhdCBhcmUgZXhwb3J0ZWQuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSB3YWRpbmcgdGhyb3VnaCB0aGUgZW50aXJlIGZpbGUgaW5pdGlhbGx5LiBUaGUgZW5kIG9mIHRoZSBmaWxlIGlzIHVzdWFsbHkgd2hlcmUgeW91J2xsIGZpbmQgdGhlIGludGVyZmFjZSwgdGhlIGZ1bmN0aW9ucyBtZWFudCBmb3IgZXh0ZXJuYWwgdXNlLiBJJ2xsIGp1c3QganVtcCBzdHJhaWdodCB0byB0aGUgdGFpbCBlbmQgb2YgYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGFzIGJlaW5nIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgYSBjbGVhciBpbmRpY2F0aW9uIG9mIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBiZXlvbmQgdGhpcyBtb2R1bGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI2OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjI3LjQ1NjMwNzUwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MzkzMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5ib29sIHxeaW50IHxedm9pZCB8XnVuc2lnbmVkIGxvbmcgfF5zdHJ1Y3QgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3BhZGRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjI3LjU0Mzk1Mzg4MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYxNjU4MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmVmaW5pbmcgTXkgQXBwcm9hY2ggdG8gSWRlbnRpZnlpbmcgdGhlIFJlbGV2YW50IENvZGUqKlxuXG5IbW0sIHRoYXQgaW5pdGlhbCByZWdleCBJIGNyYWZ0ZWQsIHRoZSBvbmUgYW5jaG9yZWQgd2l0aCBgXmAsIGlzIGxpa2VseSB0b28gYnJpdHRsZS4gSXQncyBhc3N1bWluZyBhIHZlcnkgc3BlY2lmaWMgbGluZSBzdHJ1Y3R1cmUsIGFuZCB0aGUgcHJlc2VuY2Ugb2YgbGVhZGluZyBzcGFjZXMgb3Igb3RoZXIgY2hhcmFjdGVycyBvbiB0aGUgc2FtZSBsaW5lIHdvdWxkIGJyZWFrIGl0LiBNeSBwcmlvciBhcHByb2FjaCBhc3N1bWVkIHRoYXQgY29kZSB3b3VsZCBiZSB0aGUgZmlyc3QgdGhpbmcgb24gdGhlIGxpbmUsIGJ1dCB0aGF0J3Mgbm90IGFsd2F5cyBhIHZhbGlkIGFzc3VtcHRpb24uIFRoZSBwcm9ibGVtIHNwYWNlIHJlcXVpcmVzIGEgbW9yZSByb2J1c3QgbWV0aG9kIG9mIHNlYXJjaC5cblxuSSBuZWVkIHNvbWV0aGluZyB0aGF0IGlzIG1vcmUgZmxleGlibGUuIEEgc2ltcGxlIGBncmVwYCBmb3IgYGRhbW9uX3BhX3NldF9vcGVyYXRpb25zYCAob3IgYSBzaW1pbGFyIHJlbGV2YW50IGZ1bmN0aW9uIG9yIHN5bWJvbCBuYW1lKSwgaXMgcHJvYmFibHkgbW9yZSBlZmZpY2llbnQgYW5kIGxlc3MgcHJvbmUgdG8gZmFsc2UgbmVnYXRpdmVzIGR1ZSB0byBtaW5vciBsaW5lIHZhcmlhdGlvbnMuIFRoYXQncyBhIG11Y2ggbW9yZSBlbGVnYW50IHNvbHV0aW9uIGZvciBxdWlja2x5IHBpbnBvaW50aW5nIHRoZSByZWxldmFudCBjb2RlIHNlZ21lbnRzLiBJdCdzIGEgcHJhZ21hdGljIHNoaWZ0IGluIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjMxLjcwNTYxNTE5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NDc0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3BhZGRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcGFkZHIuYy0xOC1cXG5tbS9kYW1vbi9wYWRkci5jOjE5OnN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy0yMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNC1cXG5tbS9kYW1vbi9wYWRkci5jOjI1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2NvcmVfYWRkcihcXG5tbS9kYW1vbi9wYWRkci5jLTI2LVxcdFxcdHBoeXNfYWRkcl90IHBhLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzctXFxubW0vZGFtb24vcGFkZHIuYzozODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDgtXFxubW0vZGFtb24vcGFkZHIuYzo0OTpzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy01MC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTUzLVxcbm1tL2RhbW9uL3BhZGRyLmM6NTQ6XFx0ZGFtb25fcGFfbWtvbGQoZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsIGN0eC1cXHUwMDNlYWRkcl91bml0KSk7XFxubW0vZGFtb24vcGFkZHIuYy01NS19XFxubW0vZGFtb24vcGFkZHIuYy01Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjU3OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy01OC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTYzLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxcbm1tL2RhbW9uL3BhZGRyLmM6NjQ6XFx0XFx0XFx0X19kYW1vbl9wYV9wcmVwYXJlX2FjY2Vzc19jaGVjayhyLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNjUtXFx0fVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy02Ny1cXG5tbS9kYW1vbi9wYWRkci5jOjY4OnN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyKVxcbm1tL2RhbW9uL3BhZGRyLmMtNjkte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy04MC1cXG5tbS9kYW1vbi9wYWRkci5jOjgxOnN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYy04Mi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtODQtXFx0Ym9vbCBhY2Nlc3NlZDtcXG5tbS9kYW1vbi9wYWRkci5jOjg1OlxcdHBoeXNfYWRkcl90IHNhbXBsaW5nX2FkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoXFxubW0vZGFtb24vcGFkZHIuYy04Ni1cXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODctXFxubW0vZGFtb24vcGFkZHIuYzo4ODpcXHRhY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIpO1xcbm1tL2RhbW9uL3BhZGRyLmMtODktXFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBhY2Nlc3NlZCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTkxLVxcbm1tL2RhbW9uL3BhZGRyLmM6OTI6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vcGFkZHIuYy05My17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTk5LVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxMDA6XFx0XFx0XFx0X19kYW1vbl9wYV9jaGVja19hY2Nlc3MociwgY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTAxLVxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTA4OnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxubW0vZGFtb24vcGFkZHIuYy0xMDktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQwLVxcbm1tL2RhbW9uL3BhZGRyLmM6MTQxOnN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL3BhZGRyLmMtMTQyLVxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTQ3LVxcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTE0OS1cXHRcXHRcXHRwYXNzID0gZi1cXHUwMDNlYWxsb3c7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE1Ni1cXG5tbS9kYW1vbi9wYWRkci5jOjE1NzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0xNTgtXFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3My1cXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTc0OlxcdFxcdFxcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzctXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYzoxNzg6XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxubW0vZGFtb24vcGFkZHIuYy0xNzktXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xOTU9c3RhdGljIGJvb2wgZGFtb3NfcGFfZmlsdGVyX291dChzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA5OnN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjE5LVxcbm1tL2RhbW9uL3BhZGRyLmM6MjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTIyMS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNDQtXFxubW0vZGFtb24vcGFkZHIuYzoyNDU6XFx0YWRkciA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5zdGFydCwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jOjI0NjpcXHR3aGlsZSAoYWRkciBcXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTI0Ny1cXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vcGFkZHIuYzoyNDg6XFx0XFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yNDktXFx0XFx0XFx0YWRkciArPSBQQUdFX1NJWkU7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3NC1cXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi9wYWRkci5jOjI3NTpcXHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYy0yNzYtfVxcbm1tL2RhbW9uL3BhZGRyLmMtMjc3LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjc4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG5tbS9kYW1vbi9wYWRkci5jLTI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg1LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mjg2OlxcdGFkZHIgPSBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuc3RhcnQsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYzoyODc6XFx0d2hpbGUgKGFkZHIgXFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XFxubW0vZGFtb24vcGFkZHIuYy0yODgtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg5OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjkwLVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMDgtXFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxubW0vZGFtb24vcGFkZHIuYzozMDk6XFx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzEwLX1cXG5tbS9kYW1vbi9wYWRkci5jLTMxMS1cXG5tbS9kYW1vbi9wYWRkci5jOjMxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzEzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMxNS17XFxubW0vZGFtb24vcGFkZHIuYzozMTY6XFx0cmV0dXJuIGRhbW9uX3BhX2RlX2FjdGl2YXRlKHIsIGFkZHJfdW5pdCwgcywgdHJ1ZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy0zMTctfVxcbm1tL2RhbW9uL3BhZGRyLmMtMzE4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MzE5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlYWN0aXZhdGVfcGFnZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTMyMC1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMjIte1xcbm1tL2RhbW9uL3BhZGRyLmM6MzIzOlxcdHJldHVybiBkYW1vbl9wYV9kZV9hY3RpdmF0ZShyLCBhZGRyX3VuaXQsIHMsIGZhbHNlLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMyNC19XFxubW0vZGFtb24vcGFkZHIuYy0zMjUtXFxubW0vZGFtb24vcGFkZHIuYzozMjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzI3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTMzMy1cXG5tbS9kYW1vbi9wYWRkci5jOjMzNDpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM1OlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU4LVxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzU5OlxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTM2MC19XFxubW0vZGFtb24vcGFkZHIuYy0zNjEtXFxubW0vZGFtb24vcGFkZHIuYzozNjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL3BhZGRyLmMtMzYzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTM3MS1cXG5tbS9kYW1vbi9wYWRkci5jOjM3MjpcXHRhZGRyID0gZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLnN0YXJ0LCBhZGRyX3VuaXQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jOjM3NTpcXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTM3Ni1cXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzg4LVxcbm1tL2RhbW9uL3BhZGRyLmM6Mzg5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vcGFkZHIuYy0zOTAtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzk2LVxcdGNhc2UgREFNT1NfUEFHRU9VVDpcXG5tbS9kYW1vbi9wYWRkci5jOjM5NzpcXHRcXHRyZXR1cm4gZGFtb25fcGFfcGFnZW91dChyLCBhdW5pdCwgc2NoZW1lLCBzel9maWx0ZXJfcGFzc2VkKTtcXG5tbS9kYW1vbi9wYWRkci5jLTM5OC1cXHRjYXNlIERBTU9TX0xSVV9QUklPOlxcbm1tL2RhbW9uL3BhZGRyLmM6Mzk5OlxcdFxcdHJldHVybiBkYW1vbl9wYV9hY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAwLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDAxLVxcdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcXG5tbS9kYW1vbi9wYWRkci5jOjQwMjpcXHRcXHRyZXR1cm4gZGFtb25fcGFfZGVhY3RpdmF0ZV9wYWdlcyhyLCBhdW5pdCwgc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDAzLVxcdFxcdFxcdFxcdHN6X2ZpbHRlcl9wYXNzZWQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MDUtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxubW0vZGFtb24vcGFkZHIuYzo0MDY6XFx0XFx0cmV0dXJuIGRhbW9uX3BhX21pZ3JhdGUociwgYXVuaXQsIHNjaGVtZSwgc3pfZmlsdGVyX3Bhc3NlZCk7XFxubW0vZGFtb24vcGFkZHIuYy00MDctXFx0Y2FzZSBEQU1PU19TVEFUOlxcbm1tL2RhbW9uL3BhZGRyLmM6NDA4OlxcdFxcdHJldHVybiBkYW1vbl9wYV9zdGF0KHIsIGF1bml0LCBzY2hlbWUsIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDA5LVxcdGRlZmF1bHQ6XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQxNS1cXG5tbS9kYW1vbi9wYWRkci5jOjQxNjpzdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbm1tL2RhbW9uL3BhZGRyLmMtNDE3LVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MzYtXFxubW0vZGFtb24vcGFkZHIuYzo0Mzc6c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG5tbS9kYW1vbi9wYWRkci5jLTQzOC17XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ0Mi1cXHRcXHQudXBkYXRlID0gTlVMTCxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0MzpcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fcGFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0OlxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDQ1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NDYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxubW0vZGFtb24vcGFkZHIuYzo0NDc6XFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG5tbS9kYW1vbi9wYWRkci5jOjQ0ODpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3BhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi9wYWRkci5jLTQ0OS1cXHR9O1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NTMtXFxubW0vZGFtb24vcGFkZHIuYzo0NTQ6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3BhX2luaXRjYWxsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6MzEuNzU4MzY4NzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNDA1MzkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBNb2R1bGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZS4gSXQgbG9va3MgbGlrZSBgZGFtb25fcGFfaW5pdGNhbGxgIGlzIHRoZSBrZXkgZm9yIGluaXRpYWxpemluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgZGFtb25fcmVnaXN0ZXJfb3BzYCBhbmQgdGhlIGBwYV9vcHNgIHN0cnVjdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBjb3VudGVycGFydCBpbiBgbW0vZGFtb24vdmFkZHIuY2AgZm9sbG93cyBhIHNpbWlsYXIgcGF0dGVybiwgcmVnaXN0ZXJpbmcgaXRzIG93biBzZXQgb2Ygb3BlcmF0aW9ucy5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEZyb20gYSBxdWljayBzY2FuIG9mIGBtbS9kYW1vbi9jb3JlLmNgLCBJIGNhbiBzZWUgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb25zOiBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3N0b3BgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBgZGFtb25fbmV3X2N0eGAsIGFuZCBgZGFtb25fZGVzdHJveV9jdHhgLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IGFueSBleHRlcm5hbCBjb21wb25lbnQgd2lsbCBiZSB1c2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBEQU1PTiBjb3JlLlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICp1c2VkKi4gSSdsbCBjaGVjayBgbW0vZGFtb24vc3lzZnMuY2AgdG8gc2VlIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIHRpZXMgaW50byBhbGwgdGhpcy4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGlkZWEgb2YgaG93IHVzZXJzcGFjZSBjb25maWd1cmVzIGFuZCBjb250cm9scyBEQU1PTi4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gdGhlc2UgY29yZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBzeXNmcyBhdHRyaWJ1dGUgaGFuZGxpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Nzg1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjM2LjY2MjQyNTkwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NzYyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnR8ZGFtb25fc2V0X2F0dHJzfGRhbW9uX3NldF9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0xOTEzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkzMi1cXHR9O1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTkzMzpcXHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXFx1MDAyNmF0dHJzKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5MzQtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjQzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Ny1cXHR9XFxubW0vZGFtb24vc3lzZnMuYzoyMjY4OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIGZhbHNlKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyNjktXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjozNi43NDUxMDYwMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNDQ5NzA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUsIGtlZXBpbmcgaW4gbWluZCBteSBkZWVwIGRpdmUgaW50byB0aGlzIHN5c3RlbS5cblxuKipEYW1vbiBBY3RpdmF0aW9uIGFuZCBBdHRyaWJ1dGUgU2V0dGluZyAtIEEgUXVpY2sgTWVudGFsIE1hcCoqXG5cblJpZ2h0LCBzbyBgZGFtb25fc3RhcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGtpY2tzIERBTU9OIGludG8gZ2VhciwgYW5kIHRoYXQncyB0cmlnZ2VyZWQgZnJvbSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGFzIGV4cGVjdGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgaG93IHVzZXJzcGFjZSBjb250cm9scyB0aGUga2VybmVsIG1vZHVsZS4gQW5kIHNpbWlsYXJseSwgYGRhbW9uX3NldF9hdHRyc2AgaXMgdGhlIG1lY2hhbmlzbSBmb3Igc2V0dGluZyB0aGUgbW9uaXRvcmluZyBhdHRyaWJ1dGVzLCBhbmQgdGhhdCdzIG5hdHVyYWxseSBjYWxsZWQgYnkgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIGV2ZXJ5dGhpbmc7IFdoYXQgYWJvdXQgYGRhbW9uX3NldF9zY2hlbWVzYCB0aG91Z2g/IFRoYXQncyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIHVzZXMgdGhhdCB0byBlc3RhYmxpc2ggbW9uaXRvcmluZyBzY2hlbWVzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHRvIGJlIHN1cmUgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgd2hvbGUgZmxvdy4gSSdsbCBpbnZlc3RpZ2F0ZSB3aGF0J3MgY2FsbGluZyB0aGF0IGFuZCB3aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0MC41Njk2MDgyMDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDYzMzY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0MC42NTE2NzcxMDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzMzU5NjQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyBgbW0vZGFtb24vc3lzZnMuY2AgYW5kIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyBpdHMgc2NoZW1lczpcblxuKipBbmFseXppbmcgdGhlIERhbW9uIHN5c2ZzIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NoZW1lcyBhcmUgZGVmaW5lZCBhbmQgbWFuYWdlZCB3aXRoaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgYXJjaGl0ZWN0dXJlIG9mIERhbW9uJ3Mgc3lzZnMgaW50ZXJmYWNlIGZvciBpdHMgc2NoZW1lIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJ4oCZbGwgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgb2YgdGhlIGNvZGUg4oCTIGxpa2VseSBmdW5jdGlvbnMgaGFuZGxpbmcgYXR0cmlidXRlIGNyZWF0aW9uLCBzZXR0aW5nLCBhbmQgcmV0cmlldmFsIHJlbGF0ZWQgdG8gRGFtb24ncyBzY2hlbWVzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIHNjaGVtZXMgd2l0aGluIHRoZSBzeXNmcyBoaWVyYXJjaHkuIEFyZSB0aGV5IHVzaW5nIHN0YW5kYXJkIHN5c2ZzIGF0dHJpYnV0ZSB0eXBlcyAobGlrZSBgc3RydWN0IGtvYmpfYXR0cmlidXRlYCkgb3Igc29tZXRoaW5nIGN1c3RvbT9cblxuTXkgaW5pdGlhbCBxdWVzdGlvbnMgd2lsbCBiZTpcblxuKiAgIEhvdyBhcmUgbmV3IHNjaGVtZXMgYWRkZWQgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzP1xuKiAgIFdoYXQncyB0aGUgbGlmZWN5Y2xlIG9mIGEgc2NoZW1lIG9iamVjdCB3aXRoaW4gc3lzZnMgKGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIGRlbGV0aW9uKT9cbiogICBIb3cgYXJlIHBhcmFtZXRlcnMgZm9yIGVhY2ggc2NoZW1lIGV4cG9zZWQgdmlhIHN5c2ZzIGF0dHJpYnV0ZXM/IEFyZSB0aGV5IHByaW1pdGl2ZSB0eXBlcywgb3IgbW9yZSBjb21wbGV4IHN0cnVjdHVyZXMgc2VyaWFsaXplZCBmb3IgdGhlIHVzZXI/XG4qICAgSG93IGlzIHRoZSBjb25zaXN0ZW5jeSBhbmQgdmFsaWRpdHkgb2Ygc2NoZW1lIGNvbmZpZ3VyYXRpb25zIGVuZm9yY2VkIHdpdGhpbiBzeXNmcz8gQW55IHNhbml0eSBjaGVja3MgaW1wbGVtZW50ZWQ/XG4qICAgSG93IGRvZXMgdGhlIHN5c2ZzIGludGVyZmFjZSBpbnRlcmFjdCB3aXRoIERhbW9uJ3MgY29yZSBmdW5jdGlvbmFsaXR5IHRvIGFwcGx5IHRoZSBkZWZpbmVkIHNjaGVtZXM/IEFyZSB0aGVyZSBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIGFjdGlvbnMgYmFzZWQgb24gYXR0cmlidXRlIGNoYW5nZXM/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0gdmlhIHN5c2ZzIHRvIGNvbmZpZ3VyZSB0aGVzZSBzY2hlbWVzLCB0aGVuIGZpZ3VyZSBvdXQgaG93IHRoYXQgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBydW50aW1lIGJlaGF2aW9yIG9mIERhbW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRpb25zLCB0aGVpciBhY2Nlc3MgbWV0aG9kcywgYW5kIGRhdGEgdHlwZXMgd2lsbCBiZSBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSdtIHRyYWNpbmcgdGhlIHBhdGggZnJvbSB1c2VyIGlucHV0IHRocm91Z2ggc3lzZnMgdG8gRGFtb24ncyBpbnRlcm5hbCBsb2dpYy4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGNvbXBhcmUgdGhpcyBpbnRlcmZhY2Ugd2l0aCBleGlzdGluZyBiZXN0IHByYWN0aWNlcyBhbmQgc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG90aGVyIHN5c2ZzIGludGVyZmFjZXMgSSd2ZSB3b3JrZWQgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NTYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0NS42ODUyNzcyMDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTEwMDY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfc2NoZW1lc3xkYW1vbl9zeXNmc19zZXRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0NS43NDkzOTI4MDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMDg3OTU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBBY2Nlc3MgTW9uaXRvciAoYGRhbW9zYCkgSW50ZWdyYXRpb24gaW4gdGhlIFN5c3RlbSBGaWxlIFN5c3RlbSAoYHN5c2ZzYCkqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5c3RlbSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBtbS9kYW1vbi9zeXNmcy5jYC4gSSdtIHN1c3BlY3RpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmFjdGlvbiBvciBpbnRlZ3JhdGlvbiBnb2luZyBvbiBoZXJlLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBcImRhbW9zXCIgY29uY2VwdCDigJMgcHJlc3VtYWJseSBhIERhdGEgQWNjZXNzIE1vbml0b3IsIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzIHNjaGVtZS4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHZlcmlmeSB0aGlzIGludGVncmF0aW9uIGlzIHByZXNlbnQgYW5kIGZ1bmN0aW9uYWwsIHVuZGVyc3RhbmQgaG93IGEgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBpcyBkb25lLCBvciBkZXRlcm1pbmUgaWYgaXQgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQuIEnigJlsbCBzZWFyY2ggZGlyZWN0bHkgZm9yIHRoZSB0ZXJtIOKAnGRhbW9zLOKAnSBidXQgSSBhbHNvIG5lZWQgdG8gYmUgZmxleGlibGUuIFRoZSBjb2RlIG1pZ2h0IHJlZmVyIHRvIHRoZSBjb25jZXB0IHZpYSBhIG1vcmUgZ2VuZXJpYyB0ZXJtLiBTbywgSSdsbCBhbHNvIHJ1biBhIHNlYXJjaCBmb3IgXCJzY2hlbWUsXCIgYXMgdGhlIGFjY2VzcyBtb25pdG9yaW5nIGJlaGF2aW9yIGNvdWxkIGJlIGRlc2NyaWJlZCBhcyBhIHNwZWNpZmljIHNjaGVtZSBvciBtZXRob2QsIGV2ZW4gaWYgXCJkYW1vc1wiIGlzbid0IGV4cGxpY2l0bHkgdXNlZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBkYW1vbiBvciBhbm90aGVyIHJlbGF0ZWQgbWVtb3J5IG1vbml0b3Jpbmcgc3lzdGVtIGNvdWxkIGJlIGltcGxlbWVudGVkIHZpYSBzeXNmcywgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZmFjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6MzY6NDkuNTUwMjc0NzE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTM4Mzg5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfc2V0X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNjo0OS42NDU2Njc2NzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MzQ1MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCB0aGluZy4gSXQgc2VlbXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkgZnJvbSB0aGUgbmFtZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIGEgc3lzZnMgaW50ZXJmYWNlLiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggZW5hYmxpbmcgREFNT04gbW9uaXRvcmluZyB0aHJvdWdoIHRoZSBgc3lzZnNgIGZpbGVzeXN0ZW0sIHByb3ZpZGluZyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGl0IGZpdHMgaW4gdGhlIGxpZmVjeWNsZTogd2hlcmUgaXMgaXQgY2FsbGVkIGZyb20/IElzIGl0IHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB0aGUgY29udHJvbCBwYXRoLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgaXQgY2hlY2tzLCBvciByZXNvdXJjZXMgaXQgYWNxdWlyZXMvcmVsZWFzZXM/IERvZXMgaXQgc2ltcGx5IHNldCBhIGZsYWcsIG9yIGRvZXMgaXQgdHJpZ2dlciBtb3JlIGNvbXBsZXggYWN0aW9ucyBsaWtlIHN0YXJ0aW5nIG1vbml0b3JpbmcgdGhyZWFkcywgc2V0dGluZyB1cCBtb25pdG9yaW5nIGNvbnRleHRzLCBvciBpbnRlZ3JhdGluZyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBJIGFsc28gd2FudCB0byBmaW5kIG91dCB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiB0YWtlcyBhbmQgc2VlIGlmIHRoZSBmdW5jdGlvbiBkb2VzIGFueSBlcnJvciBjaGVja2luZyBvciBlcnJvciBoYW5kbGluZy5cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhdCBhIGhpZ2ggbGV2ZWwsIGFuZCB0aGVuIHRvIGludmVzdGlnYXRlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGl0IG1pZ2h0IGhhdmUgd2l0aCBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eSBvciBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGNvbnRlbnRpb24sIHRoYXQgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGlmIEkgd2VyZSwgZm9yIGV4YW1wbGUsIGRlYnVnZ2luZyBhIERBTU9OLXJlbGF0ZWQgaXNzdWUgb3IgaWYgSSBuZWVkZWQgdG8gd29yayB3aXRoIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW4gYW5vdGhlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjUzLjgyOTEyMDUyMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjQwOlxcdFxcdHJldHVybiAwO1xcbjIyNDE6XFx0fVxcbjIyNDI6XFx0XFxuMjI0MzpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI0NDpcXHR7XFxuMjI0NTpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMjI0NjpcXHRcXHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpyZXBlYXRfY2FsbF9jb250cm9sO1xcbjIyNDc6XFx0XFx0aW50IGVycjtcXG4yMjQ4OlxcdFxcbjIyNDk6XFx0XFx0aWYgKGRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcXG4yMjUwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjI1MTpcXHRcXHQvKiBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXFxuMjI1MjpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjI1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG4yMjU2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCk7XFxuMjI1NzpcXHRcXHRrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggPSBOVUxMO1xcbjIyNTg6XFx0XFxuMjI1OTpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sID0ga21hbGxvY19vYmooKnJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNjA6XFx0XFx0aWYgKCFyZXBlYXRfY2FsbF9jb250cm9sKVxcbjIyNjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI2MjpcXHRcXG4yMjYzOlxcdFxcdGN0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcXG4yMjY0OlxcdFxcdGlmIChJU19FUlIoY3R4KSkge1xcbjIyNjU6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI2NjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjdHgpO1xcbjIyNjc6XFx0XFx0fVxcbjIyNjg6XFx0XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbjIyNjk6XFx0XFx0aWYgKGVycikge1xcbjIyNzA6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI3MTpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbjIyNzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMjczOlxcdFxcdH1cXG4yMjc0OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4yMjc1OlxcdFxcbjIyNzY6XFx0XFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XFxuMjI3NzpcXHRcXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4yMjc4OlxcdFxcbjIyNzk6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcXG4yMjgwOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbjIyODE6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcXG4yMjgzOlxcdFxcdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXFxuMjI4NDpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg1OlxcdFxcdHJldHVybiBlcnI7XFxuMjI4NjpcXHR9XFxuMjI4NzpcXHRcXG4yMjg4OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM2OjUzLjgyOTI5Njk1MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxNTg4NzM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YCBDb250ZXh0IEJ1aWxkaW5nKipcblxuQWxyaWdodCwgc28gYGRhbW9uX3N5c2ZzX2J1aWxkX2N0eGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGNvbnRleHQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBpbnZvbHZlZCBpbiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byBkaXZlIGludG8gd2hhdCBmdW5jdGlvbnMgaXQncyBjYWxsaW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gS25vd2luZyB0aGUgY2FsbHMgaXQgbWFrZXMgcHJvdmlkZXMgdGhlIGJyZWFkY3J1bWJzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIGNvbnRleHQgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCBzeXN0ZW0gd2lsbCBvcGVyYXRlIG92ZXJhbGwuIEknbGwgbmVlZCB0byBmb2xsb3cgaXRzIGV4ZWN1dGlvbiBwYXRoIHRvIGdyYXNwIHRoZSBzdWJ0bGV0aWVzIG9mIGl0cyBpbnRlcmFjdGlvbnMuIFdoZXJlIGRvZXMgaXQgcHVsbCBpbmZvcm1hdGlvbiBmcm9tLCB3aGVyZSBkb2VzIGl0IHN0b3JlIGl0LCBhbmQgd2hpY2ggb3RoZXIgY29tcG9uZW50cyBkb2VzIGl0IHRvdWNoPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MjguNjQ1MTg3MTA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM5MTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19idWlsZF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTIxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjEyMjpzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMy1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqc3lzX2N0eCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIxMzE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE0Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjIxNDM6XFx0cGFyYW1fY3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0pO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjE0NC1cXHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIxODg9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxOTktXFxubW0vZGFtb24vc3lzZnMuYzoyMjAwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxubW0vZGFtb24vc3lzZnMuYy0yMjAxLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNfY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjQzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjIyNjM6XFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0pO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2NC1cXHRpZiAoSVNfRVJSKGN0eCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MjguNzMwNTgzNjI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDE1Mjg5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc19idWlsZF9jdHhgKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCBgZGFtb25fc3lzZnNfYnVpbGRfY3R4YC4gSSBzZWUgdGhlIGNhbGwgZm9yIGl0LCB3aGljaCBtZWFucyB3ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgYSBjb250ZXh0IGJ1aWxkaW5nIHByb2Nlc3Mgb2YgYSBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBhcyB0aGUgc3lzZnMgbGF5ZXIgY2FuIHNvbWV0aW1lcyBoaWRlIHRoZSBtb3JlIGludHJpY2F0ZSBkZXRhaWxzIG9mIERBTU9OJ3MgY29yZSBvcGVyYXRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB0aGUga2V5IHBhcmFtZXRlcnMgaXQncyB0YWtpbmcgYW5kIHdoYXQgcGFydCBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUgaXQncyBsaW5raW5nIHVwIHdpdGguIElzIGl0IGNyZWF0aW5nIGEgbmV3IGNvbnRleHQsIG9yIGJ1aWxkaW5nIG9uZSBmb3IgYW4gZXhpc3RpbmcgbW9uaXRvcmluZyBzZXR1cD8gSXMgaXQgcGFydCBvZiB0aGUgaW5pdGlhbCBwcm9iZSBvciBpcyBpdCBtb2RpZnlpbmcgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBjb25maWd1cmF0aW9uPyBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHlwaWNhbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgcm91dGluZSBmaXRzIHdpdGhpbiB0aGUgZ3JlYXRlciBEQU1PTiBhcmNoaXRlY3R1cmUuIEkgd2lsbCBtZW50YWxseSB0cmFjZSB0aGlzIHJvdXRpbmUgdG8gcGlucG9pbnQgdGhlIGFyZWEgb2YgREFNT04gd2hpY2ggaXMgYmVpbmcgbW9kaWZpZWQgb3IgY3JlYXRlZC4gVGhlbiwgSSBjYW4gZm9jdXMgaW4gb24gaXRzIHNwZWNpZmljIHJvbGUgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBuZXcgaW5zdGFuY2UgcmVnaXN0cmF0aW9ucyB3aXRoIHRoZSBzeXNmcyBmaWxlcy4gTGV0J3Mgc2VlIGlmIHRoaXMgY29udGV4dCBidWlsZCBpcyB0aGUgZW50cnlwb2ludCB0byB0aGUgbW9uaXRvciBvciBhIHBhcnQgb2YgdGhlIGludGVybmFsIGNvbmZpZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MuIEdvb2QsIGxldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1OTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozMy4xNzIxMTYwNjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIwMDpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxcbjIyMDE6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpXFxuMjIwMjpcXHR7XFxuMjIwMzpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuMjIwNDpcXHRcXHRpbnQgZXJyO1xcbjIyMDU6XFx0XFxuMjIwNjpcXHRcXHRpZiAoIWN0eClcXG4yMjA3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjIyMDg6XFx0XFxuMjIwOTpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoY3R4LCBzeXNfY3R4KTtcXG4yMjEwOlxcdFxcdGlmIChlcnIpIHtcXG4yMjExOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMjIxMjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjIyMTM6XFx0XFx0fVxcbjIyMTQ6XFx0XFxuMjIxNTpcXHRcXHRyZXR1cm4gY3R4O1xcbjIyMTY6XFx0fVxcbjIyMTc6XFx0XFxuMjIxODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzO1xcbjIyMTk6XFx0XFxuMjIyMDpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuMjIyMTpcXHR7XFxuMjIyMjpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XFxuMjIyMzpcXHRcXG4yMjI0OlxcdFxcdGlmICghc3lzZnNfa2RhbW9uZC1cXHUwMDNlcmVmcmVzaF9tcylcXG4yMjI1OlxcdFxcdFxcdHJldHVybiAwO1xcbjIyMjY6XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxcbjIyMjc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIyODpcXHRcXHRkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyArXFxuMjIyOTpcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbjIyMzA6XFx0XFxuMjIzMTpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjIyMzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMzpcXHRcXHRpZiAoc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjIzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjM1OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNjpcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG4yMjM3OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzODpcXHRvdXQ6XFxuMjIzOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozMy4xNzIyNzUwNzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NTU5MjExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AsIGh1aD8gVGhhdCBpbnN0YW50bHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgREFNT04gYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlY2lzZWx5IHRoaXMgZnVuY3Rpb24gKmRvZXMqLiBGcm9tIGl0cyBuYW1lLCBJJ20gaW5mZXJyaW5nIGl0J3MgcmVsYXRlZCB0byBhcHBseWluZyBpbnB1dHMsIHByb2JhYmx5IGNvbmZpZ3VyYXRpb25zIG9yIGNvbW1hbmRzLCB2aWEgdGhlIHN5c2ZzIGZpbGVzeXN0ZW0gd2l0aGluIHRoZSBEeW5hbWljIEFkZHJlc3MgTW9uaXRvcmluZyAoREFNT04pIGZyYW1ld29yay5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0aGUgcG90ZW50aWFsIGZvciBkaWZmZXJlbnQgaW5wdXQgdHlwZXMuIElzIGl0IGhhbmRsaW5nIG1vbml0b3IgY29uZmlndXJhdGlvbnM/IENvbnRyb2wgY29tbWFuZHMgbGlrZSBlbmFibGluZy9kaXNhYmxpbmcgYSBtb25pdG9yLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGZvY3VzZWQgb24gZmlsdGVyaW5nIG9yIHJlZ2lvbiBtb2RpZmljYXRpb25zIHdpdGhpbiBhIHJ1bm5pbmcgREFNT04gaW5zdGFuY2U/IFRoZSBcImFwcGx5XCIgcGFydCBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciB0YWtpbmcgdGhlc2Ugc3lzZnMtcHJvdmlkZWQgaW5wdXRzIGFuZCBpbnRlZ3JhdGluZyB0aGVtIGludG8gdGhlIERBTU9OIG9wZXJhdGlvbi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gQXJlIHRoZXJlIHNwZWNpZmljIHN0cnVjdHMgZm9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IHRoaXMgZnVuY3Rpb24gcmVhZHMgZnJvbSBzeXNmcz8gSSBiZXQgdGhlcmUncyBzb21lIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gaGFwcGVuaW5nIGhlcmUg4oCTIGVycm9yIGhhbmRsaW5nIHdvdWxkIGJlIGNyaXRpY2FsLiBJdCdzIGxpa2VseSBjaGVja2luZyBmb3IgdmFsaWQgcmFuZ2VzLCBjb3JyZWN0IHN5bnRheCwgYW5kIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGlucHV0cy4gV2hhdCBhYm91dCBhdG9taWNpdHk/IERvZXMgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGJlIHRocmVhZC1zYWZlIG9yIHdvcmsgdW5kZXIgYSBsb2NrPyBJZiBpdCBjaGFuZ2VzIGxpdmUgZGF0YSBpdCBpcyBwcm9iYWJseS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIERBTU9OIGNvbXBvbmVudHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMuIFdoYXQgaGFwcGVucyBpZiB0aGUgaW5wdXRzIGFyZSB2YWxpZD8gSG93IGFyZSBjaGFuZ2VzIHJlZmxlY3RlZCBpbiB0aGUgREFNT04gbW9uaXRvciBzdGF0ZT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEdvdHRhIGZpZ3VyZSBvdXQgdGhlICd3aHknIGJlaGluZCB0aGUgJ3doYXQnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MzcuODY3ODcxMjI4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwOTQ6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbjIwOTU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpXFxuMjA5NjpcXHR7XFxuMjA5NzpcXHRcXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XFxuMjA5ODpcXHRcXHRpbnQgZXJyO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRvcHNfaWQgPSBSRUFEX09OQ0Uoc3lzX2N0eC1cXHUwMDNlb3BzX2lkKTtcXG4yMTAxOlxcdFxcdGVyciA9IGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBvcHNfaWQpO1xcbjIxMDI6XFx0XFx0aWYgKGVycilcXG4yMTAzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjEwNDpcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCA9IFJFQURfT05DRShzeXNfY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbjIxMDU6XFx0XFx0LyogYWRkcl91bml0IGlzIHJlc3BlY3RlZCBieSBvbmx5IERBTU9OX09QU19QQUREUiAqL1xcbjIxMDY6XFx0XFx0aWYgKG9wc19pZCA9PSBEQU1PTl9PUFNfUEFERFIpXFxuMjEwNzpcXHRcXHRcXHRjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoXFxuMjEwODpcXHRcXHRcXHRcXHRcXHREQU1PTl9NSU5fUkVHSU9OX1NaIC8gY3R4LVxcdTAwM2VhZGRyX3VuaXQsIDEpO1xcbjIxMDk6XFx0XFx0Y3R4LVxcdTAwM2VwYXVzZSA9IHN5c19jdHgtXFx1MDAzZXBhdXNlO1xcbjIxMTA6XFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMpO1xcbjIxMTE6XFx0XFx0aWYgKGVycilcXG4yMTEyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjExMzpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlYXR0cnMtXFx1MDAzZXByb2Jlcyk7XFxuMjExNDpcXHRcXHRpZiAoZXJyKVxcbjIxMTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE2OlxcdFxcdGVyciA9IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKGN0eCwgc3lzX2N0eC1cXHUwMDNldGFyZ2V0cyk7XFxuMjExNzpcXHRcXHRpZiAoZXJyKVxcbjIxMTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTE5OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhjdHgsIHN5c19jdHgtXFx1MDAzZXNjaGVtZXMpO1xcbjIxMjA6XFx0fVxcbjIxMjE6XFx0XFxuMjEyMjpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxcbjIxMjM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKnN5c19jdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozNy44NjgwNTIzMjhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1ODI3MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHN5c3RlbSBpbnRlcm5hbHM6XG5cbioqQ2hlY2tpbmcgdGhlIERBTU9OIFNjaGVtZSBTZXR1cCoqXG5cbkhtbSwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYOKApiB0aGF0IHJpbmdzIGEgYmVsbC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIGFkZGluZyBzY2hlbWVzIGV2ZW50dWFsbHkgZnVubmVscyBkb3duIHRvIHRoZSBjb3JlIHNldHVwIGZ1bmN0aW9uLiBUaGUgcXVlc3Rpb24gSSd2ZSBnb3QgaXMsIGRvZXMgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBkaXJlY3RseSBpbnZva2UgYGRhbW9uX3NldF9zY2hlbWVzYD8gSSdtIHByZXR0eSBzdXJlIGl0IHNob3VsZC4gQnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjcml0aWNhbCBjb250cm9sIHBhdGhzLiBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdWJ0bGUgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBsYXllci4gTGV0J3MgdHJhY2UgdGhhdCBjYWxsIHN0YWNrIHF1aWNrbHkgYW5kIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTg3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzo0Mi4wMjYzMjc5MzZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTE4NjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTgtXFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTk6XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6NDIuMTM1NTIxNTQ1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzQwNDQyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgZ2VhcnMgYXJlIHN0YXJ0aW5nIHRvIHR1cm4sIHRoZSBuYW1lIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXMgYm91bmNpbmcgYXJvdW5kLiBJbnN0YW50bHksIEknbSB0aGlua2luZywgdGhpcyBsaWtlbHkgcGVydGFpbnMgdG8gdGhlIER5bmFtaWMgQWRkcmVzcyBNb25pdG9yaW5nIChEQU1PTikgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIHZpYSB0aGUgc3lzZnMgZmlsZXN5c3RlbS4gVGhlIFwiYWRkX3NjaGVtZXNcIiBwYXJ0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGNvbmZpZ3VyYXRpb247IHdlJ3JlIGRlYWxpbmcgd2l0aCAqZGVmaW5pbmcqIG1vbml0b3Jpbmcgc2NoZW1lcywgcmlnaHQ/IEknbSBwaWN0dXJpbmcgdGhlIHByb2Nlc3M6IGxpa2VseSBjcmVhdGluZyBlbnRyaWVzLCBhdHRyaWJ1dGVzLCBwZXJoYXBzIHNldHRpbmcgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHJlZ2lvbnMgb3IgcHJvY2Vzc2VzIHRoYXQgd2Ugd2FudCBEQU1PTiB0byB0cmFjay4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIGFib3V0IHNldHRpbmcgbW9uaXRvcmluZyAqdGFyZ2V0cyosIHRoZSByZWdpb25zIHRvIG1vbml0b3IsIG9yIHBlcmhhcHMgaG93IHRoZSBtb25pdG9yaW5nIGl0c2VsZiB3b3Jrcy4gSXMgdGhpcyBhYm91dCBhZGRpbmcgbmV3IG1vbml0b3JpbmcgdHlwZXMsIG9yIG1vZGlmeWluZyBleGlzdGluZyBvbmVzPyBJJ20gaG9waW5nIGZvciBhIGNsZWFuIGludGVyZmFjZSwgcm9idXN0IGVycm9yIGhhbmRsaW5n4oCmIGtub3dpbmcgaG93IERBTU9OJ3MgZXZvbHZlZCwgdGhhdOKAmXMgYWxtb3N0IGEgZ2l2ZW4sIGJ1dCBvbmUgY2FuIGhvcGUhIEknbSBwaWN0dXJpbmcgaXQgaW4gdGhlIHN5c2ZzIGhpZXJhcmNoeS4gV2hlcmUgaXMgaXQgbG9jYXRlZCwgaG93IGlzIHRoZSBkYXRhIHN0cnVjdHVyZWQsIGhvdyB3aWxsIHRoaXMgaW50ZXJmYWNlIHBsYXkgbmljZSB3aXRoIHRoZSBleGlzdGluZyBtb25pdG9yaW5nIGFuZCBEQU1PTiBjb25maWd1cmF0aW9uLiBOZWVkIHRvIGdldCB0aGUgc3BlY2lmaWNzLCBhbmQgdGhlbiBkZXRlcm1pbmUgaG93IGl0IHdpbGwgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGNvdWxkIGJlIHNpZ25pZmljYW50LiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyB0aGUga2V5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzo0Ni44Njk1Njk3OTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODcyMjUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM3OjQ2LjkzNzQ0ODQ0M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgxNzQwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2VhcmNoIGZvciBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLiBJJ20gY3VyaW91cyBhYm91dCB3aGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSByZWxhdGVzIHRvIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgc3VzcGVjdCBpdCdzIHByb2JhYmx5IHBhcnQgb2YgYSBsYXJnZXIgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIGltcGxlbWVudGF0aW9uLCBnaXZlbiB0aGUgXCJkYW1vblwiIHByZWZpeCBhbmQgdGhlIFwic3lzZnNcIiBjb21wb25lbnQgc3VnZ2VzdHMgaW50ZXJhY3Rpb24gdGhyb3VnaCB0aGUgc3lzZnMgZmlsZSBzeXN0ZW0gaW50ZXJmYWNlLiBUaGUgXCJhZGRfc2NoZW1lc1wiIHBhcnQgaW1wbGllcyBpdCdzIGludm9sdmVkIGluIGRlZmluaW5nIG9yIHJlZ2lzdGVyaW5nIG1vbml0b3Jpbmcgc2NoZW1lcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgc29tZSBpbml0aWFsIHJlc3VsdHMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgSSdsbCB0aGVuIGxpa2VseSBzdGFydCBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdyBvZiB0aGUgREFNT04gc3Vic3lzdGVtLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgcmVsYXRlZCB0byBzZXR0aW5nIHVwIG1vbml0b3JpbmcgcnVsZXMsIGNvbmZpZ3VyaW5nIGRpZmZlcmVudCBEQU1PTiBwcm9maWxlcywgb3IgcGVyaGFwcyBkZWZpbmluZyBjdXN0b20gZGF0YSBjb2xsZWN0aW9uIHN0cmF0ZWdpZXMuIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzo1Mi4wMTkxOTIxMjhaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzQyMTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTgtXFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTk6XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKGN0eCwgc3lzX2N0eC1cXHUwMDNlc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6NTIuMTMyNjE4MTY2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY0MTUwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqV2hlcmUncyBUaGF0IEZ1bmN0aW9uIEhpZGluZz8qKlxuXG5Pa2F5LCBJJ20gZGlnZ2luZyB0aHJvdWdoIHRoaXMgY29kZSwgYW5kIEkndmUgaGl0IGEgc25hZy4gSSdtIGxvb2tpbmcgYXQgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYnV0IG15IG1lbnRhbCBtYXAgb2YgdGhlIHByb2plY3QgaXNuJ3QgaW1tZWRpYXRlbHkgcGxhY2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQuIEkga25vdyBEQU1PTiBpcyB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciwgYW5kIEknbSBmYW1pbGlhciB3aXRoIGl0cyBzeXNmcyBpbnRlcmZhY2VzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGFkZGluZyB0aGVzZSBzY2hlbWVzIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBwcm9qZWN0J3Mgc3RydWN0dXJlLiBJcyB0aGlzIGluIHRoZSBjb3JlIERBTU9OIGNvZGUsIGEgdXRpbGl0eSBsaWJyYXJ5LCBvciBwZXJoYXBzIGEgbW9kdWxlIHJlbGF0ZWQgdG8gc3lzZnMgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIG92ZXJhbGwgYmVoYXZpb3Igd2l0aGluIHRoZSBzY2hlbWUgY3JlYXRpb24gZmxvdy4gV2l0aG91dCB0aGF0LCBJJ20gc3R1Y2ssIGFuZCBmdXJ0aGVyIGFuYWx5c2lzIGlzIG9uIGhvbGQuIExldCdzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Nzg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6NTYuMjc5MDM2MDM1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzY0OTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19hZGRfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtY29tbW9uLmg9Mzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC0zOC1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDozOTppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDQ0OmludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNDUtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vc3lzZnMuYzoyMTE5OlxcdHJldHVybiBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhjdHgsIHN5c19jdHgtXFx1MDAzZXNjaGVtZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM3OjU2LjM0NjY5MDM4NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTYzNTQ0OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIHRoZSBEQU1PTiBTeXN0ZW0gRmlsZXMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvZGUgcmVsYXRlZCB0byBhZGRpbmcgc2NoZW1lcyB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gVGhlIHBhdGggSSdtIGxvb2tpbmcgYXQsIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBpbW1lZGlhdGVseSBtYWtlcyBzZW5zZS4gVGhhdCdzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIGZvciBzeXNmcyBpbnRlcmZhY2UgaGFuZGxpbmcgZm9yIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWVzLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgcmVnaXN0ZXJpbmcgb3IgbWFraW5nIGFjY2Vzc2libGUgdGhlIGRpZmZlcmVudCBEQU1PTiBzY2hlbWVzIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCBob3cgdGhlIHNjaGVtZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJJ2xsIGZvY3VzIG9uIGhvdyBlYWNoIHNjaGVtZSBpcyBpbnRlZ3JhdGVkLCB3aGF0IGF0dHJpYnV0ZXMgYXJlIGNyZWF0ZWQgZm9yIGVhY2gsIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIERBTU9OIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjAwLjkxMDIzODQ3NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzM5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNDQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNDQ6XFx0aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4zMDQ1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbjMwNDY6XFx0e1xcbjMwNDc6XFx0XFx0aW50IGk7XFxuMzA0ODpcXHRcXG4zMDQ5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzeXNmc19zY2hlbWVzLVxcdTAwM2VucjsgaSsrKSB7XFxuMzA1MDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZSwgKm5leHQ7XFxuMzA1MTpcXHRcXG4zMDUyOlxcdFxcdFxcdHNjaGVtZSA9IGRhbW9uX3N5c2ZzX21rX3NjaGVtZShzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltpXSk7XFxuMzA1MzpcXHRcXHRcXHRpZiAoIXNjaGVtZSkge1xcbjMwNTQ6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lX3NhZmUoc2NoZW1lLCBuZXh0LCBjdHgpXFxuMzA1NTpcXHRcXHRcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3NjaGVtZShzY2hlbWUpO1xcbjMwNTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzA1NzpcXHRcXHRcXHR9XFxuMzA1ODpcXHRcXHRcXHRkYW1vbl9hZGRfc2NoZW1lKGN0eCwgc2NoZW1lKTtcXG4zMDU5OlxcdFxcdH1cXG4zMDYwOlxcdFxcdHJldHVybiAwO1xcbjMwNjE6XFx0fVxcbjMwNjI6XFx0XFxuMzA2MzpcXHR2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODowMC45MTA4MTUwNDZaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4MTg0MzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIENoYW5nZXMgUmVsYXRlZCB0byBgZGFtb25fYWRkX3NjaGVtZWAqKlxuXG5Pa2F5LCBzbyBgZGFtb25fYWRkX3NjaGVtZWAgaGFzIGJlZW4gdHJpZ2dlcmVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBEQU1PTiBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0aXZlIGR1cmluZyBzY2hlbWUgYXBwbGljYXRpb24uIE15IGluaXRpYWwgc2NhbiBzaG93cyBtb2RpZmljYXRpb25zIHRvIGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgLCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgYGtkYW1vbmRfaW5pdF9jdHhgLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gVGhlc2UgYXJlIGFsbCBjb3JlIERBTU9OIGZ1bmN0aW9ucywgZGVhbGluZyB3aXRoIG1lbW9yeSB1c2FnZSwgcGFnZW91dCwgbWlncmF0aW9uLCBhbmQgc3RhdGlzdGljcyBnYXRoZXJpbmfigJRlc3NlbnRpYWxseSwgdGhlIGhlYXJ0IG9mIERBTU9OJ3Mgb3BlcmF0aW9uIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLlxuXG5UaGUgd2F5IHRvIGdldCB0byB0aGVzZSBmdW5jdGlvbnMgd291bGQgYmUgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCBvciB2aWEgYGRhbW9uX3JlY2xhaW1gIGFuZCBgZGFtb25fbHJ1X3NvcnRgLiBTaW5jZSBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIHRoYXQgdGhpcyBwYXRjaCByZXByZXNlbnRzLCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgZGVmaW5lZC4gVGhpcyBuYXJyb3dzIG15IGZvY3VzLCB3aGljaCBpcyBoZWxwZnVsLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHM/IFRoZSBtb3N0IHJlbGV2YW50IG9uZXMgYXBwZWFyIHRvIGJlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCwgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgLCBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCwgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAsIGFuZCBgZGFtb25fc3lzZnNfY21kX3JlcXVlc3Rfc3RvcmVgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgY29udHJvbCBwb2ludHMgZm9yIGFkZGluZywgY29uZmlndXJpbmcsIGFuZCB0cmlnZ2VyaW5nIHRoZSBzY2hlbWUgY2hhbmdlcy5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGNvZGUgZm9yIGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgZm9jdXMgb24gaG93IGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdF9zdG9yZWAgaXMgaW1wbGVtZW50ZWQuIFRoYXQncyB0aGUgYmVzdCBlbnRyeSBwb2ludCBmb3IgaG93IHRoaXMgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDA5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MDguMTkyNjYyMDg4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzM0NTk5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfY21kX3JlcXVlc3Rfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MDguMjU2MDE3NTc3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDk4ODE4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBsaW5lcyBvZiBjb2RlOlxuXG4qKkFuYWx5emluZyBgbW0vZGFtb24vc3lzZnMuY2AgZm9yIFN0b3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9kYW1vbi9zeXNmcy5jYCBiZWNhdXNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCBEQU1PTiwgYW5kIHNwZWNpZmljYWxseSwgaG93IGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBzZXQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggdGhlIGBzdG9yZWAgZnVuY3Rpb25zLiBUaGV5J3JlIHRoZSBjcml0aWNhbCBwaWVjZXMsIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBoYW5kbGUgaW5jb21pbmcgZGF0YSBmcm9tIHN5c2ZzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1vZGlmaWVkLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IERBTU9OJ3MgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGZ1bmN0aW9ucyB3aXRoIG5hbWVzIGxpa2UgYGRhbW9uX2F0dHJfc2V0X3h4eGAgb3Igc2ltaWxhciwgZWFjaCBvbmUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgc3lzZnMgYXR0cmlidXRlIGV4cG9zZWQgZm9yIGNvbmZpZ3VyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBkYXRhIHZhbGlkYXRpb24gb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucywgYXMgdGhhdCdzIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0LiBJbiBteSBtaW5kJ3MgZXllIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ3JlcCB0byBmaW5kIGFsbCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MTMuMDY1OTAzMzA2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM1MDc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfc3RvcmVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjY9c3RhdGljIHNzaXplX3Qgc3RhcnRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0zNC1cXG5tbS9kYW1vbi9zeXNmcy5jOjM1OnN0YXRpYyBzc2l6ZV90IHN0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0zNi1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDU9c3RhdGljIHNzaXplX3QgZW5kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNTMtXFxubW0vZGFtb24vc3lzZnMuYzo1NDpzdGF0aWMgc3NpemVfdCBlbmRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTU1LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNTU9c3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjMtXFxubW0vZGFtb24vc3lzZnMuYzoxNjQ6c3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NS1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDY9c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTQtXFxubW0vZGFtb24vc3lzZnMuYzoyNTU6c3RhdGljIHNzaXplX3QgcGlkX3RhcmdldF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTI1Ni1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNjc9c3RhdGljIHNzaXplX3Qgb2Jzb2xldGVfdGFyZ2V0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjI3NjpzdGF0aWMgc3NpemVfdCBvYnNvbGV0ZV90YXJnZXRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0yNzctXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MzkwPXN0YXRpYyBzc2l6ZV90IG5yX3RhcmdldHNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMzk4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mzk5OnN0YXRpYyBzc2l6ZV90IG5yX3RhcmdldHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy00MDAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDcxPXN0YXRpYyBzc2l6ZV90IGFjY2Vzc19icF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy00NzktXFxubW0vZGFtb24vc3lzZnMuYzo0ODA6c3RhdGljIHNzaXplX3QgYWNjZXNzX2JwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNDgxLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTQ5NT1zdGF0aWMgc3NpemVfdCBhZ2dyc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy01MDMtXFxubW0vZGFtb24vc3lzZnMuYzo1MDQ6c3RhdGljIHNzaXplX3QgYWdncnNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy01MDUtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NTE5PXN0YXRpYyBzc2l6ZV90IG1pbl9zYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNTI3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6NTI4OnN0YXRpYyBzc2l6ZV90IG1pbl9zYW1wbGVfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy01MjktXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NTQzPXN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNTUxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6NTUyOnN0YXRpYyBzc2l6ZV90IG1heF9zYW1wbGVfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy01NTMtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NjUzPXN0YXRpYyBzc2l6ZV90IHNhbXBsZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy02NjEtXFxubW0vZGFtb24vc3lzZnMuYzo2NjI6c3RhdGljIHNzaXplX3Qgc2FtcGxlX3VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNjYzLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTY3Nz1zdGF0aWMgc3NpemVfdCBhZ2dyX3VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNjg1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Njg2OnN0YXRpYyBzc2l6ZV90IGFnZ3JfdXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy5jLTY4Ny1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzAxPXN0YXRpYyBzc2l6ZV90IHVwZGF0ZV91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03MDktXFxubW0vZGFtb24vc3lzZnMuYzo3MTA6c3RhdGljIHNzaXplX3QgdXBkYXRlX3VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtNzExLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTc4Nz1zdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTgwMy1cXG5tbS9kYW1vbi9zeXNmcy5jOjgwNDpzdGF0aWMgc3NpemVfdCB0eXBlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtODA1LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgyNT1zdGF0aWMgc3NpemVfdCBtYXRjaGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy04MzMtXFxubW0vZGFtb24vc3lzZnMuYzo4MzQ6c3RhdGljIHNzaXplX3QgbWF0Y2hpbmdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy04MzUtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9ODQ5PXN0YXRpYyBzc2l6ZV90IGFsbG93X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTg1Ny1cXG5tbS9kYW1vbi9zeXNmcy5jOjg1ODpzdGF0aWMgc3NpemVfdCBhbGxvd19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTg1OS1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz04NzM9c3RhdGljIHNzaXplX3QgcGF0aF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy04ODYtXFxubW0vZGFtb24vc3lzZnMuYzo4ODc6c3RhdGljIHNzaXplX3QgcGF0aF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTg4OC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMDEwPXN0YXRpYyBzc2l6ZV90IG5yX2ZpbHRlcnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTAxOC1cXG5tbS9kYW1vbi9zeXNmcy5jOjEwMTk6c3RhdGljIHNzaXplX3QgbnJfZmlsdGVyc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTEwMjAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTEwND1zdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTExMzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0xMTE0LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEyMjA9c3RhdGljIHNzaXplX3QgbnJfcHJvYmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEyMjgtXFxubW0vZGFtb24vc3lzZnMuYzoxMjI5OnN0YXRpYyBzc2l6ZV90IG5yX3Byb2Jlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTEyMzAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTUzNj1zdGF0aWMgc3NpemVfdCBvcGVyYXRpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE1NTItXFxubW0vZGFtb24vc3lzZnMuYzoxNTUzOnN0YXRpYyBzc2l6ZV90IG9wZXJhdGlvbnNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0xNTU0LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE1NzI9c3RhdGljIHNzaXplX3QgYWRkcl91bml0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE1ODAtXFxubW0vZGFtb24vc3lzZnMuYzoxNTgxOnN0YXRpYyBzc2l6ZV90IGFkZHJfdW5pdF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTE1ODItXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTU5OD1zdGF0aWMgc3NpemVfdCBwYXVzZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2MDYtXFxubW0vZGFtb24vc3lzZnMuYzoxNjA3OnN0YXRpYyBzc2l6ZV90IHBhdXNlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0xNjA4LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzMwPXN0YXRpYyBzc2l6ZV90IG5yX2NvbnRleHRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE3MzgtXFxubW0vZGFtb24vc3lzZnMuYzoxNzM5OnN0YXRpYyBzc2l6ZV90IG5yX2NvbnRleHRzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc0MC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjg4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTUtXFx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4IGluIG5leHRcXG5tbS9kYW1vbi9zeXNmcy5jOjIyOTY6XFx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXFxubW0vZGFtb24vc3lzZnMuYy0yMjk3LVxcdCAqL1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzY0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDMtXFxubW0vZGFtb24vc3lzZnMuYzoyNDA0OnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYy0yNDA1LVxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDQ4PXN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQ1Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjI0NTc6c3RhdGljIHNzaXplX3QgcmVmcmVzaF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTI0NTgtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjU5Nz1zdGF0aWMgc3NpemVfdCBucl9rZGFtb25kc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNjA1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjYwNjpzdGF0aWMgc3NpemVfdCBucl9rZGFtb25kc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy5jLTI2MDctXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzg6MTMuMTMyMjU4MDA1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NjAwNjg0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbW1hbmQgSGFuZGxlcioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNvbW1hbmRzLiBNeSBtZW50YWwgbW9kZWwgc2F5cyB0aGF0IGBzdGF0ZV9zdG9yZWAgaXMgdGhlIGNlbnRyYWwgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjb21tYW5kIHByb2Nlc3NpbmcsIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgcGFydCBvZiBpdC4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gTGV0J3MgZGlnIGludG8gYHN0YXRlX3N0b3JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXJjaGl0ZWN0dXJlLCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgaW5jb21pbmcgY29tbWFuZHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIGlucHV0IHByb2Nlc3NpbmcuIEkgYmV0IEkgY2FuIGlkZW50aWZ5IGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgcXVpY2tseSBieSBleGFtaW5pbmcgaG93IGl0IGRpc3BhdGNoZXMgdG8gaW50ZXJuYWwgcHJvY2Vzc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjM3LjczMjk0NTc0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MDQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MDQ6XFx0c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4yNDA1OlxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjI0MDY6XFx0e1xcbjI0MDc6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBjb250YWluZXJfb2Yoa29iaixcXG4yNDA4OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kLCBrb2JqKTtcXG4yNDA5OlxcdFxcdGVudW0gZGFtb25fc3lzZnNfY21kIGNtZDtcXG4yNDEwOlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4yNDExOlxcdFxcbjI0MTI6XFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG4yNDEzOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjQxNDpcXHRcXHRmb3IgKGNtZCA9IDA7IGNtZCBcXHUwMDNjIE5SX0RBTU9OX1NZU0ZTX0NNRFM7IGNtZCsrKSB7XFxuMjQxNTpcXHRcXHRcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBkYW1vbl9zeXNmc19jbWRfc3Ryc1tjbWRdKSkge1xcbjI0MTY6XFx0XFx0XFx0XFx0cmV0ID0gZGFtb25fc3lzZnNfaGFuZGxlX2NtZChjbWQsIGtkYW1vbmQpO1xcbjI0MTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQxODpcXHRcXHRcXHR9XFxuMjQxOTpcXHRcXHR9XFxuMjQyMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjI0MjE6XFx0XFx0aWYgKCFyZXQpXFxuMjQyMjpcXHRcXHRcXHRyZXQgPSBjb3VudDtcXG4yNDIzOlxcdFxcdHJldHVybiByZXQ7XFxuMjQyNDpcXHR9XFxuMjQyNTpcXHRcXG4yNDI2OlxcdHN0YXRpYyBzc2l6ZV90IHBpZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjI0Mjc6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuMjQyODpcXHR7XFxuMjQyOTpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbjI0MzA6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xcbjI0MzE6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbjI0MzI6XFx0XFx0aW50IHBpZCA9IC0xO1xcbjI0MzM6XFx0XFxuMjQzNDpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjI0MzU6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNDM2OlxcdFxcdGN0eCA9IGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eDtcXG4yNDM3OlxcdFxcdGlmICghY3R4KVxcbjI0Mzg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQzOTpcXHRcXG4yNDQwOlxcdFxcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XFxuMjQ0MTpcXHRcXHRpZiAocGlkIFxcdTAwM2MgMClcXG4yNDQyOlxcdFxcdFxcdHBpZCA9IC0xO1xcbjI0NDM6XFx0b3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODozNy43MzMwODAzWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTE3MTExNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbW1hbmQgSGFuZGxpbmcgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRg4oCmIHRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgaXNuJ3QgaXQ/IFRoYXQncyAqdGhlKiBmdW5jdGlvbiB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgdGhlc2UgREFNT04gc3lzZnMgaW50ZXJhY3Rpb25zLiBFdmVyeXRoaW5nIHdlJ3JlIGRvaW5nLCBhbGwgdGhlIHNldHVwLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUga25vYnMgd2UndmUgY3JlYXRlZCBpbiB0aGUgc3lzZnMgaGllcmFyY2h5IOKAkyB0aGV5IGFsbCBjdWxtaW5hdGUgaGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGNvbW1hbmRzIGFyZSAqaW50ZXJwcmV0ZWQqIGFuZCAqZXhlY3V0ZWQqLiBJIG5lZWQgdG8gYmUgcmF6b3Itc2hhcnAgYWJvdXQgdGhpcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjb21tYW5kcyBhcmUgd2UgdGFsa2luZyBhYm91dD8gU2V0dGluZyBtb25pdG9yaW5nIHJlZ2lvbnM/IE1vZGlmeWluZyBzYW1wbGluZyBwYXJhbWV0ZXJzPyBUcmlnZ2VyaW5nIG1hbnVhbCB1cGRhdGVzPyBQcm9iYWJseSBhbGwgb2YgdGhlIGFib3ZlLCBhbmQgbW9yZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBtYXNzaXZlIHN3aXRjaCBzdGF0ZW1lbnQgb3IgYSBzZXJpZXMgb2YgY29uZGl0aW9uYWwgYnJhbmNoZXMsIGVhY2ggaGFuZGxpbmcgYSBzcGVjaWZpYyBjb21tYW5kIGNvZGUgb3Igc3RyaW5nIGlkZW50aWZpZXIuIFRoZSByb2J1c3RuZXNzIG9mIHRoaXMgZW50aXJlIHN5c3RlbSBoaW5nZXMgb24gdGhlIHRob3JvdWdobmVzcyBvZiB0aGUgY29tbWFuZCBwYXJzaW5nIGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGFzc29jaWF0ZWQgYWN0aW9ucy5cblxuSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSBpbnRlcnByZXRzIHVzZXIgaW5wdXQsIGRlYWxzIHdpdGggYW55IHBvdGVudGlhbCBlcnJvcnMgbGlrZSBpbnZhbGlkIGFyZ3VtZW50cywgb3IgY29tbWFuZHMgdGhhdCBhcmUgYXR0ZW1wdGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBub3QgaW4gYSB2YWxpZCBzdGF0ZS4gVGhpbmsgYWJvdXQgdGhlIGVkZ2UgY2FzZXMuIFRoaW5rIGFib3V0IHNlY3VyaXR5LiBJcyB0aGVyZSBhIHBvdGVudGlhbCBmb3IgY29tbWFuZCBpbmplY3Rpb24gb3Igb3RoZXIgbWFsaWNpb3VzIG1hbmlwdWxhdGlvbiBoZXJlPyBHb3R0YSBiZSBvbiBoaWdoIGFsZXJ0IGZvciB0aG9zZSBwb3NzaWJpbGl0aWVzLiBJIHdhbnQgdG8gZW5zdXJlIGV2ZXJ5IGNvbW1hbmQgaXMgdmFsaWRhdGVkLiBJcyB0aGUgZXhlY3V0aW9uIHRocmVhZCBzYWZlLCBvciBkb2VzIGl0IGNhbGwgZXh0ZXJuYWwgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBsb2NraW5nPyBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIGl0IHdpdGggbXkgZXllcyBjbG9zZWQuXG5cbkluIG15IG1pbmQsIGEgd2VsbC1kZXNpZ25lZCBjb21tYW5kIGhhbmRsZXIgc2hvdWxkIG1pbmltaXplIHRoZSBhbW91bnQgb2YgaW50ZXJuYWwgc3RhdGUgaXQgbW9kaWZpZXMgZGlyZWN0bHksIGVzcGVjaWFsbHkgZ2xvYmFsIHN0YXRlLiBJZGVhbGx5LCBpdCBzaG91bGQgYWJzdHJhY3QgbW9zdCBvZiB0aGUgaGVhdnkgbGlmdGluZyBvdXQgaW50byBsb3dlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdGVzdGVkIGluZGVwZW5kZW50bHkuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo0Mi44MjQ3OTQ3OTRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2NDpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbjIzNjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjM2NjpcXHR7XFxuMjM2NzpcXHRcXHRpZiAoY21kICE9IERBTU9OX1NZU0ZTX0NNRF9PRkYgXFx1MDAyNlxcdTAwMjYga2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjM2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzY5OlxcdFxcbjIzNzA6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4yMzcxOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxcbjIzNzI6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XFxuMjM3MzpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XFxuMjM3NDpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoa2RhbW9uZCk7XFxuMjM3NTpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVQ6XFxuMjM3NjpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzc3OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XFxuMjM3ODpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG4yMzc5OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbjIzODA6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXFxuMjM4MTpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzgyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxcbjIzODM6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxuMjM4NDpcXHRcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XFxuMjM4NTpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19UUklFRF9CWVRFUzpcXG4yMzg2OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIHRydWUpO1xcbjIzODc6XFx0XFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzg4OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIGZhbHNlKTtcXG4yMzg5OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzkwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuMjM5MTpcXHRcXHRcXHRcXHRrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzKTtcXG4yMzkyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxuMjM5MzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk0OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuMjM5NTpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzk2OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxuMjM5NzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk4OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcbjIzOTk6XFx0XFx0ZGVmYXVsdDpcXG4yNDAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0MDE6XFx0XFx0fVxcbjI0MDI6XFx0fVxcbjI0MDM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjQyLjgyNDk3ODgxNFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzY3NTA0MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBTeXNmcyBFbnRyeSBQb2ludHMgYW5kIFBhdGNoIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGludG8gdGhpcyBEQU1PTiBzeXNmcyBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSBgc3RhdGVfc3RvcmVgIGFuZCBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAgYXJlIGRlZmluaXRlbHkgY2VudHJhbC4gSSBhbHNvIHNlZSBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBXaGF0IGFib3V0IGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgPyBOZWVkIHRvIHRyYWNrIHRoYXQgZG93biBhcyB3ZWxsLlxuXG5MZXQncyBtYWtlIGEgbGlzdCB0byBrZWVwIHRyYWNrOlxuKiAgIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYFxuKiAgIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgXG4qICAgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgXG4qICAgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYFxuKiAgIGBkYW1vbl9zeXNmc19hcHBseV9pbnB1dHNgXG4qICAgYGRhbW9uX3N5c2ZzX2J1aWxkX2N0eGBcblxuUmlnaHQsIG5vdyBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIGFjdHVhbGx5IGxvY2F0ZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEltcG9ydGFudCB0byBub3RlIHRoYXQsIGFzIEkgd2FzIG9yaWdpbmFsbHkgZXhwZWN0aW5nIGl0IHRvIGJlIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gTGV0J3MgY29uZmlybSBxdWlja2x5IGlmIGFueSBvdGhlciBzeXNmcyBmaWxlcyBhcmUgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4uLiBOb3BlLCBvbmx5IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuXG5cblRoZSBwYXRjaCBub3RlcyBtZW50aW9uIGEgd2hvbGUgYnVuY2ggb2YgYnVnIGZpeGVzIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGBrZGFtb25kX2luaXRfY3R4YCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGlzIHN0YXRpYy4gQW5kIGBzdGF0ZV9zdG9yZWAgaXMgYWxzbyBzdGF0aWMuIEFyZSB0aGVyZSBldmVuICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9zeXNmcy5jYD8gR290dGEgZmlndXJlIHRoaXMgb3V0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY5MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjUxLjE5MjQ4NzA4WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI3NDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHxedm9pZCB8XnN0cnVjdCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jLTE1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTY6c3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiB7XFxubW0vZGFtb24vc3lzZnMuYy0xNy1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz04Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19yZWdpb25fa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTkxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTI6c3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbnMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMC1cXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTIxMi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0zMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0X2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0zMTctXFxubW0vZGFtb24vc3lzZnMuYzozMTg6c3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMzE5LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy00NDUtXFxubW0vZGFtb24vc3lzZnMuYzo0NDY6c3RydWN0IGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTYwMi1cXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTYwNC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03NTYtXFxubW0vZGFtb24vc3lzZnMuYzo3NTc6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciB7XFxubW0vZGFtb24vc3lzZnMuYy03NTgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NzY1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyICpkYW1vbl9zeXNmc19maWx0ZXJfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNzY5LVxcbm1tL2RhbW9uL3N5c2ZzLmM6NzcwOnN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJfdHlwZV9uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTc3MS1cXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTkzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTk0Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjk0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XFxubW0vZGFtb24vc3lzZnMuYy05NDgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTA1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMDY1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTA2NjpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTA2Ny1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTQ2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTE0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTExNDgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTI2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEyNzUtXFxubW0vZGFtb24vc3lzZnMuYzoxMjc2OnN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyB7XFxubW0vZGFtb24vc3lzZnMuYy0xMjc3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEzNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfYXR0cnNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEzODEtXFxubW0vZGFtb24vc3lzZnMuYzoxMzgyOnN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMuYy0xMzgzLVxcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNDAxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTQwMjpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCB7XFxubW0vZGFtb24vc3lzZnMuYy0xNDAzLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1Ny1cXG5tbS9kYW1vbi9zeXNmcy5jOjE2NTg6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NTktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTc3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19jb250ZXh0c19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc4Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjE3ODc6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTc4OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzAxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZGFtb25fY2FsbChpbnQgKCpmbikodm9pZCAqZGF0YSksXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTQtXFxubW0vZGFtb24vc3lzZnMuYzoyMzE1OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzX3dhbGtfZGF0YSB7XFxubW0vZGFtb24vc3lzZnMuYy0yMzE2LVxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MDgtXFxubW0vZGFtb24vc3lzZnMuYzoyNTA5OnN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyB7XFxubW0vZGFtb24vc3lzZnMuYy0yNTEwLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI2NTMtXFxubW0vZGFtb24vc3lzZnMuYzoyNjU0OnN0cnVjdCBkYW1vbl9zeXNmc191aV9kaXIge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1NS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo1MS4yNDg3NjkxMTlaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMDg4NTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFN5c2ZzIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGV2ZXJ5dGhpbmcgc2VlbXMgcHJldHR5IGxvY2tlZCBkb3duIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgZ2V0dGluZyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSWYgZXZlcnl0aGluZyBpbiB0aGF0IGZpbGUgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHN1Z2dlc3RzIHRob3NlIGZ1bmN0aW9ucyBhcmUgb25seSBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGF0IHNwZWNpZmljIG1vZHVsZS4gSSdkIGJldHRlciBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIG91dCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBwdWJsaWMgZW50cnkgcG9pbnRzLCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEknbSBiZXR0aW5nIHRoZSBzY2hlbWUgbWFuYWdlbWVudCBhbmQgcGFyYW1ldGVyIGRlZmluaXRpb24gYXJlIGhhbmRsZWQgdGhlcmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo1NS4xNDk2NTgxNjFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNzU0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgfF52b2lkIHxec3RydWN0IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3Byb2JlX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTY2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NzpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUwOnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUxLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTc6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk4LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzY2OnN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2Ny1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUyMz1lbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI5OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMwLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NTEtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU1MjpzdHJ1Y3QgZGFtb3Nfc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU1My1cXHRlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9ODgyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODkxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4OTI6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9maWx0ZXJzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODkzLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTAxMD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDIwOnN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAyMS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwMjk9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICpkYW1vbl9zeXNmc193YXRlcm1hcmtzX2FsbG9jKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwNDY6c3RydWN0IGRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA0Ny1cXHRlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWM7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE2LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIyND1zdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjI5OnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzAtXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0NDA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDUwOnN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NzA6c3RydWN0IGRhbW9uX3N5c2ZzX3dlaWdodHMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTcxLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193ZWlnaHRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NzktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2ODA6c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xODA0PXN0YXRpYyBzc2l6ZV90IGVmZmVjdGl2ZV9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE4MTItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE4MTM6c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX3R1bmVyX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xODE0LVxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB0dW5lcjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3F1b3Rhc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTU0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTU1OnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5NTYtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTYyPXN0YXRpY1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTYzOnN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2NC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDUwOnN0cnVjdCBkYW1vc19zeXNmc19kZXN0IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1MS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMTk9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfZGVzdF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTI5OnN0cnVjdCBkYW1vc19zeXNmc19kZXN0cyB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMzAtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX2Rlc3RzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNDktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyNTA6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNTEtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMjY1LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMjY2OnN0cnVjdCBkYW1vc19zeXNmc19hY3Rpb25fbmFtZSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIyNjctXFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2NzktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI2ODA6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4MS17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjY4NTp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc2NoZW1lcylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjY4Ni17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTI5OnZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MzAtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk3MD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9zeXNmc19ta19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA0My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA0NDppbnQgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDQ1LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNjM6dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2NC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTAwLSAqL1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTAxOnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE0Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE0ODppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTQ5LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODo1NS4yNDM0MTk5MDlaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEyMzU4NDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkV4YW1pbmluZyBEQU1PTidzIHN5c2ZzIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIERBTU9OIHN5c2ZzIGZ1bmN0aW9uczogYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXNgLCBgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHNgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gVGhleSdyZSBhbGwgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0IGZvciBzeXNmcyBlbnRyeSBwb2ludHMuIFRoZXkgbmVlZCB0byBiZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwncyBzeXNmcyBpbmZyYXN0cnVjdHVyZS5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgKnN0YXRpYyo/IFRoYXQncyBhIGJpdCB1bnVzdWFsLiBUaGlzIGltcGxpZXMgaXQncyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHN5c2ZzIGNvZGUsIHdoaWNoIGlzIGZpbmUsIGJ1dCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBOb3BlLCBJJ3ZlIGNoZWNrZWQuIFNlZW1zIGxpa2UgYWxsIG9mIHRob3NlIGxpc3RlZCBhcmUgbm9uLXN0YXRpYyBleGNlcHQgZm9yIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC5cblxuV2FpdCBhIG1pbnV0ZSwgaWYgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoaXMgaGFzIG1lIHRoaW5raW5nLiBJcyBgbW0vZGFtb24vc3lzZnMuY2AgYWN0dWFsbHkgYSBtb2R1bGU/IFRoYXQgd291bGQgZXhwbGFpbiB0aGUgbmVlZCBmb3IgdGhlIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zLCBhbmQgdGhlIHNlZW1pbmdseSBpbnRlcm5hbCBzdGF0aWMgZnVuY3Rpb24gd291bGQgd29yayBhcyB3ZWxsLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBgbW9kdWxlX2luaXRgIG9yIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IHdvdWxkIGRlZmluaXRlbHkgY29uZmlybSB0aGF0IGl0J3MgYSBsb2FkYWJsZSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjA0LjM2NzAwNzQzNFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MzExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdGNhbGx8bW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTI3MDA9c3RhdGljIGludCBfX2luaXQgZGFtb25fc3lzZnNfaW5pdCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzI4LX1cXG5tbS9kYW1vbi9zeXNmcy5jOjI3Mjk6c3Vic3lzX2luaXRjYWxsKGRhbW9uX3N5c2ZzX2luaXQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjczMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6MDQuNDQyOTQzMDkzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDMwODkxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUgSW50ZXJmYWNlKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgbW9kdWxlIG9yIHN1YnN5c3RlbSDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGdvaW5nIHRvIGJlIHRoYXQgc3lzZnMgaW50ZXJmYWNlOyB0aGF0J3Mgb3VyIGVudHJ5IHBvaW50LiBOb3csIHRoZSB0cmljayBpcyB0aGF0IHdlIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoZXkgbmVlZCB0byBiZSBub24tc3RhdGljLiBMZXQncyBzZWUuLi4gd2hhdCBmdW5jdGlvbnMgYXJlIHdlIGxvb2tpbmcgYXQgZm9yIHRoYXQ/IEknbSB0aGlua2luZzpcblxuKiAgIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgLSB5ZXMsIHRoYXQgY291bGQgd29yay5cbiogICBgZGFtb25fc2V0X2F0dHJzYCAtIGFsc28gcHJvbWlzaW5nLlxuKiAgIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zdG9wYCAtIHRob3NlIGFyZSBvYnZpb3VzIGNvbnRyb2wgZnVuY3Rpb25zLlxuKiAgIEFuZCB0aGVyZSdzIHRoaXMgYGRhbW9uX3NldF9zY2hlbWVzYC4uLiB3YWl0Li4uIGFjdHVhbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLiBJc24ndCBgZGFtb25fc2V0X2F0dHJzYCBkZWZpbmVkIHdpdGhpbiB0aGUgY29yZSBpbiBgbW0vZGFtb24vY29yZS5jYD8gXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBjb3JlLmNgIGZpbGUgYW5kIHNlZSB3aGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBoaWRpbmcgaW4gdGhlcmUuIFdlJ2xsIGZpbmQgd2hhdCB3ZSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjAxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozOTowOS42ODYwMzY2NzVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODE2ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl98XmludCBkYW1vbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXFxubW0vZGFtb24vY29yZS5jLTcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjgtXFxubW0vZGFtb24vY29yZS5jOjEyOTp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MTM0OnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTM1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzgtXFxubW0vZGFtb24vY29yZS5jOjEzOTpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0My1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzQtXFxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc5LVxcbm1tL2RhbW9uL2NvcmUuYzoxODA6c3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTgxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODQtXFxubW0vZGFtb24vY29yZS5jOjE4NTpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTg2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTMtXFxubW0vZGFtb24vY29yZS5jOjE5NDpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTk1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODg9dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzEyLSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjMxMzpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS9kYW1vbi9jb3JlLmMtMzE0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTctI2Vsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MzE4OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2RhbW9uL2NvcmUuYy0zMTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOD1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MzUzOnN0YXRpYyB2b2lkIGRhbW9uX2FkZF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtMzU0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjEtICovXFxubW0vZGFtb24vY29yZS5jOjM2MjpzdGF0aWMgaW5saW5lIHZvaWQgZGFtb25faW5zZXJ0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0zNjMtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcHJldiwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqbmV4dCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzAtI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9jb3JlLmM6MzcxOnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9kZWxfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTM3Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc1LSNlbHNlXFxubW0vZGFtb24vY29yZS5jOjM3NjpzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfZGVsX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy0zNzcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4MC1cXG5tbS9kYW1vbi9jb3JlLmM6MzgxOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtMzgyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODgtXFxubW0vZGFtb24vY29yZS5jOjM4OTpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5My1cXG5tbS9kYW1vbi9jb3JlLmM6Mzk0OnN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTM5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzctICovXFxubW0vZGFtb24vY29yZS5jOjQ3ODppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03MjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTczNC1cXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NDAtXFxubW0vZGFtb24vY29yZS5jOjc0MTpzdGF0aWMgdm9pZCBkYW1vbl9kZWxfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzQyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NDUtXFxubW0vZGFtb24vY29yZS5jOjc0NjpzdGF0aWMgdm9pZCBkYW1vbl9mcmVlX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTc0Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzUwLVxcbm1tL2RhbW9uL2NvcmUuYzo3NTE6dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTc1Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzc2PXN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTItXFxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc5OD1ib29sIGRhbW9uX3RhcmdldHNfZW1wdHkoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgwMi1cXG5tbS9kYW1vbi9jb3JlLmM6ODAzOnN0YXRpYyB2b2lkIGRhbW9uX2RlbF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi9jb3JlLmMtODA0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDctXFxubW0vZGFtb24vY29yZS5jOjgwODp2b2lkIGRhbW9uX2ZyZWVfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vY29yZS5jLTgwOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODE2LVxcbm1tL2RhbW9uL2NvcmUuYzo4MTc6dm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTgxOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzEtXFxubW0vZGFtb24vY29yZS5jOjg3MjpzdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04NzMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTg3OS1cXG5tbS9kYW1vbi9jb3JlLmM6ODgwOnZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTkzMz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTM5LVxcbm1tL2RhbW9uL2NvcmUuYzo5NDA6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtOTQxLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NTktXFxubW0vZGFtb24vY29yZS5jOjk2MDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtOTYxLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05ODktICovXFxubW0vZGFtb24vY29yZS5jOjk5MDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtOTkxLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDQ4OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDk1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDk3LVxcdFxcdFxcdHNzaXplX3QgbnJfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTYxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTg3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNTg4OnN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTE1ODktXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZmFpbGVkLCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTYwND1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NjgtXFxubW0vZGFtb24vY29yZS5jOjE2Njk6c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X2ZpbHRlcihzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTE2NzAtXFx0XFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MDk9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld190ZXN0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzNy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTgzODppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXFxubW0vZGFtb24vY29yZS5jLTE4NTkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXFxubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxubW0vZGFtb24vY29yZS5jLTE5NzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXFxubW0vZGFtb24vY29yZS5jLTIwNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDY5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNzEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXFxubW0vZGFtb24vY29yZS5jOjIxMDY6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMTA3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTcyPXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NDItXFxubW0vZGFtb24vY29yZS5jOjI2NDM6c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0yNjQ0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIyOD1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjY5LSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjMyNzA6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbm1tL2RhbW9uL2NvcmUuYy0zMjcxLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI3Ny0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzozMjc4OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyODYtICovXFxubW0vZGFtb24vY29yZS5jOjMyODc6c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzI4OC1cXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzMDU9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMyMS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzMyMjpzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG5tbS9kYW1vbi9jb3JlLmMtMzMyMy1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgY291bnRfYWdlKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNzc9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQwNS0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL2NvcmUuYzozNDA2OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzQwNy1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQxMy0jZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzozNDE0OnN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzQxNS1cXHRcXHR1bnNpZ25lZCBsb25nIHN6X3IpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQyOD1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NTItLyogU3BsaXQgZXZlcnkgcmVnaW9uIGluIHRoZSBnaXZlbiB0YXJnZXQgaW50byAnbnJfc3VicycgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNDUzOnN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zNDU0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIGludCBucl9zdWJzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODItLyogU3BsaXQgb25lIGluIGV2ZXJ5IEBzcGxpdF9zdGVwIHJlZ2lvbnMgaW50byB0d28sIGZyb20gYSByb3RhdGluZyBvZmZzZXQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzQ4MzpzdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zNDg0LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9zdGVwKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2Mjg9c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2VjcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjM2LSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vY29yZS5jOjM2Mzc6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zNjM4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYxLSNlbHNlXFxubW0vZGFtb24vY29yZS5jOjM2NjI6c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTcxPXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAwMzppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQwMDQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDI3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MDI4OnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxcbm1tL2RhbW9uL2NvcmUuYy00MDI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6MDkuNzQ3ODU4MjY0WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1OTc1NzcwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29yZSBGdW5jdGlvbmFsaXR5OiBBIFF1aWNrIFJldmlldyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZW51bWVyYXRlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgc2luY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBpdCBwcm92aWRlcy4gUmlnaHQsIGhlcmUncyB0aGUgbGlzdDogYGRhbW9uX3JlZ2lzdGVyX29wc2AsIGBkYW1vbl9zZWxlY3Rfb3BzYCwgYGRhbW9uX25ld19maWx0ZXJgLCBgZGFtb25fYWRkX2ZpbHRlcmAsIGBkYW1vbl9kZXN0cm95X2ZpbHRlcmAsIGBkYW1vbl9uZXdfcHJvYmVgLCBgZGFtb25fYWRkX3Byb2JlYCwgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gLCBgZGFtb25fbmV3X3JlZ2lvbmAsIGBkYW1vbl9zZXRfcmVnaW9uc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX2Rlc3Ryb3lfc2NoZW1lYCwgYGRhbW9uX25ld190YXJnZXRgLCBgZGFtb25fYWRkX3RhcmdldGAsIGBkYW1vbl90YXJnZXRzX2VtcHR5YCwgYGRhbW9uX2ZyZWVfdGFyZ2V0YCwgYGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0YCwgYGRhbW9uX25ld19jdHhgLCBgZGFtb25fZGVzdHJveV9jdHhgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fbnJfcnVubmluZ19jdHhzYCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3N0b3BgLCBgZGFtb25faXNfcnVubmluZ2AsIGBkYW1vbl9rZGFtb25kX3BpZGAsIGBkYW1vbl9jYWxsYCwgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAsIGFuZCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAuIFRoYXQncyBhIGxvdCwgYnV0IEkgY2FuIGJyZWFrIGl0IGRvd24uXG5cblRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZGFtb25fYXBwbHlfc2NoZW1lYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgY2FsbGVkIGluc2lkZSB0aGUgYGtkYW1vbmRfZm5gIGt0aHJlYWQuIFNvLCBuYXR1cmFsbHksIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzdGFydCBEQU1PTi4gYGRhbW9uX3N0YXJ0YCBsb29rcyBsaWtlIGEga2V5IGVudHJ5IHBvaW50LCBhbmQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb3JlLiBBbHNvLCBJIGtub3cgdGhhdCBzY2hlbWVzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgREFNT04gb3BlcmF0ZXMsIHNvIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NoZW1lcyBhcmUgc2V0IHVwOiBgZGFtb25fc2V0X3NjaGVtZXNgIGFuZCBgZGFtb25fYWRkX3NjaGVtZWAgbG9vayBsaWtlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LiBBbmQgb2YgY291cnNlLCBzaW5jZSBhdHRyaWJ1dGVzIGluZmx1ZW5jZSBiZWhhdmlvciwgSSdsbCByZXZpZXcgYGRhbW9uX3NldF9hdHRyc2AgYXMgd2VsbC5cblxuVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHdoYXQgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGp1c3QgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY3JpdGljYWwgcGllY2VzIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozOToxOC4zNDU0MzczMTZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDI3ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0x8dm9pZCBkYW1vbl98XmludCBkYW1vbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vdmFkZHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTE5Mj1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIxMi0vKiBJbml0aWFsaXplICctXFx1MDAzZXJlZ2lvbnNfbGlzdCcgb2YgZXZlcnkgdGFyZ2V0ICh0YXNrKSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmM6MjEzOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX2luaXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjE0LXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjI2LSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmM6MjI3OnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vdmFkZHIuYy0yMjgte1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yMzgtXFxubW0vZGFtb24vdmFkZHIuYzoyMzk6c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2RhbW9uL3ZhZGRyLmMtMjQwLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSlcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjY4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjk1LSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vZGFtb24vdmFkZHIuYzoyOTY6c3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9kYW1vbi92YWRkci5jLTI5Ny1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0zMjM9c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTM0NS1cXG5tbS9kYW1vbi92YWRkci5jOjM0NjpzdGF0aWMgdm9pZCBkYW1vbl92YV9ta29sZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzQ3LXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MzYwPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTM2OC1cXG5tbS9kYW1vbi92YWRkci5jOjM2OTpzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3Moc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzcwLXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Njk3PXN0YXRpYyBib29sIGRhbW9uX3ZhX3RhcmdldF92YWxpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MDktXFxubW0vZGFtb24vdmFkZHIuYzo3MTA6c3RhdGljIHZvaWQgZGFtb25fdmFfY2xlYW51cF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG5tbS9kYW1vbi92YWRkci5jLTcxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjE4LjQyNjQ3MTcwNVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg3MDExODM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBNb2R1bGUgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0byBwcm9wZXJseSBjb25maWd1cmUgdGhpcyBEQU1PTiBtb2R1bGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgcmVnaXN0ZXJpbmcgb3BlcmF0aW9ucyBoYXBwZW5zIHRocm91Z2ggYGRhbW9uX3JlZ2lzdGVyX29wc2Agd2l0aGluIGBkYW1vbl92YV9pbml0Y2FsbGAgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGF0J3MgdGhlIGtleS4gSSBjYW4gdXNlIHRoYXQgZnVuY3Rpb24gdG8gcGx1ZyBpbnRvIHRoZSBEQU1PTiBjb3JlLlxuXG5UaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHdpdGhpbiBEQU1PTi4gRnVuY3Rpb25zIGxpa2UgYGRhbW9zX2FwcGx5X3NjaGVtZWAsIGBkYW1vc19nZXRfbm9kZV9tZW1fYnBgLCBhbmQgb3RoZXJzIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhhdCBjb3JlLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgQVBJIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IHN0YXJ0IGFuZCBjb250cm9sIERBTU9OOiBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLlxuXG5MZXQncyBzZWUsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgaXNuJ3QgZXhwb3J0ZWQsIGJ1dCBpdCdzIG5vdCBzdGF0aWMgZWl0aGVyLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gICppcyogc3RhdGljLiBPa2F5LCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIGRlZmluZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIE1ha2VzIHNlbnNlLiBOb3csIGxvb2tpbmcgYXQgYG1tL2RhbW9uL2NvcmUuY2AsIEkgc2VlIHRoYXQgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGFuZCBgZGFtb25fYWRkX3NjaGVtZWAgYXJlIGFsbCBleHBvcnRlZCBvciBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHNlZWluZyBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYERBTU9OX1JFQ0xBSU1gIGFuZCBgREFNT05fTFJVX1NPUlRgIGFyZSBjb25maWd1cmVkIHRvIGNvcnJlY3RseSB1c2UgdGhlc2UgZmVhdHVyZXMuIFllcywgdGhleSBkZXBlbmQgb24gYERBTU9OYC5cblxuU28sIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoaWNoIGZlYXR1cmVzIGFyZSBjb21waWxlZCB1bmRlciB3aGljaCBjb25maWdzLiBJIGNvbmZpcm0gdGhhdCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgIGlzIGNvbXBpbGVkIHVuZGVyIGBEQU1PTl9WQUREUmAsIGluIGBtbS9kYW1vbi92YWRkci5jYC4gVGhlbiwgYGRhbW9uX3BhX3BhZ2VvdXRgIGlzIGluIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgaXMgY29tcGlsZWQgdW5kZXIgYERBTU9OX1BBRERSYCwgYW5kIGBkYW1vc19hcHBseV9zY2hlbWVgIGlzIGNvbXBpbGVkIHVuZGVyIGBEQU1PTmAsIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgaXQuIFRvIGVuYWJsZSBldmVyeXRoaW5nIEkgbmVlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzIGFyZSBzZXQ6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9NYWtlZmlsZWAganVzdCB0byBiZSBjZXJ0YWluLCBidXQgSSB0aGluayB0aGF0IGlzIGEgZmFpcmx5IGNvbXBsZXRlIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTAzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozOTo0Ny4yOTY1OTM5MzZaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6NDcuMjk2NjkyMjU2WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjQyOTE1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBEQU1PTidzIGNvbmZpZ3VyYXRpb24gb3B0aW9uczsgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2Agc2VlbSBsaWtlIHRoZSBrZXkgc2V0dGluZ3MgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGltcG9ydGFudCBmdW5jdGlvbnMsIHNvIEknbGwgcHJpb3JpdGl6ZSB0aGVzZTogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9yZWdpc3Rlcl9vcHNgLlxuXG5XYWl0IGEgbWludXRlLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgIGlzIG5vbi1zdGF0aWMgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBIb3dldmVyLCBpZiBpdCdzIG5vbi1zdGF0aWMsIFN5emthbGxlciAqY291bGQqIHN0aWxsIGZ1enogdGhhdC4gTGV0IG1lIGRvdWJsZS1jaGVja+KApiBhaGEhIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zZXRfYXR0cnNgIGFyZSBhY3R1YWxseSBleHBvcnRlZCEgVGltZSB0byBkaWcgaW50byBgZGFtb25fc3RhcnRgIGFuZCB1bmRlcnN0YW5kIGl0cyBjYWxsZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6NTIuNjIwOTg5NTg3WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAwMjgwMDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChkYW1vbl9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjUyLjcyMTAyNjI5NloiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg4NjMyMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYEVYUE9SVF9TWU1CT0xgIGluIGBtbS9kYW1vbi9jb3JlLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04g4oCTIHRoYXQncyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcsIHJpZ2h0PyBMZXQgbWUgbWVudGFsbHkgdHJhY2UgdGhpcy4uLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGBFWFBPUlRfU1lNQk9MYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGVpdGhlciBleHRlcm5hbCBhY2Nlc3MsIHBlcmhhcHMgZm9yIGRlYnVnZ2luZywgb3IgZm9yIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN5bWJvbHMgYXJlIGJlaW5nIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBicm9hZGVyIGtlcm5lbCBvciBtb2R1bGVzIHRocm91Z2ggdGhpcyBtZWNoYW5pc20uIFVuZGVyc3RhbmRpbmcgdGhlIGV4cG9ydGVkIHN5bWJvbHMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgaW50ZXJmYWNlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGRlbGliZXJhdGVseSBzaGFyZWQgYW5kIHBvdGVudGlhbGx5IHJlbGllZCB1cG9uIGJ5IG90aGVyIGtlcm5lbCBwYXJ0cy4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGRlY2xhcmF0aW9ucyBhbmQgaG93IHRoZXkncmUgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGV4cG9ydC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB1dGlsaXR5IGZ1bmN0aW9ucyBvciBjb3JlIGRhdGEgc3RydWN0dXJlcyBtYWRlIGFjY2Vzc2libGUuIFRoZSBjb250ZXh0IHdpbGwgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZXhwb3NlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE5MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM5OjU3LjUwOTY2MzAwNFoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyOTUyNDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzk6NTcuNzUyNjIxMTkxWiIsIlNlcSI6NzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Njc2OTMzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgYEVYUE9SVF9TWU1CT0xgKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgYW5kIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgSSBkaWRuJ3Qgc2VlIGFuIGBFWFBPUlRfU1lNQk9MYCBtYWNybyB1c2VkIGluIHRoYXQgZmlsZS4gVGhhdCBzdHJpa2VzIG1lIGFzIG9kZC4gR2l2ZW4gdGhlIHdheSBEQU1PTiBpcyBhcmNoaXRlY3RlZCwgaXQgd291bGQgYmUgc3RyYW5nZSBpZiBjb3JlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IG1lYW50IHRvIGJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24sIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBzY2FuIHRoZSBmaWxlIGFnYWluLCBhbmQgbG9vayBmb3IgYW55IGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjQwOjAxLjQyMDMxODE5N1oiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2NzI5MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0x8RVhQT1JUX1NZTUJPTF9HUExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDo0MDowMS40ODM5OTg0MzZaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MDgyMTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRBTU9OIE1vZHVsZSBDb251bmRydW0qKlxuXG5SaWdodCwgREFNT07igKYgSSdtIHJlbWVtYmVyaW5nIHRoYXQgYERBTU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogSSBjYW4ndCBidWlsZCBhIGJvb2xlYW4gZGlyZWN0bHkgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIGNhbiBJPyBUaGF0IHdvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZGVzaWduIGNvbnN0cmFpbnQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYW55IGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgc3VzcGVjdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYm9vbGVhbiBuYXR1cmUgZm9yIERBTU9OJ3MgaW50ZWdyYXRpb24sIGRlcGxveW1lbnQsIGFuZCBvdmVyYWxsIGZsZXhpYmlsaXR5IHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGFuIGluaGVyZW50IGxpbWl0YXRpb24gb3IgYSBwb3RlbnRpYWxseSBvdmVybG9va2VkIGFzcGVjdCBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzA0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6NDA6MDUuNjc0ODIzNjM0WiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM0NDc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjQwOjA1Ljc0MzE3MjgzMloiLCJTZXEiOjgxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI5NTY0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEYW1vbiBDb2RlKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgRGFtb24gY29kZSwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWxzLiBUaGUgdXNlIG9mIGBib29sYCBpcyBncmVhdCwgSSBrbm93IGl0J3MgYSBidWlsdC1pbiB0eXBlLiBTbywgaWYgdGhlIGZ1bmN0aW9uYWxpdHkncyBlbmFibGVkLCBpdCdzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGVmZm9ydC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYW5kIGl0IHJlaW5mb3JjZXMgdGhhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuIEkgY2FuIGdldCBhd2F5IHdpdGggbm90IHdvcnJ5aW5nIGFib3V0IHN0YXRpYyBkZWNsYXJhdGlvbnMsIGF0IGxlYXN0IGluIHRoZSBpbml0aWFsIGFuYWx5c2lzLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBgZGFtb25fYWRkX3NjaGVtZWAsIGFuZCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNydWNpYWwgc2V0dXAgZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGV5IGludGVyYWN0IGlzIGtleSB0byBnZXR0aW5nIGEgZ29vZCBncmFzcCBvZiB0aGUgd2hvbGUgcGljdHVyZS5cblxuRmluYWxseSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGRhbW9uX3JlY2xhaW1gIGFuZCBgZGFtb25fbHJ1X3NvcnRgLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGV5IGhhdmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlLiBJZiB0aGV5IGRvLCB0aGVuIHRoZXkgYXJlIGFsc28gZ29vZCBlbnRyeSBwb2ludHMgaW50byB0aGUgY29kZSB0byBzdGFydCB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDo0MDoxMC40NzI3NDE4MTJaIiwiU2VxIjo4MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTg3OTI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHxedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDo0MDoxMC41MzYzNTcxNDFaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5NzY4ODYwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gU3Vic3lzdGVtIEZvY3VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBzdWJzeXN0ZW0gcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCBob3cgdG8gYXBwcm9hY2ggdGVzdGluZyBpdC4gSSBuZWVkIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2Ugb2Ygd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQncyAqY3JpdGljYWwqIHRvIGV4ZXJjaXNlIHRoZSBuZXcgY29kZS4gSSBzdGFydGVkIGJ5IGxpc3Rpbmcgb3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtZWQgY29yZSB0byBEQU1PTidzIG9wZXJhdGlvbi4gSSBmaWd1cmVkIGBkYW1vbl9zdGFydGAgd291bGQgYmUgaW1wb3J0YW50LCBhbmQgc28gb24uXG5cbkkgcXVpY2tseSBpZGVudGlmaWVkIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50OiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2FkZF9zY2hlbWVgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBhbmQgYGRhbW9uX2NhbGxgLiBgZGFtb25fY2FsbGAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGludm9sdmVkIGluIGludGVyYWN0aW5nIHdpdGggdGhlIGt0aHJlYWQuIEkgd2FudGVkIHRvIHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlc2Ugd2VyZSBhY3R1YWxseSBub24tc3RhdGljLlxuXG5Ob3csIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBidWdzIGZpeGVkIGluIHRoaW5ncyBsaWtlIHNjaGVtZSBhcHBsaWNhdGlvbiwgcXVvdGEgY2FsY3VsYXRpb25zLCBhbmQgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIG9wZXJhdGlvbnMuIFRoaXMgdGVsbHMgbWUgdGhhdCB0byBoaXQgdGhlc2UgYnVnIGZpeGVzLCBJICpuZWVkKiBEQU1PTiB0byBiZSBlbmFibGVkIGFuZCB0aGVuIEkgbmVlZCB0byBjb25maWd1cmUgYW5kIGFwcGx5IHNjaGVtZXMuIFRoYXQncyBob3cgSSBjYW4gc2V0IGl0IHVwIHRvIGhpdCB0aGUgYnVnZml4ZXMuXG5cblNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLiBBbmQgbm93IEkgaGF2ZSBhIGNvbmNyZXRlIGxpc3Qgb2Ygc3ltYm9scyB0byBmb2N1cyBvbiBhbmQgZW5zdXJlIGdldCBleGVyY2lzZWQgd2hlbiBJIHRlc3QgdGhpcyBwYXRjaDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9hZGRfc2NoZW1lYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9jYWxsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwOTQsIk91dHB1dFRva2VucyI6Mjk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjQwOjIxLjUxMzI0NzYyOFoiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTgyNDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fYWRkX3NjaGVtZVwiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gY29yZSBzY2hlbWUgYXBwbGljYXRpb24gKGBkYW1vc19hcHBseV9zY2hlbWVgKSwgcXVvdGEgY2FsY3VsYXRpb25zIChgZGFtb3NfZ2V0X25vZGVfbWVtX2JwYCwgYGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnBgLCBgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnBgKSwgYW5kIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBvcGVyYXRpb25zIChgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnlgLCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIFRvIHRlc3QgdGhlc2UgcGF0aHMsIERBTU9OIG11c3QgYmUgZW5hYmxlZCBhbmQgc2NoZW1lcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYW5kIGFwcGxpZWQsIHdoaWNoIGNhbiBiZSBkb25lIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG9yIGluLWtlcm5lbCBBUElzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX2FkZF9zY2hlbWVcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl9jYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgYnVncyBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIChgZGFtb3NfYXBwbHlfc2NoZW1lYCksIHF1b3RhIGNhbGN1bGF0aW9ucyAoYGRhbW9zX2dldF9ub2RlX21lbV9icGAsIGBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwYCwgYGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwYCksIGFuZCBwaHlzaWNhbC92aXJ0dWFsIGFkZHJlc3Mgb3BlcmF0aW9ucyAoYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5YCwgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIHBhdGhzLCBEQU1PTiBtdXN0IGJlIGVuYWJsZWQgYW5kIHNjaGVtZXMgbXVzdCBiZSBjb25maWd1cmVkIGFuZCBhcHBsaWVkLCB3aGljaCBjYW4gYmUgZG9uZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZSBvciBpbi1rZXJuZWwgQVBJcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[1] Phase: Succeeded StartedAt: 2026-08-02 14:40:33 +0000 UTC FinishedAt: 2026-08-02 14:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 14:40:33 +0000 UTC FinishedAt: 2026-08-02 14:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2] Phase: Running StartedAt: 2026-08-02 14:40:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-02 14:40:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 14:40:33 +0000 UTC FinishedAt: 2026-08-02 14:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 14:40:33 +0000 UTC FinishedAt: 2026-08-02 14:40:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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-workflowcr9kr/series-workflowcr9kr-convert-artifact-2646951751/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 14:40:43 +0000 UTC FinishedAt: 2026-08-02 15:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 14:40:43 +0000 UTC FinishedAt: 2026-08-02 15:00:58 +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:*a7bf6f09-3962-4972-834e-a12f3669fd5c,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-workflowcr9kr/series-workflowcr9kr-convert-artifact-2646951751/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": "ca6c2f25-8be8-4f0e-8d41-59f89737e37e", "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-workflowcr9kr/series-workflowcr9kr-build-action-1836077021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 14:40:43 +0000 UTC FinishedAt: 2026-08-02 15:00:48 +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:*a7bf6f09-3962-4972-834e-a12f3669fd5c,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-workflowcr9kr/series-workflowcr9kr-convert-artifact-2646951751/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": "ca6c2f25-8be8-4f0e-8d41-59f89737e37e", "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-workflowcr9kr/series-workflowcr9kr-build-action-1836077021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:00:58 +0000 UTC FinishedAt: 2026-08-02 15:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:00:58 +0000 UTC FinishedAt: 2026-08-02 15:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:00:58 +0000 UTC FinishedAt: 2026-08-02 15:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:00:58 +0000 UTC FinishedAt: 2026-08-02 15:01:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-workflowcr9kr/series-workflowcr9kr-convert-artifact-2691424118/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:01:08 +0000 UTC FinishedAt: 2026-08-02 15:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:01:08 +0000 UTC FinishedAt: 2026-08-02 15:02:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca6c2f25-8be8-4f0e-8d41-59f89737e37e,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-workflowcr9kr/series-workflowcr9kr-build-action-1836077021/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-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:03:08 +0000 UTC FinishedAt: 2026-08-02 15:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:03:08 +0000 UTC FinishedAt: 2026-08-02 15:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:03:08 +0000 UTC FinishedAt: 2026-08-02 15:21:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:03:08 +0000 UTC FinishedAt: 2026-08-02 15:21:16 +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:*a7bf6f09-3962-4972-834e-a12f3669fd5c,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-workflowcr9kr/series-workflowcr9kr-convert-artifact-2691424118/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": "da2d8a4e-a9a3-4cb5-bd00-421e2d0a4fb8", "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-workflowcr9kr/series-workflowcr9kr-build-action-4177331834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:03:08 +0000 UTC FinishedAt: 2026-08-02 15:21:05 +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:*a7bf6f09-3962-4972-834e-a12f3669fd5c,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-workflowcr9kr/series-workflowcr9kr-convert-artifact-2691424118/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": "da2d8a4e-a9a3-4cb5-bd00-421e2d0a4fb8", "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-workflowcr9kr/series-workflowcr9kr-build-action-4177331834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:21:16 +0000 UTC FinishedAt: 2026-08-02 15:21:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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-02 15:21:16 +0000 UTC FinishedAt: 2026-08-02 15:21:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-08-02 15:21:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcr9kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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":["damon_start","damon_set_attrs","damon_set_schemes","damon_add_scheme","damon_sysfs_add_schemes","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"c6dae216-7365-467a-86f4-e2d58179bdc2","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: Running StartedAt: 2026-08-02 15:21:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*da2d8a4e-a9a3-4cb5-bd00-421e2d0a4fb8,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-workflowcr9kr/series-workflowcr9kr-build-action-4177331834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil