Name: series-workflowbghvm Phase: Succeeded StartedAt: 2026-07-02 14:01:29 +0000 UTC FinishedAt: 2026-07-02 17:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[0] Phase: Succeeded StartedAt: 2026-07-02 14:01:29 +0000 UTC FinishedAt: 2026-07-02 14:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 14:01:29 +0000 UTC FinishedAt: 2026-07-02 14:26:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "XFS_FS" ], "series_id": "2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_ioc_getfsmap", "xfs_fileattr_set", "xfs_setattr_nonsize", "dquot_add_inodes", "dquot_add_space" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FVT1RBJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19pb2NfZ2V0ZnNtYXAmIzM0OywKICAgICYjMzQ7eGZzX2ZpbGVhdHRyX3NldCYjMzQ7LAogICAgJiMzNDt4ZnNfc2V0YXR0cl9ub25zaXplJiMzNDssCiAgICAmIzM0O2RxdW90X2FkZF9pbm9kZXMmIzM0OywKICAgICYjMzQ7ZHF1b3RfYWRkX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGNhcGFibGVfbm9hdWRpdGAgYW5kIHJlcGxhY2VzIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgIHdpdGggaXQgaW4gWEZTIGFuZCBxdW90YSBzdWJzeXN0ZW1zLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIGJ5IHNldHRpbmcgYFBGX1NVUEVSUFJJVmAgd2l0aG91dCBnZW5lcmF0aW5nIGF1ZGl0IG1lc3NhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY2FwYWJpbGl0eSBjaGVja3MgZHVyaW5nIHF1b3RhIGVuZm9yY2VtZW50IGFuZCBYRlMgaW9jdGxzL3NldGF0dHIgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk3ZWQxYWIxMmJkNWE4NjZjOWFlZTY5OTFjODNmNGQ3NTEzNjIyMjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE0OjIyOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jXG5pbmRleCA5ODUwZGUzOTU1ZDMxMy4uZGFiOTM0MjJhNTdiYWUgMTAwNjQ0XG4tLS0gYS9mcy9xdW90YS9kcXVvdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9xdW90YS9kcXVvdC5jXG5AQCAtMTMwOCw3ICYjNDM7MTMwOCw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIHtcbiBcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2c2JfZHFvcHQoZHF1b3QtXHUwMDNlZHFfc2IpLVx1MDAzZWluZm9bZHF1b3QtXHUwMDNlZHFfaWQudHlwZV07XG4gXG4tXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRyZXR1cm4gY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfUkVTT1VSQ0UpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIChpbmZvLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxuIFx0XHQhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc21hcC5jIGIvZnMveGZzL3hmc19mc21hcC5jXG5pbmRleCBiNmEzYmM5ZjE0M2M4ZS4uMDQxYmIyMTA1ZWM2NGQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2ZzbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnNtYXAuY1xuQEAgLTExNzQsOCAmIzQzOzExNzQsNyBAQCB4ZnNfZ2V0ZnNtYXAoXG4gXHRpZiAoIXhmc19nZXRmc21hcF9jaGVja19rZXlzKFx1MDAyNmhlYWQtXHUwMDNlZm1oX2tleXNbMF0sIFx1MDAyNmhlYWQtXHUwMDNlZm1oX2tleXNbMV0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApIFx1MDAyNlx1MDAyNlxuLVx0XHQgICBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KGN1cnJlbnQsIENBUF9TWVNfQURNSU4pO1xuJiM0MztcdHVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApIFx1MDAyNlx1MDAyNiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19BRE1JTik7XG4gXHRoZWFkLVx1MDAzZWZtaF9lbnRyaWVzID0gMDtcbiBcbiBcdC8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLjM3NGI0ODhmMDQxNmM4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC02NDcsNyAmIzQzOzY0Nyw3IEBAIHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFucyhcbiBcdFx0Z290byBvdXRfZXJyb3I7XG4gXG4gXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCBOVUxMLCBOVUxMLCBwZHFwLFxuLVx0XHRcdGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbiYjNDM7XHRcdFx0XHRcdGNhcGFibGVfbm9hdWRpdChDQVBfRk9XTkVSKSwgXHUwMDI2dHApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIG91dF9lcnJvcjtcbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uY2U5ZjhiODQ2OGZjYmUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC04MzUsNyAmIzQzOzgzNSw4IEBAIHhmc19zZXRhdHRyX25vbnNpemUoXG4gXHR9XG4gXG4gXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLFxuLVx0XHRcdGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbiYjNDM7XHRcdFx0XHRcdGNhcGFibGVfbm9hdWRpdChDQVBfRk9XTkVSKSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnRwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZHFyZWxlO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmhcbmluZGV4IDM3ZGI5MmIzZDZmODllLi5mODUzMmQ5MmZjYWQ2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxuQEAgLTE0NSw2ICYjNDM7MTQ1LDcgQEAgZXh0ZXJuIGJvb2wgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApO1xuIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTtcbiYjNDM7Ym9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcbiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX25vYXVkaXQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZV9zZXRpZChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcbkBAIC0xNjcsNiAmIzQzOzE2OCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5pbmRleCA4MjlmNDlhZTA3Yjk2NS4uM2QwMzg3ZmI5M2EzOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5AQCAtMzI2LDcgJiM0MzszMjYsNiBAQCBib29sIGhhc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKVxuIHtcbiBcdHJldHVybiBoYXNfbnNfY2FwYWJpbGl0eV9ub2F1ZGl0KHQsIFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbiB9XG4tRVhQT1JUX1NZTUJPTChoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KTtcbiBcbiBzdGF0aWMgYm9vbCBuc19jYXBhYmxlX2NvbW1vbihzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLFxuIFx0XHRcdCAgICAgIGludCBjYXAsXG5AQCAtNDE2LDYgJiM0Mzs0MTUsMjMgQEAgYm9vbCBjYXBhYmxlKGludCBjYXApXG4gXHRyZXR1cm4gbnNfY2FwYWJsZShcdTAwMjZpbml0X3VzZXJfbnMsIGNhcCk7XG4gfVxuIEVYUE9SVF9TWU1CT0woY2FwYWJsZSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3JcbiYjNDM7ICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXG4mIzQzOyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IHRvIGJlIHRlc3RlZCBmb3JcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50XG4mIzQzOyAqIGlzc3Vpbmcgc3B1cmlvdXMgYXVkaXQgbWVzc2FnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuJiM0MzsgKiBhc3N1bXB0aW9uIHRoYXQgaXQmIzM5O3MgYWJvdXQgdG8gYmUgdXNlZC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGNhcGFibGVfbm9hdWRpdCk7XG4gI2VuZGlmIC8qIENPTkZJR19NVUxUSVVTRVIgKi9cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfaW9jX2dldGZzbWFwJiMzNDssCiAgICAmIzM0O3hmc19maWxlYXR0cl9zZXQmIzM0OywKICAgICYjMzQ7eGZzX3NldGF0dHJfbm9uc2l6ZSYjMzQ7LAogICAgJiMzNDtkcXVvdF9hZGRfaW5vZGVzJiMzNDssCiAgICAmIzM0O2RxdW90X2FkZF9zcGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYXBhYmxlX25vYXVkaXRgIGFuZCByZXBsYWNlcyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCB3aXRoIGl0IGluIFhGUyBhbmQgcXVvdGEgc3Vic3lzdGVtcy4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBieSBzZXR0aW5nIGBQRl9TVVBFUlBSSVZgIHdpdGhvdXQgZ2VuZXJhdGluZyBhdWRpdCBtZXNzYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNhcGFiaWxpdHkgY2hlY2tzIGR1cmluZyBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3ZWQxYWIxMmJkNWE4NjZjOWFlZTY5OTFjODNmNGQ3NTEzNjIyMjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDE0OjIyOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggOTg1MGRlMzk1NWQzMTMuLmRhYjkzNDIyYTU3YmFlIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTEzMDgsNyAmIzQzOzEzMDgsNyBAQCBzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKIAlzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9ICZhbXA7c2JfZHFvcHQoZHF1b3QtJmd0O2RxX3NiKS0mZ3Q7aW5mb1tkcXVvdC0mZ3Q7ZHFfaWQudHlwZV07CiAKLQlyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSAmYW1wOyZhbXA7CiYjNDM7CXJldHVybiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19SRVNPVVJDRSkgJmFtcDsmYW1wOwogCSAgICAgICAoaW5mby0mZ3Q7ZHFpX2Zvcm1hdC0mZ3Q7cWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fAogCQkhKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNtYXAuYyBiL2ZzL3hmcy94ZnNfZnNtYXAuYwppbmRleCBiNmEzYmM5ZjE0M2M4ZS4uMDQxYmIyMTA1ZWM2NGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzbWFwLmMKQEAgLTExNzQsOCAmIzQzOzExNzQsNyBAQCB4ZnNfZ2V0ZnNtYXAoCiAJaWYgKCF4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cygmYW1wO2hlYWQtJmd0O2ZtaF9rZXlzWzBdLCAmYW1wO2hlYWQtJmd0O2ZtaF9rZXlzWzFdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSAmYW1wOyZhbXA7Ci0JCSAgIGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX1NZU19BRE1JTik7CiYjNDM7CXVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApICZhbXA7JmFtcDsgY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfQURNSU4pOwogCWhlYWQtJmd0O2ZtaF9lbnRyaWVzID0gMDsKIAogCS8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jCmluZGV4IDFiNTM3MDFiZWJlYTFhLi4zNzRiNDg4ZjA0MTZjOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuYwpAQCAtNjQ3LDcgJiM0Mzs2NDcsNyBAQCB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnMoCiAJCWdvdG8gb3V0X2Vycm9yOwogCiAJZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2NfaWNoYW5nZShpcCwgTlVMTCwgTlVMTCwgcGRxcCwKLQkJCWhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksICZhbXA7dHApOwomIzQzOwkJCQkJY2FwYWJsZV9ub2F1ZGl0KENBUF9GT1dORVIpLCAmYW1wO3RwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2Vycm9yOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jCmluZGV4IDYzMzlmNDk1NmVjYjM5Li5jZTlmOGI4NDY4ZmNiZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmMKQEAgLTgzNSw3ICYjNDM7ODM1LDggQEAgeGZzX3NldGF0dHJfbm9uc2l6ZSgKIAl9CiAKIAllcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLAotCQkJaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfRk9XTkVSKSwgJmFtcDt0cCk7CiYjNDM7CQkJCQljYXBhYmxlX25vYXVkaXQoQ0FQX0ZPV05FUiksCiYjNDM7CQkJCQkmYW1wO3RwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RxcmVsZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCAzN2RiOTJiM2Q2Zjg5ZS4uZjg1MzJkOTJmY2FkNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCkBAIC0xNDUsNiAmIzQzOzE0NSw3IEBAIGV4dGVybiBib29sIGhhc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKTsKIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LAogCQkJCSAgICAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApOwogZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTsKJiM0Mztib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKTsKIGV4dGVybiBib29sIG5zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7CiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX25vYXVkaXQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7CiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX3NldGlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApOwpAQCAtMTY3LDYgJiM0MzsxNjgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhcGFibGUoaW50IGNhcCkKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKQogewogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggODI5ZjQ5YWUwN2I5NjUuLjNkMDM4N2ZiOTNhMzhjIDEwMDY0NAotLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKQEAgLTMyNiw3ICYjNDM7MzI2LDYgQEAgYm9vbCBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNhcCkKIHsKIAlyZXR1cm4gaGFzX25zX2NhcGFiaWxpdHlfbm9hdWRpdCh0LCAmYW1wO2luaXRfdXNlcl9ucywgY2FwKTsKIH0KLUVYUE9SVF9TWU1CT0woaGFzX2NhcGFiaWxpdHlfbm9hdWRpdCk7CiAKIHN0YXRpYyBib29sIG5zX2NhcGFibGVfY29tbW9uKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsCiAJCQkgICAgICBpbnQgY2FwLApAQCAtNDE2LDYgJiM0Mzs0MTUsMjMgQEAgYm9vbCBjYXBhYmxlKGludCBjYXApCiAJcmV0dXJuIG5zX2NhcGFibGUoJmFtcDtpbml0X3VzZXJfbnMsIGNhcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNhcGFibGUpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNhcGFibGVfbm9hdWRpdCAtIERldGVybWluZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIHN1cGVyaW9yCiYjNDM7ICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuCiYjNDM7ICogQGNhcDogVGhlIGNhcGFiaWxpdHkgdG8gYmUgdGVzdGVkIGZvcgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50CiYjNDM7ICogaXNzdWluZyBzcHVyaW91cyBhdWRpdCBtZXNzYWdlcy4KJiM0MzsgKgomIzQzOyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZQomIzQzOyAqIGFzc3VtcHRpb24gdGhhdCBpdCYjMzk7cyBhYm91dCB0byBiZSB1c2VkLgomIzQzOyAqLwomIzQzO2Jvb2wgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KCZhbXA7aW5pdF91c2VyX25zLCBjYXApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGNhcGFibGVfbm9hdWRpdCk7CiAjZW5kaWYgLyogQ09ORklHX01VTFRJVVNFUiAqLwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2FwYWJpbGl0eSBDaGVjayBSZXBsYWNlbWVudCBpbiBLZXJuZWwgQ29kZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uLCBgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApYCwgaW4gYGtlcm5lbC9jYXBhYmlsaXR5LmNgIGFuZCBgaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmhgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IHJlcGxhY2luZyBleGlzdGluZyBjYXBhYmlsaXR5IGNoZWNrcyB3aXRoIHRoaXMgbmV3IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHN1cHByZXNzIGF1ZGl0IG1lc3NhZ2VzIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKSSYjMzk7bSBzZWVpbmcgaXQgc3dhcCBvdXQgYGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgLi4uKWAgd2l0aCBgY2FwYWJsZV9ub2F1ZGl0KC4uLilgIHdpdGhpbiB0aGUgWEZTIGZpbGVzeXN0ZW0gY29kZSAoYGZzL3hmcy94ZnNfZnNtYXAuY2AsIGBmcy94ZnMveGZzX2lvY3RsLmNgLCBhbmQgYGZzL3hmcy94ZnNfaW9wcy5jYCkuIEFuZCBpbiB0aGUgcXVvdGEgY29kZSAoYGZzL3F1b3RhL2RxdW90LmNgKSwgaXQmIzM5O3MgY2hhbmdpbmcgYGNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSlgIHRvIGBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19SRVNPVVJDRSlgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgdGhlIGJlaGF2aW9yIG9mIHRob3NlIGNhcGFiaWxpdHkgY2hlY2tzIGlzIGJlaW5nIGFsdGVyZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBGb3IgZXhhbXBsZSwgaW4gYGZzL3F1b3RhL2RxdW90LmNgIHdpdGhpbiBgaWdub3JlX2hhcmRsaW1pdGAsIHdlJiMzOTtyZSBnb2luZyBmcm9tIGBjYXBhYmxlYCB0byBgY2FwYWJsZV9ub2F1ZGl0YCwgZGlyZWN0bHkgYWZmZWN0aW5nIGF1ZGl0IGxvZ2dpbmcuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgWEZTIGNoYW5nZXMgbW9yZSBjbG9zZWx5LiBUaGUgcmVwbGFjZW1lbnQgb2YgYGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgLi4uKWAgd2l0aCBgY2FwYWJsZV9ub2F1ZGl0KC4uLilgIGluIFhGUyBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGhvd2V2ZXIuLi4gd2FpdCBhIHNlY29uZC4uLiB0aGVyZSYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgaGVyZS4gRG9lc24mIzM5O3QgYGNhcGFibGVfbm9hdWRpdGAgYmVoYXZlIGRpZmZlcmVudGx5IHdpdGggdGhlIGBQRl9TVVBFUlBSSVZgIGZsYWc/IGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBtaWdodCBub3QgYmUgc2V0dGluZyB0aGF0IGZsYWcsIGFuZCB0aGUgbmV3IGZ1bmN0aW9uIGRvZXMuIExldCYjMzk7cyBtYWtlIHN1cmUuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMuIFRoZSBgY2FwYWJsZV9ub2F1ZGl0YCBjYWxsIGxlYWRzIHRvIGBuc19jYXBhYmxlX25vYXVkaXQoJmFtcDtpbml0X3VzZXJfbnMsIGNhcClgLCB3aGljaCB0aGVuIGNhbGxzIGBuc19jYXBhYmxlX2NvbW1vbihucywgY2FwLCBDQVBfT1BUX05PQVVESVQpYC4gSW1wb3J0YW50bHksIGBuc19jYXBhYmxlX2NvbW1vbmAgKmRvZXMqIHNldCBgUEZfU1VQRVJQUklWYCBpZiB0aGUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUuIEJ1dCwgYGhhc19jYXBhYmlsaXR5X25vYXVkaXRgIGdvZXMgdGhyb3VnaCBhIGRpZmZlcmVudCBwYXRoIOKAkyBpdCBjYWxscyBgaGFzX25zX2NhcGFiaWxpdHlfbm9hdWRpdCh0LCAmYW1wO2luaXRfdXNlcl9ucywgY2FwKWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlY3VyaXR5X2NhcGFibGUodC0mZ3Q7Y3JlZCwgbnMsIGNhcCwgQ0FQX09QVF9OT0FVRElUKWAuIEFuZCB0aGlzIGxhc3QgY2FsbCAqZG9lcyBub3QqIHNldCBgUEZfU1VQRVJQUklWYC4gVGhhdCBtYWtlcyB0aGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLgoKU28gdGhlIHByaW1hcnkgaW1wYWN0IGlzIGluIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgd2l0aGluIHRoZSBYRlMgZmlsZXMuIFdoYXQgY29uZmlncyBkbyB3ZSBuZWVkIHRvIHZlcmlmeSBoZXJlPyBXZWxsLCBgQ09ORklHX1FVT1RBYCBhbmQgYENPTkZJR19YRlNfRlNgIHNob3VsZCBiZSByZWxldmFudC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgZmlsZXMgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUVVPVEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWctNS1cbmZzL3F1b3RhL0tjb25maWc6Njpjb25maWcgUVVPVEFcbmZzL3F1b3RhL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UXVvdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3F1b3RhL0tjb25maWctMTktXG5mcy9xdW90YS9LY29uZmlnOjIwOmNvbmZpZyBRVU9UQV9ORVRMSU5LX0lOVEVSRkFDRVxuZnMvcXVvdGEvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7UmVwb3J0IHF1b3RhIG1lc3NhZ2VzIHRocm91Z2ggbmV0bGluayBpbnRlcmZhY2VcJiMzNDtcbi0tXG5mcy9xdW90YS9LY29uZmlnPTI4PWNvbmZpZyBQUklOVF9RVU9UQV9XQVJOSU5HXG4tLVxuZnMvcXVvdGEvS2NvbmZpZy0zNy1cbmZzL3F1b3RhL0tjb25maWc6Mzg6Y29uZmlnIFFVT1RBX0RFQlVHXG5mcy9xdW90YS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtBZGRpdGlvbmFsIHF1b3RhIHNhbml0eSBjaGVja3NcJiMzNDtcbi0tXG5mcy9xdW90YS9LY29uZmlnLTQ2LSMgR2VuZXJpYyBzdXBwb3J0IGZvciB0cmVlIHN0cnVjdHVyZWQgcXVvdGEgZmlsZXMuIFNlbGVjdGVkIHdoZW4gbmVlZGVkLlxuZnMvcXVvdGEvS2NvbmZpZzo0Nzpjb25maWcgUVVPVEFfVFJFRVxuZnMvcXVvdGEvS2NvbmZpZy00OC1cdCB0cmlzdGF0ZVxuLS1cbmZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcbi0tXG5mcy9xdW90YS9LY29uZmlnLTY3LVxuZnMvcXVvdGEvS2NvbmZpZzo2ODpjb25maWcgUVVPVEFDVExcbmZzL3F1b3RhL0tjb25maWctNjktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIFhGUyBhbmQgUXVvdGEgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBzb21lIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpc3N1ZXMgcmV2b2x2aW5nIGFyb3VuZCBxdW90YSBtYW5hZ2VtZW50IGluIFhGUy4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2V0dXAsIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlIGlzIHRpZWQgdG8gY29uZmlndXJhdGlvbnMgdXNpbmcgYFFVT1RBYCBhbG9uZ3NpZGUgYFhGU19GU2AuIFRvIHN0YXJ0LCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IGZ1bmN0aW9ucy4gYGlnbm9yZV9oYXJkbGltaXRgIGluIGBmcy9xdW90YS9kcXVvdC5jYCBpcyB0aGUgb2J2aW91cyBmaXJzdCBwbGFjZSB0byBzdGFydCwgc2luY2UgaXQmIzM5O3MgZGlyZWN0bHkgZGVhbGluZyB3aXRoIHF1b3RhIGNoZWNrcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBvbiBhIGhvdCBwYXRoLiBUaGVuIEkmIzM5O20gYWxzbyBsb29raW5nIGF0IGB4ZnNfZ2V0ZnNtYXBgIGluIGBmcy94ZnMveGZzX2ZzbWFwLmNgIHdoaWNoIEkgYmVsaWV2ZSBpcyBhbiBpb2N0bCBoYW5kbGVyIHNvIEkgY2FuIHNlZSB3aGF0IGtpbmQgb2Ygb3ZlcmhlYWQgdGhhdCBtaWdodCBpbnRyb2R1Y2UuIE5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGR1cmluZyBgc2V0YXR0cmAgY2FsbHMsIHNvIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGluIGBmcy94ZnMveGZzX2lvY3RsLmNgIGFuZCBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgaW4gYGZzL3hmcy94ZnNfaW9wcy5jYCBhcmUgYWxzbyBvbiBteSByYWRhci4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGJlaGF2aW9yIG9mIGBpZ25vcmVfaGFyZGxpbWl0YCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdub3JlX2hhcmRsaW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYz0xMjkyPXN0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdF93YXJuICp3YXJuKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTMwNi1cbmZzL3F1b3RhL2RxdW90LmM6MTMwNzpzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbmZzL3F1b3RhL2RxdW90LmMtMTMwOC17XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xMzE2PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2Rlcyxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMjktXHQgICAgbmV3aW5vZGVzIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2loYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzMzA6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzMzEtXHRcdHByZXBhcmVfd2FybmluZyh3YXJuLCBkcXVvdCwgUVVPVEFfTkxfSUhBUkRXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMzktXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9pdGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTM0MDogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM0MS1cdFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JU09GVExPTkdXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTEzNjE9c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzNzgtXHQgICAgdHNwYWNlIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2JoYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzNzk6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzODAtXHRcdGlmIChmbGFncyBcdTAwMjYgRFFVT1RfU1BBQ0VfV0FSTilcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzODktXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9idGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTM5MDogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM5MS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyBpbiBYRlMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGZvciBzb21lIGFyZWFzIGluIHRoZSBYRlMgZmlsZXN5c3RlbSB3aGVyZSB3ZSBtaWdodCBiZSBhYmxlIHRvIHNxdWVlemUgb3V0IHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMuIFRoaW5raW5nIGFib3V0IHRoZSBob3QgcGF0aHMsIEkga25vdyB0aGF0IGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBjYWxsZWQgZnJvbSBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgLiBUaG9zZSBhcmUgY3J1Y2lhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBxdW90YSBtYW5hZ2VtZW50LCBzbyBhbnkgaW1wcm92ZW1lbnQgdGhlcmUgd291bGQgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4gQnV0LCB0aGF0JiMzOTtzIG5vdCBhbHdheXMgZWFzeS4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGlvY3RsczsgdGhleSBhcmUgYWx3YXlzIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gU3BlY2lmaWNhbGx5LCBgeGZzX2dldGZzbWFwYCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgYXMgYSBsaWtlbHkgdGFyZ2V0IGJlY2F1c2UgaXQmIzM5O3MgYW4gaW9jdGwuIFNpbmNlIGlvY3RscyBvZnRlbiBpbnZvbHZlIHVzZXIta2VybmVsIHRyYW5zaXRpb25zIGFuZCBjb21wbGV4IGRhdGEgaGFuZGxpbmcsIHRoZXJlIGNvdWxkIGJlIGEgbG90IG9mIG92ZXJoZWFkLiBTaW1pbGFybHksIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGlzIGFub3RoZXIgaW9jdGwgaGVscGVyLiBBbmQsIGxvb2tpbmcgZnVydGhlciBJIHNlZSBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgd2hpY2ggaXMgYW4gYHNldGF0dHJgIGhlbHBlciwgd2hpY2ggY2FuIGJlIGFuIGVhc2llciB3aW4sIHBlcmhhcHMuCgpUaW1lIHRvIGRpdmUgaW4gYW5kIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgYGZzL3hmcy94ZnNfZnNtYXAuY2AgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYHhmc19nZXRmc21hcGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgbWlnaHQgcHJlc2VudCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZzX2dldGZzbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19mc21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hmcy94ZnNfZnNtYXAuYz0xMTY9eGZzX2ZzbWFwX293bmVyX2Zyb21fZnJlYyhcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTU5LS8qIGdldGZzbWFwIHF1ZXJ5IHN0YXRlICovXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTYwOnN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyB7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTYxLVx0c3RydWN0IHhmc19mc21hcF9oZWFkXHQqaGVhZDtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTc0LVx0ICogaXMgdGhlIHNlY29uZCAob3IgbGF0ZXIpIGNhbGwgdG8gcmV0cmlldmUgdGhlIHJlY29yZHNldCBpbiBwaWVjZXMuXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTc1Olx0ICogeGZzX2dldGZzbWFwX3JlY19iZWZvcmVfc3RhcnQgd2lsbCBjb21wYXJlIGFsbCByZWNvcmRzIHJldHJpZXZlZFxuZnMveGZzL3hmc19mc21hcC5jLTE3Ni1cdCAqIGJ5IHRoZSBybWFwYnQgcXVlcnkgdG8gZmlsdGVyIG91dCBhbnkgcmVjb3JkcyB0aGF0IHN0YXJ0IGJlZm9yZVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xODQtLyogQXNzb2NpYXRlIGEgZGV2aWNlIHdpdGggYSBnZXRmc21hcCBoYW5kbGVyLiAqL1xuZnMveGZzL3hmc19mc21hcC5jOjE4NTpzdHJ1Y3QgeGZzX2dldGZzbWFwX2RldiB7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTg2LVx0dTMyXHRcdFx0ZGV2O1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xODgtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwICprZXlzLFxuZnMveGZzL3hmc19mc21hcC5jOjE4OTpcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyAqaW5mbyk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTkwLVx0c2VjdG9yX3RcdFx0bnJfc2VjdG9ycztcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9MTk0PXN0YXRpYyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzoxOTU6eGZzX2dldGZzbWFwX2Rldl9jb21wYXJlKFxuZnMveGZzL3hmc19mc21hcC5jLTE5Ni1cdGNvbnN0IHZvaWRcdFx0XHQqcDEsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTE5OC17XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTk5Olx0Y29uc3Qgc3RydWN0IHhmc19nZXRmc21hcF9kZXZcdCpkMSA9IHAxO1xuZnMveGZzL3hmc19mc21hcC5jOjIwMDpcdGNvbnN0IHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfZGV2XHQqZDIgPSBwMjtcbmZzL3hmcy94ZnNfZnNtYXAuYy0yMDEtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTIwNj1TVEFUSUMgaW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6MjA3Onhmc19nZXRmc21hcF9pc19zaGFyZWQoXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjA4LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjA5Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yMTAtXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwX2lyZWNcdCpmcmVjLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0yNDI9c3RhdGljIGlubGluZSB2b2lkXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjQzOnhmc19nZXRmc21hcF9mb3JtYXQoXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ0LVx0c3RydWN0IHhmc19tb3VudFx0XHQqbXAsXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ1LVx0c3RydWN0IHhmc19mc21hcFx0XHQqeGZtLFxuZnMveGZzL3hmc19mc21hcC5jOjI0NjpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8pXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ3LXtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ5LVxuZnMveGZzL3hmc19mc21hcC5jOjI1MDpcdHRyYWNlX3hmc19nZXRmc21hcF9tYXBwaW5nKG1wLCB4Zm0pO1xuZnMveGZzL3hmc19mc21hcC5jLTI1MS1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbFxuZnMveGZzL3hmc19mc21hcC5jOjI1Nzp4ZnNfZ2V0ZnNtYXBfZnJlY19iZWZvcmVfc3RhcnQoXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjU4Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNTktXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwX2lyZWNcdCpmcmVjKVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0yODE9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjI4Mjp4ZnNfZ2V0ZnNtYXBfaGVscGVyKFxuZnMveGZzL3hmc19mc21hcC5jLTI4My1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jOjI4NDpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8sXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjg1LVx0Y29uc3Qgc3RydWN0IHhmc19mc21hcF9pcmVjXHQqZnJlYylcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjk4LVx0ICovXG5mcy94ZnMveGZzX2ZzbWFwLmM6Mjk5Olx0aWYgKHhmc19nZXRmc21hcF9mcmVjX2JlZm9yZV9zdGFydChpbmZvLCBmcmVjKSlcbmZzL3hmcy94ZnNfZnNtYXAuYy0zMDAtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0zMzEtXHRcdGZtci5mbXJfZmxhZ3MgPSBGTVJfT0ZfU1BFQ0lBTF9PV05FUjtcbmZzL3hmcy94ZnNfZnNtYXAuYzozMzI6XHRcdHhmc19nZXRmc21hcF9mb3JtYXQobXAsIFx1MDAyNmZtciwgaW5mbyk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMzMzLVx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0zNTktXHRpZiAoZm1yLmZtcl9mbGFncyA9PSAwKSB7XG5mcy94ZnMveGZzX2ZzbWFwLmM6MzYwOlx0XHRlcnJvciA9IHhmc19nZXRmc21hcF9pc19zaGFyZWQodHAsIGluZm8sIGZyZWMsIFx1MDAyNnNoYXJlZCk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMzYxLVx0XHRpZiAoZXJyb3IpXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTM2Ni1cbmZzL3hmcy94ZnNfZnNtYXAuYzozNjc6XHR4ZnNfZ2V0ZnNtYXBfZm9ybWF0KG1wLCBcdTAwMjZmbXIsIGluZm8pO1xuZnMveGZzL3hmc19mc21hcC5jLTM2OC1vdXQ6XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTM3ND1zdGF0aWMgaW5saW5lIGludFxuZnMveGZzL3hmc19mc21hcC5jOjM3NTp4ZnNfZ2V0ZnNtYXBfZ3JvdXBfaGVscGVyKFxuZnMveGZzL3hmc19mc21hcC5jOjM3NjpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8sXG5mcy94ZnMveGZzX2ZzbWFwLmMtMzc3LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTM5Ny1cdGZyZWMtXHUwMDNlbGVuX2RhZGRyID0gWEZTX0ZTQl9UT19CQih4Zy1cdTAwM2V4Z19tb3VudCwgYmxvY2tjb3VudCk7XG5mcy94ZnMveGZzX2ZzbWFwLmM6Mzk4Olx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIGZyZWMpO1xuZnMveGZzL3hmc19mc21hcC5jLTM5OS19XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTQwMj1TVEFUSUMgaW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6NDAzOnhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyKFxuZnMveGZzL3hmc19mc21hcC5jLTQwNC1cdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHRcdCpjdXIsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTQxMy1cdH07XG5mcy94ZnMveGZzX2ZzbWFwLmM6NDE0Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyA9IHByaXY7XG5mcy94ZnMveGZzX2ZzbWFwLmMtNDE1LVxuZnMveGZzL3hmc19mc21hcC5jOjQxNjpcdHJldHVybiB4ZnNfZ2V0ZnNtYXBfZ3JvdXBfaGVscGVyKGluZm8sIGN1ci1cdTAwM2ViY190cCwgY3VyLVx1MDAzZWJjX2dyb3VwLFxuZnMveGZzL3hmc19mc21hcC5jLTQxNy1cdFx0XHRyZWMtXHUwMDNlcm1fc3RhcnRibG9jaywgcmVjLVx1MDAzZXJtX2Jsb2NrY291bnQsIFx1MDAyNmZyZWMpO1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz00MjE9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjQyMjp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idF9oZWxwZXIoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDIzLVx0c3RydWN0IHhmc19idHJlZV9jdXJcdFx0KmN1cixcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDMwLVx0fTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo0MzE6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvID0gcHJpdjtcbmZzL3hmcy94ZnNfZnNtYXAuYy00MzItXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDMzOlx0cmV0dXJuIHhmc19nZXRmc21hcF9ncm91cF9oZWxwZXIoaW5mbywgY3VyLVx1MDAzZWJjX3RwLCBjdXItXHUwMDNlYmNfZ3JvdXAsXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDM0LVx0XHRcdHJlYy1cdTAwM2Vhcl9zdGFydGJsb2NrLCByZWMtXHUwMDNlYXJfYmxvY2tjb3VudCwgXHUwMDI2ZnJlYyk7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTQzOD1zdGF0aWMgdm9pZFxuZnMveGZzL3hmc19mc21hcC5jOjQzOTp4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDQwLVx0c3RydWN0IHhmc19ybWFwX2lyZWNcdCppcmVjLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz00NjY9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjQ2NzpfX3hmc19nZXRmc21hcF9kYXRhZGV2KFxuZnMveGZzL3hmc19mc21hcC5jLTQ2OC1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jLTQ2OS1cdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcdFx0KmtleXMsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDcwOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NzEtXHRpbnRcdFx0XHRcdCgqcXVlcnlfZm4pKHN0cnVjdCB4ZnNfdHJhbnMgKixcbmZzL3hmcy94ZnNfZnNtYXAuYzo0NzI6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyAqLFxuZnMveGZzL3hmc19mc21hcC5jLTQ3My1cdFx0XHRcdFx0XHQgICAgc3RydWN0IHhmc19idHJlZV9jdXIgKiosXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTUwMS1cdGluZm8tXHUwMDNlbG93LnJtX2Jsb2NrY291bnQgPSBYRlNfQkJfVE9fRlNCVChtcCwga2V5c1swXS5mbXJfbGVuZ3RoKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo1MDI6XHR4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXHUwMDI2aW5mby1cdTAwM2Vsb3csIFx1MDAyNmtleXNbMF0pO1xuZnMveGZzL3hmc19mc21hcC5jLTUwMy1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNTQzLVx0XHRcdFx0YnJlYWs7XG5mcy94ZnMveGZzX2ZzbWFwLmM6NTQ0Olx0XHRcdHhmc19nZXRmc21hcF9zZXRfaXJlY19mbGFncyhcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsIFx1MDAyNmtleXNbMV0pO1xuZnMveGZzL3hmc19mc21hcC5jLTU0NS1cdFx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02MDc9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjYwODp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnRfcXVlcnkoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjA5LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjEwOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy02MTEtXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0XHQqKmN1cnBwLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy02MTUtXHRpZiAoaW5mby1cdTAwM2VsYXN0KVxuZnMveGZzL3hmc19mc21hcC5jOjYxNjpcdFx0cmV0dXJuIHhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyKCpjdXJwcCwgXHUwMDI2aW5mby1cdTAwM2VoaWdoLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02MTctXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTYyMS1cdHJldHVybiB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgqY3VycHAsIFx1MDAyNmluZm8tXHUwMDNlbG93LCBcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjIyOlx0XHRcdHhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02MjMtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02MjY9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjYyNzp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnQoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjI4LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjI5LVx0Y29uc3Qgc3RydWN0IHhmc19mc21hcFx0XHQqa2V5cyxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzA6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvKVxuZnMveGZzL3hmc19mc21hcC5jLTYzMS17XG5mcy94ZnMveGZzX2ZzbWFwLmMtNjMyLVx0aW5mby1cdTAwM2VtaXNzaW5nX293bmVyID0gWEZTX0ZNUl9PV05fRlJFRTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzM6XHRyZXR1cm4gX194ZnNfZ2V0ZnNtYXBfZGF0YWRldih0cCwga2V5cywgaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzQ6XHRcdFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfcm1hcGJ0X3F1ZXJ5LCBOVUxMKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02MzUtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02Mzg9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjYzOTp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idF9xdWVyeShcbmZzL3hmcy94ZnNfZnNtYXAuYy02NDAtXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NDE6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvLFxuZnMveGZzL3hmc19mc21hcC5jLTY0Mi1cdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHRcdCoqY3VycHAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTY0OC1cdGlmIChpbmZvLVx1MDAzZWxhc3QpXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjQ5Olx0XHRyZXR1cm4geGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfaGVscGVyKCpjdXJwcCwgXHUwMDI2a2V5WzFdLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTAtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTY1Ni1cdHJldHVybiB4ZnNfYWxsb2NfcXVlcnlfcmFuZ2UoKmN1cnBwLCBrZXksIFx1MDAyNmtleVsxXSxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NTc6XHRcdFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTgtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02NjE9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjY2Mjp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idChcbmZzL3hmcy94ZnNfZnNtYXAuYy02NjMtXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYy02NjQtXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXHRcdCprZXlzLFxuZnMveGZzL3hmc19mc21hcC5jOjY2NTpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8pXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjY2LXtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjcwLVx0aW5mby1cdTAwM2VtaXNzaW5nX293bmVyID0gWEZTX0ZNUl9PV05fVU5LTk9XTjtcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NzE6XHRyZXR1cm4gX194ZnNfZ2V0ZnNtYXBfZGF0YWRldih0cCwga2V5cywgaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NzI6XHRcdFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfcXVlcnksIFx1MDAyNmFrZXlzWzBdKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzMtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02NzY9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjY3Nzp4ZnNfZ2V0ZnNtYXBfbG9nZGV2KFxuZnMveGZzL3hmc19mc21hcC5jLTY3OC1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jLTY3OS1cdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcdFx0KmtleXMsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjgwOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbylcbmZzL3hmcy94ZnNfZnNtYXAuYy02ODEte1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy03MDktXHRmcmVjLmxlbl9kYWRkciA9IFhGU19GU0JfVE9fQkIobXAsIG1wLVx1MDAzZW1fc2Iuc2JfbG9nYmxvY2tzKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MTA6XHRyZXR1cm4geGZzX2dldGZzbWFwX2hlbHBlcih0cCwgaW5mbywgXHUwMDI2ZnJlYyk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtNzExLX1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9NzE1PVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MTY6eGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwX2hlbHBlcihcbmZzL3hmcy94ZnNfZnNtYXAuYy03MTctXHRzdHJ1Y3QgeGZzX3J0Z3JvdXBcdFx0KnJ0Zyxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzI1LVx0c3RydWN0IHhmc19tb3VudFx0XHQqbXAgPSBydGdfbW91bnQocnRnKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MjY6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvID0gcHJpdjtcbmZzL3hmcy94ZnNfZnNtYXAuYy03MjctXHR4ZnNfcnRibG9ja190XHRcdFx0c3RhcnRfcnRiID1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzQ2LVx0ZnJlYy5sZW5fZGFkZHIgPSBYRlNfRlNCX1RPX0JCKG1wLCBydGJjb3VudCk7XG5mcy94ZnMveGZzX2ZzbWFwLmM6NzQ3Olx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIFx1MDAyNmZyZWMpO1xuZnMveGZzL3hmc19mc21hcC5jLTc0OC19XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTc1MT1TVEFUSUMgaW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6NzUyOnhmc19nZXRmc21hcF9ydGRldl9ydGJpdG1hcChcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTMtXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTQtXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXHRcdCprZXlzLFxuZnMveGZzL3hmc19mc21hcC5jOjc1NTpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8pXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzU2LXtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzk3LVx0XHRlcnJvciA9IHhmc19ydGFsbG9jX3F1ZXJ5X3JhbmdlKHJ0ZywgdHAsIHN0YXJ0X3J0eCwgZW5kX3J0eCxcbmZzL3hmcy94ZnNfZnNtYXAuYzo3OTg6XHRcdFx0XHR4ZnNfZ2V0ZnNtYXBfcnRkZXZfcnRiaXRtYXBfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy03OTktXHRcdGlmIChlcnJvcilcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtODEzLVx0XHRcdGluZm8tXHUwMDNlbGFzdCA9IHRydWU7XG5mcy94ZnMveGZzX2ZzbWFwLmM6ODE0Olx0XHRcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwX2hlbHBlcihydGcsIHRwLFxuZnMveGZzL3hmc19mc21hcC5jLTgxNS1cdFx0XHRcdFx0XHUwMDI2YWhpZ2gsIGluZm8pO1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz04Mzg9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjgzOTp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcm1hcGJ0X2hlbHBlcihcbmZzL3hmcy94ZnNfZnNtYXAuYy04NDAtXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0XHQqY3VyLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy04NDktXHR9O1xuZnMveGZzL3hmc19mc21hcC5jOjg1MDpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8gPSBwcml2O1xuZnMveGZzL3hmc19mc21hcC5jLTg1MS1cbmZzL3hmcy94ZnNfZnNtYXAuYzo4NTI6XHRyZXR1cm4geGZzX2dldGZzbWFwX2dyb3VwX2hlbHBlcihpbmZvLCBjdXItXHUwMDNlYmNfdHAsIGN1ci1cdTAwM2ViY19ncm91cCxcbmZzL3hmcy94ZnNfZnNtYXAuYy04NTMtXHRcdFx0cmVjLVx1MDAzZXJtX3N0YXJ0YmxvY2ssIHJlYy1cdTAwM2VybV9ibG9ja2NvdW50LCBcdTAwMjZmcmVjKTtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9ODU3PVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzo4NTg6eGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9xdWVyeShcbmZzL3hmcy94ZnNfZnNtYXAuYy04NTktXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYzo4NjA6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvLFxuZnMveGZzL3hmc19mc21hcC5jLTg2MS1cdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHRcdCoqY3VycHApXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTg2OC1cdHJldHVybiB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgqY3VycHAsIFx1MDAyNmluZm8tXHUwMDNlbG93LCBcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODY5Olx0XHRcdHhmc19nZXRmc21hcF9ydGRldl9ybWFwYnRfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy04NzAtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz04NzM9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjg3NDp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcm1hcGJ0KFxuZnMveGZzL3hmc19mc21hcC5jLTg3NS1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jLTg3Ni1cdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcdFx0KmtleXMsXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODc3Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbylcbmZzL3hmcy94ZnNfZnNtYXAuYy04Nzgte1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy05MTUtXHRcdGlmIChrZXkwLmZtcl9waHlzaWNhbCBcdTAwM2MgcnRzdGFydF9kYWRkcikge1xuZnMveGZzL3hmc19mc21hcC5jOjkxNjpcdFx0XHRlcnJvciA9IHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIFx1MDAyNmZyZWMpO1xuZnMveGZzL3hmc19mc21hcC5jLTkxNy1cdFx0XHRpZiAoZXJyb3IpXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTk0Mi1cdGluZm8tXHUwMDNlbG93LnJtX2Jsb2NrY291bnQgPSBYRlNfQkJfVE9fRlNCVChtcCwga2V5MC5mbXJfbGVuZ3RoKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo5NDM6XHR4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXHUwMDI2aW5mby1cdTAwM2Vsb3csIFx1MDAyNmtleTApO1xuZnMveGZzL3hmc19mc21hcC5jLTk0NC1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtOTg0LVx0XHRcdFx0YnJlYWs7XG5mcy94ZnMveGZzX2ZzbWFwLmM6OTg1Olx0XHRcdHhmc19nZXRmc21hcF9zZXRfaXJlY19mbGFncyhcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsIFx1MDAyNmtleXNbMV0pO1xuZnMveGZzL3hmc19mc21hcC5jLTk4Ni1cdFx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDAwLVxuZnMveGZzL3hmc19mc21hcC5jOjEwMDE6XHRcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9xdWVyeSh0cCwgaW5mbywgXHUwMDI2YnRfY3VyKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDAyLVx0XHRpZiAoZXJyb3IpXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEwMTgtXHRcdFx0aW5mby1cdTAwM2VsYXN0ID0gdHJ1ZTtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDE5Olx0XHRcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9oZWxwZXIoYnRfY3VyLFxuZnMveGZzL3hmc19mc21hcC5jLTEwMjAtXHRcdFx0XHRcdFx1MDAyNmluZm8tXHUwMDNlaGlnaCwgaW5mbyk7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTEwNDQ9c3RhdGljIHVpbnQzMl90XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA0NTp4ZnNfZ2V0ZnNtYXBfZGV2aWNlKFxuZnMveGZzL3hmc19mc21hcC5jLTEwNDYtXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTEwNjc9U1RBVElDIGJvb2xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDY4Onhmc19nZXRmc21hcF9pc192YWxpZF9kZXZpY2UoXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA2OS1cdHN0cnVjdCB4ZnNfbW91bnRcdCptcCxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA3My1cdFx0Zm0tXHUwMDNlZm1yX2RldmljZSA9PSBVSU5UX01BWCB8fFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzQ6XHRcdGZtLVx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9EQVRBKSB8fFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzU6XHRcdGZtLVx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9MT0cpIHx8XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA3Ni1cdFx0KG1wLVx1MDAzZW1fcnRkZXZfdGFyZ3AgXHUwMDI2XHUwMDI2XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA3NzpcdFx0IGZtLVx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9SVCkpO1xuZnMveGZzL3hmc19mc21hcC5jLTEwNzgtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0xMDgxPVNUQVRJQyBib29sXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA4Mjp4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cyhcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDgzLVx0c3RydWN0IHhmc19mc21hcFx0XHQqbG93X2tleSxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0NS0gKlx0XHRcdFx0ICAgYnVtcGVkIHVwIGJ5IGZtcl9sZW5ndGguXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE0NjogKiB4ZnNfZ2V0ZnNtYXBfaW5mby5uZXh0X2RhZGRyXHQtLSBuZXh0IGRpc2sgYWRkciB3ZSBleHBlY3QgdG8gc2VlOyB0aGlzXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0Ny0gKlx0XHRcdFx0ICAgaXMgaG93IHdlIGRldGVjdCBnYXBzIGluIHRoZSBmc21hcFxuZnMveGZzL3hmc19mc21hcC5jLTExNDgtXHRcdFx0XHQgICByZWNvcmRzIGFuZCByZXBvcnQgdGhlbS5cbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTQ5OiAqIHhmc19nZXRmc21hcF9pbmZvLmxvdy9oaWdoXHQtLSBwZXItQUcgbG93L2hpZ2gga2V5cyBjb21wdXRlZCBmcm9tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE1MC0gKlx0XHRcdFx0ICAgZGtleXM7IHVzZWQgdG8gcXVlcnkgdGhlIG1ldGFkYXRhLlxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0xMTUyPVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTUzOnhmc19nZXRmc21hcChcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTU0LVx0c3RydWN0IHhmc19tb3VudFx0XHQqbXAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTExNTktXHRzdHJ1Y3QgeGZzX2ZzbWFwXHRcdGRrZXlzWzJdO1x0LyogcGVyLWRldiBrZXlzICovXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE2MDpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfZGV2XHRcdGhhbmRsZXJzW1hGU19HRVRGU01BUF9ERVZTXTtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTYxOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHRpbmZvID0ge1xuZnMveGZzL3hmc19mc21hcC5jLTExNjItXHRcdC5mc21hcF9yZWNzXHRcdD0gZnNtYXBfcmVjcyxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE3MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE3MTpcdGlmICgheGZzX2dldGZzbWFwX2lzX3ZhbGlkX2RldmljZShtcCwgXHUwMDI2aGVhZC1cdTAwM2VmbWhfa2V5c1swXSkgfHxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTcyOlx0ICAgICF4ZnNfZ2V0ZnNtYXBfaXNfdmFsaWRfZGV2aWNlKG1wLCBcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzFdKSlcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTczLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTc0Olx0aWYgKCF4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cyhcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzBdLCBcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzFdKSlcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTc1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE4Mi1cdGhhbmRsZXJzWzBdLm5yX3NlY3RvcnMgPSBYRlNfRlNCX1RPX0JCKG1wLCBtcC1cdTAwM2VtX3NiLnNiX2RibG9ja3MpO1xuZnMveGZzL3hmc19mc21hcC5jOjExODM6XHRoYW5kbGVyc1swXS5kZXYgPSB4ZnNfZ2V0ZnNtYXBfZGV2aWNlKG1wLCBYRlNfREVWX0RBVEEpO1xuZnMveGZzL3hmc19mc21hcC5jLTExODQtXHRpZiAodXNlX3JtYXApXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE4NTpcdFx0aGFuZGxlcnNbMF0uZm4gPSB4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnQ7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE4Ni1cdGVsc2VcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTg3Olx0XHRoYW5kbGVyc1swXS5mbiA9IHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0O1xuZnMveGZzL3hmc19mc21hcC5jLTExODgtXHRpZiAobXAtXHUwMDNlbV9sb2dkZXZfdGFyZ3AgIT0gbXAtXHUwMDNlbV9kZGV2X3RhcmdwKSB7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTExOTAtXHRcdFx0XHRcdFx0ICAgICAgIG1wLVx1MDAzZW1fc2Iuc2JfbG9nYmxvY2tzKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTkxOlx0XHRoYW5kbGVyc1sxXS5kZXYgPSB4ZnNfZ2V0ZnNtYXBfZGV2aWNlKG1wLCBYRlNfREVWX0xPRyk7XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE5MjpcdFx0aGFuZGxlcnNbMV0uZm4gPSB4ZnNfZ2V0ZnNtYXBfbG9nZGV2O1xuZnMveGZzL3hmc19mc21hcC5jLTExOTMtXHR9XG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEyMDAtXHRcdGhhbmRsZXJzWzJdLm5yX3NlY3RvcnMgPSBYRlNfRlNCX1RPX0JCKG1wLCBtcC1cdTAwM2VtX3NiLnNiX3JibG9ja3MpO1xuZnMveGZzL3hmc19mc21hcC5jOjEyMDE6XHRcdGhhbmRsZXJzWzJdLmRldiA9IHhmc19nZXRmc21hcF9kZXZpY2UobXAsIFhGU19ERVZfUlQpO1xuZnMveGZzL3hmc19mc21hcC5jLTEyMDItXHRcdGlmICh1c2Vfcm1hcClcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMjAzOlx0XHRcdGhhbmRsZXJzWzJdLmZuID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidDtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMjA0LVx0XHRlbHNlXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTIwNTpcdFx0XHRoYW5kbGVyc1syXS5mbiA9IHhmc19nZXRmc21hcF9ydGRldl9ydGJpdG1hcDtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMjA2LVx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xMjA4LVxuZnMveGZzL3hmc19mc21hcC5jOjEyMDk6XHR4ZnNfc29ydChoYW5kbGVycywgWEZTX0dFVEZTTUFQX0RFVlMsIHNpemVvZihzdHJ1Y3QgeGZzX2dldGZzbWFwX2RldiksXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTIxMDpcdFx0XHR4ZnNfZ2V0ZnNtYXBfZGV2X2NvbXBhcmUpO1xuZnMveGZzL3hmc19mc21hcC5jLTEyMTEtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTEzMDA9eGZzX2lvY19nZXRmc21hcChcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTM0MC1cbmZzL3hmcy94ZnNfZnNtYXAuYzoxMzQxOlx0dHJhY2VfeGZzX2dldGZzbWFwX2xvd19rZXkoaXAtXHUwMDNlaV9tb3VudCwgXHUwMDI2eGhlYWQuZm1oX2tleXNbMF0pO1xuZnMveGZzL3hmc19mc21hcC5jOjEzNDI6XHR0cmFjZV94ZnNfZ2V0ZnNtYXBfaGlnaF9rZXkoaXAtXHUwMDNlaV9tb3VudCwgXHUwMDI2eGhlYWQuZm1oX2tleXNbMV0pO1xuZnMveGZzL3hmc19mc21hcC5jLTEzNDMtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEzNTQtXHRcdC8qIFJ1biBxdWVyeSwgcmVjb3JkIGhvdyBtYW55IGVudHJpZXMgd2UgZ290LiAqL1xuZnMveGZzL3hmc19mc21hcC5jOjEzNTU6XHRcdGVycm9yID0geGZzX2dldGZzbWFwKGlwLVx1MDAzZWlfbW91bnQsIFx1MDAyNnhoZWFkLCByZWNzKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzU2LVx0XHRzd2l0Y2ggKGVycm9yKSB7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEzOTctXHRcdHhmc19mc21hcF90b19pbnRlcm5hbChcdTAwMjZ4aGVhZC5mbWhfa2V5c1swXSwgbGFzdF9yZWMpO1xuZnMveGZzL3hmc19mc21hcC5jOjEzOTg6XHRcdHRyYWNlX3hmc19nZXRmc21hcF9sb3dfa2V5KGlwLVx1MDAzZWlfbW91bnQsIFx1MDAyNnhoZWFkLmZtaF9rZXlzWzBdKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzk5LVx0fSB3aGlsZSAoIWRvbmUgXHUwMDI2XHUwMDI2IGhlYWQuZm1oX2VudHJpZXMgXHUwMDNjIGhlYWQuZm1oX2NvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlMgRmlsZXN5c3RlbSBNYXBwaW5nIElPQ1RMKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGB4ZnNfaW9jX2dldGZzbWFwYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBpb2N0bCBoYW5kbGVyLCB0aGUgb25lIHRoYXQmIzM5O3MgZ29pbmcgdG8gaW50ZXJmYWNlIHdpdGggdGhlIHVzZXIgc3BhY2UsIGFuZCBzcGVjaWZpY2FsbHksIGl0IGNhbGxzIGB4ZnNfZ2V0ZnNtYXBgIGZvciB0aGUgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEgc29saWQgdGFyZ2V0IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwga25vd2luZyBob3cgdGhlIGZpbGVzeXN0ZW0gbWFwIGluZm9ybWF0aW9uIGlzIGFjY2Vzc2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTm93LCB0byB0cmFjZSB0aGlzLCBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGZzL3hmcy94ZnNfaW9jdGwuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHNldHVwIGZvciB0aGUgYHhmc19pb2NfZ2V0ZnNtYXBgIGlvY3RsIHdpbGwgYmUgbmVhcmJ5LCBhbG9uZyB3aXRoIHRoZSBvdGhlciBpb2N0bHMgdGhhdCBYRlMgaGFuZGxlcy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gaW4gdGhpcyBmaWxlIHdpbGwgYmUgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2AgYmFzZWQgb24gdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19pb2N0bF9zZXRhdHRyX2dldF90cmFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3hmcy94ZnNfaW9jdGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvY3RsLmM9NjM0PXN0YXRpYyBzdHJ1Y3QgeGZzX3RyYW5zICpcbmZzL3hmcy94ZnNfaW9jdGwuYzo2MzU6eGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zKFxuZnMveGZzL3hmc19pb2N0bC5jLTYzNi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmM9NzUwPXhmc19maWxlYXR0cl9zZXQoXG4tLVxuZnMveGZzL3hmc19pb2N0bC5jLTgwNi1cbmZzL3hmcy94ZnNfaW9jdGwuYzo4MDc6XHR0cCA9IHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFucyhpcCwgcGRxcCk7XG5mcy94ZnMveGZzX2lvY3RsLmMtODA4LVx0aWYgKElTX0VSUih0cCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uOgoKKipYRlMgQXR0cmlidXRlIFNldHRpbmcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGltbWVkaWF0ZWx5IGtub3cgaXQmIzM5O3MgdGhlIFhGUyBpbXBsZW1lbnRhdGlvbiBmb3Igc2V0dGluZyBmaWxlIGF0dHJpYnV0ZXMuIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBjYWxsaW5nIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgLCB3aGljaCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIGlvY3RsLWJhc2VkIGF0dHJpYnV0ZSBtb2RpZmljYXRpb24gdGhhdCYjMzk7cyBtYW5hZ2luZyB0cmFuc2FjdGlvbnMuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoaXMgbWlnaHQgYmUgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb3Igc29tZXRoaW5nIGJleW9uZCBiYXNpYyBwZXJtaXNzaW9ucy90aW1lc3RhbXBzLCBidXQgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gYHhmc19zZXRhdHRyX25vbnNpemVgIGFuZCBjb25maXJtIHdoZXJlIGl0IHJlc2lkZXMuIFRoZSBjb2RlIHBhdGggbG9va3MgbGlrZSBpdCBsaWtlbHkgaGFuZGxlcyB0aGUgbm9uLXNpemUgYXNwZWN0cyBvZiB0aGUgZmlsZSBhdHRyaWJ1dGUgdXBkYXRlLCBzbywgSSYjMzk7bSBnb2luZyB0byBsb29rIGluIGBmcy94ZnMveGZzX2lvcHMuY2AgYW5kIHRha2UgYSBsb29rLiBUaGlzIG1pZ2h0IGJlIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBhdHRyaWJ1dGUgY2hhbmdlIGhhcHBlbnMsIG9yIGF0IGxlYXN0IHdoZXJlIHRoZSBkZXRhaWxzIG9mIGl0IGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnNfc2V0YXR0cl9ub25zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19pb3BzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19pb3BzLmM9Nzc5PXN0YXRpYyBpbnRcbmZzL3hmcy94ZnNfaW9wcy5jOjc4MDp4ZnNfc2V0YXR0cl9ub25zaXplKFxuZnMveGZzL3hmc19pb3BzLmMtNzgxLVx0c3RydWN0IG1udF9pZG1hcFx0KmlkbWFwLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTkwNz14ZnNfdm5fc2V0YXR0cl9zaXplKFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTk0NS1cdFx0aWF0dHItXHUwMDNlaWFfdmFsaWQgXHUwMDI2PSB+QVRUUl9TSVpFO1xuZnMveGZzL3hmc19pb3BzLmM6OTQ2Olx0XHRyZXR1cm4geGZzX3NldGF0dHJfbm9uc2l6ZShpZG1hcCwgZGVudHJ5LCBpcCwgaWF0dHIpO1xuZnMveGZzL3hmc19pb3BzLmMtOTQ3LVx0fVxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTExMzQ9eGZzX3ZuX3NldGF0dHIoXG4tLVxuZnMveGZzL3hmc19pb3BzLmMtMTE2MS1cdFx0aWYgKCFlcnJvcilcbmZzL3hmcy94ZnNfaW9wcy5jOjExNjI6XHRcdFx0ZXJyb3IgPSB4ZnNfc2V0YXR0cl9ub25zaXplKGlkbWFwLCBkZW50cnksIGlwLCBpYXR0cik7XG5mcy94ZnMveGZzX2lvcHMuYy0xMTYzLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBYRlMgQXR0cmlidXRlIFNldHRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgWEZTIGhhbmRsZXMgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgaXQgbG9va3MgbGlrZSBgeGZzX3ZuX3NldGF0dHJgIGFuZCBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBhcyB0aGV5IGJvdGggdWx0aW1hdGVseSBjYWxsIGB4ZnNfc2V0YXR0cl9ub25zaXplYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKU28sIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOiBgaWdub3JlX2hhcmRsaW1pdGAgKG9yIG1heWJlIGBkcXVvdF9hZGRfaW5vZGVzYCBvciBgZHF1b3RfYWRkX3NwYWNlYCBhcyB0aGV5IHJlbGF0ZSB0byBxdW90YXMpLCBgeGZzX2lvY19nZXRmc21hcGAsIGB4ZnNfZmlsZWF0dHJfc2V0YCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGB4ZnNfdm5fc2V0YXR0cmAuCgpIb2xkIG9uLi4uIGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uIHdpdGhpbiBgZnMvcXVvdGEvZHF1b3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBgeGZzX2lvY19nZXRmc21hcGAgZGVmaW5pdGVseSBzZWVtcyBpbnRlcmVzdGluZywgYXMgZG9lcyBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCBgeGZzX3ZuX3NldGF0dHJgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBpbmRlZWQgc3RhdGljLiBPa2F5LCBjb25maXJtZWQuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgYGRxdW90X2FkZF9zcGFjZWAgYXJlIGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlLiBUaW1lIHRvIGNoZWNrIGBmcy9xdW90YS9kcXVvdC5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcXVvdF9hZGRfaW5vZGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jPTEzMDc9c3RhdGljIGludCBpZ25vcmVfaGFyZGxpbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy0xMzE1LVxuZnMvcXVvdGEvZHF1b3QuYzoxMzE2OnN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcyxcbmZzL3F1b3RhL2RxdW90LmMtMTMxNy1cdFx0XHQgICAgc3RydWN0IGRxdW90X3dhcm4gKndhcm4pXG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xNzc3PWludCBkcXVvdF9hbGxvY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTc5NS1cdFx0XHRjb250aW51ZTtcbmZzL3F1b3RhL2RxdW90LmM6MTc5NjpcdFx0cmV0ID0gZHF1b3RfYWRkX2lub2RlcyhkcXVvdCwgMSwgXHUwMDI2d2FybltjbnRdKTtcbmZzL3F1b3RhL2RxdW90LmMtMTc5Ny1cdFx0aWYgKHJldCkge1xuLS1cbmZzL3F1b3RhL2RxdW90LmM9MjAwOT1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTIwNjMtXHRcdFx0XHRcdTAwMjZkcXVvdF9zcmN1LCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZHFfZGF0YV9sb2NrKSk7XG5mcy9xdW90YS9kcXVvdC5jOjIwNjQ6XHRcdHJldCA9IGRxdW90X2FkZF9pbm9kZXModHJhbnNmZXJfdG9bY250XSwgaW5vZGVfdXNhZ2UsXG5mcy9xdW90YS9kcXVvdC5jLTIwNjUtXHRcdFx0XHQgICAgICAgXHUwMDI2d2Fybl90b1tjbnRdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRHF1b3QgQWxsb2NhdGlvbiBhbmQgVHJhbnNmZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkcXVvdHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgdHJhbnNmZXIgcHJvY2Vzc2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgZHF1b3RfYWxsb2NfaW5vZGVgIGFuZCBgX19kcXVvdF90cmFuc2ZlcmAgYm90aCBjYWxsIGBkcXVvdF9hZGRfaW5vZGVzYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiDigJMgdGhleSYjMzk7cmUgdXNpbmcgdGhlIHNhbWUgY29yZSBmdW5jdGlvbiBmb3IgYWRkaW5nIGlub2Rlcy4gYGRxdW90X2FsbG9jX2lub2RlYCBpcyBleHBvcnRlZCwgc28gaXQmIzM5O3MgcHJvYmFibHkgZ290IGV4dGVybmFsIHVzZSwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZHF1b3RfYWRkX2lub2Rlc2AgaXMgZG9pbmcsIHNvIHRoYXQgd2lsbCBtYWtlIG1lIGNoZWNrIGBkcXVvdF9hZGRfc3BhY2VgLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBzcGFjZSBpcyBiZWluZyBhZGRlZCBmb3Igd2hpY2ggaW5vZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RxdW90X2FkZF9zcGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYz0xMzE2PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2Rlcyxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzNjAtXG5mcy9xdW90YS9kcXVvdC5jOjEzNjE6c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcbmZzL3F1b3RhL2RxdW90LmMtMTM2Mi1cdFx0XHQgICBxc2l6ZV90IHJzdl9zcGFjZSwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL3F1b3RhL2RxdW90LmM9MTcwNj1pbnQgX19kcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IGZsYWdzKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTczNS1cdFx0aWYgKHJlc2VydmUpIHtcbmZzL3F1b3RhL2RxdW90LmM6MTczNjpcdFx0XHRyZXQgPSBkcXVvdF9hZGRfc3BhY2UoZHF1b3QsIDAsIG51bWJlciwgZmxhZ3MsIFx1MDAyNndhcm5bY250XSk7XG5mcy9xdW90YS9kcXVvdC5jLTE3MzctXHRcdH0gZWxzZSB7XG5mcy9xdW90YS9kcXVvdC5jOjE3Mzg6XHRcdFx0cmV0ID0gZHF1b3RfYWRkX3NwYWNlKGRxdW90LCBudW1iZXIsIDAsIGZsYWdzLCBcdTAwMjZ3YXJuW2NudF0pO1xuZnMvcXVvdGEvZHF1b3QuYy0xNzM5LVx0XHR9XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0yMDA5PWludCBfX2RxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkcXVvdCAqKnRyYW5zZmVyX3RvKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjA2Ny1cdFx0XHRnb3RvIG92ZXJfcXVvdGE7XG5mcy9xdW90YS9kcXVvdC5jOjIwNjg6XHRcdHJldCA9IGRxdW90X2FkZF9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCBjdXJfc3BhY2UsIHJzdl9zcGFjZSxcbmZzL3F1b3RhL2RxdW90LmMtMjA2OS1cdFx0XHRcdCAgICAgIERRVU9UX1NQQUNFX1dBUk4sIFx1MDAyNndhcm5fdG9bY250XSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgWEZTIFF1b3RhIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIGBfX2RxdW90X2FsbG9jX3NwYWNlYCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgIHNpbmNlIHRoZXkgY2FsbCBgZHF1b3RfYWRkX3NwYWNlYCwgYW5kIHRoZSBmb3JtZXIgaXMgZXhwb3J0ZWQuIFRoYXQgbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzLiBUaGVuIEkgYWxzbyBjb25zaWRlcmVkIGBkcXVvdF9hbGxvY19pbm9kZWAuIEJ1dCwgaGFuZyBvbi4uLiB0aG9zZSBhcmUgbGlrZWx5IGV4dHJlbWVseSBob3QgcGF0aHMgZm9yIHF1b3RhIG9wZXJhdGlvbnMuIFBlcmhhcHMgc29tZXRoaW5nIGxlc3MgZnJlcXVlbnRseSBjYWxsZWQgd291bGQgYmUgbW9yZSByZXZlYWxpbmcgaW4gdGVybXMgb2YgcmVzb3VyY2UgY29udGVudGlvbiBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KClNvLCBzaGlmdGluZyBnZWFycywgSSYjMzk7bSB0aGlua2luZyBgeGZzX2lvY19nZXRmc21hcGAsIGB4ZnNfZmlsZWF0dHJfc2V0YCwgYW5kIGB4ZnNfdm5fc2V0YXR0cmAgbWlnaHQgYmUgYmV0dGVyIHRhcmdldHMuIEkgcmVjYWxsIGBpZ25vcmVfaGFyZGxpbWl0YCBiZWluZyBjYWxsZWQgZnJvbSBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgLCBidXQgdGhhdCBzZWVtcyB0byBiZSBkdXJpbmcgYWxsb2NhdGlvbiwgbm90IGF0IHRoZSBgcXVvdGFjdGxgIGxldmVsLiBJdCYjMzk7cyB0aGUgc3lzdGVtIGNhbGwsIHNvIHRoZSBvdGhlciBtaWdodCBiZSBiZXR0ZXIgZm9jdXNlcyBmb3IgdGhpcyBhbmFseXNpcy4KClllcywgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIGFuIGlvY3RsIGhhbmRsZXIg4oCTIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGB4ZnNfdm5fc2V0YXR0cmAgYWxzbyBzZWVtIHByb21pc2luZy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBRVU9UQWAgYW5kIGBYRlNfRlNgIGFyZSBlc3NlbnRpYWwuIEFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/CgpIbW0sIGB4ZnNfaGFzX3JtYXBidChtcClgIGlzIHVzZWQgaW4gYHhmc19nZXRmc21hcGAuIERvZXMgdGhlIGBYRlNfRlNgIGNvbmZpZ3VyYXRpb24gaGF2ZSBhbnkgZGVwZW5kZW5jeSBvbiBSbWFwYnQ/IE5vLCBpdCYjMzk7cyBhIHJ1bnRpbWUgZmVhdHVyZSwgbm90IGEgY29tcGlsZS10aW1lIGRlcGVuZGVuY3ksIHRoYXQmIzM5O3MgaW1wb3J0YW50LiBSZXZlcnNlIE1hcHBpbmcgQiYjNDM7dHJlZS4KCkFsc28sIHdoYXQgYWJvdXQgYGNhcGFibGVfbm9hdWRpdGA/IFRoYXQmIzM5O3MgdXNlZCBpbiBzZWN1cml0eS9hdWRpdGluZyBjb250ZXh0cy4gTGV0JiMzOTtzIGNoZWNrIGBrZXJuZWwvY2FwYWJpbGl0eS5jYCBmb3IgYGNhcGFibGVfbm9hdWRpdGAuIEl0IHNlZW1zIHRoYXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGluLiBPa2F5LCBzbyB0aGF0JiMzOTtzIG5vdCBhIGNvbmZpZyBvcHRpb24gY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FwYWJsZV9ub2F1ZGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2NhcGFiaWxpdHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvY2FwYWJpbGl0eS5jPTM2ND1FWFBPUlRfU1lNQk9MKG5zX2NhcGFibGUpO1xuLS1cbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzY2LS8qKlxua2VybmVsL2NhcGFiaWxpdHkuYzozNjc6ICogbnNfY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3IgY2FwYWJpbGl0eVxua2VybmVsL2NhcGFiaWxpdHkuYy0zNjgtICogKHVuYXVkaXRlZCkgaW4gZWZmZWN0XG4tLVxua2VybmVsL2NhcGFiaWxpdHkuYy0zNzctICovXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjM3ODpib29sIG5zX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxua2VybmVsL2NhcGFiaWxpdHkuYy0zNzkte1xuLS1cbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzgxLX1cbmtlcm5lbC9jYXBhYmlsaXR5LmM6MzgyOkVYUE9SVF9TWU1CT0wobnNfY2FwYWJsZV9ub2F1ZGl0KTtcbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzgzLVxuLS1cbmtlcm5lbC9jYXBhYmlsaXR5LmM9NDE3PUVYUE9SVF9TWU1CT0woY2FwYWJsZSk7XG4tLVxua2VybmVsL2NhcGFiaWxpdHkuYy00MTktLyoqXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQyMDogKiBjYXBhYmxlX25vYXVkaXQgLSBEZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgdGFzayBoYXMgYSBzdXBlcmlvclxua2VybmVsL2NhcGFiaWxpdHkuYy00MjEtICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXG4tLVxua2VybmVsL2NhcGFiaWxpdHkuYy00MjktICovXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQzMDpib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxua2VybmVsL2NhcGFiaWxpdHkuYy00MzEte1xua2VybmVsL2NhcGFiaWxpdHkuYzo0MzI6XHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDMzLX1cbmtlcm5lbC9jYXBhYmlsaXR5LmM6NDM0OkVYUE9SVF9TWU1CT0woY2FwYWJsZV9ub2F1ZGl0KTtcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDM1LSNlbmRpZiAvKiBDT05GSUdfTVVMVElVU0VSICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRmlsZXN5c3RlbSBGZWF0dXJlcyoqCgpBbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmaWxlc3lzdGVtIGZlYXR1cmVzLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMuIEkga25vdyB3ZSYjMzk7cmUgbW9zdCBsaWtlbHkgZGVhbGluZyB3aXRoIGBDT05GSUdfTVVMVElVU0VSYCBoZXJlLiBCdXQgaG9uZXN0bHksIHRoYXQmIzM5O3MgbmVhcmx5IGFsd2F5cyBlbmFibGVkLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgdGhlIGNyaXRpY2FsIGNvbmRpdGlvbmFsLiBNeSBtYWluIGZvY3VzIGhhcyB0byBiZSBvbiBgUVVPVEFgIGFuZCBgWEZTX0ZTYCwgdGhvc2UgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGNvZGUgdG8gc2VlIGlmIHNvbWV0aGluZyBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBpbnNpZGUgYGZzL3hmcy94ZnNfZnNtYXAuY2AganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGNvbXBpbGUgdGltZSBjaGVja3MgaW52b2x2ZWQgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl04oCZcyBiZWhhdmluZyBleGFjdGx5IGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnNfZnNtYXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3hmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMvTWFrZWZpbGU9NzE9eGZzLXlcdFx0XHRcdCYjNDM7PSB4ZnNfYW9wcy5vIFxcXG4tLVxuZnMveGZzL01ha2VmaWxlLTg1LVx0XHRcdFx0ICAgeGZzX2ZpbGVzdHJlYW0ubyBcXFxuZnMveGZzL01ha2VmaWxlOjg2Olx0XHRcdFx0ICAgeGZzX2ZzbWFwLm8gXFxcbmZzL3hmcy9NYWtlZmlsZS04Ny1cdFx0XHRcdCAgIHhmc19mc29wcy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFhGUyBJbnRlZ3JhdGlvbiBhbmQgUXVvdGEgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWEZTIGFuZCBpdHMgaW50ZWdyYXRpb24sIGFuZCB0aGUgZmFjdCB0aGF0IHRoZSBYRlMgZmlsZXN5c3RlbSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHdoZW4gYENPTkZJR19YRlNfRlNgIGlzIGRlZmluZWQuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkLCBtYWtlcyBzZW5zZS4gQnV0IGl0IGFsd2F5cyBtYWtlcyBtZSBwYXVzZSBhbmQgdGhpbmsgYWJvdXQgdGhlIG90aGVyIGJpdHMuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBxdW90YSBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IGFzIGl0IGludGVyYWN0cyB3aXRoIHRoZSBmaWxlIHN5c3RlbXMuIExldCBtZSBqdXN0IHRha2UgYSBwZWVrIGF0IGBmcy9xdW90YS9kcXVvdC5jYCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGF0IGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIGFueSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBiZWhhdmlvciBvciBvcHRpbWl6YXRpb25zIHRoYXQgZGVwZW5kIG9uIFhGUyBiZWluZyBidWlsdC1pbiB0aGlzIHdheS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRvIGJlIGF3YXJlIG9mPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcXVvdC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5mcy9xdW90YS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19RVU9UQSlcdFx0JiM0Mzs9IGRxdW90Lm9cbmZzL3F1b3RhL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1FGTVRfVjEpXHRcdCYjNDM7PSBxdW90YV92MS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFhGUyBRdW90YSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcXVvdGFzIGFyZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgWEZTIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgYWxsIGNvbnRpbmdlbnQgb24gYENPTkZJR19RVU9UQWAgYmVpbmcgZW5hYmxlZCBkdXJpbmcgY29tcGlsYXRpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIHN3aXRjaC4KCk5vdywgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0aWVkIHRvIHRoZSBgUVVPVEFgIGFuZCBgWEZTX0ZTYCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiBhIGZldyBrZXkgc3ltYm9sczogYHhmc19pb2NfZ2V0ZnNtYXBgLCBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCBgeGZzX3ZuX3NldGF0dHJgLiBgeGZzX3ZuX3NldGF0dHJgIGlzIHByZXR0eSBnZW5lcmFsLCBpdCBpcyBYRlMmIzM5O3MgZ2VuZXJpYyBgc2V0YXR0cmAgaGFuZGxlciBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYGNobW9kYCwgYGNob3duYCwgYW5kIGB0cnVuY2F0ZWAsIHNvIGl0JiMzOTtzIGEgaG90IHBhdGgsIGJ1dCBub3QgYSBodWdlIGNvbmNlcm4uIGB4ZnNfZmlsZWF0dHJfc2V0YCwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggYEZTX0lPQ19TRVRGTEFHU2AgYW5kIGBGU19JT0NfRlNTRVRYQVRUUmAsIHdoaWNoIGFyZSBpb2N0bCBjb21tYW5kcy4gYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIGZvciBgRlNfSU9DX0dFVEZTTUFQYC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQ/CgpMZXQmIzM5O3Mgc2VlLCBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCBpcyBjYWxsZWQgYnkgYHhmc19maWxlYXR0cl9zZXRgLiBBbmQgYm90aCBgeGZzX3ZuX3NldGF0dHJgIGFuZCBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgY2FsbCBgeGZzX3NldGF0dHJfbm9uc2l6ZWAuIEdvb2QgdG8ga25vdyB0aGUgY2FsbCBjaGFpbnMuCgpBbHJpZ2h0LCBub3cgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIGB4ZnNfaW9jX2dldGZzbWFwYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjb3VsZCBpbXBhY3QgaG93IGl0JiMzOTtzIGxpbmtlZCBvciBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19pb2NfZ2V0ZnNtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMveGZzX2ZzbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19mc21hcC5jPTEyOTk9aW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTMwMDp4ZnNfaW9jX2dldGZzbWFwKFxuZnMveGZzL3hmc19mc21hcC5jLTEzMDEtXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqCgpSaWdodCwgaXQmIzM5O3Mgbm90IGEgZml4ZWQgZW50aXR5IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoaW5ncyBhcmUgaW4gZmx1eCwgY29uc3RhbnRseSBjaGFuZ2luZy4gVGhhdCBzdGF0aWMgcGVyc3BlY3RpdmUgaXMgZGFuZ2Vyb3VzOyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIGR5bmFtaWMgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGtlcm5lbC4KCkkgbmVlZCB0byBkaWcgaW47IEkgbmVlZCB0byBsb29rIGF0IGhvdyB3ZSYjMzk7cmUgcmVhbGx5IG1ha2luZyBhZGp1c3RtZW50cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHhmc19maWxlYXR0cl9zZXRgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGludGVyYWN0aW9uIHJlc2lkZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbWV0YWRhdGEgY2hhbmdlcyBhcmUgaGFuZGxlZCwgd2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlLCBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgbWFuYWdlZCwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gYW55IHBvdGVudGlhbCBpbmNvbnNpc3RlbmNpZXMgb3IgcmFjZSBjb25kaXRpb25zLiBLbm93aW5nIHRoYXQgdGhlIHN5c3RlbSBpcyBub3Qgc3RhdGljLCBhbmQgY2hhbmdlcyBuZWVkIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGUsIEkgbmVlZCB0byBzZWUgaG93IGB4ZnNfZmlsZWF0dHJfc2V0YCBtYW5hZ2VzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19maWxlYXR0cl9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19pb2N0bC5jPTc0OT1pbnRcbmZzL3hmcy94ZnNfaW9jdGwuYzo3NTA6eGZzX2ZpbGVhdHRyX3NldChcbmZzL3hmcy94ZnNfaW9jdGwuYy03NTEtXHRzdHJ1Y3QgbW50X2lkbWFwXHQqaWRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIER5bmFtaWMgU3lzdGVtIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIGl0JiMzOTtzIG5vdCBhIGZpeGVkLCBpbW11dGFibGUgdGhpbmcuIFRoaXMgc3lzdGVtLCB0aGlzIGJlaGF2aW9yLCBpdCYjMzk7cyAqZHluYW1pYyouIFRoYXQmIzM5O3MgdGhlIGtleS4gV2UgY2FuJiMzOTt0IHRyZWF0IGl0IGxpa2UgYSBzbmFwc2hvdDsgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb3ZpbmcgcGFydHMuIFdoZXJlJiMzOTtzIHRoZSBjaGFuZ2UgaGFwcGVuaW5nPwoKTGV0JiMzOTtzIGRpZyBpbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGlucXVpcnksIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIGhvdyBhdHRyaWJ1dGVzIGFyZSBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgd3JpdGVzIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYHhmc192bl9zZXRhdHRyYC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIHJpZ2h0IGFyZWEgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gdGhlIGNoYW5nZXMgYmVpbmcgZGVzY3JpYmVkLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBhdHRyaWJ1dGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZzX3ZuX3NldGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvcHMuYz05MDY9aW50XG5mcy94ZnMveGZzX2lvcHMuYzo5MDc6eGZzX3ZuX3NldGF0dHJfc2l6ZShcbmZzL3hmcy94ZnNfaW9wcy5jLTkwOC1cdHN0cnVjdCBtbnRfaWRtYXBcdCppZG1hcCxcbi0tXG5mcy94ZnMveGZzX2lvcHMuYz0xMTMzPVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfaW9wcy5jOjExMzQ6eGZzX3ZuX3NldGF0dHIoXG5mcy94ZnMveGZzX2lvcHMuYy0xMTM1LVx0c3RydWN0IG1udF9pZG1hcFx0KmlkbWFwLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTExNTQtXG5mcy94ZnMveGZzX2lvcHMuYzoxMTU1Olx0XHRlcnJvciA9IHhmc192bl9zZXRhdHRyX3NpemUoaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMveGZzL3hmc19pb3BzLmMtMTE1Ni1cdFx0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMKTtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYz0xMjY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB4ZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy0xMjY4LVx0LmdldGF0dHJcdFx0PSB4ZnNfdm5fZ2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jOjEyNjk6XHQuc2V0YXR0clx0XHQ9IHhmc192bl9zZXRhdHRyLFxuZnMveGZzL3hmc19pb3BzLmMtMTI3MC1cdC5saXN0eGF0dHJcdFx0PSB4ZnNfdm5fbGlzdHhhdHRyLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEyNzg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy0xMjk2LVx0LmdldGF0dHJcdFx0PSB4ZnNfdm5fZ2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jOjEyOTc6XHQuc2V0YXR0clx0XHQ9IHhmc192bl9zZXRhdHRyLFxuZnMveGZzL3hmc19pb3BzLmMtMTI5OC1cdC5saXN0eGF0dHJcdFx0PSB4ZnNfdm5fbGlzdHhhdHRyLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfY2lfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy0xMzI0LVx0LmdldGF0dHJcdFx0PSB4ZnNfdm5fZ2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jOjEzMjU6XHQuc2V0YXR0clx0XHQ9IHhmc192bl9zZXRhdHRyLFxuZnMveGZzL3hmc19pb3BzLmMtMTMyNi1cdC5saXN0eGF0dHJcdFx0PSB4ZnNfdm5fbGlzdHhhdHRyLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEzMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMveGZzL3hmc19pb3BzLmMtMTMzNi1cdC5nZXRhdHRyXHRcdD0geGZzX3ZuX2dldGF0dHIsXG5mcy94ZnMveGZzX2lvcHMuYzoxMzM3Olx0LnNldGF0dHJcdFx0PSB4ZnNfdm5fc2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jLTEzMzgtXHQubGlzdHhhdHRyXHRcdD0geGZzX3ZuX2xpc3R4YXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2ODcKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogOTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBUYXJnZXQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBmb3IgQ2FwYWJpbGl0eSBDaGVjayBBdWRpdCBNaXRpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgeGZzX3ZuX3NldGF0dHJgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4gYHhmc192bl9zZXRhdHRyX3NpemVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbm9uLXN0YXRpYy4gV2Ugd2VyZSBjb25zaWRlcmluZyBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgYXMgYSByZXBsYWNlbWVudCwgYnV0IHRoYXQmIzM5O3Mgb25seSBmb3Igc2l6ZSBjaGFuZ2VzLiBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgaGFuZGxlcyB0aGUgbm9uLXNpemUgYXR0cmlidXRlIGNoYW5nZXMsIGFuZCB0aGF0IG9uZSwgc3VycHJpc2luZ2x5LCAqaXMqIHN0YXRpYyBidXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzIGFjdHVhbGx5IG1vZGlmaWVkIGluIHRoZSBwYXRjaC4gTm93LCB0aGUgZnV6emVyICpjYW4qIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zLCBpZiB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBidXQgZ2VuZXJhbGx5IGl0JiMzOTtzIGJldHRlciB0byBwcm92aWRlIG5vbi1zdGF0aWMgc3ltYm9scy4gSG93ZXZlciwgU3l6a2FsbGVyICpjYW4qIGdldCBzdGF0aWMgZnVuY3Rpb25zLgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqbW9kaWZpZXMqIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGF0IGlzIGVzc2VudGlhbC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBvdGhlciBzdGF0aWMgZnVuY3Rpb25zOiBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCwgYHhmc19nZXRmc21hcGAsIGFuZCBgaWdub3JlX2hhcmRsaW1pdGAuIFNvLCBJIHN0YXJ0ZWQgd2l0aCB0aGUgc2V0IG9mIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbnM6CgoqICAgYGlnbm9yZV9oYXJkbGltaXRgCiogICBgeGZzX2dldGZzbWFwYAoqICAgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2AKKiAgIGB4ZnNfc2V0YXR0cl9ub25zaXplYAoKQnV0IHdhaXQsIGB4ZnNfZ2V0ZnNtYXBgIGlzIHN0YXRpYywgd2hpbGUgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIG5vbi1zdGF0aWMuIFNhbWUgZm9yIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGFuZCBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBhbmQgYHhmc192bl9zZXRhdHRyX3NpemVgLiBTbywgSSYjMzk7bGwgcHJvdmlkZSBib3RoIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zIEFORCB0aGVpciBub24tc3RhdGljIGNhbGxlcnM6CgoqICAgYHhmc19pb2NfZ2V0ZnNtYXBgCiogICBgeGZzX2ZpbGVhdHRyX3NldGAKKiAgIGB4ZnNfdm5fc2V0YXR0cl9zaXplYAoqICAgYF9fZHF1b3RfYWxsb2Nfc3BhY2VgCiogICBgZHF1b3RfYWxsb2NfaW5vZGVgCiogICBgX19kcXVvdF90cmFuc2ZlcmAKCkhvd2V2ZXIsIHRoZSBtYWluIGNhbGxlciB0byBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgaXMsIGluIGZhY3QsIGB4ZnNfdm5fc2V0YXR0cmAsIHdoaWNoIGlzIHN0YXRpYy4gU28sIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHRvIHByb3ZpZGUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgKmRpcmVjdCogY2FsbGVycywgbGVhZGluZyB0byB0aGlzIHNldCBvZiBzeW1ib2xzOgoKKiAgIGBpZ25vcmVfaGFyZGxpbWl0YAoqICAgYHhmc19nZXRmc21hcGAKKiAgIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgCiogICBgeGZzX3NldGF0dHJfbm9uc2l6ZWAKKiAgIGB4ZnNfaW9jX2dldGZzbWFwYAoqICAgYHhmc19maWxlYXR0cl9zZXRgCiogICBgZHF1b3RfYWRkX2lub2Rlc2AKKiAgIGBkcXVvdF9hZGRfc3BhY2VgCgpUaGVuLCByZWZpbmluZyBldmVuIGZ1cnRoZXIsIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOgoKKiAgIGB4ZnNfaW9jX2dldGZzbWFwYAoqICAgYHhmc19maWxlYXR0cl9zZXRgCiogICBgeGZzX3NldGF0dHJfbm9uc2l6ZWAKKiAgIGBkcXVvdF9hZGRfaW5vZGVzYAoqICAgYGRxdW90X2FkZF9zcGFjZWAKClRoaXMgc2hvdWxkIGdpdmUgZ29vZCBjb3ZlcmFnZSwgaGl0dGluZyB0aGUgaW9jdGxzIGFuZCBxdW90YSBwYXRocyB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgY29yZSBjaGFuZ2UgaXMgcmVsYXRlZCB0byBgY2FwYWJsZV9ub2F1ZGl0YCwgcmVwbGFjaW5nIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGNhcGFiaWxpdHkgY2hlY2tzIHdpdGhpbiBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzaG91bGQgYmU6IGBRVU9UQWAgYW5kIGBYRlNfRlNgLCB3aGljaCBhcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBtb2RpZmllZCBmaWxlcy4gWWVzLCB0aG9zZSBhcmUgc3VmZmljaWVudC4gT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzIG5vdy4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVVPVEEmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY19nZXRmc21hcCYjMzQ7LAogICAgJiMzNDt4ZnNfZmlsZWF0dHJfc2V0JiMzNDssCiAgICAmIzM0O3hmc19zZXRhdHRyX25vbnNpemUmIzM0OywKICAgICYjMzQ7ZHF1b3RfYWRkX2lub2RlcyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hZGRfc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2FwYWJsZV9ub2F1ZGl0YCBhbmQgcmVwbGFjZXMgYGhhc19jYXBhYmlsaXR5X25vYXVkaXRgIGFuZCBgY2FwYWJsZWAgd2l0aCBpdCBpbiBYRlMgYW5kIHF1b3RhIHN1YnN5c3RlbXMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3IgYnkgc2V0dGluZyBgUEZfU1VQRVJQUklWYCB3aXRob3V0IGdlbmVyYXRpbmcgYXVkaXQgbWVzc2FnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjYXBhYmlsaXR5IGNoZWNrcyBkdXJpbmcgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIFhGUyBpb2N0bHMvc2V0YXR0ciBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfaW9jX2dldGZzbWFwJiMzNDssCiAgICAmIzM0O3hmc19maWxlYXR0cl9zZXQmIzM0OywKICAgICYjMzQ7eGZzX3NldGF0dHJfbm9uc2l6ZSYjMzQ7LAogICAgJiMzNDtkcXVvdF9hZGRfaW5vZGVzJiMzNDssCiAgICAmIzM0O2RxdW90X2FkZF9zcGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYXBhYmxlX25vYXVkaXRgIGFuZCByZXBsYWNlcyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCB3aXRoIGl0IGluIFhGUyBhbmQgcXVvdGEgc3Vic3lzdGVtcy4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBieSBzZXR0aW5nIGBQRl9TVVBFUlBSSVZgIHdpdGhvdXQgZ2VuZXJhdGluZyBhdWRpdCBtZXNzYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNhcGFiaWxpdHkgY2hlY2tzIGR1cmluZyBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyMjowOS45NzkzODExODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI2MTU5ODMxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVVPVEFcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2NfZ2V0ZnNtYXBcIixcbiAgICBcInhmc19maWxlYXR0cl9zZXRcIixcbiAgICBcInhmc19zZXRhdHRyX25vbnNpemVcIixcbiAgICBcImRxdW90X2FkZF9pbm9kZXNcIixcbiAgICBcImRxdW90X2FkZF9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGNhcGFibGVfbm9hdWRpdGAgYW5kIHJlcGxhY2VzIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgIHdpdGggaXQgaW4gWEZTIGFuZCBxdW90YSBzdWJzeXN0ZW1zLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIGJ5IHNldHRpbmcgYFBGX1NVUEVSUFJJVmAgd2l0aG91dCBnZW5lcmF0aW5nIGF1ZGl0IG1lc3NhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY2FwYWJpbGl0eSBjaGVja3MgZHVyaW5nIHF1b3RhIGVuZm9yY2VtZW50IGFuZCBYRlMgaW9jdGxzL3NldGF0dHIgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjI6MDkuOTc5Mzg1NjgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2NDIxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5N2VkMWFiMTJiZDVhODY2YzlhZWU2OTkxYzgzZjRkNzUxMzYyMjIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTQ6MjI6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmNcXG5pbmRleCA5ODUwZGUzOTU1ZDMxMy4uZGFiOTM0MjJhNTdiYWUgMTAwNjQ0XFxuLS0tIGEvZnMvcXVvdGEvZHF1b3QuY1xcbisrKyBiL2ZzL3F1b3RhL2RxdW90LmNcXG5AQCAtMTMwOCw3ICsxMzA4LDcgQEAgc3RhdGljIGludCBpZ25vcmVfaGFyZGxpbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcXHUwMDI2c2JfZHFvcHQoZHF1b3QtXFx1MDAzZWRxX3NiKS1cXHUwMDNlaW5mb1tkcXVvdC1cXHUwMDNlZHFfaWQudHlwZV07XFxuIFxcbi1cXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRyZXR1cm4gY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfUkVTT1VSQ0UpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAgICAoaW5mby1cXHUwMDNlZHFpX2Zvcm1hdC1cXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxcbiBcXHRcXHQhKGluZm8tXFx1MDAzZWRxaV9mbGFncyBcXHUwMDI2IERRRl9ST09UX1NRVUFTSCkpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNtYXAuYyBiL2ZzL3hmcy94ZnNfZnNtYXAuY1xcbmluZGV4IGI2YTNiYzlmMTQzYzhlLi4wNDFiYjIxMDVlYzY0ZCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2ZzbWFwLmNcXG4rKysgYi9mcy94ZnMveGZzX2ZzbWFwLmNcXG5AQCAtMTE3NCw4ICsxMTc0LDcgQEAgeGZzX2dldGZzbWFwKFxcbiBcXHRpZiAoIXhmc19nZXRmc21hcF9jaGVja19rZXlzKFxcdTAwMjZoZWFkLVxcdTAwM2VmbWhfa2V5c1swXSwgXFx1MDAyNmhlYWQtXFx1MDAzZWZtaF9rZXlzWzFdKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHR1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KGN1cnJlbnQsIENBUF9TWVNfQURNSU4pO1xcbitcXHR1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSBcXHUwMDI2XFx1MDAyNiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19BRE1JTik7XFxuIFxcdGhlYWQtXFx1MDAzZWZtaF9lbnRyaWVzID0gMDtcXG4gXFxuIFxcdC8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqL1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5pbmRleCAxYjUzNzAxYmViZWExYS4uMzc0YjQ4OGYwNDE2YzggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXFxuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXFxuQEAgLTY0Nyw3ICs2NDcsNyBAQCB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnMoXFxuIFxcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbiBcXG4gXFx0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2NfaWNoYW5nZShpcCwgTlVMTCwgTlVMTCwgcGRxcCxcXG4tXFx0XFx0XFx0aGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfRk9XTkVSKSwgXFx1MDAyNnRwKTtcXG4rXFx0XFx0XFx0XFx0XFx0Y2FwYWJsZV9ub2F1ZGl0KENBUF9GT1dORVIpLCBcXHUwMDI2dHApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuY1xcbmluZGV4IDYzMzlmNDk1NmVjYjM5Li5jZTlmOGI4NDY4ZmNiZSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xcbisrKyBiL2ZzL3hmcy94ZnNfaW9wcy5jXFxuQEAgLTgzNSw3ICs4MzUsOCBAQCB4ZnNfc2V0YXR0cl9ub25zaXplKFxcbiBcXHR9XFxuIFxcbiBcXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLFxcbi1cXHRcXHRcXHRoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KGN1cnJlbnQsIENBUF9GT1dORVIpLCBcXHUwMDI2dHApO1xcbitcXHRcXHRcXHRcXHRcXHRjYXBhYmxlX25vYXVkaXQoQ0FQX0ZPV05FUiksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ0cCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBvdXRfZHFyZWxlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxcbmluZGV4IDM3ZGI5MmIzZDZmODllLi5mODUzMmQ5MmZjYWQ2OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oXFxuQEAgLTE0NSw2ICsxNDUsNyBAQCBleHRlcm4gYm9vbCBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNhcCk7XFxuIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcXG4gZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTtcXG4rYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcCk7XFxuIGV4dGVybiBib29sIG5zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XFxuIGV4dGVybiBib29sIG5zX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcXG4gZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZV9zZXRpZChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcXG5AQCAtMTY3LDYgKzE2OCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2FwYWJpbGl0eS5jIGIva2VybmVsL2NhcGFiaWxpdHkuY1xcbmluZGV4IDgyOWY0OWFlMDdiOTY1Li4zZDAzODdmYjkzYTM4YyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jXFxuKysrIGIva2VybmVsL2NhcGFiaWxpdHkuY1xcbkBAIC0zMjYsNyArMzI2LDYgQEAgYm9vbCBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNhcClcXG4ge1xcbiBcXHRyZXR1cm4gaGFzX25zX2NhcGFiaWxpdHlfbm9hdWRpdCh0LCBcXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0woaGFzX2NhcGFiaWxpdHlfbm9hdWRpdCk7XFxuIFxcbiBzdGF0aWMgYm9vbCBuc19jYXBhYmxlX2NvbW1vbihzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLFxcbiBcXHRcXHRcXHQgICAgICBpbnQgY2FwLFxcbkBAIC00MTYsNiArNDE1LDIzIEBAIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxcbiBcXHRyZXR1cm4gbnNfY2FwYWJsZShcXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woY2FwYWJsZSk7XFxuK1xcbisvKipcXG4rICogY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3JcXG4rICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXFxuKyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IHRvIGJlIHRlc3RlZCBmb3JcXG4rICpcXG4rICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50XFxuKyAqIGlzc3Vpbmcgc3B1cmlvdXMgYXVkaXQgbWVzc2FnZXMuXFxuKyAqXFxuKyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxcbisgKiBhc3N1bXB0aW9uIHRoYXQgaXQncyBhYm91dCB0byBiZSB1c2VkLlxcbisgKi9cXG4rYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcClcXG4re1xcbitcXHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFxcdTAwMjZpbml0X3VzZXJfbnMsIGNhcCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChjYXBhYmxlX25vYXVkaXQpO1xcbiAjZW5kaWYgLyogQ09ORklHX01VTFRJVVNFUiAqL1xcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjEwLjQ3NDY5OTkxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMyMTIwNjU2NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFVT1RBXCIsXG4gICAgXCJYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnNfaW9jX2dldGZzbWFwXCIsXG4gICAgXCJ4ZnNfZmlsZWF0dHJfc2V0XCIsXG4gICAgXCJ4ZnNfc2V0YXR0cl9ub25zaXplXCIsXG4gICAgXCJkcXVvdF9hZGRfaW5vZGVzXCIsXG4gICAgXCJkcXVvdF9hZGRfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYXBhYmxlX25vYXVkaXRgIGFuZCByZXBsYWNlcyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCB3aXRoIGl0IGluIFhGUyBhbmQgcXVvdGEgc3Vic3lzdGVtcy4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBieSBzZXR0aW5nIGBQRl9TVVBFUlBSSVZgIHdpdGhvdXQgZ2VuZXJhdGluZyBhdWRpdCBtZXNzYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNhcGFiaWxpdHkgY2hlY2tzIGR1cmluZyBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTdlZDFhYjEyYmQ1YTg2NmM5YWVlNjk5MWM4M2Y0ZDc1MTM2MjIyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTQ6MjI6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuY1xuaW5kZXggOTg1MGRlMzk1NWQzMTMuLmRhYjkzNDIyYTU3YmFlIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvZHF1b3QuY1xuKysrIGIvZnMvcXVvdGEvZHF1b3QuY1xuQEAgLTEzMDgsNyArMTMwOCw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIHtcbiBcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2c2JfZHFvcHQoZHF1b3QtXHUwMDNlZHFfc2IpLVx1MDAzZWluZm9bZHF1b3QtXHUwMDNlZHFfaWQudHlwZV07XG4gXG4tXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcdTAwMjZcdTAwMjZcbitcdHJldHVybiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19SRVNPVVJDRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAgKGluZm8tXHUwMDNlZHFpX2Zvcm1hdC1cdTAwM2VxZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEIHx8XG4gXHRcdCEoaW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2IERRRl9ST09UX1NRVUFTSCkpO1xuIH1cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzbWFwLmMgYi9mcy94ZnMveGZzX2ZzbWFwLmNcbmluZGV4IGI2YTNiYzlmMTQzYzhlLi4wNDFiYjIxMDVlYzY0ZCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZnNtYXAuY1xuKysrIGIvZnMveGZzL3hmc19mc21hcC5jXG5AQCAtMTE3NCw4ICsxMTc0LDcgQEAgeGZzX2dldGZzbWFwKFxuIFx0aWYgKCF4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cyhcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzBdLCBcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzFdKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfU1lTX0FETUlOKTtcbitcdHVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApIFx1MDAyNlx1MDAyNiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19BRE1JTik7XG4gXHRoZWFkLVx1MDAzZWZtaF9lbnRyaWVzID0gMDtcbiBcbiBcdC8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLjM3NGI0ODhmMDQxNmM4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4rKysgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC02NDcsNyArNjQ3LDcgQEAgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zKFxuIFx0XHRnb3RvIG91dF9lcnJvcjtcbiBcbiBcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2ljaGFuZ2UoaXAsIE5VTEwsIE5VTEwsIHBkcXAsXG4tXHRcdFx0aGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfRk9XTkVSKSwgXHUwMDI2dHApO1xuK1x0XHRcdFx0XHRjYXBhYmxlX25vYXVkaXQoQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZXJyb3I7XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuY1xuaW5kZXggNjMzOWY0OTU2ZWNiMzkuLmNlOWY4Yjg0NjhmY2JlIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5AQCAtODM1LDcgKzgzNSw4IEBAIHhmc19zZXRhdHRyX25vbnNpemUoXG4gXHR9XG4gXG4gXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLFxuLVx0XHRcdGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbitcdFx0XHRcdFx0Y2FwYWJsZV9ub2F1ZGl0KENBUF9GT1dORVIpLFxuK1x0XHRcdFx0XHRcdTAwMjZ0cCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2RxcmVsZTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oXG5pbmRleCAzN2RiOTJiM2Q2Zjg5ZS4uZjg1MzJkOTJmY2FkNjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmhcbkBAIC0xNDUsNiArMTQ1LDcgQEAgZXh0ZXJuIGJvb2wgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApO1xuIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTtcbitib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKTtcbiBleHRlcm4gYm9vbCBuc19jYXBhYmxlKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApO1xuIGV4dGVybiBib29sIG5zX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcbiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX3NldGlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApO1xuQEAgLTE2Nyw2ICsxNjgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhcGFibGUoaW50IGNhcClcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rc3RhdGljIGlubGluZSBib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5pbmRleCA4MjlmNDlhZTA3Yjk2NS4uM2QwMzg3ZmI5M2EzOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jXG4rKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5AQCAtMzI2LDcgKzMyNiw2IEBAIGJvb2wgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApXG4ge1xuIFx0cmV0dXJuIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQodCwgXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xuIH1cbi1FWFBPUlRfU1lNQk9MKGhhc19jYXBhYmlsaXR5X25vYXVkaXQpO1xuIFxuIHN0YXRpYyBib29sIG5zX2NhcGFibGVfY29tbW9uKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsXG4gXHRcdFx0ICAgICAgaW50IGNhcCxcbkBAIC00MTYsNiArNDE1LDIzIEBAIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxuIFx0cmV0dXJuIG5zX2NhcGFibGUoXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGNhcGFibGUpO1xuK1xuKy8qKlxuKyAqIGNhcGFibGVfbm9hdWRpdCAtIERldGVybWluZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIHN1cGVyaW9yXG4rICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXG4rICogQGNhcDogVGhlIGNhcGFiaWxpdHkgdG8gYmUgdGVzdGVkIGZvclxuKyAqXG4rICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50XG4rICogaXNzdWluZyBzcHVyaW91cyBhdWRpdCBtZXNzYWdlcy5cbisgKlxuKyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuKyAqIGFzc3VtcHRpb24gdGhhdCBpdCdzIGFib3V0IHRvIGJlIHVzZWQuXG4rICovXG4rYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcClcbit7XG4rXHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbit9XG4rRVhQT1JUX1NZTUJPTChjYXBhYmxlX25vYXVkaXQpO1xuICNlbmRpZiAvKiBDT05GSUdfTVVMVElVU0VSICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyMjoxMC40NzQ3MDEzMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI4Njg4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDYXBhYmlsaXR5IENoZWNrIFJlcGxhY2VtZW50IGluIEtlcm5lbCBDb2RlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKWAsIGluIGBrZXJuZWwvY2FwYWJpbGl0eS5jYCBhbmQgYGluY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhYm91dCByZXBsYWNpbmcgZXhpc3RpbmcgY2FwYWJpbGl0eSBjaGVja3Mgd2l0aCB0aGlzIG5ldyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFpbWluZyB0byBzdXBwcmVzcyBhdWRpdCBtZXNzYWdlcyBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cblxuSSdtIHNlZWluZyBpdCBzd2FwIG91dCBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCAuLi4pYCB3aXRoIGBjYXBhYmxlX25vYXVkaXQoLi4uKWAgd2l0aGluIHRoZSBYRlMgZmlsZXN5c3RlbSBjb2RlIChgZnMveGZzL3hmc19mc21hcC5jYCwgYGZzL3hmcy94ZnNfaW9jdGwuY2AsIGFuZCBgZnMveGZzL3hmc19pb3BzLmNgKS4gQW5kIGluIHRoZSBxdW90YSBjb2RlIChgZnMvcXVvdGEvZHF1b3QuY2ApLCBpdCdzIGNoYW5naW5nIGBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpYCB0byBgY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfUkVTT1VSQ0UpYC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgdGhlIGJlaGF2aW9yIG9mIHRob3NlIGNhcGFiaWxpdHkgY2hlY2tzIGlzIGJlaW5nIGFsdGVyZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBGb3IgZXhhbXBsZSwgaW4gYGZzL3F1b3RhL2RxdW90LmNgIHdpdGhpbiBgaWdub3JlX2hhcmRsaW1pdGAsIHdlJ3JlIGdvaW5nIGZyb20gYGNhcGFibGVgIHRvIGBjYXBhYmxlX25vYXVkaXRgLCBkaXJlY3RseSBhZmZlY3RpbmcgYXVkaXQgbG9nZ2luZy5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgWEZTIGNoYW5nZXMgbW9yZSBjbG9zZWx5LiBUaGUgcmVwbGFjZW1lbnQgb2YgYGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgLi4uKWAgd2l0aCBgY2FwYWJsZV9ub2F1ZGl0KC4uLilgIGluIFhGUyBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGhvd2V2ZXIuLi4gd2FpdCBhIHNlY29uZC4uLiB0aGVyZSdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBoZXJlLiBEb2Vzbid0IGBjYXBhYmxlX25vYXVkaXRgIGJlaGF2ZSBkaWZmZXJlbnRseSB3aXRoIHRoZSBgUEZfU1VQRVJQUklWYCBmbGFnPyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgbWlnaHQgbm90IGJlIHNldHRpbmcgdGhhdCBmbGFnLCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBkb2VzLiBMZXQncyBtYWtlIHN1cmUuXG5cbk9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGlzLiBUaGUgYGNhcGFibGVfbm9hdWRpdGAgY2FsbCBsZWFkcyB0byBgbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKWAsIHdoaWNoIHRoZW4gY2FsbHMgYG5zX2NhcGFibGVfY29tbW9uKG5zLCBjYXAsIENBUF9PUFRfTk9BVURJVClgLiBJbXBvcnRhbnRseSwgYG5zX2NhcGFibGVfY29tbW9uYCAqZG9lcyogc2V0IGBQRl9TVVBFUlBSSVZgIGlmIHRoZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZS4gQnV0LCBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgZ29lcyB0aHJvdWdoIGEgZGlmZmVyZW50IHBhdGgg4oCTIGl0IGNhbGxzIGBoYXNfbnNfY2FwYWJpbGl0eV9ub2F1ZGl0KHQsIFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlY3VyaXR5X2NhcGFibGUodC1cdTAwM2VjcmVkLCBucywgY2FwLCBDQVBfT1BUX05PQVVESVQpYC4gQW5kIHRoaXMgbGFzdCBjYWxsICpkb2VzIG5vdCogc2V0IGBQRl9TVVBFUlBSSVZgLiBUaGF0IG1ha2VzIHRoaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvIHRoZSBwcmltYXJ5IGltcGFjdCBpcyBpbiBgZnMvcXVvdGEvZHF1b3QuY2AgYW5kIHdpdGhpbiB0aGUgWEZTIGZpbGVzLiBXaGF0IGNvbmZpZ3MgZG8gd2UgbmVlZCB0byB2ZXJpZnkgaGVyZT8gV2VsbCwgYENPTkZJR19RVU9UQWAgYW5kIGBDT05GSUdfWEZTX0ZTYCBzaG91bGQgYmUgcmVsZXZhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGZpbGVzIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyMjoxOS4xMDMzOTIyMDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzNDYzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVT1RBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZy01LVxcbmZzL3F1b3RhL0tjb25maWc6Njpjb25maWcgUVVPVEFcXG5mcy9xdW90YS9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUXVvdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctMTktXFxuZnMvcXVvdGEvS2NvbmZpZzoyMDpjb25maWcgUVVPVEFfTkVUTElOS19JTlRFUkZBQ0VcXG5mcy9xdW90YS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZz0yOD1jb25maWcgUFJJTlRfUVVPVEFfV0FSTklOR1xcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy0zNy1cXG5mcy9xdW90YS9LY29uZmlnOjM4OmNvbmZpZyBRVU9UQV9ERUJVR1xcbmZzL3F1b3RhL0tjb25maWctMzktXFx0Ym9vbCBcXFwiQWRkaXRpb25hbCBxdW90YSBzYW5pdHkgY2hlY2tzXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy00Ni0jIEdlbmVyaWMgc3VwcG9ydCBmb3IgdHJlZSBzdHJ1Y3R1cmVkIHF1b3RhIGZpbGVzLiBTZWxlY3RlZCB3aGVuIG5lZWRlZC5cXG5mcy9xdW90YS9LY29uZmlnOjQ3OmNvbmZpZyBRVU9UQV9UUkVFXFxuZnMvcXVvdGEvS2NvbmZpZy00OC1cXHQgdHJpc3RhdGVcXG4tLVxcbmZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctNjctXFxuZnMvcXVvdGEvS2NvbmZpZzo2ODpjb25maWcgUVVPVEFDVExcXG5mcy9xdW90YS9LY29uZmlnLTY5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjI6MTkuMTYxNzQ2NDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2Njg4MTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIFhGUyBhbmQgUXVvdGEgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHNvbWUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlcyByZXZvbHZpbmcgYXJvdW5kIHF1b3RhIG1hbmFnZW1lbnQgaW4gWEZTLiBCYXNlZCBvbiB0aGUgaW5pdGlhbCBzZXR1cCwgSSdtIHRoaW5raW5nIHRoZSByb290IG9mIHRoZSBpc3N1ZSBpcyB0aWVkIHRvIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGBRVU9UQWAgYWxvbmdzaWRlIGBYRlNfRlNgLiBUbyBzdGFydCwgSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBmdW5jdGlvbnMuIGBpZ25vcmVfaGFyZGxpbWl0YCBpbiBgZnMvcXVvdGEvZHF1b3QuY2AgaXMgdGhlIG9idmlvdXMgZmlyc3QgcGxhY2UgdG8gc3RhcnQsIHNpbmNlIGl0J3MgZGlyZWN0bHkgZGVhbGluZyB3aXRoIHF1b3RhIGNoZWNrcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBvbiBhIGhvdCBwYXRoLiBUaGVuIEknbSBhbHNvIGxvb2tpbmcgYXQgYHhmc19nZXRmc21hcGAgaW4gYGZzL3hmcy94ZnNfZnNtYXAuY2Agd2hpY2ggSSBiZWxpZXZlIGlzIGFuIGlvY3RsIGhhbmRsZXIgc28gSSBjYW4gc2VlIHdoYXQga2luZCBvZiBvdmVyaGVhZCB0aGF0IG1pZ2h0IGludHJvZHVjZS4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgYHNldGF0dHJgIGNhbGxzLCBzbyBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCBpbiBgZnMveGZzL3hmc19pb2N0bC5jYCBhbmQgYHhmc19zZXRhdHRyX25vbnNpemVgIGluIGBmcy94ZnMveGZzX2lvcHMuY2AgYXJlIGFsc28gb24gbXkgcmFkYXIuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGJlaGF2aW9yIG9mIGBpZ25vcmVfaGFyZGxpbWl0YCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjI6MjMuOTI4NjMwMTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjUzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlnbm9yZV9oYXJkbGltaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvZHF1b3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9xdW90YS9kcXVvdC5jPTEyOTI9c3RhdGljIHZvaWQgZmx1c2hfd2FybmluZ3Moc3RydWN0IGRxdW90X3dhcm4gKndhcm4pXFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jLTEzMDYtXFxuZnMvcXVvdGEvZHF1b3QuYzoxMzA3OnN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbmZzL3F1b3RhL2RxdW90LmMtMTMwOC17XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTEzMTY9c3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzI5LVxcdCAgICBuZXdpbm9kZXMgXFx1MDAzZSBkcXVvdC1cXHUwMDNlZHFfZHFiLmRxYl9paGFyZGxpbWl0IFxcdTAwMjZcXHUwMDI2XFxuZnMvcXVvdGEvZHF1b3QuYzoxMzMwOiAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTMzMS1cXHRcXHRwcmVwYXJlX3dhcm5pbmcod2FybiwgZHF1b3QsIFFVT1RBX05MX0lIQVJEV0FSTik7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jLTEzMzktXFx0ICAgIGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKSBcXHUwMDNlPSBkcXVvdC1cXHUwMDNlZHFfZHFiLmRxYl9pdGltZSBcXHUwMDI2XFx1MDAyNlxcbmZzL3F1b3RhL2RxdW90LmM6MTM0MDogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcXG5mcy9xdW90YS9kcXVvdC5jLTEzNDEtXFx0XFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JU09GVExPTkdXQVJOKTtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTM2MT1zdGF0aWMgaW50IGRxdW90X2FkZF9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IHNwYWNlLFxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzc4LVxcdCAgICB0c3BhY2UgXFx1MDAzZSBkcXVvdC1cXHUwMDNlZHFfZHFiLmRxYl9iaGFyZGxpbWl0IFxcdTAwMjZcXHUwMDI2XFxuZnMvcXVvdGEvZHF1b3QuYzoxMzc5OiAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTM4MC1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzg5LVxcdCAgICBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCkgXFx1MDAzZT0gZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfYnRpbWUgXFx1MDAyNlxcdTAwMjZcXG5mcy9xdW90YS9kcXVvdC5jOjEzOTA6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XFxuZnMvcXVvdGEvZHF1b3QuYy0xMzkxLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IERRVU9UX1NQQUNFX1dBUk4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjIzLjk4NjI4ODMwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDc3MDU0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyBpbiBYRlMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3Igc29tZSBhcmVhcyBpbiB0aGUgWEZTIGZpbGVzeXN0ZW0gd2hlcmUgd2UgbWlnaHQgYmUgYWJsZSB0byBzcXVlZXplIG91dCBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLiBUaGlua2luZyBhYm91dCB0aGUgaG90IHBhdGhzLCBJIGtub3cgdGhhdCBgaWdub3JlX2hhcmRsaW1pdGAgaXMgY2FsbGVkIGZyb20gYGRxdW90X2FkZF9pbm9kZXNgIGFuZCBgZHF1b3RfYWRkX3NwYWNlYC4gVGhvc2UgYXJlIGNydWNpYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcXVvdGEgbWFuYWdlbWVudCwgc28gYW55IGltcHJvdmVtZW50IHRoZXJlIHdvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QuIEJ1dCwgdGhhdCdzIG5vdCBhbHdheXMgZWFzeS5cblxuTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMgaW9jdGxzOyB0aGV5IGFyZSBhbHdheXMgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIGB4ZnNfZ2V0ZnNtYXBgIGltbWVkaWF0ZWx5IHNwcmluZ3MgdG8gbWluZCBhcyBhIGxpa2VseSB0YXJnZXQgYmVjYXVzZSBpdCdzIGFuIGlvY3RsLiBTaW5jZSBpb2N0bHMgb2Z0ZW4gaW52b2x2ZSB1c2VyLWtlcm5lbCB0cmFuc2l0aW9ucyBhbmQgY29tcGxleCBkYXRhIGhhbmRsaW5nLCB0aGVyZSBjb3VsZCBiZSBhIGxvdCBvZiBvdmVyaGVhZC4gU2ltaWxhcmx5LCBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCBpcyBhbm90aGVyIGlvY3RsIGhlbHBlci4gQW5kLCBsb29raW5nIGZ1cnRoZXIgSSBzZWUgYHhmc19zZXRhdHRyX25vbnNpemVgIHdoaWNoIGlzIGFuIGBzZXRhdHRyYCBoZWxwZXIsIHdoaWNoIGNhbiBiZSBhbiBlYXNpZXIgd2luLCBwZXJoYXBzLlxuXG5UaW1lIHRvIGRpdmUgaW4gYW5kIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCBgZnMveGZzL3hmc19mc21hcC5jYCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB4ZnNfZ2V0ZnNtYXBgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgbWlnaHQgcHJlc2VudCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjI4LjI5Mzk5NjA5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyMTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnNfZ2V0ZnNtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMveGZzL3hmc19mc21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3hmcy94ZnNfZnNtYXAuYz0xMTY9eGZzX2ZzbWFwX293bmVyX2Zyb21fZnJlYyhcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xNTktLyogZ2V0ZnNtYXAgcXVlcnkgc3RhdGUgKi9cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTYwOnN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyB7XFxuZnMveGZzL3hmc19mc21hcC5jLTE2MS1cXHRzdHJ1Y3QgeGZzX2ZzbWFwX2hlYWRcXHQqaGVhZDtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xNzQtXFx0ICogaXMgdGhlIHNlY29uZCAob3IgbGF0ZXIpIGNhbGwgdG8gcmV0cmlldmUgdGhlIHJlY29yZHNldCBpbiBwaWVjZXMuXFxuZnMveGZzL3hmc19mc21hcC5jOjE3NTpcXHQgKiB4ZnNfZ2V0ZnNtYXBfcmVjX2JlZm9yZV9zdGFydCB3aWxsIGNvbXBhcmUgYWxsIHJlY29yZHMgcmV0cmlldmVkXFxuZnMveGZzL3hmc19mc21hcC5jLTE3Ni1cXHQgKiBieSB0aGUgcm1hcGJ0IHF1ZXJ5IHRvIGZpbHRlciBvdXQgYW55IHJlY29yZHMgdGhhdCBzdGFydCBiZWZvcmVcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xODQtLyogQXNzb2NpYXRlIGEgZGV2aWNlIHdpdGggYSBnZXRmc21hcCBoYW5kbGVyLiAqL1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxODU6c3RydWN0IHhmc19nZXRmc21hcF9kZXYge1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xODYtXFx0dTMyXFx0XFx0XFx0ZGV2O1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTE4OC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwICprZXlzLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxODk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhmc19nZXRmc21hcF9pbmZvICppbmZvKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTkwLVxcdHNlY3Rvcl90XFx0XFx0bnJfc2VjdG9ycztcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xOTQ9c3RhdGljIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxOTU6eGZzX2dldGZzbWFwX2Rldl9jb21wYXJlKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xOTYtXFx0Y29uc3Qgdm9pZFxcdFxcdFxcdCpwMSxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xOTgte1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxOTk6XFx0Y29uc3Qgc3RydWN0IHhmc19nZXRmc21hcF9kZXZcXHQqZDEgPSBwMTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjAwOlxcdGNvbnN0IHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfZGV2XFx0KmQyID0gcDI7XFxuZnMveGZzL3hmc19mc21hcC5jLTIwMS1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0yMDY9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoyMDc6eGZzX2dldGZzbWFwX2lzX3NoYXJlZChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjA4LVxcdHN0cnVjdCB4ZnNfdHJhbnNcXHRcXHQqdHAsXFxuZnMveGZzL3hmc19mc21hcC5jOjIwOTpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbyxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjEwLVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBfaXJlY1xcdCpmcmVjLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTI0Mj1zdGF0aWMgaW5saW5lIHZvaWRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjQzOnhmc19nZXRmc21hcF9mb3JtYXQoXFxuZnMveGZzL3hmc19mc21hcC5jLTI0NC1cXHRzdHJ1Y3QgeGZzX21vdW50XFx0XFx0Km1wLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNDUtXFx0c3RydWN0IHhmc19mc21hcFxcdFxcdCp4Zm0sXFxuZnMveGZzL3hmc19mc21hcC5jOjI0NjpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbylcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ3LXtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNDktXFxuZnMveGZzL3hmc19mc21hcC5jOjI1MDpcXHR0cmFjZV94ZnNfZ2V0ZnNtYXBfbWFwcGluZyhtcCwgeGZtKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjUxLVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2xcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjU3Onhmc19nZXRmc21hcF9mcmVjX2JlZm9yZV9zdGFydChcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjU4OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNTktXFx0Y29uc3Qgc3RydWN0IHhmc19mc21hcF9pcmVjXFx0KmZyZWMpXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9MjgxPVNUQVRJQyBpbnRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjgyOnhmc19nZXRmc21hcF9oZWxwZXIoXFxuZnMveGZzL3hmc19mc21hcC5jLTI4My1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoyODQ6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8sXFxuZnMveGZzL3hmc19mc21hcC5jLTI4NS1cXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwX2lyZWNcXHQqZnJlYylcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yOTgtXFx0ICovXFxuZnMveGZzL3hmc19mc21hcC5jOjI5OTpcXHRpZiAoeGZzX2dldGZzbWFwX2ZyZWNfYmVmb3JlX3N0YXJ0KGluZm8sIGZyZWMpKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0zMDAtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMzMxLVxcdFxcdGZtci5mbXJfZmxhZ3MgPSBGTVJfT0ZfU1BFQ0lBTF9PV05FUjtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MzMyOlxcdFxcdHhmc19nZXRmc21hcF9mb3JtYXQobXAsIFxcdTAwMjZmbXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zMzMtXFx0fVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTM1OS1cXHRpZiAoZm1yLmZtcl9mbGFncyA9PSAwKSB7XFxuZnMveGZzL3hmc19mc21hcC5jOjM2MDpcXHRcXHRlcnJvciA9IHhmc19nZXRmc21hcF9pc19zaGFyZWQodHAsIGluZm8sIGZyZWMsIFxcdTAwMjZzaGFyZWQpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zNjEtXFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTM2Ni1cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MzY3OlxcdHhmc19nZXRmc21hcF9mb3JtYXQobXAsIFxcdTAwMjZmbXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zNjgtb3V0Olxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTM3ND1zdGF0aWMgaW5saW5lIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzozNzU6eGZzX2dldGZzbWFwX2dyb3VwX2hlbHBlcihcXG5mcy94ZnMveGZzX2ZzbWFwLmM6Mzc2OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0zNzctXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0zOTctXFx0ZnJlYy1cXHUwMDNlbGVuX2RhZGRyID0gWEZTX0ZTQl9UT19CQih4Zy1cXHUwMDNleGdfbW91bnQsIGJsb2NrY291bnQpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzozOTg6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIGZyZWMpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zOTktfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTQwMj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjQwMzp4ZnNfZ2V0ZnNtYXBfcm1hcGJ0X2hlbHBlcihcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDA0LVxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0XFx0KmN1cixcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy00MTMtXFx0fTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDE0OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvID0gcHJpdjtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDE1LVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo0MTY6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9ncm91cF9oZWxwZXIoaW5mbywgY3VyLVxcdTAwM2ViY190cCwgY3VyLVxcdTAwM2ViY19ncm91cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDE3LVxcdFxcdFxcdHJlYy1cXHUwMDNlcm1fc3RhcnRibG9jaywgcmVjLVxcdTAwM2VybV9ibG9ja2NvdW50LCBcXHUwMDI2ZnJlYyk7XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9NDIxPVNUQVRJQyBpbnRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDIyOnhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0X2hlbHBlcihcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDIzLVxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0XFx0KmN1cixcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy00MzAtXFx0fTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDMxOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvID0gcHJpdjtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDMyLVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo0MzM6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9ncm91cF9oZWxwZXIoaW5mbywgY3VyLVxcdTAwM2ViY190cCwgY3VyLVxcdTAwM2ViY19ncm91cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDM0LVxcdFxcdFxcdHJlYy1cXHUwMDNlYXJfc3RhcnRibG9jaywgcmVjLVxcdTAwM2Vhcl9ibG9ja2NvdW50LCBcXHUwMDI2ZnJlYyk7XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9NDM4PXN0YXRpYyB2b2lkXFxuZnMveGZzL3hmc19mc21hcC5jOjQzOTp4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXFxuZnMveGZzL3hmc19mc21hcC5jLTQ0MC1cXHRzdHJ1Y3QgeGZzX3JtYXBfaXJlY1xcdCppcmVjLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTQ2Nj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjQ2NzpfX3hmc19nZXRmc21hcF9kYXRhZGV2KFxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NjgtXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDY5LVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqa2V5cyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDcwOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NzEtXFx0aW50XFx0XFx0XFx0XFx0KCpxdWVyeV9mbikoc3RydWN0IHhmc190cmFucyAqLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo0NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyAqLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnNfYnRyZWVfY3VyICoqLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTUwMS1cXHRpbmZvLVxcdTAwM2Vsb3cucm1fYmxvY2tjb3VudCA9IFhGU19CQl9UT19GU0JUKG1wLCBrZXlzWzBdLmZtcl9sZW5ndGgpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo1MDI6XFx0eGZzX2dldGZzbWFwX3NldF9pcmVjX2ZsYWdzKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb3csIFxcdTAwMjZrZXlzWzBdKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNTAzLVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTU0My1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NTQ0OlxcdFxcdFxcdHhmc19nZXRmc21hcF9zZXRfaXJlY19mbGFncyhcXHUwMDI2aW5mby1cXHUwMDNlaGlnaCwgXFx1MDAyNmtleXNbMV0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy01NDUtXFx0XFx0fVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTYwNz1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjYwODp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnRfcXVlcnkoXFxuZnMveGZzL3hmc19mc21hcC5jLTYwOS1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MTA6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8sXFxuZnMveGZzL3hmc19mc21hcC5jLTYxMS1cXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdFxcdCoqY3VycHAsXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjE1LVxcdGlmIChpbmZvLVxcdTAwM2VsYXN0KVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MTY6XFx0XFx0cmV0dXJuIHhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyKCpjdXJwcCwgXFx1MDAyNmluZm8tXFx1MDAzZWhpZ2gsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02MTctXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjIxLVxcdHJldHVybiB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgqY3VycHAsIFxcdTAwMjZpbmZvLVxcdTAwM2Vsb3csIFxcdTAwMjZpbmZvLVxcdTAwM2VoaWdoLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MjI6XFx0XFx0XFx0eGZzX2dldGZzbWFwX3JtYXBidF9oZWxwZXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02MjMtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTYyNj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjYyNzp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnQoXFxuZnMveGZzL3hmc19mc21hcC5jLTYyOC1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy02MjktXFx0Y29uc3Qgc3RydWN0IHhmc19mc21hcFxcdFxcdCprZXlzLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzA6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8pXFxuZnMveGZzL3hmc19mc21hcC5jLTYzMS17XFxuZnMveGZzL3hmc19mc21hcC5jLTYzMi1cXHRpbmZvLVxcdTAwM2VtaXNzaW5nX293bmVyID0gWEZTX0ZNUl9PV05fRlJFRTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjMzOlxcdHJldHVybiBfX3hmc19nZXRmc21hcF9kYXRhZGV2KHRwLCBrZXlzLCBpbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzQ6XFx0XFx0XFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfcm1hcGJ0X3F1ZXJ5LCBOVUxMKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjM1LX1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz02Mzg9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2Mzk6eGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfcXVlcnkoXFxuZnMveGZzL3hmc19mc21hcC5jLTY0MC1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NDE6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8sXFxuZnMveGZzL3hmc19mc21hcC5jLTY0Mi1cXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdFxcdCoqY3VycHAsXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjQ4LVxcdGlmIChpbmZvLVxcdTAwM2VsYXN0KVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NDk6XFx0XFx0cmV0dXJuIHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0X2hlbHBlcigqY3VycHAsIFxcdTAwMjZrZXlbMV0sIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTAtXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjU2LVxcdHJldHVybiB4ZnNfYWxsb2NfcXVlcnlfcmFuZ2UoKmN1cnBwLCBrZXksIFxcdTAwMjZrZXlbMV0sXFxuZnMveGZzL3hmc19mc21hcC5jOjY1NzpcXHRcXHRcXHR4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idF9oZWxwZXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTgtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTY2MT1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjY2Mjp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjYzLVxcdHN0cnVjdCB4ZnNfdHJhbnNcXHRcXHQqdHAsXFxuZnMveGZzL3hmc19mc21hcC5jLTY2NC1cXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXFx0XFx0KmtleXMsXFxuZnMveGZzL3hmc19mc21hcC5jOjY2NTpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbylcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjY2LXtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzAtXFx0aW5mby1cXHUwMDNlbWlzc2luZ19vd25lciA9IFhGU19GTVJfT1dOX1VOS05PV047XFxuZnMveGZzL3hmc19mc21hcC5jOjY3MTpcXHRyZXR1cm4gX194ZnNfZ2V0ZnNtYXBfZGF0YWRldih0cCwga2V5cywgaW5mbyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjcyOlxcdFxcdFxcdHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0X3F1ZXJ5LCBcXHUwMDI2YWtleXNbMF0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzMtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTY3Nj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjY3Nzp4ZnNfZ2V0ZnNtYXBfbG9nZGV2KFxcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzgtXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjc5LVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqa2V5cyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjgwOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy02ODEte1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTcwOS1cXHRmcmVjLmxlbl9kYWRkciA9IFhGU19GU0JfVE9fQkIobXAsIG1wLVxcdTAwM2VtX3NiLnNiX2xvZ2Jsb2Nrcyk7XFxuZnMveGZzL3hmc19mc21hcC5jOjcxMDpcXHRyZXR1cm4geGZzX2dldGZzbWFwX2hlbHBlcih0cCwgaW5mbywgXFx1MDAyNmZyZWMpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy03MTEtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTcxNT1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjcxNjp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcnRiaXRtYXBfaGVscGVyKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy03MTctXFx0c3RydWN0IHhmc19ydGdyb3VwXFx0XFx0KnJ0ZyxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy03MjUtXFx0c3RydWN0IHhmc19tb3VudFxcdFxcdCptcCA9IHJ0Z19tb3VudChydGcpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MjY6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8gPSBwcml2O1xcbmZzL3hmcy94ZnNfZnNtYXAuYy03MjctXFx0eGZzX3J0YmxvY2tfdFxcdFxcdFxcdHN0YXJ0X3J0YiA9XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzQ2LVxcdGZyZWMubGVuX2RhZGRyID0gWEZTX0ZTQl9UT19CQihtcCwgcnRiY291bnQpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo3NDc6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIFxcdTAwMjZmcmVjKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzQ4LX1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz03NTE9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo3NTI6eGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTMtXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzU0LVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqa2V5cyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NzU1OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTYte1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTc5Ny1cXHRcXHRlcnJvciA9IHhmc19ydGFsbG9jX3F1ZXJ5X3JhbmdlKHJ0ZywgdHAsIHN0YXJ0X3J0eCwgZW5kX3J0eCxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6Nzk4OlxcdFxcdFxcdFxcdHhmc19nZXRmc21hcF9ydGRldl9ydGJpdG1hcF9oZWxwZXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy03OTktXFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTgxMy1cXHRcXHRcXHRpbmZvLVxcdTAwM2VsYXN0ID0gdHJ1ZTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODE0OlxcdFxcdFxcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwX2hlbHBlcihydGcsIHRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy04MTUtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmFoaWdoLCBpbmZvKTtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz04Mzg9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo4Mzk6eGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9oZWxwZXIoXFxuZnMveGZzL3hmc19mc21hcC5jLTg0MC1cXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdFxcdCpjdXIsXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtODQ5LVxcdH07XFxuZnMveGZzL3hmc19mc21hcC5jOjg1MDpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbyA9IHByaXY7XFxuZnMveGZzL3hmc19mc21hcC5jLTg1MS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODUyOlxcdHJldHVybiB4ZnNfZ2V0ZnNtYXBfZ3JvdXBfaGVscGVyKGluZm8sIGN1ci1cXHUwMDNlYmNfdHAsIGN1ci1cXHUwMDNlYmNfZ3JvdXAsXFxuZnMveGZzL3hmc19mc21hcC5jLTg1My1cXHRcXHRcXHRyZWMtXFx1MDAzZXJtX3N0YXJ0YmxvY2ssIHJlYy1cXHUwMDNlcm1fYmxvY2tjb3VudCwgXFx1MDAyNmZyZWMpO1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTg1Nz1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjg1ODp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcm1hcGJ0X3F1ZXJ5KFxcbmZzL3hmcy94ZnNfZnNtYXAuYy04NTktXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODYwOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy04NjEtXFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHRcXHQqKmN1cnBwKVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTg2OC1cXHRyZXR1cm4geGZzX3JtYXBfcXVlcnlfcmFuZ2UoKmN1cnBwLCBcXHUwMDI2aW5mby1cXHUwMDNlbG93LCBcXHUwMDI2aW5mby1cXHUwMDNlaGlnaCxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODY5OlxcdFxcdFxcdHhmc19nZXRmc21hcF9ydGRldl9ybWFwYnRfaGVscGVyLCBpbmZvKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtODcwLX1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz04NzM9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo4NzQ6eGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtODc1LVxcdHN0cnVjdCB4ZnNfdHJhbnNcXHRcXHQqdHAsXFxuZnMveGZzL3hmc19mc21hcC5jLTg3Ni1cXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXFx0XFx0KmtleXMsXFxuZnMveGZzL3hmc19mc21hcC5jOjg3NzpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbylcXG5mcy94ZnMveGZzX2ZzbWFwLmMtODc4LXtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy05MTUtXFx0XFx0aWYgKGtleTAuZm1yX3BoeXNpY2FsIFxcdTAwM2MgcnRzdGFydF9kYWRkcikge1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo5MTY6XFx0XFx0XFx0ZXJyb3IgPSB4ZnNfZ2V0ZnNtYXBfaGVscGVyKHRwLCBpbmZvLCBcXHUwMDI2ZnJlYyk7XFxuZnMveGZzL3hmc19mc21hcC5jLTkxNy1cXHRcXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtOTQyLVxcdGluZm8tXFx1MDAzZWxvdy5ybV9ibG9ja2NvdW50ID0gWEZTX0JCX1RPX0ZTQlQobXAsIGtleTAuZm1yX2xlbmd0aCk7XFxuZnMveGZzL3hmc19mc21hcC5jOjk0MzpcXHR4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXFx1MDAyNmluZm8tXFx1MDAzZWxvdywgXFx1MDAyNmtleTApO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy05NDQtXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtOTg0LVxcdFxcdFxcdFxcdGJyZWFrO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo5ODU6XFx0XFx0XFx0eGZzX2dldGZzbWFwX3NldF9pcmVjX2ZsYWdzKFxcdTAwMjZpbmZvLVxcdTAwM2VoaWdoLCBcXHUwMDI2a2V5c1sxXSk7XFxuZnMveGZzL3hmc19mc21hcC5jLTk4Ni1cXHRcXHR9XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTAwMC1cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTAwMTpcXHRcXHRlcnJvciA9IHhmc19nZXRmc21hcF9ydGRldl9ybWFwYnRfcXVlcnkodHAsIGluZm8sIFxcdTAwMjZidF9jdXIpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDAyLVxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDE4LVxcdFxcdFxcdGluZm8tXFx1MDAzZWxhc3QgPSB0cnVlO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDE5OlxcdFxcdFxcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9oZWxwZXIoYnRfY3VyLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDIwLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpbmZvLVxcdTAwM2VoaWdoLCBpbmZvKTtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xMDQ0PXN0YXRpYyB1aW50MzJfdFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDQ1Onhmc19nZXRmc21hcF9kZXZpY2UoXFxuZnMveGZzL3hmc19mc21hcC5jLTEwNDYtXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xMDY3PVNUQVRJQyBib29sXFxuZnMveGZzL3hmc19mc21hcC5jOjEwNjg6eGZzX2dldGZzbWFwX2lzX3ZhbGlkX2RldmljZShcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA2OS1cXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEwNzMtXFx0XFx0Zm0tXFx1MDAzZWZtcl9kZXZpY2UgPT0gVUlOVF9NQVggfHxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA3NDpcXHRcXHRmbS1cXHUwMDNlZm1yX2RldmljZSA9PSB4ZnNfZ2V0ZnNtYXBfZGV2aWNlKG1wLCBYRlNfREVWX0RBVEEpIHx8XFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzU6XFx0XFx0Zm0tXFx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9MT0cpIHx8XFxuZnMveGZzL3hmc19mc21hcC5jLTEwNzYtXFx0XFx0KG1wLVxcdTAwM2VtX3J0ZGV2X3RhcmdwIFxcdTAwMjZcXHUwMDI2XFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzc6XFx0XFx0IGZtLVxcdTAwM2VmbXJfZGV2aWNlID09IHhmc19nZXRmc21hcF9kZXZpY2UobXAsIFhGU19ERVZfUlQpKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA3OC19XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9MTA4MT1TVEFUSUMgYm9vbFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDgyOnhmc19nZXRmc21hcF9jaGVja19rZXlzKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDgzLVxcdHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqbG93X2tleSxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTQ1LSAqXFx0XFx0XFx0XFx0ICAgYnVtcGVkIHVwIGJ5IGZtcl9sZW5ndGguXFxuZnMveGZzL3hmc19mc21hcC5jOjExNDY6ICogeGZzX2dldGZzbWFwX2luZm8ubmV4dF9kYWRkclxcdC0tIG5leHQgZGlzayBhZGRyIHdlIGV4cGVjdCB0byBzZWU7IHRoaXNcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0Ny0gKlxcdFxcdFxcdFxcdCAgIGlzIGhvdyB3ZSBkZXRlY3QgZ2FwcyBpbiB0aGUgZnNtYXBcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0OC1cXHRcXHRcXHRcXHQgICByZWNvcmRzIGFuZCByZXBvcnQgdGhlbS5cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE0OTogKiB4ZnNfZ2V0ZnNtYXBfaW5mby5sb3cvaGlnaFxcdC0tIHBlci1BRyBsb3cvaGlnaCBrZXlzIGNvbXB1dGVkIGZyb21cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE1MC0gKlxcdFxcdFxcdFxcdCAgIGRrZXlzOyB1c2VkIHRvIHF1ZXJ5IHRoZSBtZXRhZGF0YS5cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xMTUyPVNUQVRJQyBpbnRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE1Mzp4ZnNfZ2V0ZnNtYXAoXFxuZnMveGZzL3hmc19mc21hcC5jLTExNTQtXFx0c3RydWN0IHhmc19tb3VudFxcdFxcdCptcCxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTU5LVxcdHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHRka2V5c1syXTtcXHQvKiBwZXItZGV2IGtleXMgKi9cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE2MDpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2RldlxcdFxcdGhhbmRsZXJzW1hGU19HRVRGU01BUF9ERVZTXTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE2MTpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHRpbmZvID0ge1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTYyLVxcdFxcdC5mc21hcF9yZWNzXFx0XFx0PSBmc21hcF9yZWNzLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTExNzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMveGZzL3hmc19mc21hcC5jOjExNzE6XFx0aWYgKCF4ZnNfZ2V0ZnNtYXBfaXNfdmFsaWRfZGV2aWNlKG1wLCBcXHUwMDI2aGVhZC1cXHUwMDNlZm1oX2tleXNbMF0pIHx8XFxuZnMveGZzL3hmc19mc21hcC5jOjExNzI6XFx0ICAgICF4ZnNfZ2V0ZnNtYXBfaXNfdmFsaWRfZGV2aWNlKG1wLCBcXHUwMDI2aGVhZC1cXHUwMDNlZm1oX2tleXNbMV0pKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTczLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTc0OlxcdGlmICgheGZzX2dldGZzbWFwX2NoZWNrX2tleXMoXFx1MDAyNmhlYWQtXFx1MDAzZWZtaF9rZXlzWzBdLCBcXHUwMDI2aGVhZC1cXHUwMDNlZm1oX2tleXNbMV0pKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTc1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTExODItXFx0aGFuZGxlcnNbMF0ubnJfc2VjdG9ycyA9IFhGU19GU0JfVE9fQkIobXAsIG1wLVxcdTAwM2VtX3NiLnNiX2RibG9ja3MpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTgzOlxcdGhhbmRsZXJzWzBdLmRldiA9IHhmc19nZXRmc21hcF9kZXZpY2UobXAsIFhGU19ERVZfREFUQSk7XFxuZnMveGZzL3hmc19mc21hcC5jLTExODQtXFx0aWYgKHVzZV9ybWFwKVxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTg1OlxcdFxcdGhhbmRsZXJzWzBdLmZuID0geGZzX2dldGZzbWFwX2RhdGFkZXZfcm1hcGJ0O1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTg2LVxcdGVsc2VcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE4NzpcXHRcXHRoYW5kbGVyc1swXS5mbiA9IHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0O1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTg4LVxcdGlmIChtcC1cXHUwMDNlbV9sb2dkZXZfdGFyZ3AgIT0gbXAtXFx1MDAzZW1fZGRldl90YXJncCkge1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTExOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1wLVxcdTAwM2VtX3NiLnNiX2xvZ2Jsb2Nrcyk7XFxuZnMveGZzL3hmc19mc21hcC5jOjExOTE6XFx0XFx0aGFuZGxlcnNbMV0uZGV2ID0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9MT0cpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTkyOlxcdFxcdGhhbmRsZXJzWzFdLmZuID0geGZzX2dldGZzbWFwX2xvZ2RldjtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE5My1cXHR9XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTIwMC1cXHRcXHRoYW5kbGVyc1syXS5ucl9zZWN0b3JzID0gWEZTX0ZTQl9UT19CQihtcCwgbXAtXFx1MDAzZW1fc2Iuc2JfcmJsb2Nrcyk7XFxuZnMveGZzL3hmc19mc21hcC5jOjEyMDE6XFx0XFx0aGFuZGxlcnNbMl0uZGV2ID0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9SVCk7XFxuZnMveGZzL3hmc19mc21hcC5jLTEyMDItXFx0XFx0aWYgKHVzZV9ybWFwKVxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMjAzOlxcdFxcdFxcdGhhbmRsZXJzWzJdLmZuID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidDtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTIwNC1cXHRcXHRlbHNlXFxuZnMveGZzL3hmc19mc21hcC5jOjEyMDU6XFx0XFx0XFx0aGFuZGxlcnNbMl0uZm4gPSB4ZnNfZ2V0ZnNtYXBfcnRkZXZfcnRiaXRtYXA7XFxuZnMveGZzL3hmc19mc21hcC5jLTEyMDYtXFx0fVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEyMDgtXFxuZnMveGZzL3hmc19mc21hcC5jOjEyMDk6XFx0eGZzX3NvcnQoaGFuZGxlcnMsIFhGU19HRVRGU01BUF9ERVZTLCBzaXplb2Yoc3RydWN0IHhmc19nZXRmc21hcF9kZXYpLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMjEwOlxcdFxcdFxcdHhmc19nZXRmc21hcF9kZXZfY29tcGFyZSk7XFxuZnMveGZzL3hmc19mc21hcC5jLTEyMTEtXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9MTMwMD14ZnNfaW9jX2dldGZzbWFwKFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEzNDAtXFxuZnMveGZzL3hmc19mc21hcC5jOjEzNDE6XFx0dHJhY2VfeGZzX2dldGZzbWFwX2xvd19rZXkoaXAtXFx1MDAzZWlfbW91bnQsIFxcdTAwMjZ4aGVhZC5mbWhfa2V5c1swXSk7XFxuZnMveGZzL3hmc19mc21hcC5jOjEzNDI6XFx0dHJhY2VfeGZzX2dldGZzbWFwX2hpZ2hfa2V5KGlwLVxcdTAwM2VpX21vdW50LCBcXHUwMDI2eGhlYWQuZm1oX2tleXNbMV0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzQzLVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEzNTQtXFx0XFx0LyogUnVuIHF1ZXJ5LCByZWNvcmQgaG93IG1hbnkgZW50cmllcyB3ZSBnb3QuICovXFxuZnMveGZzL3hmc19mc21hcC5jOjEzNTU6XFx0XFx0ZXJyb3IgPSB4ZnNfZ2V0ZnNtYXAoaXAtXFx1MDAzZWlfbW91bnQsIFxcdTAwMjZ4aGVhZCwgcmVjcyk7XFxuZnMveGZzL3hmc19mc21hcC5jLTEzNTYtXFx0XFx0c3dpdGNoIChlcnJvcikge1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEzOTctXFx0XFx0eGZzX2ZzbWFwX3RvX2ludGVybmFsKFxcdTAwMjZ4aGVhZC5mbWhfa2V5c1swXSwgbGFzdF9yZWMpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMzk4OlxcdFxcdHRyYWNlX3hmc19nZXRmc21hcF9sb3dfa2V5KGlwLVxcdTAwM2VpX21vdW50LCBcXHUwMDI2eGhlYWQuZm1oX2tleXNbMF0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzk5LVxcdH0gd2hpbGUgKCFkb25lIFxcdTAwMjZcXHUwMDI2IGhlYWQuZm1oX2VudHJpZXMgXFx1MDAzYyBoZWFkLmZtaF9jb3VudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjI4LjM1MTEyMjEzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNDg0MzI3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgWEZTIEZpbGVzeXN0ZW0gTWFwcGluZyBJT0NUTCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gYHhmc19pb2NfZ2V0ZnNtYXBgLiBUaGF0J3MgdGhlIGNvcmUgaW9jdGwgaGFuZGxlciwgdGhlIG9uZSB0aGF0J3MgZ29pbmcgdG8gaW50ZXJmYWNlIHdpdGggdGhlIHVzZXIgc3BhY2UsIGFuZCBzcGVjaWZpY2FsbHksIGl0IGNhbGxzIGB4ZnNfZ2V0ZnNtYXBgIGZvciB0aGUgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBzb2xpZCB0YXJnZXQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBrbm93aW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBtYXAgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3csIHRvIHRyYWNlIHRoaXMsIEknbGwgaGVhZCBvdmVyIHRvIGBmcy94ZnMveGZzX2lvY3RsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBzZXR1cCBmb3IgdGhlIGB4ZnNfaW9jX2dldGZzbWFwYCBpb2N0bCB3aWxsIGJlIG5lYXJieSwgYWxvbmcgd2l0aCB0aGUgb3RoZXIgaW9jdGxzIHRoYXQgWEZTIGhhbmRsZXMuIFRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9uIGluIHRoaXMgZmlsZSB3aWxsIGJlIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGJhc2VkIG9uIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIzOjUwLjgzNTQ1MTkzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1OTE4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMveGZzX2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb2N0bC5jPTYzND1zdGF0aWMgc3RydWN0IHhmc190cmFucyAqXFxuZnMveGZzL3hmc19pb2N0bC5jOjYzNTp4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnMoXFxuZnMveGZzL3hmc19pb2N0bC5jLTYzNi1cXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwLFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTc1MD14ZnNfZmlsZWF0dHJfc2V0KFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jLTgwNi1cXG5mcy94ZnMveGZzX2lvY3RsLmM6ODA3OlxcdHRwID0geGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zKGlwLCBwZHFwKTtcXG5mcy94ZnMveGZzX2lvY3RsLmMtODA4LVxcdGlmIChJU19FUlIodHApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIzOjUxLjE5MTM3NTcwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE5MzQ1NDc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQncyBnb2luZyBvbjpcblxuKipYRlMgQXR0cmlidXRlIFNldHRpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHhmc19maWxlYXR0cl9zZXRgIGFuZCBpbW1lZGlhdGVseSBrbm93IGl0J3MgdGhlIFhGUyBpbXBsZW1lbnRhdGlvbiBmb3Igc2V0dGluZyBmaWxlIGF0dHJpYnV0ZXMuIFRoZSBrZXkgaXMgdGhhdCBpdCdzIGNhbGxpbmcgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2AsIHdoaWNoIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBpb2N0bC1iYXNlZCBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIHRoYXQncyBtYW5hZ2luZyB0cmFuc2FjdGlvbnMuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoaXMgbWlnaHQgYmUgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb3Igc29tZXRoaW5nIGJleW9uZCBiYXNpYyBwZXJtaXNzaW9ucy90aW1lc3RhbXBzLCBidXQgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gemVybyBpbiBvbiBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgYW5kIGNvbmZpcm0gd2hlcmUgaXQgcmVzaWRlcy4gVGhlIGNvZGUgcGF0aCBsb29rcyBsaWtlIGl0IGxpa2VseSBoYW5kbGVzIHRoZSBub24tc2l6ZSBhc3BlY3RzIG9mIHRoZSBmaWxlIGF0dHJpYnV0ZSB1cGRhdGUsIHNvLCBJJ20gZ29pbmcgdG8gbG9vayBpbiBgZnMveGZzL3hmc19pb3BzLmNgIGFuZCB0YWtlIGEgbG9vay4gVGhpcyBtaWdodCBiZSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgYXR0cmlidXRlIGNoYW5nZSBoYXBwZW5zLCBvciBhdCBsZWFzdCB3aGVyZSB0aGUgZGV0YWlscyBvZiBpdCBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDowMy4zODQ4MzI4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDIzMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmc19zZXRhdHRyX25vbnNpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMveGZzL3hmc19pb3BzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb3BzLmM9Nzc5PXN0YXRpYyBpbnRcXG5mcy94ZnMveGZzX2lvcHMuYzo3ODA6eGZzX3NldGF0dHJfbm9uc2l6ZShcXG5mcy94ZnMveGZzX2lvcHMuYy03ODEtXFx0c3RydWN0IG1udF9pZG1hcFxcdCppZG1hcCxcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTkwNz14ZnNfdm5fc2V0YXR0cl9zaXplKFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtOTQ1LVxcdFxcdGlhdHRyLVxcdTAwM2VpYV92YWxpZCBcXHUwMDI2PSB+QVRUUl9TSVpFO1xcbmZzL3hmcy94ZnNfaW9wcy5jOjk0NjpcXHRcXHRyZXR1cm4geGZzX3NldGF0dHJfbm9uc2l6ZShpZG1hcCwgZGVudHJ5LCBpcCwgaWF0dHIpO1xcbmZzL3hmcy94ZnNfaW9wcy5jLTk0Ny1cXHR9XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMTM0PXhmc192bl9zZXRhdHRyKFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtMTE2MS1cXHRcXHRpZiAoIWVycm9yKVxcbmZzL3hmcy94ZnNfaW9wcy5jOjExNjI6XFx0XFx0XFx0ZXJyb3IgPSB4ZnNfc2V0YXR0cl9ub25zaXplKGlkbWFwLCBkZW50cnksIGlwLCBpYXR0cik7XFxuZnMveGZzL3hmc19pb3BzLmMtMTE2My1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjAzLjQ1MTg2MzE1M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU2NDYzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIFhGUyBBdHRyaWJ1dGUgU2V0dGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgWEZTIGhhbmRsZXMgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgaXQgbG9va3MgbGlrZSBgeGZzX3ZuX3NldGF0dHJgIGFuZCBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBhcyB0aGV5IGJvdGggdWx0aW1hdGVseSBjYWxsIGB4ZnNfc2V0YXR0cl9ub25zaXplYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuXG5cblNvLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBzY3J1dGluaXplIGFyZTogYGlnbm9yZV9oYXJkbGltaXRgIChvciBtYXliZSBgZHF1b3RfYWRkX2lub2Rlc2Agb3IgYGRxdW90X2FkZF9zcGFjZWAgYXMgdGhleSByZWxhdGUgdG8gcXVvdGFzKSwgYHhmc19pb2NfZ2V0ZnNtYXBgLCBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCwgb2YgY291cnNlLCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBgeGZzX3ZuX3NldGF0dHJgLlxuXG5Ib2xkIG9uLi4uIGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uIHdpdGhpbiBgZnMvcXVvdGEvZHF1b3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBgeGZzX2lvY19nZXRmc21hcGAgZGVmaW5pdGVseSBzZWVtcyBpbnRlcmVzdGluZywgYXMgZG9lcyBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCBgeGZzX3ZuX3NldGF0dHJgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgaWdub3JlX2hhcmRsaW1pdGAgaXMgaW5kZWVkIHN0YXRpYy4gT2theSwgY29uZmlybWVkLiBOb3csIEkgbmVlZCB0byBjaGVjayBpZiBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgIGFyZSBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZS4gVGltZSB0byBjaGVjayBgZnMvcXVvdGEvZHF1b3QuY2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjQ6MDguODA4MzI5MjI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY1OTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcXVvdF9hZGRfaW5vZGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMzA3PXN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE1LVxcbmZzL3F1b3RhL2RxdW90LmM6MTMxNjpzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZHF1b3Rfd2FybiAqd2FybilcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTc3Nz1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTc5NS1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9xdW90YS9kcXVvdC5jOjE3OTY6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2RlcyhkcXVvdCwgMSwgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzk3LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MjAwOT1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjA2My1cXHRcXHRcXHRcXHRcXHUwMDI2ZHF1b3Rfc3JjdSwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkcV9kYXRhX2xvY2spKTtcXG5mcy9xdW90YS9kcXVvdC5jOjIwNjQ6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCBpbm9kZV91c2FnZSxcXG5mcy9xdW90YS9kcXVvdC5jLTIwNjUtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3YXJuX3RvW2NudF0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDowOC44Njc5OTQzNzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0ODQwODk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRHF1b3QgQWxsb2NhdGlvbiBhbmQgVHJhbnNmZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgZHF1b3RzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGFsbG9jYXRpb24gYW5kIHRyYW5zZmVyIHByb2Nlc3Nlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRxdW90X2FsbG9jX2lub2RlYCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgIGJvdGggY2FsbCBgZHF1b3RfYWRkX2lub2Rlc2AuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiDigJMgdGhleSdyZSB1c2luZyB0aGUgc2FtZSBjb3JlIGZ1bmN0aW9uIGZvciBhZGRpbmcgaW5vZGVzLiBgZHF1b3RfYWxsb2NfaW5vZGVgIGlzIGV4cG9ydGVkLCBzbyBpdCdzIHByb2JhYmx5IGdvdCBleHRlcm5hbCB1c2UsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGRxdW90X2FkZF9pbm9kZXNgIGlzIGRvaW5nLCBzbyB0aGF0IHdpbGwgbWFrZSBtZSBjaGVjayBgZHF1b3RfYWRkX3NwYWNlYC4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggc3BhY2UgaXMgYmVpbmcgYWRkZWQgZm9yIHdoaWNoIGlub2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjExLjgxNjQwNTYzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3NTU4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHF1b3RfYWRkX3NwYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMzE2PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcyxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTM2MC1cXG5mcy9xdW90YS9kcXVvdC5jOjEzNjE6c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcXG5mcy9xdW90YS9kcXVvdC5jLTEzNjItXFx0XFx0XFx0ICAgcXNpemVfdCByc3Zfc3BhY2UsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTcwNj1pbnQgX19kcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IGZsYWdzKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xNzM1LVxcdFxcdGlmIChyZXNlcnZlKSB7XFxuZnMvcXVvdGEvZHF1b3QuYzoxNzM2OlxcdFxcdFxcdHJldCA9IGRxdW90X2FkZF9zcGFjZShkcXVvdCwgMCwgbnVtYmVyLCBmbGFncywgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzM3LVxcdFxcdH0gZWxzZSB7XFxuZnMvcXVvdGEvZHF1b3QuYzoxNzM4OlxcdFxcdFxcdHJldCA9IGRxdW90X2FkZF9zcGFjZShkcXVvdCwgbnVtYmVyLCAwLCBmbGFncywgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzM5LVxcdFxcdH1cXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MjAwOT1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjA2Ny1cXHRcXHRcXHRnb3RvIG92ZXJfcXVvdGE7XFxuZnMvcXVvdGEvZHF1b3QuYzoyMDY4OlxcdFxcdHJldCA9IGRxdW90X2FkZF9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCBjdXJfc3BhY2UsIHJzdl9zcGFjZSxcXG5mcy9xdW90YS9kcXVvdC5jLTIwNjktXFx0XFx0XFx0XFx0ICAgICAgRFFVT1RfU1BBQ0VfV0FSTiwgXFx1MDAyNndhcm5fdG9bY250XSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjExLjg3NzE2NjYwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg3ODg5NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgWEZTIFF1b3RhIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSBgX19kcXVvdF9hbGxvY19zcGFjZWAgYW5kIGBfX2RxdW90X3RyYW5zZmVyYCBzaW5jZSB0aGV5IGNhbGwgYGRxdW90X2FkZF9zcGFjZWAsIGFuZCB0aGUgZm9ybWVyIGlzIGV4cG9ydGVkLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcy4gVGhlbiBJIGFsc28gY29uc2lkZXJlZCBgZHF1b3RfYWxsb2NfaW5vZGVgLiBCdXQsIGhhbmcgb24uLi4gdGhvc2UgYXJlIGxpa2VseSBleHRyZW1lbHkgaG90IHBhdGhzIGZvciBxdW90YSBvcGVyYXRpb25zLiBQZXJoYXBzIHNvbWV0aGluZyBsZXNzIGZyZXF1ZW50bHkgY2FsbGVkIHdvdWxkIGJlIG1vcmUgcmV2ZWFsaW5nIGluIHRlcm1zIG9mIHJlc291cmNlIGNvbnRlbnRpb24gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblNvLCBzaGlmdGluZyBnZWFycywgSSdtIHRoaW5raW5nIGB4ZnNfaW9jX2dldGZzbWFwYCwgYHhmc19maWxlYXR0cl9zZXRgLCBhbmQgYHhmc192bl9zZXRhdHRyYCBtaWdodCBiZSBiZXR0ZXIgdGFyZ2V0cy4gSSByZWNhbGwgYGlnbm9yZV9oYXJkbGltaXRgIGJlaW5nIGNhbGxlZCBmcm9tIGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgYGRxdW90X2FkZF9zcGFjZWAsIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIGR1cmluZyBhbGxvY2F0aW9uLCBub3QgYXQgdGhlIGBxdW90YWN0bGAgbGV2ZWwuIEl0J3MgdGhlIHN5c3RlbSBjYWxsLCBzbyB0aGUgb3RoZXIgbWlnaHQgYmUgYmV0dGVyIGZvY3VzZXMgZm9yIHRoaXMgYW5hbHlzaXMuXG5cblllcywgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIGFuIGlvY3RsIGhhbmRsZXIg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGB4ZnNfZmlsZWF0dHJfc2V0YCBhbmQgYHhmc192bl9zZXRhdHRyYCBhbHNvIHNlZW0gcHJvbWlzaW5nLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBRVU9UQWAgYW5kIGBYRlNfRlNgIGFyZSBlc3NlbnRpYWwuIEFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/XG5cbkhtbSwgYHhmc19oYXNfcm1hcGJ0KG1wKWAgaXMgdXNlZCBpbiBgeGZzX2dldGZzbWFwYC4gRG9lcyB0aGUgYFhGU19GU2AgY29uZmlndXJhdGlvbiBoYXZlIGFueSBkZXBlbmRlbmN5IG9uIFJtYXBidD8gTm8sIGl0J3MgYSBydW50aW1lIGZlYXR1cmUsIG5vdCBhIGNvbXBpbGUtdGltZSBkZXBlbmRlbmN5LCB0aGF0J3MgaW1wb3J0YW50LiBSZXZlcnNlIE1hcHBpbmcgQit0cmVlLlxuXG5BbHNvLCB3aGF0IGFib3V0IGBjYXBhYmxlX25vYXVkaXRgPyBUaGF0J3MgdXNlZCBpbiBzZWN1cml0eS9hdWRpdGluZyBjb250ZXh0cy4gTGV0J3MgY2hlY2sgYGtlcm5lbC9jYXBhYmlsaXR5LmNgIGZvciBgY2FwYWJsZV9ub2F1ZGl0YC4gSXQgc2VlbXMgdGhhdCdzIGFsd2F5cyBjb21waWxlZCBpbi4gT2theSwgc28gdGhhdCdzIG5vdCBhIGNvbmZpZyBvcHRpb24gY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjQ6MTguOTY1MDU4ODc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY1MDIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXBhYmxlX25vYXVkaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2NhcGFiaWxpdHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvY2FwYWJpbGl0eS5jPTM2ND1FWFBPUlRfU1lNQk9MKG5zX2NhcGFibGUpO1xcbi0tXFxua2VybmVsL2NhcGFiaWxpdHkuYy0zNjYtLyoqXFxua2VybmVsL2NhcGFiaWxpdHkuYzozNjc6ICogbnNfY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3IgY2FwYWJpbGl0eVxcbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzY4LSAqICh1bmF1ZGl0ZWQpIGluIGVmZmVjdFxcbi0tXFxua2VybmVsL2NhcGFiaWxpdHkuYy0zNzctICovXFxua2VybmVsL2NhcGFiaWxpdHkuYzozNzg6Ym9vbCBuc19jYXBhYmxlX25vYXVkaXQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcClcXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTM3OS17XFxuLS1cXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTM4MS19XFxua2VybmVsL2NhcGFiaWxpdHkuYzozODI6RVhQT1JUX1NZTUJPTChuc19jYXBhYmxlX25vYXVkaXQpO1xcbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzgzLVxcbi0tXFxua2VybmVsL2NhcGFiaWxpdHkuYz00MTc9RVhQT1JUX1NZTUJPTChjYXBhYmxlKTtcXG4tLVxcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDE5LS8qKlxcbmtlcm5lbC9jYXBhYmlsaXR5LmM6NDIwOiAqIGNhcGFibGVfbm9hdWRpdCAtIERldGVybWluZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIHN1cGVyaW9yXFxua2VybmVsL2NhcGFiaWxpdHkuYy00MjEtICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXFxuLS1cXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTQyOS0gKi9cXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQzMDpib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDMxLXtcXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQzMjpcXHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFxcdTAwMjZpbml0X3VzZXJfbnMsIGNhcCk7XFxua2VybmVsL2NhcGFiaWxpdHkuYy00MzMtfVxcbmtlcm5lbC9jYXBhYmlsaXR5LmM6NDM0OkVYUE9SVF9TWU1CT0woY2FwYWJsZV9ub2F1ZGl0KTtcXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTQzNS0jZW5kaWYgLyogQ09ORklHX01VTFRJVVNFUiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDoxOS4wMjc3MTQzNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5NTk3MjIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIEZpbGVzeXN0ZW0gRmVhdHVyZXMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBXZSdyZSBsb29raW5nIGF0IGZpbGVzeXN0ZW0gZmVhdHVyZXMsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBrbm93IHdlJ3JlIG1vc3QgbGlrZWx5IGRlYWxpbmcgd2l0aCBgQ09ORklHX01VTFRJVVNFUmAgaGVyZS4gQnV0IGhvbmVzdGx5LCB0aGF0J3MgbmVhcmx5IGFsd2F5cyBlbmFibGVkLCBzbyBpdCdzIHByb2JhYmx5IG5vdCB0aGUgY3JpdGljYWwgY29uZGl0aW9uYWwuIE15IG1haW4gZm9jdXMgaGFzIHRvIGJlIG9uIGBRVU9UQWAgYW5kIGBYRlNfRlNgLCB0aG9zZSBhcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGNvZGUgdG8gc2VlIGlmIHNvbWV0aGluZyBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgZnMveGZzL3hmc19mc21hcC5jYCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgY29tcGlsZSB0aW1lIGNoZWNrcyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIExldCdzIG1ha2Ugc3VyZSBpdOKAmXMgYmVoYXZpbmcgZXhhY3RseSBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDozMy45ODc0Mzk3MzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODc1MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmc19mc21hcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3hmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy94ZnMvTWFrZWZpbGU9NzE9eGZzLXlcXHRcXHRcXHRcXHQrPSB4ZnNfYW9wcy5vIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS04NS1cXHRcXHRcXHRcXHQgICB4ZnNfZmlsZXN0cmVhbS5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGU6ODY6XFx0XFx0XFx0XFx0ICAgeGZzX2ZzbWFwLm8gXFxcXFxcbmZzL3hmcy9NYWtlZmlsZS04Ny1cXHRcXHRcXHRcXHQgICB4ZnNfZnNvcHMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjM0LjA1NTMyMzQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDMwNTQ0NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBYRlMgSW50ZWdyYXRpb24gYW5kIFF1b3RhIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBYRlMgYW5kIGl0cyBpbnRlZ3JhdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgdGhlIFhGUyBmaWxlc3lzdGVtIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgd2hlbiBgQ09ORklHX1hGU19GU2AgaXMgZGVmaW5lZC4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgbWFrZXMgc2Vuc2UuIEJ1dCBpdCBhbHdheXMgbWFrZXMgbWUgcGF1c2UgYW5kIHRoaW5rIGFib3V0IHRoZSBvdGhlciBiaXRzLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcXVvdGEgaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBhcyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW1zLiBMZXQgbWUganVzdCB0YWtlIGEgcGVlayBhdCBgZnMvcXVvdGEvZHF1b3QuY2AgdG8gcmVtaW5kIG15c2VsZiBob3cgdGhhdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiwgZXNwZWNpYWxseSBpZiB0aGVyZSdzIGFueSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBiZWhhdmlvciBvciBvcHRpbWl6YXRpb25zIHRoYXQgZGVwZW5kIG9uIFhGUyBiZWluZyBidWlsdC1pbiB0aGlzIHdheS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRvIGJlIGF3YXJlIG9mP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjA0LjA4NTg3MTU2M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4OTcyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRxdW90Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZnMvcXVvdGEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUVVPVEEpXFx0XFx0Kz0gZHF1b3Qub1xcbmZzL3F1b3RhL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1FGTVRfVjEpXFx0XFx0Kz0gcXVvdGFfdjEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNTowNC40NjQ4NDkzMDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMDM4MzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBYRlMgUXVvdGEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBxdW90YXMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBYRlMgZmlsZXN5c3RlbS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBhbGwgY29udGluZ2VudCBvbiBgQ09ORklHX1FVT1RBYCBiZWluZyBlbmFibGVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgY29yZSBzd2l0Y2guXG5cbk5vdywgc3BlY2lmaWNhbGx5LCBpdCdzIHRpZWQgdG8gdGhlIGBRVU9UQWAgYW5kIGBYRlNfRlNgIGNvbmZpZ3VyYXRpb25zLiBJJ20gZm9jdXNpbmcgb24gYSBmZXcga2V5IHN5bWJvbHM6IGB4ZnNfaW9jX2dldGZzbWFwYCwgYHhmc19maWxlYXR0cl9zZXRgLCBhbmQgYHhmc192bl9zZXRhdHRyYC4gYHhmc192bl9zZXRhdHRyYCBpcyBwcmV0dHkgZ2VuZXJhbCwgaXQgaXMgWEZTJ3MgZ2VuZXJpYyBgc2V0YXR0cmAgaGFuZGxlciBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYGNobW9kYCwgYGNob3duYCwgYW5kIGB0cnVuY2F0ZWAsIHNvIGl0J3MgYSBob3QgcGF0aCwgYnV0IG5vdCBhIGh1Z2UgY29uY2Vybi4gYHhmc19maWxlYXR0cl9zZXRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCBgRlNfSU9DX1NFVEZMQUdTYCBhbmQgYEZTX0lPQ19GU1NFVFhBVFRSYCwgd2hpY2ggYXJlIGlvY3RsIGNvbW1hbmRzLiBgeGZzX2lvY19nZXRmc21hcGAgaXMgZm9yIGBGU19JT0NfR0VURlNNQVBgLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGltcG9ydGFudCByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkP1xuXG5MZXQncyBzZWUsIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGlzIGNhbGxlZCBieSBgeGZzX2ZpbGVhdHRyX3NldGAuIEFuZCBib3RoIGB4ZnNfdm5fc2V0YXR0cmAgYW5kIGB4ZnNfdm5fc2V0YXR0cl9zaXplYCBjYWxsIGB4ZnNfc2V0YXR0cl9ub25zaXplYC4gR29vZCB0byBrbm93IHRoZSBjYWxsIGNoYWlucy5cblxuQWxyaWdodCwgbm93IGxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgeGZzX2lvY19nZXRmc21hcGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY291bGQgaW1wYWN0IGhvdyBpdCdzIGxpbmtlZCBvciBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjEwLjk2NTIzNDY4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NTgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2lvY19nZXRmc21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMveGZzX2ZzbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19mc21hcC5jPTEyOTk9aW50XFxuZnMveGZzL3hmc19mc21hcC5jOjEzMDA6eGZzX2lvY19nZXRmc21hcChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTMwMS1cXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNToxMS4wMjk3OTg2ODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1NDE5NzY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cblJpZ2h0LCBpdCdzIG5vdCBhIGZpeGVkIGVudGl0eSB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoaW5ncyBhcmUgaW4gZmx1eCwgY29uc3RhbnRseSBjaGFuZ2luZy4gVGhhdCBzdGF0aWMgcGVyc3BlY3RpdmUgaXMgZGFuZ2Vyb3VzOyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIGR5bmFtaWMgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGtlcm5lbC5cblxuSSBuZWVkIHRvIGRpZyBpbjsgSSBuZWVkIHRvIGxvb2sgYXQgaG93IHdlJ3JlIHJlYWxseSBtYWtpbmcgYWRqdXN0bWVudHMuIExldCdzIHN0YXJ0IHdpdGggYHhmc19maWxlYXR0cl9zZXRgLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgaW50ZXJhY3Rpb24gcmVzaWRlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGNoYW5nZXMgYXJlIGhhbmRsZWQsIHdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSwgaG93IGVycm9yIGNvbmRpdGlvbnMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIGFueSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGF0IHRoZSBzeXN0ZW0gaXMgbm90IHN0YXRpYywgYW5kIGNoYW5nZXMgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHN0YXRlLCBJIG5lZWQgdG8gc2VlIGhvdyBgeGZzX2ZpbGVhdHRyX3NldGAgbWFuYWdlcyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjE2Ljc4Mzk5ODY4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNzQ5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2ZpbGVhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMveGZzX2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb2N0bC5jPTc0OT1pbnRcXG5mcy94ZnMveGZzX2lvY3RsLmM6NzUwOnhmc19maWxlYXR0cl9zZXQoXFxuZnMveGZzL3hmc19pb2N0bC5jLTc1MS1cXHRzdHJ1Y3QgbW50X2lkbWFwXFx0KmlkbWFwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNToxNi44NDgwNzc5MTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwNDUzNzMwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEeW5hbWljIFN5c3RlbSBCZWhhdmlvcioqXG5cbkFscmlnaHQsIHNvIGl0J3Mgbm90IGEgZml4ZWQsIGltbXV0YWJsZSB0aGluZy4gVGhpcyBzeXN0ZW0sIHRoaXMgYmVoYXZpb3IsIGl0J3MgKmR5bmFtaWMqLiBUaGF0J3MgdGhlIGtleS4gV2UgY2FuJ3QgdHJlYXQgaXQgbGlrZSBhIHNuYXBzaG90OyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vdmluZyBwYXJ0cy4gV2hlcmUncyB0aGUgY2hhbmdlIGhhcHBlbmluZz9cblxuTGV0J3MgZGlnIGluLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgaW5xdWlyeSwgbXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gaG93IGF0dHJpYnV0ZXMgYXJlIHNldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB3cml0ZXMgbWV0YWRhdGEuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYHhmc192bl9zZXRhdHRyYC4gVGhhdCdzIGxpa2VseSB0aGUgcmlnaHQgYXJlYSB0byBzdGFydCB3aXRoLCBnaXZlbiB0aGUgY2hhbmdlcyBiZWluZyBkZXNjcmliZWQuIEl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjI5Ljg5MzQ1Mjg0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxMTc0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX3ZuX3NldGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMveGZzL3hmc19pb3BzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb3BzLmM9OTA2PWludFxcbmZzL3hmcy94ZnNfaW9wcy5jOjkwNzp4ZnNfdm5fc2V0YXR0cl9zaXplKFxcbmZzL3hmcy94ZnNfaW9wcy5jLTkwOC1cXHRzdHJ1Y3QgbW50X2lkbWFwXFx0KmlkbWFwLFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmM9MTEzMz1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19pb3BzLmM6MTEzNDp4ZnNfdm5fc2V0YXR0cihcXG5mcy94ZnMveGZzX2lvcHMuYy0xMTM1LVxcdHN0cnVjdCBtbnRfaWRtYXBcXHQqaWRtYXAsXFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYy0xMTU0LVxcbmZzL3hmcy94ZnNfaW9wcy5jOjExNTU6XFx0XFx0ZXJyb3IgPSB4ZnNfdm5fc2V0YXR0cl9zaXplKGlkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy94ZnMveGZzX2lvcHMuYy0xMTU2LVxcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCk7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMjY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB4ZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyNjgtXFx0LmdldGF0dHJcXHRcXHQ9IHhmc192bl9nZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jOjEyNjk6XFx0LnNldGF0dHJcXHRcXHQ9IHhmc192bl9zZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyNzAtXFx0Lmxpc3R4YXR0clxcdFxcdD0geGZzX3ZuX2xpc3R4YXR0cixcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTEyNzg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyOTYtXFx0LmdldGF0dHJcXHRcXHQ9IHhmc192bl9nZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jOjEyOTc6XFx0LnNldGF0dHJcXHRcXHQ9IHhmc192bl9zZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyOTgtXFx0Lmxpc3R4YXR0clxcdFxcdD0geGZzX3ZuX2xpc3R4YXR0cixcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTEzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfY2lfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzMjQtXFx0LmdldGF0dHJcXHRcXHQ9IHhmc192bl9nZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jOjEzMjU6XFx0LnNldGF0dHJcXHRcXHQ9IHhmc192bl9zZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzMjYtXFx0Lmxpc3R4YXR0clxcdFxcdD0geGZzX3ZuX2xpc3R4YXR0cixcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTEzMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYy0xMzM2LVxcdC5nZXRhdHRyXFx0XFx0PSB4ZnNfdm5fZ2V0YXR0cixcXG5mcy94ZnMveGZzX2lvcHMuYzoxMzM3OlxcdC5zZXRhdHRyXFx0XFx0PSB4ZnNfdm5fc2V0YXR0cixcXG5mcy94ZnMveGZzX2lvcHMuYy0xMzM4LVxcdC5saXN0eGF0dHJcXHRcXHQ9IHhmc192bl9saXN0eGF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjI5Ljk2ODU3NzYzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUzNTkxNTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgVGFyZ2V0IFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIENhcGFiaWxpdHkgQ2hlY2sgQXVkaXQgTWl0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGB4ZnNfdm5fc2V0YXR0cmAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGtleSBwb2ludCB0byBzdGFydCB3aXRoLiBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBub24tc3RhdGljLiBXZSB3ZXJlIGNvbnNpZGVyaW5nIGB4ZnNfdm5fc2V0YXR0cl9zaXplYCBhcyBhIHJlcGxhY2VtZW50LCBidXQgdGhhdCdzIG9ubHkgZm9yIHNpemUgY2hhbmdlcy4gYHhmc19zZXRhdHRyX25vbnNpemVgIGhhbmRsZXMgdGhlIG5vbi1zaXplIGF0dHJpYnV0ZSBjaGFuZ2VzLCBhbmQgdGhhdCBvbmUsIHN1cnByaXNpbmdseSwgKmlzKiBzdGF0aWMgYnV0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBhY3R1YWxseSBtb2RpZmllZCBpbiB0aGUgcGF0Y2guIE5vdywgdGhlIGZ1enplciAqY2FuKiB0YXJnZXQgc3RhdGljIGZ1bmN0aW9ucywgaWYgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYnV0IGdlbmVyYWxseSBpdCdzIGJldHRlciB0byBwcm92aWRlIG5vbi1zdGF0aWMgc3ltYm9scy4gSG93ZXZlciwgU3l6a2FsbGVyICpjYW4qIGdldCBzdGF0aWMgZnVuY3Rpb25zLlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoICptb2RpZmllcyogYHhmc19zZXRhdHRyX25vbnNpemVgIGRpcmVjdGx5LiBUaGVyZWZvcmUsIHRoYXQgaXMgZXNzZW50aWFsLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIG90aGVyIHN0YXRpYyBmdW5jdGlvbnM6IGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgLCBgeGZzX2dldGZzbWFwYCwgYW5kIGBpZ25vcmVfaGFyZGxpbWl0YC4gU28sIEkgc3RhcnRlZCB3aXRoIHRoZSBzZXQgb2YgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9uczpcblxuKiAgIGBpZ25vcmVfaGFyZGxpbWl0YFxuKiAgIGB4ZnNfZ2V0ZnNtYXBgXG4qICAgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2BcbiogICBgeGZzX3NldGF0dHJfbm9uc2l6ZWBcblxuQnV0IHdhaXQsIGB4ZnNfZ2V0ZnNtYXBgIGlzIHN0YXRpYywgd2hpbGUgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIG5vbi1zdGF0aWMuIFNhbWUgZm9yIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGFuZCBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBhbmQgYHhmc192bl9zZXRhdHRyX3NpemVgLiBTbywgSSdsbCBwcm92aWRlIGJvdGggdGhlIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMgQU5EIHRoZWlyIG5vbi1zdGF0aWMgY2FsbGVyczpcblxuKiAgIGB4ZnNfaW9jX2dldGZzbWFwYFxuKiAgIGB4ZnNfZmlsZWF0dHJfc2V0YFxuKiAgIGB4ZnNfdm5fc2V0YXR0cl9zaXplYFxuKiAgIGBfX2RxdW90X2FsbG9jX3NwYWNlYFxuKiAgIGBkcXVvdF9hbGxvY19pbm9kZWBcbiogICBgX19kcXVvdF90cmFuc2ZlcmBcblxuSG93ZXZlciwgdGhlIG1haW4gY2FsbGVyIHRvIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBpcywgaW4gZmFjdCwgYHhmc192bl9zZXRhdHRyYCwgd2hpY2ggaXMgc3RhdGljLiBTbywgdGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gcHJvdmlkZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGVpciAqZGlyZWN0KiBjYWxsZXJzLCBsZWFkaW5nIHRvIHRoaXMgc2V0IG9mIHN5bWJvbHM6XG5cbiogICBgaWdub3JlX2hhcmRsaW1pdGBcbiogICBgeGZzX2dldGZzbWFwYFxuKiAgIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgXG4qICAgYHhmc19zZXRhdHRyX25vbnNpemVgXG4qICAgYHhmc19pb2NfZ2V0ZnNtYXBgXG4qICAgYHhmc19maWxlYXR0cl9zZXRgXG4qICAgYGRxdW90X2FkZF9pbm9kZXNgXG4qICAgYGRxdW90X2FkZF9zcGFjZWBcblxuVGhlbiwgcmVmaW5pbmcgZXZlbiBmdXJ0aGVyLCBJJ2xsIGZvY3VzIG9uIHRoZXNlOlxuXG4qICAgYHhmc19pb2NfZ2V0ZnNtYXBgXG4qICAgYHhmc19maWxlYXR0cl9zZXRgXG4qICAgYHhmc19zZXRhdHRyX25vbnNpemVgXG4qICAgYGRxdW90X2FkZF9pbm9kZXNgXG4qICAgYGRxdW90X2FkZF9zcGFjZWBcblxuVGhpcyBzaG91bGQgZ2l2ZSBnb29kIGNvdmVyYWdlLCBoaXR0aW5nIHRoZSBpb2N0bHMgYW5kIHF1b3RhIHBhdGhzIHRvdWNoZWQgYnkgdGhlIHBhdGNoLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhlIGNvcmUgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYGNhcGFibGVfbm9hdWRpdGAsIHJlcGxhY2luZyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCwgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBjYXBhYmlsaXR5IGNoZWNrcyB3aXRoaW4gcXVvdGEgZW5mb3JjZW1lbnQgYW5kIFhGUyBpb2N0bHMvc2V0YXR0ciBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlOiBgUVVPVEFgIGFuZCBgWEZTX0ZTYCwgd2hpY2ggYXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kaWZpZWQgZmlsZXMuIFllcywgdGhvc2UgYXJlIHN1ZmZpY2llbnQuIE9rYXksIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzIG5vdy4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NywiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjU6NTguNTA0NDk1NDM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5MDg1Njg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVVPVEFcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2NfZ2V0ZnNtYXBcIixcbiAgICBcInhmc19maWxlYXR0cl9zZXRcIixcbiAgICBcInhmc19zZXRhdHRyX25vbnNpemVcIixcbiAgICBcImRxdW90X2FkZF9pbm9kZXNcIixcbiAgICBcImRxdW90X2FkZF9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGNhcGFibGVfbm9hdWRpdGAgYW5kIHJlcGxhY2VzIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgIHdpdGggaXQgaW4gWEZTIGFuZCBxdW90YSBzdWJzeXN0ZW1zLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIGJ5IHNldHRpbmcgYFBGX1NVUEVSUFJJVmAgd2l0aG91dCBnZW5lcmF0aW5nIGF1ZGl0IG1lc3NhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY2FwYWJpbGl0eSBjaGVja3MgZHVyaW5nIHF1b3RhIGVuZm9yY2VtZW50IGFuZCBYRlMgaW9jdGxzL3NldGF0dHIgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRVU9UQVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2lvY19nZXRmc21hcFwiLFxuICAgIFwieGZzX2ZpbGVhdHRyX3NldFwiLFxuICAgIFwieGZzX3NldGF0dHJfbm9uc2l6ZVwiLFxuICAgIFwiZHF1b3RfYWRkX2lub2Rlc1wiLFxuICAgIFwiZHF1b3RfYWRkX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2FwYWJsZV9ub2F1ZGl0YCBhbmQgcmVwbGFjZXMgYGhhc19jYXBhYmlsaXR5X25vYXVkaXRgIGFuZCBgY2FwYWJsZWAgd2l0aCBpdCBpbiBYRlMgYW5kIHF1b3RhIHN1YnN5c3RlbXMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3IgYnkgc2V0dGluZyBgUEZfU1VQRVJQUklWYCB3aXRob3V0IGdlbmVyYXRpbmcgYXVkaXQgbWVzc2FnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjYXBhYmlsaXR5IGNoZWNrcyBkdXJpbmcgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIFhGUyBpb2N0bHMvc2V0YXR0ciBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 14:01:29 +0000 UTC FinishedAt: 2026-07-02 14:26:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "XFS_FS" ], "series_id": "2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_ioc_getfsmap", "xfs_fileattr_set", "xfs_setattr_nonsize", "dquot_add_inodes", "dquot_add_space" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1FVT1RBJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19pb2NfZ2V0ZnNtYXAmIzM0OywKICAgICYjMzQ7eGZzX2ZpbGVhdHRyX3NldCYjMzQ7LAogICAgJiMzNDt4ZnNfc2V0YXR0cl9ub25zaXplJiMzNDssCiAgICAmIzM0O2RxdW90X2FkZF9pbm9kZXMmIzM0OywKICAgICYjMzQ7ZHF1b3RfYWRkX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYGNhcGFibGVfbm9hdWRpdGAgYW5kIHJlcGxhY2VzIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgIHdpdGggaXQgaW4gWEZTIGFuZCBxdW90YSBzdWJzeXN0ZW1zLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIGJ5IHNldHRpbmcgYFBGX1NVUEVSUFJJVmAgd2l0aG91dCBnZW5lcmF0aW5nIGF1ZGl0IG1lc3NhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY2FwYWJpbGl0eSBjaGVja3MgZHVyaW5nIHF1b3RhIGVuZm9yY2VtZW50IGFuZCBYRlMgaW9jdGxzL3NldGF0dHIgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk3ZWQxYWIxMmJkNWE4NjZjOWFlZTY5OTFjODNmNGQ3NTEzNjIyMjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE0OjIyOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jXG5pbmRleCA5ODUwZGUzOTU1ZDMxMy4uZGFiOTM0MjJhNTdiYWUgMTAwNjQ0XG4tLS0gYS9mcy9xdW90YS9kcXVvdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9xdW90YS9kcXVvdC5jXG5AQCAtMTMwOCw3ICYjNDM7MTMwOCw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIHtcbiBcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2c2JfZHFvcHQoZHF1b3QtXHUwMDNlZHFfc2IpLVx1MDAzZWluZm9bZHF1b3QtXHUwMDNlZHFfaWQudHlwZV07XG4gXG4tXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRyZXR1cm4gY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfUkVTT1VSQ0UpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIChpbmZvLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxuIFx0XHQhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc21hcC5jIGIvZnMveGZzL3hmc19mc21hcC5jXG5pbmRleCBiNmEzYmM5ZjE0M2M4ZS4uMDQxYmIyMTA1ZWM2NGQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2ZzbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnNtYXAuY1xuQEAgLTExNzQsOCAmIzQzOzExNzQsNyBAQCB4ZnNfZ2V0ZnNtYXAoXG4gXHRpZiAoIXhmc19nZXRmc21hcF9jaGVja19rZXlzKFx1MDAyNmhlYWQtXHUwMDNlZm1oX2tleXNbMF0sIFx1MDAyNmhlYWQtXHUwMDNlZm1oX2tleXNbMV0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApIFx1MDAyNlx1MDAyNlxuLVx0XHQgICBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KGN1cnJlbnQsIENBUF9TWVNfQURNSU4pO1xuJiM0MztcdHVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApIFx1MDAyNlx1MDAyNiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19BRE1JTik7XG4gXHRoZWFkLVx1MDAzZWZtaF9lbnRyaWVzID0gMDtcbiBcbiBcdC8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLjM3NGI0ODhmMDQxNmM4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC02NDcsNyAmIzQzOzY0Nyw3IEBAIHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFucyhcbiBcdFx0Z290byBvdXRfZXJyb3I7XG4gXG4gXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCBOVUxMLCBOVUxMLCBwZHFwLFxuLVx0XHRcdGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbiYjNDM7XHRcdFx0XHRcdGNhcGFibGVfbm9hdWRpdChDQVBfRk9XTkVSKSwgXHUwMDI2dHApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIG91dF9lcnJvcjtcbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uY2U5ZjhiODQ2OGZjYmUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC04MzUsNyAmIzQzOzgzNSw4IEBAIHhmc19zZXRhdHRyX25vbnNpemUoXG4gXHR9XG4gXG4gXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLFxuLVx0XHRcdGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbiYjNDM7XHRcdFx0XHRcdGNhcGFibGVfbm9hdWRpdChDQVBfRk9XTkVSKSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnRwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZHFyZWxlO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmhcbmluZGV4IDM3ZGI5MmIzZDZmODllLi5mODUzMmQ5MmZjYWQ2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxuQEAgLTE0NSw2ICYjNDM7MTQ1LDcgQEAgZXh0ZXJuIGJvb2wgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApO1xuIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTtcbiYjNDM7Ym9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcbiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX25vYXVkaXQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZV9zZXRpZChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcbkBAIC0xNjcsNiAmIzQzOzE2OCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5pbmRleCA4MjlmNDlhZTA3Yjk2NS4uM2QwMzg3ZmI5M2EzOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5AQCAtMzI2LDcgJiM0MzszMjYsNiBAQCBib29sIGhhc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKVxuIHtcbiBcdHJldHVybiBoYXNfbnNfY2FwYWJpbGl0eV9ub2F1ZGl0KHQsIFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbiB9XG4tRVhQT1JUX1NZTUJPTChoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KTtcbiBcbiBzdGF0aWMgYm9vbCBuc19jYXBhYmxlX2NvbW1vbihzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLFxuIFx0XHRcdCAgICAgIGludCBjYXAsXG5AQCAtNDE2LDYgJiM0Mzs0MTUsMjMgQEAgYm9vbCBjYXBhYmxlKGludCBjYXApXG4gXHRyZXR1cm4gbnNfY2FwYWJsZShcdTAwMjZpbml0X3VzZXJfbnMsIGNhcCk7XG4gfVxuIEVYUE9SVF9TWU1CT0woY2FwYWJsZSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3JcbiYjNDM7ICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXG4mIzQzOyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IHRvIGJlIHRlc3RlZCBmb3JcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50XG4mIzQzOyAqIGlzc3Vpbmcgc3B1cmlvdXMgYXVkaXQgbWVzc2FnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuJiM0MzsgKiBhc3N1bXB0aW9uIHRoYXQgaXQmIzM5O3MgYWJvdXQgdG8gYmUgdXNlZC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGNhcGFibGVfbm9hdWRpdCk7XG4gI2VuZGlmIC8qIENPTkZJR19NVUxUSVVTRVIgKi9cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfaW9jX2dldGZzbWFwJiMzNDssCiAgICAmIzM0O3hmc19maWxlYXR0cl9zZXQmIzM0OywKICAgICYjMzQ7eGZzX3NldGF0dHJfbm9uc2l6ZSYjMzQ7LAogICAgJiMzNDtkcXVvdF9hZGRfaW5vZGVzJiMzNDssCiAgICAmIzM0O2RxdW90X2FkZF9zcGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYXBhYmxlX25vYXVkaXRgIGFuZCByZXBsYWNlcyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCB3aXRoIGl0IGluIFhGUyBhbmQgcXVvdGEgc3Vic3lzdGVtcy4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBieSBzZXR0aW5nIGBQRl9TVVBFUlBSSVZgIHdpdGhvdXQgZ2VuZXJhdGluZyBhdWRpdCBtZXNzYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNhcGFiaWxpdHkgY2hlY2tzIGR1cmluZyBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3ZWQxYWIxMmJkNWE4NjZjOWFlZTY5OTFjODNmNGQ3NTEzNjIyMjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDE0OjIyOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggOTg1MGRlMzk1NWQzMTMuLmRhYjkzNDIyYTU3YmFlIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTEzMDgsNyAmIzQzOzEzMDgsNyBAQCBzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKIAlzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9ICZhbXA7c2JfZHFvcHQoZHF1b3QtJmd0O2RxX3NiKS0mZ3Q7aW5mb1tkcXVvdC0mZ3Q7ZHFfaWQudHlwZV07CiAKLQlyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSAmYW1wOyZhbXA7CiYjNDM7CXJldHVybiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19SRVNPVVJDRSkgJmFtcDsmYW1wOwogCSAgICAgICAoaW5mby0mZ3Q7ZHFpX2Zvcm1hdC0mZ3Q7cWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fAogCQkhKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNtYXAuYyBiL2ZzL3hmcy94ZnNfZnNtYXAuYwppbmRleCBiNmEzYmM5ZjE0M2M4ZS4uMDQxYmIyMTA1ZWM2NGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzbWFwLmMKQEAgLTExNzQsOCAmIzQzOzExNzQsNyBAQCB4ZnNfZ2V0ZnNtYXAoCiAJaWYgKCF4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cygmYW1wO2hlYWQtJmd0O2ZtaF9rZXlzWzBdLCAmYW1wO2hlYWQtJmd0O2ZtaF9rZXlzWzFdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSAmYW1wOyZhbXA7Ci0JCSAgIGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX1NZU19BRE1JTik7CiYjNDM7CXVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApICZhbXA7JmFtcDsgY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfQURNSU4pOwogCWhlYWQtJmd0O2ZtaF9lbnRyaWVzID0gMDsKIAogCS8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jCmluZGV4IDFiNTM3MDFiZWJlYTFhLi4zNzRiNDg4ZjA0MTZjOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuYwpAQCAtNjQ3LDcgJiM0Mzs2NDcsNyBAQCB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnMoCiAJCWdvdG8gb3V0X2Vycm9yOwogCiAJZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2NfaWNoYW5nZShpcCwgTlVMTCwgTlVMTCwgcGRxcCwKLQkJCWhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksICZhbXA7dHApOwomIzQzOwkJCQkJY2FwYWJsZV9ub2F1ZGl0KENBUF9GT1dORVIpLCAmYW1wO3RwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2Vycm9yOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jCmluZGV4IDYzMzlmNDk1NmVjYjM5Li5jZTlmOGI4NDY4ZmNiZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmMKQEAgLTgzNSw3ICYjNDM7ODM1LDggQEAgeGZzX3NldGF0dHJfbm9uc2l6ZSgKIAl9CiAKIAllcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLAotCQkJaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfRk9XTkVSKSwgJmFtcDt0cCk7CiYjNDM7CQkJCQljYXBhYmxlX25vYXVkaXQoQ0FQX0ZPV05FUiksCiYjNDM7CQkJCQkmYW1wO3RwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RxcmVsZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCAzN2RiOTJiM2Q2Zjg5ZS4uZjg1MzJkOTJmY2FkNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCkBAIC0xNDUsNiAmIzQzOzE0NSw3IEBAIGV4dGVybiBib29sIGhhc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKTsKIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LAogCQkJCSAgICAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApOwogZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTsKJiM0Mztib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKTsKIGV4dGVybiBib29sIG5zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7CiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX25vYXVkaXQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7CiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX3NldGlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApOwpAQCAtMTY3LDYgJiM0MzsxNjgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhcGFibGUoaW50IGNhcCkKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKQogewogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggODI5ZjQ5YWUwN2I5NjUuLjNkMDM4N2ZiOTNhMzhjIDEwMDY0NAotLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKQEAgLTMyNiw3ICYjNDM7MzI2LDYgQEAgYm9vbCBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNhcCkKIHsKIAlyZXR1cm4gaGFzX25zX2NhcGFiaWxpdHlfbm9hdWRpdCh0LCAmYW1wO2luaXRfdXNlcl9ucywgY2FwKTsKIH0KLUVYUE9SVF9TWU1CT0woaGFzX2NhcGFiaWxpdHlfbm9hdWRpdCk7CiAKIHN0YXRpYyBib29sIG5zX2NhcGFibGVfY29tbW9uKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsCiAJCQkgICAgICBpbnQgY2FwLApAQCAtNDE2LDYgJiM0Mzs0MTUsMjMgQEAgYm9vbCBjYXBhYmxlKGludCBjYXApCiAJcmV0dXJuIG5zX2NhcGFibGUoJmFtcDtpbml0X3VzZXJfbnMsIGNhcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNhcGFibGUpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNhcGFibGVfbm9hdWRpdCAtIERldGVybWluZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIHN1cGVyaW9yCiYjNDM7ICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuCiYjNDM7ICogQGNhcDogVGhlIGNhcGFiaWxpdHkgdG8gYmUgdGVzdGVkIGZvcgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50CiYjNDM7ICogaXNzdWluZyBzcHVyaW91cyBhdWRpdCBtZXNzYWdlcy4KJiM0MzsgKgomIzQzOyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZQomIzQzOyAqIGFzc3VtcHRpb24gdGhhdCBpdCYjMzk7cyBhYm91dCB0byBiZSB1c2VkLgomIzQzOyAqLwomIzQzO2Jvb2wgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KCZhbXA7aW5pdF91c2VyX25zLCBjYXApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGNhcGFibGVfbm9hdWRpdCk7CiAjZW5kaWYgLyogQ09ORklHX01VTFRJVVNFUiAqLwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2FwYWJpbGl0eSBDaGVjayBSZXBsYWNlbWVudCBpbiBLZXJuZWwgQ29kZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uLCBgY2FwYWJsZV9ub2F1ZGl0KGludCBjYXApYCwgaW4gYGtlcm5lbC9jYXBhYmlsaXR5LmNgIGFuZCBgaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmhgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IHJlcGxhY2luZyBleGlzdGluZyBjYXBhYmlsaXR5IGNoZWNrcyB3aXRoIHRoaXMgbmV3IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHN1cHByZXNzIGF1ZGl0IG1lc3NhZ2VzIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKSSYjMzk7bSBzZWVpbmcgaXQgc3dhcCBvdXQgYGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgLi4uKWAgd2l0aCBgY2FwYWJsZV9ub2F1ZGl0KC4uLilgIHdpdGhpbiB0aGUgWEZTIGZpbGVzeXN0ZW0gY29kZSAoYGZzL3hmcy94ZnNfZnNtYXAuY2AsIGBmcy94ZnMveGZzX2lvY3RsLmNgLCBhbmQgYGZzL3hmcy94ZnNfaW9wcy5jYCkuIEFuZCBpbiB0aGUgcXVvdGEgY29kZSAoYGZzL3F1b3RhL2RxdW90LmNgKSwgaXQmIzM5O3MgY2hhbmdpbmcgYGNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSlgIHRvIGBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19SRVNPVVJDRSlgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgdGhlIGJlaGF2aW9yIG9mIHRob3NlIGNhcGFiaWxpdHkgY2hlY2tzIGlzIGJlaW5nIGFsdGVyZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBGb3IgZXhhbXBsZSwgaW4gYGZzL3F1b3RhL2RxdW90LmNgIHdpdGhpbiBgaWdub3JlX2hhcmRsaW1pdGAsIHdlJiMzOTtyZSBnb2luZyBmcm9tIGBjYXBhYmxlYCB0byBgY2FwYWJsZV9ub2F1ZGl0YCwgZGlyZWN0bHkgYWZmZWN0aW5nIGF1ZGl0IGxvZ2dpbmcuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgWEZTIGNoYW5nZXMgbW9yZSBjbG9zZWx5LiBUaGUgcmVwbGFjZW1lbnQgb2YgYGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgLi4uKWAgd2l0aCBgY2FwYWJsZV9ub2F1ZGl0KC4uLilgIGluIFhGUyBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGhvd2V2ZXIuLi4gd2FpdCBhIHNlY29uZC4uLiB0aGVyZSYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgaGVyZS4gRG9lc24mIzM5O3QgYGNhcGFibGVfbm9hdWRpdGAgYmVoYXZlIGRpZmZlcmVudGx5IHdpdGggdGhlIGBQRl9TVVBFUlBSSVZgIGZsYWc/IGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBtaWdodCBub3QgYmUgc2V0dGluZyB0aGF0IGZsYWcsIGFuZCB0aGUgbmV3IGZ1bmN0aW9uIGRvZXMuIExldCYjMzk7cyBtYWtlIHN1cmUuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMuIFRoZSBgY2FwYWJsZV9ub2F1ZGl0YCBjYWxsIGxlYWRzIHRvIGBuc19jYXBhYmxlX25vYXVkaXQoJmFtcDtpbml0X3VzZXJfbnMsIGNhcClgLCB3aGljaCB0aGVuIGNhbGxzIGBuc19jYXBhYmxlX2NvbW1vbihucywgY2FwLCBDQVBfT1BUX05PQVVESVQpYC4gSW1wb3J0YW50bHksIGBuc19jYXBhYmxlX2NvbW1vbmAgKmRvZXMqIHNldCBgUEZfU1VQRVJQUklWYCBpZiB0aGUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUuIEJ1dCwgYGhhc19jYXBhYmlsaXR5X25vYXVkaXRgIGdvZXMgdGhyb3VnaCBhIGRpZmZlcmVudCBwYXRoIOKAkyBpdCBjYWxscyBgaGFzX25zX2NhcGFiaWxpdHlfbm9hdWRpdCh0LCAmYW1wO2luaXRfdXNlcl9ucywgY2FwKWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlY3VyaXR5X2NhcGFibGUodC0mZ3Q7Y3JlZCwgbnMsIGNhcCwgQ0FQX09QVF9OT0FVRElUKWAuIEFuZCB0aGlzIGxhc3QgY2FsbCAqZG9lcyBub3QqIHNldCBgUEZfU1VQRVJQUklWYC4gVGhhdCBtYWtlcyB0aGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLgoKU28gdGhlIHByaW1hcnkgaW1wYWN0IGlzIGluIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgd2l0aGluIHRoZSBYRlMgZmlsZXMuIFdoYXQgY29uZmlncyBkbyB3ZSBuZWVkIHRvIHZlcmlmeSBoZXJlPyBXZWxsLCBgQ09ORklHX1FVT1RBYCBhbmQgYENPTkZJR19YRlNfRlNgIHNob3VsZCBiZSByZWxldmFudC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgZmlsZXMgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUVVPVEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWctNS1cbmZzL3F1b3RhL0tjb25maWc6Njpjb25maWcgUVVPVEFcbmZzL3F1b3RhL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UXVvdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3F1b3RhL0tjb25maWctMTktXG5mcy9xdW90YS9LY29uZmlnOjIwOmNvbmZpZyBRVU9UQV9ORVRMSU5LX0lOVEVSRkFDRVxuZnMvcXVvdGEvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7UmVwb3J0IHF1b3RhIG1lc3NhZ2VzIHRocm91Z2ggbmV0bGluayBpbnRlcmZhY2VcJiMzNDtcbi0tXG5mcy9xdW90YS9LY29uZmlnPTI4PWNvbmZpZyBQUklOVF9RVU9UQV9XQVJOSU5HXG4tLVxuZnMvcXVvdGEvS2NvbmZpZy0zNy1cbmZzL3F1b3RhL0tjb25maWc6Mzg6Y29uZmlnIFFVT1RBX0RFQlVHXG5mcy9xdW90YS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtBZGRpdGlvbmFsIHF1b3RhIHNhbml0eSBjaGVja3NcJiMzNDtcbi0tXG5mcy9xdW90YS9LY29uZmlnLTQ2LSMgR2VuZXJpYyBzdXBwb3J0IGZvciB0cmVlIHN0cnVjdHVyZWQgcXVvdGEgZmlsZXMuIFNlbGVjdGVkIHdoZW4gbmVlZGVkLlxuZnMvcXVvdGEvS2NvbmZpZzo0Nzpjb25maWcgUVVPVEFfVFJFRVxuZnMvcXVvdGEvS2NvbmZpZy00OC1cdCB0cmlzdGF0ZVxuLS1cbmZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcbi0tXG5mcy9xdW90YS9LY29uZmlnLTY3LVxuZnMvcXVvdGEvS2NvbmZpZzo2ODpjb25maWcgUVVPVEFDVExcbmZzL3F1b3RhL0tjb25maWctNjktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIFhGUyBhbmQgUXVvdGEgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBzb21lIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpc3N1ZXMgcmV2b2x2aW5nIGFyb3VuZCBxdW90YSBtYW5hZ2VtZW50IGluIFhGUy4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2V0dXAsIEkmIzM5O20gdGhpbmtpbmcgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlIGlzIHRpZWQgdG8gY29uZmlndXJhdGlvbnMgdXNpbmcgYFFVT1RBYCBhbG9uZ3NpZGUgYFhGU19GU2AuIFRvIHN0YXJ0LCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IGZ1bmN0aW9ucy4gYGlnbm9yZV9oYXJkbGltaXRgIGluIGBmcy9xdW90YS9kcXVvdC5jYCBpcyB0aGUgb2J2aW91cyBmaXJzdCBwbGFjZSB0byBzdGFydCwgc2luY2UgaXQmIzM5O3MgZGlyZWN0bHkgZGVhbGluZyB3aXRoIHF1b3RhIGNoZWNrcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBvbiBhIGhvdCBwYXRoLiBUaGVuIEkmIzM5O20gYWxzbyBsb29raW5nIGF0IGB4ZnNfZ2V0ZnNtYXBgIGluIGBmcy94ZnMveGZzX2ZzbWFwLmNgIHdoaWNoIEkgYmVsaWV2ZSBpcyBhbiBpb2N0bCBoYW5kbGVyIHNvIEkgY2FuIHNlZSB3aGF0IGtpbmQgb2Ygb3ZlcmhlYWQgdGhhdCBtaWdodCBpbnRyb2R1Y2UuIE5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGR1cmluZyBgc2V0YXR0cmAgY2FsbHMsIHNvIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGluIGBmcy94ZnMveGZzX2lvY3RsLmNgIGFuZCBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgaW4gYGZzL3hmcy94ZnNfaW9wcy5jYCBhcmUgYWxzbyBvbiBteSByYWRhci4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGJlaGF2aW9yIG9mIGBpZ25vcmVfaGFyZGxpbWl0YCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdub3JlX2hhcmRsaW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYz0xMjkyPXN0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdF93YXJuICp3YXJuKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTMwNi1cbmZzL3F1b3RhL2RxdW90LmM6MTMwNzpzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbmZzL3F1b3RhL2RxdW90LmMtMTMwOC17XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xMzE2PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2Rlcyxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMjktXHQgICAgbmV3aW5vZGVzIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2loYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzMzA6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzMzEtXHRcdHByZXBhcmVfd2FybmluZyh3YXJuLCBkcXVvdCwgUVVPVEFfTkxfSUhBUkRXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMzktXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9pdGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTM0MDogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM0MS1cdFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JU09GVExPTkdXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTEzNjE9c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzNzgtXHQgICAgdHNwYWNlIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2JoYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzNzk6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzODAtXHRcdGlmIChmbGFncyBcdTAwMjYgRFFVT1RfU1BBQ0VfV0FSTilcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzODktXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9idGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTM5MDogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM5MS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyBpbiBYRlMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGZvciBzb21lIGFyZWFzIGluIHRoZSBYRlMgZmlsZXN5c3RlbSB3aGVyZSB3ZSBtaWdodCBiZSBhYmxlIHRvIHNxdWVlemUgb3V0IHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMuIFRoaW5raW5nIGFib3V0IHRoZSBob3QgcGF0aHMsIEkga25vdyB0aGF0IGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBjYWxsZWQgZnJvbSBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgLiBUaG9zZSBhcmUgY3J1Y2lhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBxdW90YSBtYW5hZ2VtZW50LCBzbyBhbnkgaW1wcm92ZW1lbnQgdGhlcmUgd291bGQgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4gQnV0LCB0aGF0JiMzOTtzIG5vdCBhbHdheXMgZWFzeS4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGlvY3RsczsgdGhleSBhcmUgYWx3YXlzIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gU3BlY2lmaWNhbGx5LCBgeGZzX2dldGZzbWFwYCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgYXMgYSBsaWtlbHkgdGFyZ2V0IGJlY2F1c2UgaXQmIzM5O3MgYW4gaW9jdGwuIFNpbmNlIGlvY3RscyBvZnRlbiBpbnZvbHZlIHVzZXIta2VybmVsIHRyYW5zaXRpb25zIGFuZCBjb21wbGV4IGRhdGEgaGFuZGxpbmcsIHRoZXJlIGNvdWxkIGJlIGEgbG90IG9mIG92ZXJoZWFkLiBTaW1pbGFybHksIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGlzIGFub3RoZXIgaW9jdGwgaGVscGVyLiBBbmQsIGxvb2tpbmcgZnVydGhlciBJIHNlZSBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgd2hpY2ggaXMgYW4gYHNldGF0dHJgIGhlbHBlciwgd2hpY2ggY2FuIGJlIGFuIGVhc2llciB3aW4sIHBlcmhhcHMuCgpUaW1lIHRvIGRpdmUgaW4gYW5kIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgYGZzL3hmcy94ZnNfZnNtYXAuY2AgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYHhmc19nZXRmc21hcGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgbWlnaHQgcHJlc2VudCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZzX2dldGZzbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19mc21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hmcy94ZnNfZnNtYXAuYz0xMTY9eGZzX2ZzbWFwX293bmVyX2Zyb21fZnJlYyhcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTU5LS8qIGdldGZzbWFwIHF1ZXJ5IHN0YXRlICovXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTYwOnN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyB7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTYxLVx0c3RydWN0IHhmc19mc21hcF9oZWFkXHQqaGVhZDtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTc0LVx0ICogaXMgdGhlIHNlY29uZCAob3IgbGF0ZXIpIGNhbGwgdG8gcmV0cmlldmUgdGhlIHJlY29yZHNldCBpbiBwaWVjZXMuXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTc1Olx0ICogeGZzX2dldGZzbWFwX3JlY19iZWZvcmVfc3RhcnQgd2lsbCBjb21wYXJlIGFsbCByZWNvcmRzIHJldHJpZXZlZFxuZnMveGZzL3hmc19mc21hcC5jLTE3Ni1cdCAqIGJ5IHRoZSBybWFwYnQgcXVlcnkgdG8gZmlsdGVyIG91dCBhbnkgcmVjb3JkcyB0aGF0IHN0YXJ0IGJlZm9yZVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xODQtLyogQXNzb2NpYXRlIGEgZGV2aWNlIHdpdGggYSBnZXRmc21hcCBoYW5kbGVyLiAqL1xuZnMveGZzL3hmc19mc21hcC5jOjE4NTpzdHJ1Y3QgeGZzX2dldGZzbWFwX2RldiB7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTg2LVx0dTMyXHRcdFx0ZGV2O1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xODgtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwICprZXlzLFxuZnMveGZzL3hmc19mc21hcC5jOjE4OTpcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyAqaW5mbyk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTkwLVx0c2VjdG9yX3RcdFx0bnJfc2VjdG9ycztcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9MTk0PXN0YXRpYyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzoxOTU6eGZzX2dldGZzbWFwX2Rldl9jb21wYXJlKFxuZnMveGZzL3hmc19mc21hcC5jLTE5Ni1cdGNvbnN0IHZvaWRcdFx0XHQqcDEsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTE5OC17XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTk5Olx0Y29uc3Qgc3RydWN0IHhmc19nZXRmc21hcF9kZXZcdCpkMSA9IHAxO1xuZnMveGZzL3hmc19mc21hcC5jOjIwMDpcdGNvbnN0IHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfZGV2XHQqZDIgPSBwMjtcbmZzL3hmcy94ZnNfZnNtYXAuYy0yMDEtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTIwNj1TVEFUSUMgaW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6MjA3Onhmc19nZXRmc21hcF9pc19zaGFyZWQoXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjA4LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjA5Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yMTAtXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwX2lyZWNcdCpmcmVjLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0yNDI9c3RhdGljIGlubGluZSB2b2lkXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjQzOnhmc19nZXRmc21hcF9mb3JtYXQoXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ0LVx0c3RydWN0IHhmc19tb3VudFx0XHQqbXAsXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ1LVx0c3RydWN0IHhmc19mc21hcFx0XHQqeGZtLFxuZnMveGZzL3hmc19mc21hcC5jOjI0NjpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8pXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ3LXtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ5LVxuZnMveGZzL3hmc19mc21hcC5jOjI1MDpcdHRyYWNlX3hmc19nZXRmc21hcF9tYXBwaW5nKG1wLCB4Zm0pO1xuZnMveGZzL3hmc19mc21hcC5jLTI1MS1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbFxuZnMveGZzL3hmc19mc21hcC5jOjI1Nzp4ZnNfZ2V0ZnNtYXBfZnJlY19iZWZvcmVfc3RhcnQoXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjU4Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNTktXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwX2lyZWNcdCpmcmVjKVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0yODE9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjI4Mjp4ZnNfZ2V0ZnNtYXBfaGVscGVyKFxuZnMveGZzL3hmc19mc21hcC5jLTI4My1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jOjI4NDpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8sXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjg1LVx0Y29uc3Qgc3RydWN0IHhmc19mc21hcF9pcmVjXHQqZnJlYylcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjk4LVx0ICovXG5mcy94ZnMveGZzX2ZzbWFwLmM6Mjk5Olx0aWYgKHhmc19nZXRmc21hcF9mcmVjX2JlZm9yZV9zdGFydChpbmZvLCBmcmVjKSlcbmZzL3hmcy94ZnNfZnNtYXAuYy0zMDAtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0zMzEtXHRcdGZtci5mbXJfZmxhZ3MgPSBGTVJfT0ZfU1BFQ0lBTF9PV05FUjtcbmZzL3hmcy94ZnNfZnNtYXAuYzozMzI6XHRcdHhmc19nZXRmc21hcF9mb3JtYXQobXAsIFx1MDAyNmZtciwgaW5mbyk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMzMzLVx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0zNTktXHRpZiAoZm1yLmZtcl9mbGFncyA9PSAwKSB7XG5mcy94ZnMveGZzX2ZzbWFwLmM6MzYwOlx0XHRlcnJvciA9IHhmc19nZXRmc21hcF9pc19zaGFyZWQodHAsIGluZm8sIGZyZWMsIFx1MDAyNnNoYXJlZCk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMzYxLVx0XHRpZiAoZXJyb3IpXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTM2Ni1cbmZzL3hmcy94ZnNfZnNtYXAuYzozNjc6XHR4ZnNfZ2V0ZnNtYXBfZm9ybWF0KG1wLCBcdTAwMjZmbXIsIGluZm8pO1xuZnMveGZzL3hmc19mc21hcC5jLTM2OC1vdXQ6XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTM3ND1zdGF0aWMgaW5saW5lIGludFxuZnMveGZzL3hmc19mc21hcC5jOjM3NTp4ZnNfZ2V0ZnNtYXBfZ3JvdXBfaGVscGVyKFxuZnMveGZzL3hmc19mc21hcC5jOjM3NjpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8sXG5mcy94ZnMveGZzX2ZzbWFwLmMtMzc3LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTM5Ny1cdGZyZWMtXHUwMDNlbGVuX2RhZGRyID0gWEZTX0ZTQl9UT19CQih4Zy1cdTAwM2V4Z19tb3VudCwgYmxvY2tjb3VudCk7XG5mcy94ZnMveGZzX2ZzbWFwLmM6Mzk4Olx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIGZyZWMpO1xuZnMveGZzL3hmc19mc21hcC5jLTM5OS19XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTQwMj1TVEFUSUMgaW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6NDAzOnhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyKFxuZnMveGZzL3hmc19mc21hcC5jLTQwNC1cdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHRcdCpjdXIsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTQxMy1cdH07XG5mcy94ZnMveGZzX2ZzbWFwLmM6NDE0Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyA9IHByaXY7XG5mcy94ZnMveGZzX2ZzbWFwLmMtNDE1LVxuZnMveGZzL3hmc19mc21hcC5jOjQxNjpcdHJldHVybiB4ZnNfZ2V0ZnNtYXBfZ3JvdXBfaGVscGVyKGluZm8sIGN1ci1cdTAwM2ViY190cCwgY3VyLVx1MDAzZWJjX2dyb3VwLFxuZnMveGZzL3hmc19mc21hcC5jLTQxNy1cdFx0XHRyZWMtXHUwMDNlcm1fc3RhcnRibG9jaywgcmVjLVx1MDAzZXJtX2Jsb2NrY291bnQsIFx1MDAyNmZyZWMpO1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz00MjE9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjQyMjp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idF9oZWxwZXIoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDIzLVx0c3RydWN0IHhmc19idHJlZV9jdXJcdFx0KmN1cixcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDMwLVx0fTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo0MzE6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvID0gcHJpdjtcbmZzL3hmcy94ZnNfZnNtYXAuYy00MzItXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDMzOlx0cmV0dXJuIHhmc19nZXRmc21hcF9ncm91cF9oZWxwZXIoaW5mbywgY3VyLVx1MDAzZWJjX3RwLCBjdXItXHUwMDNlYmNfZ3JvdXAsXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDM0LVx0XHRcdHJlYy1cdTAwM2Vhcl9zdGFydGJsb2NrLCByZWMtXHUwMDNlYXJfYmxvY2tjb3VudCwgXHUwMDI2ZnJlYyk7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTQzOD1zdGF0aWMgdm9pZFxuZnMveGZzL3hmc19mc21hcC5jOjQzOTp4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDQwLVx0c3RydWN0IHhmc19ybWFwX2lyZWNcdCppcmVjLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz00NjY9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjQ2NzpfX3hmc19nZXRmc21hcF9kYXRhZGV2KFxuZnMveGZzL3hmc19mc21hcC5jLTQ2OC1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jLTQ2OS1cdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcdFx0KmtleXMsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDcwOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NzEtXHRpbnRcdFx0XHRcdCgqcXVlcnlfZm4pKHN0cnVjdCB4ZnNfdHJhbnMgKixcbmZzL3hmcy94ZnNfZnNtYXAuYzo0NzI6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyAqLFxuZnMveGZzL3hmc19mc21hcC5jLTQ3My1cdFx0XHRcdFx0XHQgICAgc3RydWN0IHhmc19idHJlZV9jdXIgKiosXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTUwMS1cdGluZm8tXHUwMDNlbG93LnJtX2Jsb2NrY291bnQgPSBYRlNfQkJfVE9fRlNCVChtcCwga2V5c1swXS5mbXJfbGVuZ3RoKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo1MDI6XHR4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXHUwMDI2aW5mby1cdTAwM2Vsb3csIFx1MDAyNmtleXNbMF0pO1xuZnMveGZzL3hmc19mc21hcC5jLTUwMy1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNTQzLVx0XHRcdFx0YnJlYWs7XG5mcy94ZnMveGZzX2ZzbWFwLmM6NTQ0Olx0XHRcdHhmc19nZXRmc21hcF9zZXRfaXJlY19mbGFncyhcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsIFx1MDAyNmtleXNbMV0pO1xuZnMveGZzL3hmc19mc21hcC5jLTU0NS1cdFx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02MDc9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjYwODp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnRfcXVlcnkoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjA5LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjEwOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYy02MTEtXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0XHQqKmN1cnBwLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy02MTUtXHRpZiAoaW5mby1cdTAwM2VsYXN0KVxuZnMveGZzL3hmc19mc21hcC5jOjYxNjpcdFx0cmV0dXJuIHhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyKCpjdXJwcCwgXHUwMDI2aW5mby1cdTAwM2VoaWdoLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02MTctXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTYyMS1cdHJldHVybiB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgqY3VycHAsIFx1MDAyNmluZm8tXHUwMDNlbG93LCBcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjIyOlx0XHRcdHhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02MjMtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02MjY9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjYyNzp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnQoXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjI4LVx0c3RydWN0IHhmc190cmFuc1x0XHQqdHAsXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjI5LVx0Y29uc3Qgc3RydWN0IHhmc19mc21hcFx0XHQqa2V5cyxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzA6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvKVxuZnMveGZzL3hmc19mc21hcC5jLTYzMS17XG5mcy94ZnMveGZzX2ZzbWFwLmMtNjMyLVx0aW5mby1cdTAwM2VtaXNzaW5nX293bmVyID0gWEZTX0ZNUl9PV05fRlJFRTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzM6XHRyZXR1cm4gX194ZnNfZ2V0ZnNtYXBfZGF0YWRldih0cCwga2V5cywgaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzQ6XHRcdFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfcm1hcGJ0X3F1ZXJ5LCBOVUxMKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02MzUtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02Mzg9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjYzOTp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idF9xdWVyeShcbmZzL3hmcy94ZnNfZnNtYXAuYy02NDAtXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NDE6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvLFxuZnMveGZzL3hmc19mc21hcC5jLTY0Mi1cdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHRcdCoqY3VycHAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTY0OC1cdGlmIChpbmZvLVx1MDAzZWxhc3QpXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjQ5Olx0XHRyZXR1cm4geGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfaGVscGVyKCpjdXJwcCwgXHUwMDI2a2V5WzFdLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTAtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTY1Ni1cdHJldHVybiB4ZnNfYWxsb2NfcXVlcnlfcmFuZ2UoKmN1cnBwLCBrZXksIFx1MDAyNmtleVsxXSxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NTc6XHRcdFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTgtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02NjE9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjY2Mjp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idChcbmZzL3hmcy94ZnNfZnNtYXAuYy02NjMtXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYy02NjQtXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXHRcdCprZXlzLFxuZnMveGZzL3hmc19mc21hcC5jOjY2NTpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8pXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjY2LXtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjcwLVx0aW5mby1cdTAwM2VtaXNzaW5nX293bmVyID0gWEZTX0ZNUl9PV05fVU5LTk9XTjtcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NzE6XHRyZXR1cm4gX194ZnNfZ2V0ZnNtYXBfZGF0YWRldih0cCwga2V5cywgaW5mbyxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NzI6XHRcdFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfcXVlcnksIFx1MDAyNmFrZXlzWzBdKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzMtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz02NzY9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjY3Nzp4ZnNfZ2V0ZnNtYXBfbG9nZGV2KFxuZnMveGZzL3hmc19mc21hcC5jLTY3OC1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jLTY3OS1cdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcdFx0KmtleXMsXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjgwOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbylcbmZzL3hmcy94ZnNfZnNtYXAuYy02ODEte1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy03MDktXHRmcmVjLmxlbl9kYWRkciA9IFhGU19GU0JfVE9fQkIobXAsIG1wLVx1MDAzZW1fc2Iuc2JfbG9nYmxvY2tzKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MTA6XHRyZXR1cm4geGZzX2dldGZzbWFwX2hlbHBlcih0cCwgaW5mbywgXHUwMDI2ZnJlYyk7XG5mcy94ZnMveGZzX2ZzbWFwLmMtNzExLX1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9NzE1PVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MTY6eGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwX2hlbHBlcihcbmZzL3hmcy94ZnNfZnNtYXAuYy03MTctXHRzdHJ1Y3QgeGZzX3J0Z3JvdXBcdFx0KnJ0Zyxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzI1LVx0c3RydWN0IHhmc19tb3VudFx0XHQqbXAgPSBydGdfbW91bnQocnRnKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MjY6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvID0gcHJpdjtcbmZzL3hmcy94ZnNfZnNtYXAuYy03MjctXHR4ZnNfcnRibG9ja190XHRcdFx0c3RhcnRfcnRiID1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzQ2LVx0ZnJlYy5sZW5fZGFkZHIgPSBYRlNfRlNCX1RPX0JCKG1wLCBydGJjb3VudCk7XG5mcy94ZnMveGZzX2ZzbWFwLmM6NzQ3Olx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIFx1MDAyNmZyZWMpO1xuZnMveGZzL3hmc19mc21hcC5jLTc0OC19XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTc1MT1TVEFUSUMgaW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6NzUyOnhmc19nZXRmc21hcF9ydGRldl9ydGJpdG1hcChcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTMtXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTQtXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXHRcdCprZXlzLFxuZnMveGZzL3hmc19mc21hcC5jOjc1NTpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8pXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzU2LXtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzk3LVx0XHRlcnJvciA9IHhmc19ydGFsbG9jX3F1ZXJ5X3JhbmdlKHJ0ZywgdHAsIHN0YXJ0X3J0eCwgZW5kX3J0eCxcbmZzL3hmcy94ZnNfZnNtYXAuYzo3OTg6XHRcdFx0XHR4ZnNfZ2V0ZnNtYXBfcnRkZXZfcnRiaXRtYXBfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy03OTktXHRcdGlmIChlcnJvcilcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtODEzLVx0XHRcdGluZm8tXHUwMDNlbGFzdCA9IHRydWU7XG5mcy94ZnMveGZzX2ZzbWFwLmM6ODE0Olx0XHRcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwX2hlbHBlcihydGcsIHRwLFxuZnMveGZzL3hmc19mc21hcC5jLTgxNS1cdFx0XHRcdFx0XHUwMDI2YWhpZ2gsIGluZm8pO1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz04Mzg9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjgzOTp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcm1hcGJ0X2hlbHBlcihcbmZzL3hmcy94ZnNfZnNtYXAuYy04NDAtXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0XHQqY3VyLFxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy04NDktXHR9O1xuZnMveGZzL3hmc19mc21hcC5jOjg1MDpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1x0KmluZm8gPSBwcml2O1xuZnMveGZzL3hmc19mc21hcC5jLTg1MS1cbmZzL3hmcy94ZnNfZnNtYXAuYzo4NTI6XHRyZXR1cm4geGZzX2dldGZzbWFwX2dyb3VwX2hlbHBlcihpbmZvLCBjdXItXHUwMDNlYmNfdHAsIGN1ci1cdTAwM2ViY19ncm91cCxcbmZzL3hmcy94ZnNfZnNtYXAuYy04NTMtXHRcdFx0cmVjLVx1MDAzZXJtX3N0YXJ0YmxvY2ssIHJlYy1cdTAwM2VybV9ibG9ja2NvdW50LCBcdTAwMjZmcmVjKTtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmM9ODU3PVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzo4NTg6eGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9xdWVyeShcbmZzL3hmcy94ZnNfZnNtYXAuYy04NTktXHRzdHJ1Y3QgeGZzX3RyYW5zXHRcdCp0cCxcbmZzL3hmcy94ZnNfZnNtYXAuYzo4NjA6XHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cdCppbmZvLFxuZnMveGZzL3hmc19mc21hcC5jLTg2MS1cdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHRcdCoqY3VycHApXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTg2OC1cdHJldHVybiB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgqY3VycHAsIFx1MDAyNmluZm8tXHUwMDNlbG93LCBcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODY5Olx0XHRcdHhmc19nZXRmc21hcF9ydGRldl9ybWFwYnRfaGVscGVyLCBpbmZvKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy04NzAtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz04NzM9U1RBVElDIGludFxuZnMveGZzL3hmc19mc21hcC5jOjg3NDp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcm1hcGJ0KFxuZnMveGZzL3hmc19mc21hcC5jLTg3NS1cdHN0cnVjdCB4ZnNfdHJhbnNcdFx0KnRwLFxuZnMveGZzL3hmc19mc21hcC5jLTg3Ni1cdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcdFx0KmtleXMsXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODc3Olx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHQqaW5mbylcbmZzL3hmcy94ZnNfZnNtYXAuYy04Nzgte1xuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy05MTUtXHRcdGlmIChrZXkwLmZtcl9waHlzaWNhbCBcdTAwM2MgcnRzdGFydF9kYWRkcikge1xuZnMveGZzL3hmc19mc21hcC5jOjkxNjpcdFx0XHRlcnJvciA9IHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIFx1MDAyNmZyZWMpO1xuZnMveGZzL3hmc19mc21hcC5jLTkxNy1cdFx0XHRpZiAoZXJyb3IpXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTk0Mi1cdGluZm8tXHUwMDNlbG93LnJtX2Jsb2NrY291bnQgPSBYRlNfQkJfVE9fRlNCVChtcCwga2V5MC5mbXJfbGVuZ3RoKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzo5NDM6XHR4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXHUwMDI2aW5mby1cdTAwM2Vsb3csIFx1MDAyNmtleTApO1xuZnMveGZzL3hmc19mc21hcC5jLTk0NC1cbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtOTg0LVx0XHRcdFx0YnJlYWs7XG5mcy94ZnMveGZzX2ZzbWFwLmM6OTg1Olx0XHRcdHhmc19nZXRmc21hcF9zZXRfaXJlY19mbGFncyhcdTAwMjZpbmZvLVx1MDAzZWhpZ2gsIFx1MDAyNmtleXNbMV0pO1xuZnMveGZzL3hmc19mc21hcC5jLTk4Ni1cdFx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDAwLVxuZnMveGZzL3hmc19mc21hcC5jOjEwMDE6XHRcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9xdWVyeSh0cCwgaW5mbywgXHUwMDI2YnRfY3VyKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDAyLVx0XHRpZiAoZXJyb3IpXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEwMTgtXHRcdFx0aW5mby1cdTAwM2VsYXN0ID0gdHJ1ZTtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDE5Olx0XHRcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9oZWxwZXIoYnRfY3VyLFxuZnMveGZzL3hmc19mc21hcC5jLTEwMjAtXHRcdFx0XHRcdFx1MDAyNmluZm8tXHUwMDNlaGlnaCwgaW5mbyk7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTEwNDQ9c3RhdGljIHVpbnQzMl90XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA0NTp4ZnNfZ2V0ZnNtYXBfZGV2aWNlKFxuZnMveGZzL3hmc19mc21hcC5jLTEwNDYtXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTEwNjc9U1RBVElDIGJvb2xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDY4Onhmc19nZXRmc21hcF9pc192YWxpZF9kZXZpY2UoXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA2OS1cdHN0cnVjdCB4ZnNfbW91bnRcdCptcCxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA3My1cdFx0Zm0tXHUwMDNlZm1yX2RldmljZSA9PSBVSU5UX01BWCB8fFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzQ6XHRcdGZtLVx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9EQVRBKSB8fFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzU6XHRcdGZtLVx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9MT0cpIHx8XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA3Ni1cdFx0KG1wLVx1MDAzZW1fcnRkZXZfdGFyZ3AgXHUwMDI2XHUwMDI2XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA3NzpcdFx0IGZtLVx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9SVCkpO1xuZnMveGZzL3hmc19mc21hcC5jLTEwNzgtfVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0xMDgxPVNUQVRJQyBib29sXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA4Mjp4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cyhcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDgzLVx0c3RydWN0IHhmc19mc21hcFx0XHQqbG93X2tleSxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0NS0gKlx0XHRcdFx0ICAgYnVtcGVkIHVwIGJ5IGZtcl9sZW5ndGguXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE0NjogKiB4ZnNfZ2V0ZnNtYXBfaW5mby5uZXh0X2RhZGRyXHQtLSBuZXh0IGRpc2sgYWRkciB3ZSBleHBlY3QgdG8gc2VlOyB0aGlzXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0Ny0gKlx0XHRcdFx0ICAgaXMgaG93IHdlIGRldGVjdCBnYXBzIGluIHRoZSBmc21hcFxuZnMveGZzL3hmc19mc21hcC5jLTExNDgtXHRcdFx0XHQgICByZWNvcmRzIGFuZCByZXBvcnQgdGhlbS5cbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTQ5OiAqIHhmc19nZXRmc21hcF9pbmZvLmxvdy9oaWdoXHQtLSBwZXItQUcgbG93L2hpZ2gga2V5cyBjb21wdXRlZCBmcm9tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE1MC0gKlx0XHRcdFx0ICAgZGtleXM7IHVzZWQgdG8gcXVlcnkgdGhlIG1ldGFkYXRhLlxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYz0xMTUyPVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTUzOnhmc19nZXRmc21hcChcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTU0LVx0c3RydWN0IHhmc19tb3VudFx0XHQqbXAsXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTExNTktXHRzdHJ1Y3QgeGZzX2ZzbWFwXHRcdGRrZXlzWzJdO1x0LyogcGVyLWRldiBrZXlzICovXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE2MDpcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfZGV2XHRcdGhhbmRsZXJzW1hGU19HRVRGU01BUF9ERVZTXTtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTYxOlx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXHRpbmZvID0ge1xuZnMveGZzL3hmc19mc21hcC5jLTExNjItXHRcdC5mc21hcF9yZWNzXHRcdD0gZnNtYXBfcmVjcyxcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE3MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE3MTpcdGlmICgheGZzX2dldGZzbWFwX2lzX3ZhbGlkX2RldmljZShtcCwgXHUwMDI2aGVhZC1cdTAwM2VmbWhfa2V5c1swXSkgfHxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTcyOlx0ICAgICF4ZnNfZ2V0ZnNtYXBfaXNfdmFsaWRfZGV2aWNlKG1wLCBcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzFdKSlcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTczLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTc0Olx0aWYgKCF4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cyhcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzBdLCBcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzFdKSlcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTc1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE4Mi1cdGhhbmRsZXJzWzBdLm5yX3NlY3RvcnMgPSBYRlNfRlNCX1RPX0JCKG1wLCBtcC1cdTAwM2VtX3NiLnNiX2RibG9ja3MpO1xuZnMveGZzL3hmc19mc21hcC5jOjExODM6XHRoYW5kbGVyc1swXS5kZXYgPSB4ZnNfZ2V0ZnNtYXBfZGV2aWNlKG1wLCBYRlNfREVWX0RBVEEpO1xuZnMveGZzL3hmc19mc21hcC5jLTExODQtXHRpZiAodXNlX3JtYXApXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE4NTpcdFx0aGFuZGxlcnNbMF0uZm4gPSB4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnQ7XG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE4Ni1cdGVsc2VcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTg3Olx0XHRoYW5kbGVyc1swXS5mbiA9IHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0O1xuZnMveGZzL3hmc19mc21hcC5jLTExODgtXHRpZiAobXAtXHUwMDNlbV9sb2dkZXZfdGFyZ3AgIT0gbXAtXHUwMDNlbV9kZGV2X3RhcmdwKSB7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTExOTAtXHRcdFx0XHRcdFx0ICAgICAgIG1wLVx1MDAzZW1fc2Iuc2JfbG9nYmxvY2tzKTtcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTkxOlx0XHRoYW5kbGVyc1sxXS5kZXYgPSB4ZnNfZ2V0ZnNtYXBfZGV2aWNlKG1wLCBYRlNfREVWX0xPRyk7XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE5MjpcdFx0aGFuZGxlcnNbMV0uZm4gPSB4ZnNfZ2V0ZnNtYXBfbG9nZGV2O1xuZnMveGZzL3hmc19mc21hcC5jLTExOTMtXHR9XG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEyMDAtXHRcdGhhbmRsZXJzWzJdLm5yX3NlY3RvcnMgPSBYRlNfRlNCX1RPX0JCKG1wLCBtcC1cdTAwM2VtX3NiLnNiX3JibG9ja3MpO1xuZnMveGZzL3hmc19mc21hcC5jOjEyMDE6XHRcdGhhbmRsZXJzWzJdLmRldiA9IHhmc19nZXRmc21hcF9kZXZpY2UobXAsIFhGU19ERVZfUlQpO1xuZnMveGZzL3hmc19mc21hcC5jLTEyMDItXHRcdGlmICh1c2Vfcm1hcClcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMjAzOlx0XHRcdGhhbmRsZXJzWzJdLmZuID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidDtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMjA0LVx0XHRlbHNlXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTIwNTpcdFx0XHRoYW5kbGVyc1syXS5mbiA9IHhmc19nZXRmc21hcF9ydGRldl9ydGJpdG1hcDtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMjA2LVx0fVxuLS1cbmZzL3hmcy94ZnNfZnNtYXAuYy0xMjA4LVxuZnMveGZzL3hmc19mc21hcC5jOjEyMDk6XHR4ZnNfc29ydChoYW5kbGVycywgWEZTX0dFVEZTTUFQX0RFVlMsIHNpemVvZihzdHJ1Y3QgeGZzX2dldGZzbWFwX2RldiksXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTIxMDpcdFx0XHR4ZnNfZ2V0ZnNtYXBfZGV2X2NvbXBhcmUpO1xuZnMveGZzL3hmc19mc21hcC5jLTEyMTEtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jPTEzMDA9eGZzX2lvY19nZXRmc21hcChcbi0tXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTM0MC1cbmZzL3hmcy94ZnNfZnNtYXAuYzoxMzQxOlx0dHJhY2VfeGZzX2dldGZzbWFwX2xvd19rZXkoaXAtXHUwMDNlaV9tb3VudCwgXHUwMDI2eGhlYWQuZm1oX2tleXNbMF0pO1xuZnMveGZzL3hmc19mc21hcC5jOjEzNDI6XHR0cmFjZV94ZnNfZ2V0ZnNtYXBfaGlnaF9rZXkoaXAtXHUwMDNlaV9tb3VudCwgXHUwMDI2eGhlYWQuZm1oX2tleXNbMV0pO1xuZnMveGZzL3hmc19mc21hcC5jLTEzNDMtXG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEzNTQtXHRcdC8qIFJ1biBxdWVyeSwgcmVjb3JkIGhvdyBtYW55IGVudHJpZXMgd2UgZ290LiAqL1xuZnMveGZzL3hmc19mc21hcC5jOjEzNTU6XHRcdGVycm9yID0geGZzX2dldGZzbWFwKGlwLVx1MDAzZWlfbW91bnQsIFx1MDAyNnhoZWFkLCByZWNzKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzU2LVx0XHRzd2l0Y2ggKGVycm9yKSB7XG4tLVxuZnMveGZzL3hmc19mc21hcC5jLTEzOTctXHRcdHhmc19mc21hcF90b19pbnRlcm5hbChcdTAwMjZ4aGVhZC5mbWhfa2V5c1swXSwgbGFzdF9yZWMpO1xuZnMveGZzL3hmc19mc21hcC5jOjEzOTg6XHRcdHRyYWNlX3hmc19nZXRmc21hcF9sb3dfa2V5KGlwLVx1MDAzZWlfbW91bnQsIFx1MDAyNnhoZWFkLmZtaF9rZXlzWzBdKTtcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzk5LVx0fSB3aGlsZSAoIWRvbmUgXHUwMDI2XHUwMDI2IGhlYWQuZm1oX2VudHJpZXMgXHUwMDNjIGhlYWQuZm1oX2NvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlMgRmlsZXN5c3RlbSBNYXBwaW5nIElPQ1RMKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGB4ZnNfaW9jX2dldGZzbWFwYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBpb2N0bCBoYW5kbGVyLCB0aGUgb25lIHRoYXQmIzM5O3MgZ29pbmcgdG8gaW50ZXJmYWNlIHdpdGggdGhlIHVzZXIgc3BhY2UsIGFuZCBzcGVjaWZpY2FsbHksIGl0IGNhbGxzIGB4ZnNfZ2V0ZnNtYXBgIGZvciB0aGUgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEgc29saWQgdGFyZ2V0IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwga25vd2luZyBob3cgdGhlIGZpbGVzeXN0ZW0gbWFwIGluZm9ybWF0aW9uIGlzIGFjY2Vzc2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTm93LCB0byB0cmFjZSB0aGlzLCBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGZzL3hmcy94ZnNfaW9jdGwuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHNldHVwIGZvciB0aGUgYHhmc19pb2NfZ2V0ZnNtYXBgIGlvY3RsIHdpbGwgYmUgbmVhcmJ5LCBhbG9uZyB3aXRoIHRoZSBvdGhlciBpb2N0bHMgdGhhdCBYRlMgaGFuZGxlcy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gaW4gdGhpcyBmaWxlIHdpbGwgYmUgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2AgYmFzZWQgb24gdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19pb2N0bF9zZXRhdHRyX2dldF90cmFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3hmcy94ZnNfaW9jdGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvY3RsLmM9NjM0PXN0YXRpYyBzdHJ1Y3QgeGZzX3RyYW5zICpcbmZzL3hmcy94ZnNfaW9jdGwuYzo2MzU6eGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zKFxuZnMveGZzL3hmc19pb2N0bC5jLTYzNi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmM9NzUwPXhmc19maWxlYXR0cl9zZXQoXG4tLVxuZnMveGZzL3hmc19pb2N0bC5jLTgwNi1cbmZzL3hmcy94ZnNfaW9jdGwuYzo4MDc6XHR0cCA9IHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFucyhpcCwgcGRxcCk7XG5mcy94ZnMveGZzX2lvY3RsLmMtODA4LVx0aWYgKElTX0VSUih0cCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uOgoKKipYRlMgQXR0cmlidXRlIFNldHRpbmcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGltbWVkaWF0ZWx5IGtub3cgaXQmIzM5O3MgdGhlIFhGUyBpbXBsZW1lbnRhdGlvbiBmb3Igc2V0dGluZyBmaWxlIGF0dHJpYnV0ZXMuIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBjYWxsaW5nIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgLCB3aGljaCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIGlvY3RsLWJhc2VkIGF0dHJpYnV0ZSBtb2RpZmljYXRpb24gdGhhdCYjMzk7cyBtYW5hZ2luZyB0cmFuc2FjdGlvbnMuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoaXMgbWlnaHQgYmUgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb3Igc29tZXRoaW5nIGJleW9uZCBiYXNpYyBwZXJtaXNzaW9ucy90aW1lc3RhbXBzLCBidXQgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gYHhmc19zZXRhdHRyX25vbnNpemVgIGFuZCBjb25maXJtIHdoZXJlIGl0IHJlc2lkZXMuIFRoZSBjb2RlIHBhdGggbG9va3MgbGlrZSBpdCBsaWtlbHkgaGFuZGxlcyB0aGUgbm9uLXNpemUgYXNwZWN0cyBvZiB0aGUgZmlsZSBhdHRyaWJ1dGUgdXBkYXRlLCBzbywgSSYjMzk7bSBnb2luZyB0byBsb29rIGluIGBmcy94ZnMveGZzX2lvcHMuY2AgYW5kIHRha2UgYSBsb29rLiBUaGlzIG1pZ2h0IGJlIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBhdHRyaWJ1dGUgY2hhbmdlIGhhcHBlbnMsIG9yIGF0IGxlYXN0IHdoZXJlIHRoZSBkZXRhaWxzIG9mIGl0IGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnNfc2V0YXR0cl9ub25zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19pb3BzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19pb3BzLmM9Nzc5PXN0YXRpYyBpbnRcbmZzL3hmcy94ZnNfaW9wcy5jOjc4MDp4ZnNfc2V0YXR0cl9ub25zaXplKFxuZnMveGZzL3hmc19pb3BzLmMtNzgxLVx0c3RydWN0IG1udF9pZG1hcFx0KmlkbWFwLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTkwNz14ZnNfdm5fc2V0YXR0cl9zaXplKFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTk0NS1cdFx0aWF0dHItXHUwMDNlaWFfdmFsaWQgXHUwMDI2PSB+QVRUUl9TSVpFO1xuZnMveGZzL3hmc19pb3BzLmM6OTQ2Olx0XHRyZXR1cm4geGZzX3NldGF0dHJfbm9uc2l6ZShpZG1hcCwgZGVudHJ5LCBpcCwgaWF0dHIpO1xuZnMveGZzL3hmc19pb3BzLmMtOTQ3LVx0fVxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTExMzQ9eGZzX3ZuX3NldGF0dHIoXG4tLVxuZnMveGZzL3hmc19pb3BzLmMtMTE2MS1cdFx0aWYgKCFlcnJvcilcbmZzL3hmcy94ZnNfaW9wcy5jOjExNjI6XHRcdFx0ZXJyb3IgPSB4ZnNfc2V0YXR0cl9ub25zaXplKGlkbWFwLCBkZW50cnksIGlwLCBpYXR0cik7XG5mcy94ZnMveGZzX2lvcHMuYy0xMTYzLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBYRlMgQXR0cmlidXRlIFNldHRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgWEZTIGhhbmRsZXMgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgaXQgbG9va3MgbGlrZSBgeGZzX3ZuX3NldGF0dHJgIGFuZCBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBhcyB0aGV5IGJvdGggdWx0aW1hdGVseSBjYWxsIGB4ZnNfc2V0YXR0cl9ub25zaXplYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKU28sIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOiBgaWdub3JlX2hhcmRsaW1pdGAgKG9yIG1heWJlIGBkcXVvdF9hZGRfaW5vZGVzYCBvciBgZHF1b3RfYWRkX3NwYWNlYCBhcyB0aGV5IHJlbGF0ZSB0byBxdW90YXMpLCBgeGZzX2lvY19nZXRmc21hcGAsIGB4ZnNfZmlsZWF0dHJfc2V0YCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGB4ZnNfdm5fc2V0YXR0cmAuCgpIb2xkIG9uLi4uIGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uIHdpdGhpbiBgZnMvcXVvdGEvZHF1b3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBgeGZzX2lvY19nZXRmc21hcGAgZGVmaW5pdGVseSBzZWVtcyBpbnRlcmVzdGluZywgYXMgZG9lcyBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCBgeGZzX3ZuX3NldGF0dHJgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBpbmRlZWQgc3RhdGljLiBPa2F5LCBjb25maXJtZWQuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgYGRxdW90X2FkZF9zcGFjZWAgYXJlIGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlLiBUaW1lIHRvIGNoZWNrIGBmcy9xdW90YS9kcXVvdC5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcXVvdF9hZGRfaW5vZGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jPTEzMDc9c3RhdGljIGludCBpZ25vcmVfaGFyZGxpbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy0xMzE1LVxuZnMvcXVvdGEvZHF1b3QuYzoxMzE2OnN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcyxcbmZzL3F1b3RhL2RxdW90LmMtMTMxNy1cdFx0XHQgICAgc3RydWN0IGRxdW90X3dhcm4gKndhcm4pXG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xNzc3PWludCBkcXVvdF9hbGxvY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTc5NS1cdFx0XHRjb250aW51ZTtcbmZzL3F1b3RhL2RxdW90LmM6MTc5NjpcdFx0cmV0ID0gZHF1b3RfYWRkX2lub2RlcyhkcXVvdCwgMSwgXHUwMDI2d2FybltjbnRdKTtcbmZzL3F1b3RhL2RxdW90LmMtMTc5Ny1cdFx0aWYgKHJldCkge1xuLS1cbmZzL3F1b3RhL2RxdW90LmM9MjAwOT1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTIwNjMtXHRcdFx0XHRcdTAwMjZkcXVvdF9zcmN1LCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZHFfZGF0YV9sb2NrKSk7XG5mcy9xdW90YS9kcXVvdC5jOjIwNjQ6XHRcdHJldCA9IGRxdW90X2FkZF9pbm9kZXModHJhbnNmZXJfdG9bY250XSwgaW5vZGVfdXNhZ2UsXG5mcy9xdW90YS9kcXVvdC5jLTIwNjUtXHRcdFx0XHQgICAgICAgXHUwMDI2d2Fybl90b1tjbnRdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRHF1b3QgQWxsb2NhdGlvbiBhbmQgVHJhbnNmZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkcXVvdHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgdHJhbnNmZXIgcHJvY2Vzc2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgZHF1b3RfYWxsb2NfaW5vZGVgIGFuZCBgX19kcXVvdF90cmFuc2ZlcmAgYm90aCBjYWxsIGBkcXVvdF9hZGRfaW5vZGVzYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiDigJMgdGhleSYjMzk7cmUgdXNpbmcgdGhlIHNhbWUgY29yZSBmdW5jdGlvbiBmb3IgYWRkaW5nIGlub2Rlcy4gYGRxdW90X2FsbG9jX2lub2RlYCBpcyBleHBvcnRlZCwgc28gaXQmIzM5O3MgcHJvYmFibHkgZ290IGV4dGVybmFsIHVzZSwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZHF1b3RfYWRkX2lub2Rlc2AgaXMgZG9pbmcsIHNvIHRoYXQgd2lsbCBtYWtlIG1lIGNoZWNrIGBkcXVvdF9hZGRfc3BhY2VgLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBzcGFjZSBpcyBiZWluZyBhZGRlZCBmb3Igd2hpY2ggaW5vZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RxdW90X2FkZF9zcGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYz0xMzE2PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2Rlcyxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzNjAtXG5mcy9xdW90YS9kcXVvdC5jOjEzNjE6c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcbmZzL3F1b3RhL2RxdW90LmMtMTM2Mi1cdFx0XHQgICBxc2l6ZV90IHJzdl9zcGFjZSwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL3F1b3RhL2RxdW90LmM9MTcwNj1pbnQgX19kcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IGZsYWdzKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTczNS1cdFx0aWYgKHJlc2VydmUpIHtcbmZzL3F1b3RhL2RxdW90LmM6MTczNjpcdFx0XHRyZXQgPSBkcXVvdF9hZGRfc3BhY2UoZHF1b3QsIDAsIG51bWJlciwgZmxhZ3MsIFx1MDAyNndhcm5bY250XSk7XG5mcy9xdW90YS9kcXVvdC5jLTE3MzctXHRcdH0gZWxzZSB7XG5mcy9xdW90YS9kcXVvdC5jOjE3Mzg6XHRcdFx0cmV0ID0gZHF1b3RfYWRkX3NwYWNlKGRxdW90LCBudW1iZXIsIDAsIGZsYWdzLCBcdTAwMjZ3YXJuW2NudF0pO1xuZnMvcXVvdGEvZHF1b3QuYy0xNzM5LVx0XHR9XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0yMDA5PWludCBfX2RxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkcXVvdCAqKnRyYW5zZmVyX3RvKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjA2Ny1cdFx0XHRnb3RvIG92ZXJfcXVvdGE7XG5mcy9xdW90YS9kcXVvdC5jOjIwNjg6XHRcdHJldCA9IGRxdW90X2FkZF9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCBjdXJfc3BhY2UsIHJzdl9zcGFjZSxcbmZzL3F1b3RhL2RxdW90LmMtMjA2OS1cdFx0XHRcdCAgICAgIERRVU9UX1NQQUNFX1dBUk4sIFx1MDAyNndhcm5fdG9bY250XSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgWEZTIFF1b3RhIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIGBfX2RxdW90X2FsbG9jX3NwYWNlYCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgIHNpbmNlIHRoZXkgY2FsbCBgZHF1b3RfYWRkX3NwYWNlYCwgYW5kIHRoZSBmb3JtZXIgaXMgZXhwb3J0ZWQuIFRoYXQgbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzLiBUaGVuIEkgYWxzbyBjb25zaWRlcmVkIGBkcXVvdF9hbGxvY19pbm9kZWAuIEJ1dCwgaGFuZyBvbi4uLiB0aG9zZSBhcmUgbGlrZWx5IGV4dHJlbWVseSBob3QgcGF0aHMgZm9yIHF1b3RhIG9wZXJhdGlvbnMuIFBlcmhhcHMgc29tZXRoaW5nIGxlc3MgZnJlcXVlbnRseSBjYWxsZWQgd291bGQgYmUgbW9yZSByZXZlYWxpbmcgaW4gdGVybXMgb2YgcmVzb3VyY2UgY29udGVudGlvbiBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KClNvLCBzaGlmdGluZyBnZWFycywgSSYjMzk7bSB0aGlua2luZyBgeGZzX2lvY19nZXRmc21hcGAsIGB4ZnNfZmlsZWF0dHJfc2V0YCwgYW5kIGB4ZnNfdm5fc2V0YXR0cmAgbWlnaHQgYmUgYmV0dGVyIHRhcmdldHMuIEkgcmVjYWxsIGBpZ25vcmVfaGFyZGxpbWl0YCBiZWluZyBjYWxsZWQgZnJvbSBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgLCBidXQgdGhhdCBzZWVtcyB0byBiZSBkdXJpbmcgYWxsb2NhdGlvbiwgbm90IGF0IHRoZSBgcXVvdGFjdGxgIGxldmVsLiBJdCYjMzk7cyB0aGUgc3lzdGVtIGNhbGwsIHNvIHRoZSBvdGhlciBtaWdodCBiZSBiZXR0ZXIgZm9jdXNlcyBmb3IgdGhpcyBhbmFseXNpcy4KClllcywgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIGFuIGlvY3RsIGhhbmRsZXIg4oCTIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGB4ZnNfdm5fc2V0YXR0cmAgYWxzbyBzZWVtIHByb21pc2luZy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBRVU9UQWAgYW5kIGBYRlNfRlNgIGFyZSBlc3NlbnRpYWwuIEFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/CgpIbW0sIGB4ZnNfaGFzX3JtYXBidChtcClgIGlzIHVzZWQgaW4gYHhmc19nZXRmc21hcGAuIERvZXMgdGhlIGBYRlNfRlNgIGNvbmZpZ3VyYXRpb24gaGF2ZSBhbnkgZGVwZW5kZW5jeSBvbiBSbWFwYnQ/IE5vLCBpdCYjMzk7cyBhIHJ1bnRpbWUgZmVhdHVyZSwgbm90IGEgY29tcGlsZS10aW1lIGRlcGVuZGVuY3ksIHRoYXQmIzM5O3MgaW1wb3J0YW50LiBSZXZlcnNlIE1hcHBpbmcgQiYjNDM7dHJlZS4KCkFsc28sIHdoYXQgYWJvdXQgYGNhcGFibGVfbm9hdWRpdGA/IFRoYXQmIzM5O3MgdXNlZCBpbiBzZWN1cml0eS9hdWRpdGluZyBjb250ZXh0cy4gTGV0JiMzOTtzIGNoZWNrIGBrZXJuZWwvY2FwYWJpbGl0eS5jYCBmb3IgYGNhcGFibGVfbm9hdWRpdGAuIEl0IHNlZW1zIHRoYXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGluLiBPa2F5LCBzbyB0aGF0JiMzOTtzIG5vdCBhIGNvbmZpZyBvcHRpb24gY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FwYWJsZV9ub2F1ZGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2NhcGFiaWxpdHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvY2FwYWJpbGl0eS5jPTM2ND1FWFBPUlRfU1lNQk9MKG5zX2NhcGFibGUpO1xuLS1cbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzY2LS8qKlxua2VybmVsL2NhcGFiaWxpdHkuYzozNjc6ICogbnNfY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3IgY2FwYWJpbGl0eVxua2VybmVsL2NhcGFiaWxpdHkuYy0zNjgtICogKHVuYXVkaXRlZCkgaW4gZWZmZWN0XG4tLVxua2VybmVsL2NhcGFiaWxpdHkuYy0zNzctICovXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjM3ODpib29sIG5zX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxua2VybmVsL2NhcGFiaWxpdHkuYy0zNzkte1xuLS1cbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzgxLX1cbmtlcm5lbC9jYXBhYmlsaXR5LmM6MzgyOkVYUE9SVF9TWU1CT0wobnNfY2FwYWJsZV9ub2F1ZGl0KTtcbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzgzLVxuLS1cbmtlcm5lbC9jYXBhYmlsaXR5LmM9NDE3PUVYUE9SVF9TWU1CT0woY2FwYWJsZSk7XG4tLVxua2VybmVsL2NhcGFiaWxpdHkuYy00MTktLyoqXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQyMDogKiBjYXBhYmxlX25vYXVkaXQgLSBEZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgdGFzayBoYXMgYSBzdXBlcmlvclxua2VybmVsL2NhcGFiaWxpdHkuYy00MjEtICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXG4tLVxua2VybmVsL2NhcGFiaWxpdHkuYy00MjktICovXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQzMDpib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxua2VybmVsL2NhcGFiaWxpdHkuYy00MzEte1xua2VybmVsL2NhcGFiaWxpdHkuYzo0MzI6XHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDMzLX1cbmtlcm5lbC9jYXBhYmlsaXR5LmM6NDM0OkVYUE9SVF9TWU1CT0woY2FwYWJsZV9ub2F1ZGl0KTtcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDM1LSNlbmRpZiAvKiBDT05GSUdfTVVMVElVU0VSICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRmlsZXN5c3RlbSBGZWF0dXJlcyoqCgpBbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmaWxlc3lzdGVtIGZlYXR1cmVzLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMuIEkga25vdyB3ZSYjMzk7cmUgbW9zdCBsaWtlbHkgZGVhbGluZyB3aXRoIGBDT05GSUdfTVVMVElVU0VSYCBoZXJlLiBCdXQgaG9uZXN0bHksIHRoYXQmIzM5O3MgbmVhcmx5IGFsd2F5cyBlbmFibGVkLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgdGhlIGNyaXRpY2FsIGNvbmRpdGlvbmFsLiBNeSBtYWluIGZvY3VzIGhhcyB0byBiZSBvbiBgUVVPVEFgIGFuZCBgWEZTX0ZTYCwgdGhvc2UgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGNvZGUgdG8gc2VlIGlmIHNvbWV0aGluZyBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBpbnNpZGUgYGZzL3hmcy94ZnNfZnNtYXAuY2AganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGNvbXBpbGUgdGltZSBjaGVja3MgaW52b2x2ZWQgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl04oCZcyBiZWhhdmluZyBleGFjdGx5IGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnNfZnNtYXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3hmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMvTWFrZWZpbGU9NzE9eGZzLXlcdFx0XHRcdCYjNDM7PSB4ZnNfYW9wcy5vIFxcXG4tLVxuZnMveGZzL01ha2VmaWxlLTg1LVx0XHRcdFx0ICAgeGZzX2ZpbGVzdHJlYW0ubyBcXFxuZnMveGZzL01ha2VmaWxlOjg2Olx0XHRcdFx0ICAgeGZzX2ZzbWFwLm8gXFxcbmZzL3hmcy9NYWtlZmlsZS04Ny1cdFx0XHRcdCAgIHhmc19mc29wcy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFhGUyBJbnRlZ3JhdGlvbiBhbmQgUXVvdGEgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWEZTIGFuZCBpdHMgaW50ZWdyYXRpb24sIGFuZCB0aGUgZmFjdCB0aGF0IHRoZSBYRlMgZmlsZXN5c3RlbSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHdoZW4gYENPTkZJR19YRlNfRlNgIGlzIGRlZmluZWQuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkLCBtYWtlcyBzZW5zZS4gQnV0IGl0IGFsd2F5cyBtYWtlcyBtZSBwYXVzZSBhbmQgdGhpbmsgYWJvdXQgdGhlIG90aGVyIGJpdHMuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBxdW90YSBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IGFzIGl0IGludGVyYWN0cyB3aXRoIHRoZSBmaWxlIHN5c3RlbXMuIExldCBtZSBqdXN0IHRha2UgYSBwZWVrIGF0IGBmcy9xdW90YS9kcXVvdC5jYCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGF0IGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIGFueSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBiZWhhdmlvciBvciBvcHRpbWl6YXRpb25zIHRoYXQgZGVwZW5kIG9uIFhGUyBiZWluZyBidWlsdC1pbiB0aGlzIHdheS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRvIGJlIGF3YXJlIG9mPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcXVvdC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5mcy9xdW90YS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19RVU9UQSlcdFx0JiM0Mzs9IGRxdW90Lm9cbmZzL3F1b3RhL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1FGTVRfVjEpXHRcdCYjNDM7PSBxdW90YV92MS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFhGUyBRdW90YSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcXVvdGFzIGFyZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgWEZTIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgYWxsIGNvbnRpbmdlbnQgb24gYENPTkZJR19RVU9UQWAgYmVpbmcgZW5hYmxlZCBkdXJpbmcgY29tcGlsYXRpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIHN3aXRjaC4KCk5vdywgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0aWVkIHRvIHRoZSBgUVVPVEFgIGFuZCBgWEZTX0ZTYCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiBhIGZldyBrZXkgc3ltYm9sczogYHhmc19pb2NfZ2V0ZnNtYXBgLCBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCBgeGZzX3ZuX3NldGF0dHJgLiBgeGZzX3ZuX3NldGF0dHJgIGlzIHByZXR0eSBnZW5lcmFsLCBpdCBpcyBYRlMmIzM5O3MgZ2VuZXJpYyBgc2V0YXR0cmAgaGFuZGxlciBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYGNobW9kYCwgYGNob3duYCwgYW5kIGB0cnVuY2F0ZWAsIHNvIGl0JiMzOTtzIGEgaG90IHBhdGgsIGJ1dCBub3QgYSBodWdlIGNvbmNlcm4uIGB4ZnNfZmlsZWF0dHJfc2V0YCwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggYEZTX0lPQ19TRVRGTEFHU2AgYW5kIGBGU19JT0NfRlNTRVRYQVRUUmAsIHdoaWNoIGFyZSBpb2N0bCBjb21tYW5kcy4gYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIGZvciBgRlNfSU9DX0dFVEZTTUFQYC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQ/CgpMZXQmIzM5O3Mgc2VlLCBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCBpcyBjYWxsZWQgYnkgYHhmc19maWxlYXR0cl9zZXRgLiBBbmQgYm90aCBgeGZzX3ZuX3NldGF0dHJgIGFuZCBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgY2FsbCBgeGZzX3NldGF0dHJfbm9uc2l6ZWAuIEdvb2QgdG8ga25vdyB0aGUgY2FsbCBjaGFpbnMuCgpBbHJpZ2h0LCBub3cgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIGB4ZnNfaW9jX2dldGZzbWFwYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjb3VsZCBpbXBhY3QgaG93IGl0JiMzOTtzIGxpbmtlZCBvciBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19pb2NfZ2V0ZnNtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMveGZzX2ZzbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19mc21hcC5jPTEyOTk9aW50XG5mcy94ZnMveGZzX2ZzbWFwLmM6MTMwMDp4ZnNfaW9jX2dldGZzbWFwKFxuZnMveGZzL3hmc19mc21hcC5jLTEzMDEtXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqCgpSaWdodCwgaXQmIzM5O3Mgbm90IGEgZml4ZWQgZW50aXR5IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoaW5ncyBhcmUgaW4gZmx1eCwgY29uc3RhbnRseSBjaGFuZ2luZy4gVGhhdCBzdGF0aWMgcGVyc3BlY3RpdmUgaXMgZGFuZ2Vyb3VzOyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIGR5bmFtaWMgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGtlcm5lbC4KCkkgbmVlZCB0byBkaWcgaW47IEkgbmVlZCB0byBsb29rIGF0IGhvdyB3ZSYjMzk7cmUgcmVhbGx5IG1ha2luZyBhZGp1c3RtZW50cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHhmc19maWxlYXR0cl9zZXRgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGludGVyYWN0aW9uIHJlc2lkZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbWV0YWRhdGEgY2hhbmdlcyBhcmUgaGFuZGxlZCwgd2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlLCBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgbWFuYWdlZCwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gYW55IHBvdGVudGlhbCBpbmNvbnNpc3RlbmNpZXMgb3IgcmFjZSBjb25kaXRpb25zLiBLbm93aW5nIHRoYXQgdGhlIHN5c3RlbSBpcyBub3Qgc3RhdGljLCBhbmQgY2hhbmdlcyBuZWVkIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGUsIEkgbmVlZCB0byBzZWUgaG93IGB4ZnNfZmlsZWF0dHJfc2V0YCBtYW5hZ2VzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19maWxlYXR0cl9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL3hmc19pb2N0bC5jPTc0OT1pbnRcbmZzL3hmcy94ZnNfaW9jdGwuYzo3NTA6eGZzX2ZpbGVhdHRyX3NldChcbmZzL3hmcy94ZnNfaW9jdGwuYy03NTEtXHRzdHJ1Y3QgbW50X2lkbWFwXHQqaWRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIER5bmFtaWMgU3lzdGVtIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIGl0JiMzOTtzIG5vdCBhIGZpeGVkLCBpbW11dGFibGUgdGhpbmcuIFRoaXMgc3lzdGVtLCB0aGlzIGJlaGF2aW9yLCBpdCYjMzk7cyAqZHluYW1pYyouIFRoYXQmIzM5O3MgdGhlIGtleS4gV2UgY2FuJiMzOTt0IHRyZWF0IGl0IGxpa2UgYSBzbmFwc2hvdDsgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb3ZpbmcgcGFydHMuIFdoZXJlJiMzOTtzIHRoZSBjaGFuZ2UgaGFwcGVuaW5nPwoKTGV0JiMzOTtzIGRpZyBpbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGlucXVpcnksIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIGhvdyBhdHRyaWJ1dGVzIGFyZSBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgd3JpdGVzIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYHhmc192bl9zZXRhdHRyYC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIHJpZ2h0IGFyZWEgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gdGhlIGNoYW5nZXMgYmVpbmcgZGVzY3JpYmVkLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBhdHRyaWJ1dGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZzX3ZuX3NldGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvcHMuYz05MDY9aW50XG5mcy94ZnMveGZzX2lvcHMuYzo5MDc6eGZzX3ZuX3NldGF0dHJfc2l6ZShcbmZzL3hmcy94ZnNfaW9wcy5jLTkwOC1cdHN0cnVjdCBtbnRfaWRtYXBcdCppZG1hcCxcbi0tXG5mcy94ZnMveGZzX2lvcHMuYz0xMTMzPVNUQVRJQyBpbnRcbmZzL3hmcy94ZnNfaW9wcy5jOjExMzQ6eGZzX3ZuX3NldGF0dHIoXG5mcy94ZnMveGZzX2lvcHMuYy0xMTM1LVx0c3RydWN0IG1udF9pZG1hcFx0KmlkbWFwLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTExNTQtXG5mcy94ZnMveGZzX2lvcHMuYzoxMTU1Olx0XHRlcnJvciA9IHhmc192bl9zZXRhdHRyX3NpemUoaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMveGZzL3hmc19pb3BzLmMtMTE1Ni1cdFx0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMKTtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYz0xMjY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB4ZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy0xMjY4LVx0LmdldGF0dHJcdFx0PSB4ZnNfdm5fZ2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jOjEyNjk6XHQuc2V0YXR0clx0XHQ9IHhmc192bl9zZXRhdHRyLFxuZnMveGZzL3hmc19pb3BzLmMtMTI3MC1cdC5saXN0eGF0dHJcdFx0PSB4ZnNfdm5fbGlzdHhhdHRyLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEyNzg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy0xMjk2LVx0LmdldGF0dHJcdFx0PSB4ZnNfdm5fZ2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jOjEyOTc6XHQuc2V0YXR0clx0XHQ9IHhmc192bl9zZXRhdHRyLFxuZnMveGZzL3hmc19pb3BzLmMtMTI5OC1cdC5saXN0eGF0dHJcdFx0PSB4ZnNfdm5fbGlzdHhhdHRyLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfY2lfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy0xMzI0LVx0LmdldGF0dHJcdFx0PSB4ZnNfdm5fZ2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jOjEzMjU6XHQuc2V0YXR0clx0XHQ9IHhmc192bl9zZXRhdHRyLFxuZnMveGZzL3hmc19pb3BzLmMtMTMyNi1cdC5saXN0eGF0dHJcdFx0PSB4ZnNfdm5fbGlzdHhhdHRyLFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEzMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMveGZzL3hmc19pb3BzLmMtMTMzNi1cdC5nZXRhdHRyXHRcdD0geGZzX3ZuX2dldGF0dHIsXG5mcy94ZnMveGZzX2lvcHMuYzoxMzM3Olx0LnNldGF0dHJcdFx0PSB4ZnNfdm5fc2V0YXR0cixcbmZzL3hmcy94ZnNfaW9wcy5jLTEzMzgtXHQubGlzdHhhdHRyXHRcdD0geGZzX3ZuX2xpc3R4YXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2ODcKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogOTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBUYXJnZXQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBmb3IgQ2FwYWJpbGl0eSBDaGVjayBBdWRpdCBNaXRpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgeGZzX3ZuX3NldGF0dHJgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4gYHhmc192bl9zZXRhdHRyX3NpemVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbm9uLXN0YXRpYy4gV2Ugd2VyZSBjb25zaWRlcmluZyBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgYXMgYSByZXBsYWNlbWVudCwgYnV0IHRoYXQmIzM5O3Mgb25seSBmb3Igc2l6ZSBjaGFuZ2VzLiBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgaGFuZGxlcyB0aGUgbm9uLXNpemUgYXR0cmlidXRlIGNoYW5nZXMsIGFuZCB0aGF0IG9uZSwgc3VycHJpc2luZ2x5LCAqaXMqIHN0YXRpYyBidXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzIGFjdHVhbGx5IG1vZGlmaWVkIGluIHRoZSBwYXRjaC4gTm93LCB0aGUgZnV6emVyICpjYW4qIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zLCBpZiB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBidXQgZ2VuZXJhbGx5IGl0JiMzOTtzIGJldHRlciB0byBwcm92aWRlIG5vbi1zdGF0aWMgc3ltYm9scy4gSG93ZXZlciwgU3l6a2FsbGVyICpjYW4qIGdldCBzdGF0aWMgZnVuY3Rpb25zLgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwYXRjaCAqbW9kaWZpZXMqIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGF0IGlzIGVzc2VudGlhbC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBvdGhlciBzdGF0aWMgZnVuY3Rpb25zOiBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCwgYHhmc19nZXRmc21hcGAsIGFuZCBgaWdub3JlX2hhcmRsaW1pdGAuIFNvLCBJIHN0YXJ0ZWQgd2l0aCB0aGUgc2V0IG9mIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbnM6CgoqICAgYGlnbm9yZV9oYXJkbGltaXRgCiogICBgeGZzX2dldGZzbWFwYAoqICAgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2AKKiAgIGB4ZnNfc2V0YXR0cl9ub25zaXplYAoKQnV0IHdhaXQsIGB4ZnNfZ2V0ZnNtYXBgIGlzIHN0YXRpYywgd2hpbGUgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIG5vbi1zdGF0aWMuIFNhbWUgZm9yIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGFuZCBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBhbmQgYHhmc192bl9zZXRhdHRyX3NpemVgLiBTbywgSSYjMzk7bGwgcHJvdmlkZSBib3RoIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zIEFORCB0aGVpciBub24tc3RhdGljIGNhbGxlcnM6CgoqICAgYHhmc19pb2NfZ2V0ZnNtYXBgCiogICBgeGZzX2ZpbGVhdHRyX3NldGAKKiAgIGB4ZnNfdm5fc2V0YXR0cl9zaXplYAoqICAgYF9fZHF1b3RfYWxsb2Nfc3BhY2VgCiogICBgZHF1b3RfYWxsb2NfaW5vZGVgCiogICBgX19kcXVvdF90cmFuc2ZlcmAKCkhvd2V2ZXIsIHRoZSBtYWluIGNhbGxlciB0byBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgaXMsIGluIGZhY3QsIGB4ZnNfdm5fc2V0YXR0cmAsIHdoaWNoIGlzIHN0YXRpYy4gU28sIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHRvIHByb3ZpZGUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgKmRpcmVjdCogY2FsbGVycywgbGVhZGluZyB0byB0aGlzIHNldCBvZiBzeW1ib2xzOgoKKiAgIGBpZ25vcmVfaGFyZGxpbWl0YAoqICAgYHhmc19nZXRmc21hcGAKKiAgIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgCiogICBgeGZzX3NldGF0dHJfbm9uc2l6ZWAKKiAgIGB4ZnNfaW9jX2dldGZzbWFwYAoqICAgYHhmc19maWxlYXR0cl9zZXRgCiogICBgZHF1b3RfYWRkX2lub2Rlc2AKKiAgIGBkcXVvdF9hZGRfc3BhY2VgCgpUaGVuLCByZWZpbmluZyBldmVuIGZ1cnRoZXIsIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOgoKKiAgIGB4ZnNfaW9jX2dldGZzbWFwYAoqICAgYHhmc19maWxlYXR0cl9zZXRgCiogICBgeGZzX3NldGF0dHJfbm9uc2l6ZWAKKiAgIGBkcXVvdF9hZGRfaW5vZGVzYAoqICAgYGRxdW90X2FkZF9zcGFjZWAKClRoaXMgc2hvdWxkIGdpdmUgZ29vZCBjb3ZlcmFnZSwgaGl0dGluZyB0aGUgaW9jdGxzIGFuZCBxdW90YSBwYXRocyB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgY29yZSBjaGFuZ2UgaXMgcmVsYXRlZCB0byBgY2FwYWJsZV9ub2F1ZGl0YCwgcmVwbGFjaW5nIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGNhcGFiaWxpdHkgY2hlY2tzIHdpdGhpbiBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzaG91bGQgYmU6IGBRVU9UQWAgYW5kIGBYRlNfRlNgLCB3aGljaCBhcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBtb2RpZmllZCBmaWxlcy4gWWVzLCB0aG9zZSBhcmUgc3VmZmljaWVudC4gT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzIG5vdy4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVVPVEEmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY19nZXRmc21hcCYjMzQ7LAogICAgJiMzNDt4ZnNfZmlsZWF0dHJfc2V0JiMzNDssCiAgICAmIzM0O3hmc19zZXRhdHRyX25vbnNpemUmIzM0OywKICAgICYjMzQ7ZHF1b3RfYWRkX2lub2RlcyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hZGRfc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2FwYWJsZV9ub2F1ZGl0YCBhbmQgcmVwbGFjZXMgYGhhc19jYXBhYmlsaXR5X25vYXVkaXRgIGFuZCBgY2FwYWJsZWAgd2l0aCBpdCBpbiBYRlMgYW5kIHF1b3RhIHN1YnN5c3RlbXMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3IgYnkgc2V0dGluZyBgUEZfU1VQRVJQUklWYCB3aXRob3V0IGdlbmVyYXRpbmcgYXVkaXQgbWVzc2FnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjYXBhYmlsaXR5IGNoZWNrcyBkdXJpbmcgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIFhGUyBpb2N0bHMvc2V0YXR0ciBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfaW9jX2dldGZzbWFwJiMzNDssCiAgICAmIzM0O3hmc19maWxlYXR0cl9zZXQmIzM0OywKICAgICYjMzQ7eGZzX3NldGF0dHJfbm9uc2l6ZSYjMzQ7LAogICAgJiMzNDtkcXVvdF9hZGRfaW5vZGVzJiMzNDssCiAgICAmIzM0O2RxdW90X2FkZF9zcGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYXBhYmxlX25vYXVkaXRgIGFuZCByZXBsYWNlcyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCB3aXRoIGl0IGluIFhGUyBhbmQgcXVvdGEgc3Vic3lzdGVtcy4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBieSBzZXR0aW5nIGBQRl9TVVBFUlBSSVZgIHdpdGhvdXQgZ2VuZXJhdGluZyBhdWRpdCBtZXNzYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNhcGFiaWxpdHkgY2hlY2tzIGR1cmluZyBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyMjowOS45NzkzODExODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI2MTU5ODMxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVVPVEFcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2NfZ2V0ZnNtYXBcIixcbiAgICBcInhmc19maWxlYXR0cl9zZXRcIixcbiAgICBcInhmc19zZXRhdHRyX25vbnNpemVcIixcbiAgICBcImRxdW90X2FkZF9pbm9kZXNcIixcbiAgICBcImRxdW90X2FkZF9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGNhcGFibGVfbm9hdWRpdGAgYW5kIHJlcGxhY2VzIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgIHdpdGggaXQgaW4gWEZTIGFuZCBxdW90YSBzdWJzeXN0ZW1zLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIGJ5IHNldHRpbmcgYFBGX1NVUEVSUFJJVmAgd2l0aG91dCBnZW5lcmF0aW5nIGF1ZGl0IG1lc3NhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY2FwYWJpbGl0eSBjaGVja3MgZHVyaW5nIHF1b3RhIGVuZm9yY2VtZW50IGFuZCBYRlMgaW9jdGxzL3NldGF0dHIgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjI6MDkuOTc5Mzg1NjgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2NDIxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5N2VkMWFiMTJiZDVhODY2YzlhZWU2OTkxYzgzZjRkNzUxMzYyMjIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTQ6MjI6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmNcXG5pbmRleCA5ODUwZGUzOTU1ZDMxMy4uZGFiOTM0MjJhNTdiYWUgMTAwNjQ0XFxuLS0tIGEvZnMvcXVvdGEvZHF1b3QuY1xcbisrKyBiL2ZzL3F1b3RhL2RxdW90LmNcXG5AQCAtMTMwOCw3ICsxMzA4LDcgQEAgc3RhdGljIGludCBpZ25vcmVfaGFyZGxpbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcXHUwMDI2c2JfZHFvcHQoZHF1b3QtXFx1MDAzZWRxX3NiKS1cXHUwMDNlaW5mb1tkcXVvdC1cXHUwMDNlZHFfaWQudHlwZV07XFxuIFxcbi1cXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRyZXR1cm4gY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfUkVTT1VSQ0UpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAgICAoaW5mby1cXHUwMDNlZHFpX2Zvcm1hdC1cXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxcbiBcXHRcXHQhKGluZm8tXFx1MDAzZWRxaV9mbGFncyBcXHUwMDI2IERRRl9ST09UX1NRVUFTSCkpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNtYXAuYyBiL2ZzL3hmcy94ZnNfZnNtYXAuY1xcbmluZGV4IGI2YTNiYzlmMTQzYzhlLi4wNDFiYjIxMDVlYzY0ZCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2ZzbWFwLmNcXG4rKysgYi9mcy94ZnMveGZzX2ZzbWFwLmNcXG5AQCAtMTE3NCw4ICsxMTc0LDcgQEAgeGZzX2dldGZzbWFwKFxcbiBcXHRpZiAoIXhmc19nZXRmc21hcF9jaGVja19rZXlzKFxcdTAwMjZoZWFkLVxcdTAwM2VmbWhfa2V5c1swXSwgXFx1MDAyNmhlYWQtXFx1MDAzZWZtaF9rZXlzWzFdKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHR1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KGN1cnJlbnQsIENBUF9TWVNfQURNSU4pO1xcbitcXHR1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSBcXHUwMDI2XFx1MDAyNiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19BRE1JTik7XFxuIFxcdGhlYWQtXFx1MDAzZWZtaF9lbnRyaWVzID0gMDtcXG4gXFxuIFxcdC8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqL1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5pbmRleCAxYjUzNzAxYmViZWExYS4uMzc0YjQ4OGYwNDE2YzggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXFxuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXFxuQEAgLTY0Nyw3ICs2NDcsNyBAQCB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnMoXFxuIFxcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbiBcXG4gXFx0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2NfaWNoYW5nZShpcCwgTlVMTCwgTlVMTCwgcGRxcCxcXG4tXFx0XFx0XFx0aGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfRk9XTkVSKSwgXFx1MDAyNnRwKTtcXG4rXFx0XFx0XFx0XFx0XFx0Y2FwYWJsZV9ub2F1ZGl0KENBUF9GT1dORVIpLCBcXHUwMDI2dHApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gb3V0X2Vycm9yO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuY1xcbmluZGV4IDYzMzlmNDk1NmVjYjM5Li5jZTlmOGI4NDY4ZmNiZSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xcbisrKyBiL2ZzL3hmcy94ZnNfaW9wcy5jXFxuQEAgLTgzNSw3ICs4MzUsOCBAQCB4ZnNfc2V0YXR0cl9ub25zaXplKFxcbiBcXHR9XFxuIFxcbiBcXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLFxcbi1cXHRcXHRcXHRoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KGN1cnJlbnQsIENBUF9GT1dORVIpLCBcXHUwMDI2dHApO1xcbitcXHRcXHRcXHRcXHRcXHRjYXBhYmxlX25vYXVkaXQoQ0FQX0ZPV05FUiksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ0cCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBvdXRfZHFyZWxlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxcbmluZGV4IDM3ZGI5MmIzZDZmODllLi5mODUzMmQ5MmZjYWQ2OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oXFxuQEAgLTE0NSw2ICsxNDUsNyBAQCBleHRlcm4gYm9vbCBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNhcCk7XFxuIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcXG4gZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTtcXG4rYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcCk7XFxuIGV4dGVybiBib29sIG5zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XFxuIGV4dGVybiBib29sIG5zX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcXG4gZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZV9zZXRpZChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcXG5AQCAtMTY3LDYgKzE2OCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2FwYWJpbGl0eS5jIGIva2VybmVsL2NhcGFiaWxpdHkuY1xcbmluZGV4IDgyOWY0OWFlMDdiOTY1Li4zZDAzODdmYjkzYTM4YyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jXFxuKysrIGIva2VybmVsL2NhcGFiaWxpdHkuY1xcbkBAIC0zMjYsNyArMzI2LDYgQEAgYm9vbCBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNhcClcXG4ge1xcbiBcXHRyZXR1cm4gaGFzX25zX2NhcGFiaWxpdHlfbm9hdWRpdCh0LCBcXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0woaGFzX2NhcGFiaWxpdHlfbm9hdWRpdCk7XFxuIFxcbiBzdGF0aWMgYm9vbCBuc19jYXBhYmxlX2NvbW1vbihzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLFxcbiBcXHRcXHRcXHQgICAgICBpbnQgY2FwLFxcbkBAIC00MTYsNiArNDE1LDIzIEBAIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxcbiBcXHRyZXR1cm4gbnNfY2FwYWJsZShcXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woY2FwYWJsZSk7XFxuK1xcbisvKipcXG4rICogY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3JcXG4rICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXFxuKyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IHRvIGJlIHRlc3RlZCBmb3JcXG4rICpcXG4rICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50XFxuKyAqIGlzc3Vpbmcgc3B1cmlvdXMgYXVkaXQgbWVzc2FnZXMuXFxuKyAqXFxuKyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxcbisgKiBhc3N1bXB0aW9uIHRoYXQgaXQncyBhYm91dCB0byBiZSB1c2VkLlxcbisgKi9cXG4rYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcClcXG4re1xcbitcXHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFxcdTAwMjZpbml0X3VzZXJfbnMsIGNhcCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChjYXBhYmxlX25vYXVkaXQpO1xcbiAjZW5kaWYgLyogQ09ORklHX01VTFRJVVNFUiAqL1xcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjEwLjQ3NDY5OTkxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMyMTIwNjU2NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFVT1RBXCIsXG4gICAgXCJYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnNfaW9jX2dldGZzbWFwXCIsXG4gICAgXCJ4ZnNfZmlsZWF0dHJfc2V0XCIsXG4gICAgXCJ4ZnNfc2V0YXR0cl9ub25zaXplXCIsXG4gICAgXCJkcXVvdF9hZGRfaW5vZGVzXCIsXG4gICAgXCJkcXVvdF9hZGRfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYXBhYmxlX25vYXVkaXRgIGFuZCByZXBsYWNlcyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCB3aXRoIGl0IGluIFhGUyBhbmQgcXVvdGEgc3Vic3lzdGVtcy4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBieSBzZXR0aW5nIGBQRl9TVVBFUlBSSVZgIHdpdGhvdXQgZ2VuZXJhdGluZyBhdWRpdCBtZXNzYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNhcGFiaWxpdHkgY2hlY2tzIGR1cmluZyBxdW90YSBlbmZvcmNlbWVudCBhbmQgWEZTIGlvY3Rscy9zZXRhdHRyIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTdlZDFhYjEyYmQ1YTg2NmM5YWVlNjk5MWM4M2Y0ZDc1MTM2MjIyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTQ6MjI6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuY1xuaW5kZXggOTg1MGRlMzk1NWQzMTMuLmRhYjkzNDIyYTU3YmFlIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvZHF1b3QuY1xuKysrIGIvZnMvcXVvdGEvZHF1b3QuY1xuQEAgLTEzMDgsNyArMTMwOCw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIHtcbiBcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2c2JfZHFvcHQoZHF1b3QtXHUwMDNlZHFfc2IpLVx1MDAzZWluZm9bZHF1b3QtXHUwMDNlZHFfaWQudHlwZV07XG4gXG4tXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcdTAwMjZcdTAwMjZcbitcdHJldHVybiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19SRVNPVVJDRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAgKGluZm8tXHUwMDNlZHFpX2Zvcm1hdC1cdTAwM2VxZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEIHx8XG4gXHRcdCEoaW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2IERRRl9ST09UX1NRVUFTSCkpO1xuIH1cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzbWFwLmMgYi9mcy94ZnMveGZzX2ZzbWFwLmNcbmluZGV4IGI2YTNiYzlmMTQzYzhlLi4wNDFiYjIxMDVlYzY0ZCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZnNtYXAuY1xuKysrIGIvZnMveGZzL3hmc19mc21hcC5jXG5AQCAtMTE3NCw4ICsxMTc0LDcgQEAgeGZzX2dldGZzbWFwKFxuIFx0aWYgKCF4ZnNfZ2V0ZnNtYXBfY2hlY2tfa2V5cyhcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzBdLCBcdTAwMjZoZWFkLVx1MDAzZWZtaF9rZXlzWzFdKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR1c2Vfcm1hcCA9IHhmc19oYXNfcm1hcGJ0KG1wKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfU1lTX0FETUlOKTtcbitcdHVzZV9ybWFwID0geGZzX2hhc19ybWFwYnQobXApIFx1MDAyNlx1MDAyNiBjYXBhYmxlX25vYXVkaXQoQ0FQX1NZU19BRE1JTik7XG4gXHRoZWFkLVx1MDAzZWZtaF9lbnRyaWVzID0gMDtcbiBcbiBcdC8qIFNldCB1cCBvdXIgZGV2aWNlIGhhbmRsZXJzLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLjM3NGI0ODhmMDQxNmM4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4rKysgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC02NDcsNyArNjQ3LDcgQEAgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zKFxuIFx0XHRnb3RvIG91dF9lcnJvcjtcbiBcbiBcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2ljaGFuZ2UoaXAsIE5VTEwsIE5VTEwsIHBkcXAsXG4tXHRcdFx0aGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfRk9XTkVSKSwgXHUwMDI2dHApO1xuK1x0XHRcdFx0XHRjYXBhYmxlX25vYXVkaXQoQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZXJyb3I7XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuY1xuaW5kZXggNjMzOWY0OTU2ZWNiMzkuLmNlOWY4Yjg0NjhmY2JlIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5AQCAtODM1LDcgKzgzNSw4IEBAIHhmc19zZXRhdHRyX25vbnNpemUoXG4gXHR9XG4gXG4gXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pY2hhbmdlKGlwLCB1ZHFwLCBnZHFwLCBOVUxMLFxuLVx0XHRcdGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgQ0FQX0ZPV05FUiksIFx1MDAyNnRwKTtcbitcdFx0XHRcdFx0Y2FwYWJsZV9ub2F1ZGl0KENBUF9GT1dORVIpLFxuK1x0XHRcdFx0XHRcdTAwMjZ0cCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2RxcmVsZTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oXG5pbmRleCAzN2RiOTJiM2Q2Zjg5ZS4uZjg1MzJkOTJmY2FkNjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmhcbkBAIC0xNDUsNiArMTQ1LDcgQEAgZXh0ZXJuIGJvb2wgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApO1xuIGV4dGVybiBib29sIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7XG4gZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTtcbitib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKTtcbiBleHRlcm4gYm9vbCBuc19jYXBhYmxlKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApO1xuIGV4dGVybiBib29sIG5zX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTtcbiBleHRlcm4gYm9vbCBuc19jYXBhYmxlX3NldGlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsIGludCBjYXApO1xuQEAgLTE2Nyw2ICsxNjgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhcGFibGUoaW50IGNhcClcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rc3RhdGljIGlubGluZSBib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbiBzdGF0aWMgaW5saW5lIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5pbmRleCA4MjlmNDlhZTA3Yjk2NS4uM2QwMzg3ZmI5M2EzOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jXG4rKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jXG5AQCAtMzI2LDcgKzMyNiw2IEBAIGJvb2wgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApXG4ge1xuIFx0cmV0dXJuIGhhc19uc19jYXBhYmlsaXR5X25vYXVkaXQodCwgXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xuIH1cbi1FWFBPUlRfU1lNQk9MKGhhc19jYXBhYmlsaXR5X25vYXVkaXQpO1xuIFxuIHN0YXRpYyBib29sIG5zX2NhcGFibGVfY29tbW9uKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnMsXG4gXHRcdFx0ICAgICAgaW50IGNhcCxcbkBAIC00MTYsNiArNDE1LDIzIEBAIGJvb2wgY2FwYWJsZShpbnQgY2FwKVxuIFx0cmV0dXJuIG5zX2NhcGFibGUoXHUwMDI2aW5pdF91c2VyX25zLCBjYXApO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGNhcGFibGUpO1xuK1xuKy8qKlxuKyAqIGNhcGFibGVfbm9hdWRpdCAtIERldGVybWluZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIHN1cGVyaW9yXG4rICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXG4rICogQGNhcDogVGhlIGNhcGFiaWxpdHkgdG8gYmUgdGVzdGVkIGZvclxuKyAqXG4rICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYXBhYmxlKCksIGV4Y2VwdCBpdCB1c2VzIENBUF9PUFRfTk9BVURJVCBhcyB0byBwcmV2ZW50XG4rICogaXNzdWluZyBzcHVyaW91cyBhdWRpdCBtZXNzYWdlcy5cbisgKlxuKyAqIFRoaXMgc2V0cyBQRl9TVVBFUlBSSVYgb24gdGhlIHRhc2sgaWYgdGhlIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuKyAqIGFzc3VtcHRpb24gdGhhdCBpdCdzIGFib3V0IHRvIGJlIHVzZWQuXG4rICovXG4rYm9vbCBjYXBhYmxlX25vYXVkaXQoaW50IGNhcClcbit7XG4rXHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKTtcbit9XG4rRVhQT1JUX1NZTUJPTChjYXBhYmxlX25vYXVkaXQpO1xuICNlbmRpZiAvKiBDT05GSUdfTVVMVElVU0VSICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyMjoxMC40NzQ3MDEzMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI4Njg4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDYXBhYmlsaXR5IENoZWNrIFJlcGxhY2VtZW50IGluIEtlcm5lbCBDb2RlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKWAsIGluIGBrZXJuZWwvY2FwYWJpbGl0eS5jYCBhbmQgYGluY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhYm91dCByZXBsYWNpbmcgZXhpc3RpbmcgY2FwYWJpbGl0eSBjaGVja3Mgd2l0aCB0aGlzIG5ldyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFpbWluZyB0byBzdXBwcmVzcyBhdWRpdCBtZXNzYWdlcyBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cblxuSSdtIHNlZWluZyBpdCBzd2FwIG91dCBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCAuLi4pYCB3aXRoIGBjYXBhYmxlX25vYXVkaXQoLi4uKWAgd2l0aGluIHRoZSBYRlMgZmlsZXN5c3RlbSBjb2RlIChgZnMveGZzL3hmc19mc21hcC5jYCwgYGZzL3hmcy94ZnNfaW9jdGwuY2AsIGFuZCBgZnMveGZzL3hmc19pb3BzLmNgKS4gQW5kIGluIHRoZSBxdW90YSBjb2RlIChgZnMvcXVvdGEvZHF1b3QuY2ApLCBpdCdzIGNoYW5naW5nIGBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpYCB0byBgY2FwYWJsZV9ub2F1ZGl0KENBUF9TWVNfUkVTT1VSQ0UpYC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgdGhlIGJlaGF2aW9yIG9mIHRob3NlIGNhcGFiaWxpdHkgY2hlY2tzIGlzIGJlaW5nIGFsdGVyZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBGb3IgZXhhbXBsZSwgaW4gYGZzL3F1b3RhL2RxdW90LmNgIHdpdGhpbiBgaWdub3JlX2hhcmRsaW1pdGAsIHdlJ3JlIGdvaW5nIGZyb20gYGNhcGFibGVgIHRvIGBjYXBhYmxlX25vYXVkaXRgLCBkaXJlY3RseSBhZmZlY3RpbmcgYXVkaXQgbG9nZ2luZy5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgWEZTIGNoYW5nZXMgbW9yZSBjbG9zZWx5LiBUaGUgcmVwbGFjZW1lbnQgb2YgYGhhc19jYXBhYmlsaXR5X25vYXVkaXQoY3VycmVudCwgLi4uKWAgd2l0aCBgY2FwYWJsZV9ub2F1ZGl0KC4uLilgIGluIFhGUyBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGhvd2V2ZXIuLi4gd2FpdCBhIHNlY29uZC4uLiB0aGVyZSdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBoZXJlLiBEb2Vzbid0IGBjYXBhYmxlX25vYXVkaXRgIGJlaGF2ZSBkaWZmZXJlbnRseSB3aXRoIHRoZSBgUEZfU1VQRVJQUklWYCBmbGFnPyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgbWlnaHQgbm90IGJlIHNldHRpbmcgdGhhdCBmbGFnLCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBkb2VzLiBMZXQncyBtYWtlIHN1cmUuXG5cbk9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGlzLiBUaGUgYGNhcGFibGVfbm9hdWRpdGAgY2FsbCBsZWFkcyB0byBgbnNfY2FwYWJsZV9ub2F1ZGl0KFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKWAsIHdoaWNoIHRoZW4gY2FsbHMgYG5zX2NhcGFibGVfY29tbW9uKG5zLCBjYXAsIENBUF9PUFRfTk9BVURJVClgLiBJbXBvcnRhbnRseSwgYG5zX2NhcGFibGVfY29tbW9uYCAqZG9lcyogc2V0IGBQRl9TVVBFUlBSSVZgIGlmIHRoZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZS4gQnV0LCBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgZ29lcyB0aHJvdWdoIGEgZGlmZmVyZW50IHBhdGgg4oCTIGl0IGNhbGxzIGBoYXNfbnNfY2FwYWJpbGl0eV9ub2F1ZGl0KHQsIFx1MDAyNmluaXRfdXNlcl9ucywgY2FwKWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlY3VyaXR5X2NhcGFibGUodC1cdTAwM2VjcmVkLCBucywgY2FwLCBDQVBfT1BUX05PQVVESVQpYC4gQW5kIHRoaXMgbGFzdCBjYWxsICpkb2VzIG5vdCogc2V0IGBQRl9TVVBFUlBSSVZgLiBUaGF0IG1ha2VzIHRoaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvIHRoZSBwcmltYXJ5IGltcGFjdCBpcyBpbiBgZnMvcXVvdGEvZHF1b3QuY2AgYW5kIHdpdGhpbiB0aGUgWEZTIGZpbGVzLiBXaGF0IGNvbmZpZ3MgZG8gd2UgbmVlZCB0byB2ZXJpZnkgaGVyZT8gV2VsbCwgYENPTkZJR19RVU9UQWAgYW5kIGBDT05GSUdfWEZTX0ZTYCBzaG91bGQgYmUgcmVsZXZhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGZpbGVzIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyMjoxOS4xMDMzOTIyMDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzNDYzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVT1RBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZy01LVxcbmZzL3F1b3RhL0tjb25maWc6Njpjb25maWcgUVVPVEFcXG5mcy9xdW90YS9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUXVvdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctMTktXFxuZnMvcXVvdGEvS2NvbmZpZzoyMDpjb25maWcgUVVPVEFfTkVUTElOS19JTlRFUkZBQ0VcXG5mcy9xdW90YS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZz0yOD1jb25maWcgUFJJTlRfUVVPVEFfV0FSTklOR1xcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy0zNy1cXG5mcy9xdW90YS9LY29uZmlnOjM4OmNvbmZpZyBRVU9UQV9ERUJVR1xcbmZzL3F1b3RhL0tjb25maWctMzktXFx0Ym9vbCBcXFwiQWRkaXRpb25hbCBxdW90YSBzYW5pdHkgY2hlY2tzXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy00Ni0jIEdlbmVyaWMgc3VwcG9ydCBmb3IgdHJlZSBzdHJ1Y3R1cmVkIHF1b3RhIGZpbGVzLiBTZWxlY3RlZCB3aGVuIG5lZWRlZC5cXG5mcy9xdW90YS9LY29uZmlnOjQ3OmNvbmZpZyBRVU9UQV9UUkVFXFxuZnMvcXVvdGEvS2NvbmZpZy00OC1cXHQgdHJpc3RhdGVcXG4tLVxcbmZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctNjctXFxuZnMvcXVvdGEvS2NvbmZpZzo2ODpjb25maWcgUVVPVEFDVExcXG5mcy9xdW90YS9LY29uZmlnLTY5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjI6MTkuMTYxNzQ2NDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2Njg4MTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIFhGUyBhbmQgUXVvdGEgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHNvbWUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlcyByZXZvbHZpbmcgYXJvdW5kIHF1b3RhIG1hbmFnZW1lbnQgaW4gWEZTLiBCYXNlZCBvbiB0aGUgaW5pdGlhbCBzZXR1cCwgSSdtIHRoaW5raW5nIHRoZSByb290IG9mIHRoZSBpc3N1ZSBpcyB0aWVkIHRvIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGBRVU9UQWAgYWxvbmdzaWRlIGBYRlNfRlNgLiBUbyBzdGFydCwgSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBmdW5jdGlvbnMuIGBpZ25vcmVfaGFyZGxpbWl0YCBpbiBgZnMvcXVvdGEvZHF1b3QuY2AgaXMgdGhlIG9idmlvdXMgZmlyc3QgcGxhY2UgdG8gc3RhcnQsIHNpbmNlIGl0J3MgZGlyZWN0bHkgZGVhbGluZyB3aXRoIHF1b3RhIGNoZWNrcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBvbiBhIGhvdCBwYXRoLiBUaGVuIEknbSBhbHNvIGxvb2tpbmcgYXQgYHhmc19nZXRmc21hcGAgaW4gYGZzL3hmcy94ZnNfZnNtYXAuY2Agd2hpY2ggSSBiZWxpZXZlIGlzIGFuIGlvY3RsIGhhbmRsZXIgc28gSSBjYW4gc2VlIHdoYXQga2luZCBvZiBvdmVyaGVhZCB0aGF0IG1pZ2h0IGludHJvZHVjZS4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgYHNldGF0dHJgIGNhbGxzLCBzbyBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCBpbiBgZnMveGZzL3hmc19pb2N0bC5jYCBhbmQgYHhmc19zZXRhdHRyX25vbnNpemVgIGluIGBmcy94ZnMveGZzX2lvcHMuY2AgYXJlIGFsc28gb24gbXkgcmFkYXIuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGJlaGF2aW9yIG9mIGBpZ25vcmVfaGFyZGxpbWl0YCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjI6MjMuOTI4NjMwMTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjUzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlnbm9yZV9oYXJkbGltaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvZHF1b3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9xdW90YS9kcXVvdC5jPTEyOTI9c3RhdGljIHZvaWQgZmx1c2hfd2FybmluZ3Moc3RydWN0IGRxdW90X3dhcm4gKndhcm4pXFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jLTEzMDYtXFxuZnMvcXVvdGEvZHF1b3QuYzoxMzA3OnN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbmZzL3F1b3RhL2RxdW90LmMtMTMwOC17XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTEzMTY9c3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzI5LVxcdCAgICBuZXdpbm9kZXMgXFx1MDAzZSBkcXVvdC1cXHUwMDNlZHFfZHFiLmRxYl9paGFyZGxpbWl0IFxcdTAwMjZcXHUwMDI2XFxuZnMvcXVvdGEvZHF1b3QuYzoxMzMwOiAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTMzMS1cXHRcXHRwcmVwYXJlX3dhcm5pbmcod2FybiwgZHF1b3QsIFFVT1RBX05MX0lIQVJEV0FSTik7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jLTEzMzktXFx0ICAgIGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKSBcXHUwMDNlPSBkcXVvdC1cXHUwMDNlZHFfZHFiLmRxYl9pdGltZSBcXHUwMDI2XFx1MDAyNlxcbmZzL3F1b3RhL2RxdW90LmM6MTM0MDogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcXG5mcy9xdW90YS9kcXVvdC5jLTEzNDEtXFx0XFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JU09GVExPTkdXQVJOKTtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTM2MT1zdGF0aWMgaW50IGRxdW90X2FkZF9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IHNwYWNlLFxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzc4LVxcdCAgICB0c3BhY2UgXFx1MDAzZSBkcXVvdC1cXHUwMDNlZHFfZHFiLmRxYl9iaGFyZGxpbWl0IFxcdTAwMjZcXHUwMDI2XFxuZnMvcXVvdGEvZHF1b3QuYzoxMzc5OiAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTM4MC1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzg5LVxcdCAgICBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCkgXFx1MDAzZT0gZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfYnRpbWUgXFx1MDAyNlxcdTAwMjZcXG5mcy9xdW90YS9kcXVvdC5jOjEzOTA6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XFxuZnMvcXVvdGEvZHF1b3QuYy0xMzkxLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IERRVU9UX1NQQUNFX1dBUk4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjIzLjk4NjI4ODMwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDc3MDU0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyBpbiBYRlMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3Igc29tZSBhcmVhcyBpbiB0aGUgWEZTIGZpbGVzeXN0ZW0gd2hlcmUgd2UgbWlnaHQgYmUgYWJsZSB0byBzcXVlZXplIG91dCBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLiBUaGlua2luZyBhYm91dCB0aGUgaG90IHBhdGhzLCBJIGtub3cgdGhhdCBgaWdub3JlX2hhcmRsaW1pdGAgaXMgY2FsbGVkIGZyb20gYGRxdW90X2FkZF9pbm9kZXNgIGFuZCBgZHF1b3RfYWRkX3NwYWNlYC4gVGhvc2UgYXJlIGNydWNpYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcXVvdGEgbWFuYWdlbWVudCwgc28gYW55IGltcHJvdmVtZW50IHRoZXJlIHdvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QuIEJ1dCwgdGhhdCdzIG5vdCBhbHdheXMgZWFzeS5cblxuTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMgaW9jdGxzOyB0aGV5IGFyZSBhbHdheXMgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIGB4ZnNfZ2V0ZnNtYXBgIGltbWVkaWF0ZWx5IHNwcmluZ3MgdG8gbWluZCBhcyBhIGxpa2VseSB0YXJnZXQgYmVjYXVzZSBpdCdzIGFuIGlvY3RsLiBTaW5jZSBpb2N0bHMgb2Z0ZW4gaW52b2x2ZSB1c2VyLWtlcm5lbCB0cmFuc2l0aW9ucyBhbmQgY29tcGxleCBkYXRhIGhhbmRsaW5nLCB0aGVyZSBjb3VsZCBiZSBhIGxvdCBvZiBvdmVyaGVhZC4gU2ltaWxhcmx5LCBgeGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zYCBpcyBhbm90aGVyIGlvY3RsIGhlbHBlci4gQW5kLCBsb29raW5nIGZ1cnRoZXIgSSBzZWUgYHhmc19zZXRhdHRyX25vbnNpemVgIHdoaWNoIGlzIGFuIGBzZXRhdHRyYCBoZWxwZXIsIHdoaWNoIGNhbiBiZSBhbiBlYXNpZXIgd2luLCBwZXJoYXBzLlxuXG5UaW1lIHRvIGRpdmUgaW4gYW5kIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCBgZnMveGZzL3hmc19mc21hcC5jYCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB4ZnNfZ2V0ZnNtYXBgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgbWlnaHQgcHJlc2VudCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjI4LjI5Mzk5NjA5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyMTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnNfZ2V0ZnNtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMveGZzL3hmc19mc21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3hmcy94ZnNfZnNtYXAuYz0xMTY9eGZzX2ZzbWFwX293bmVyX2Zyb21fZnJlYyhcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xNTktLyogZ2V0ZnNtYXAgcXVlcnkgc3RhdGUgKi9cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTYwOnN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyB7XFxuZnMveGZzL3hmc19mc21hcC5jLTE2MS1cXHRzdHJ1Y3QgeGZzX2ZzbWFwX2hlYWRcXHQqaGVhZDtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xNzQtXFx0ICogaXMgdGhlIHNlY29uZCAob3IgbGF0ZXIpIGNhbGwgdG8gcmV0cmlldmUgdGhlIHJlY29yZHNldCBpbiBwaWVjZXMuXFxuZnMveGZzL3hmc19mc21hcC5jOjE3NTpcXHQgKiB4ZnNfZ2V0ZnNtYXBfcmVjX2JlZm9yZV9zdGFydCB3aWxsIGNvbXBhcmUgYWxsIHJlY29yZHMgcmV0cmlldmVkXFxuZnMveGZzL3hmc19mc21hcC5jLTE3Ni1cXHQgKiBieSB0aGUgcm1hcGJ0IHF1ZXJ5IHRvIGZpbHRlciBvdXQgYW55IHJlY29yZHMgdGhhdCBzdGFydCBiZWZvcmVcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xODQtLyogQXNzb2NpYXRlIGEgZGV2aWNlIHdpdGggYSBnZXRmc21hcCBoYW5kbGVyLiAqL1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxODU6c3RydWN0IHhmc19nZXRmc21hcF9kZXYge1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xODYtXFx0dTMyXFx0XFx0XFx0ZGV2O1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTE4OC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwICprZXlzLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxODk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhmc19nZXRmc21hcF9pbmZvICppbmZvKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTkwLVxcdHNlY3Rvcl90XFx0XFx0bnJfc2VjdG9ycztcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xOTQ9c3RhdGljIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxOTU6eGZzX2dldGZzbWFwX2Rldl9jb21wYXJlKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xOTYtXFx0Y29uc3Qgdm9pZFxcdFxcdFxcdCpwMSxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xOTgte1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxOTk6XFx0Y29uc3Qgc3RydWN0IHhmc19nZXRmc21hcF9kZXZcXHQqZDEgPSBwMTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjAwOlxcdGNvbnN0IHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfZGV2XFx0KmQyID0gcDI7XFxuZnMveGZzL3hmc19mc21hcC5jLTIwMS1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0yMDY9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoyMDc6eGZzX2dldGZzbWFwX2lzX3NoYXJlZChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjA4LVxcdHN0cnVjdCB4ZnNfdHJhbnNcXHRcXHQqdHAsXFxuZnMveGZzL3hmc19mc21hcC5jOjIwOTpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbyxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjEwLVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBfaXJlY1xcdCpmcmVjLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTI0Mj1zdGF0aWMgaW5saW5lIHZvaWRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjQzOnhmc19nZXRmc21hcF9mb3JtYXQoXFxuZnMveGZzL3hmc19mc21hcC5jLTI0NC1cXHRzdHJ1Y3QgeGZzX21vdW50XFx0XFx0Km1wLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNDUtXFx0c3RydWN0IHhmc19mc21hcFxcdFxcdCp4Zm0sXFxuZnMveGZzL3hmc19mc21hcC5jOjI0NjpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbylcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjQ3LXtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNDktXFxuZnMveGZzL3hmc19mc21hcC5jOjI1MDpcXHR0cmFjZV94ZnNfZ2V0ZnNtYXBfbWFwcGluZyhtcCwgeGZtKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMjUxLVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2xcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjU3Onhmc19nZXRmc21hcF9mcmVjX2JlZm9yZV9zdGFydChcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjU4OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yNTktXFx0Y29uc3Qgc3RydWN0IHhmc19mc21hcF9pcmVjXFx0KmZyZWMpXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9MjgxPVNUQVRJQyBpbnRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MjgyOnhmc19nZXRmc21hcF9oZWxwZXIoXFxuZnMveGZzL3hmc19mc21hcC5jLTI4My1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoyODQ6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8sXFxuZnMveGZzL3hmc19mc21hcC5jLTI4NS1cXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwX2lyZWNcXHQqZnJlYylcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0yOTgtXFx0ICovXFxuZnMveGZzL3hmc19mc21hcC5jOjI5OTpcXHRpZiAoeGZzX2dldGZzbWFwX2ZyZWNfYmVmb3JlX3N0YXJ0KGluZm8sIGZyZWMpKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0zMDAtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMzMxLVxcdFxcdGZtci5mbXJfZmxhZ3MgPSBGTVJfT0ZfU1BFQ0lBTF9PV05FUjtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MzMyOlxcdFxcdHhmc19nZXRmc21hcF9mb3JtYXQobXAsIFxcdTAwMjZmbXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zMzMtXFx0fVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTM1OS1cXHRpZiAoZm1yLmZtcl9mbGFncyA9PSAwKSB7XFxuZnMveGZzL3hmc19mc21hcC5jOjM2MDpcXHRcXHRlcnJvciA9IHhmc19nZXRmc21hcF9pc19zaGFyZWQodHAsIGluZm8sIGZyZWMsIFxcdTAwMjZzaGFyZWQpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zNjEtXFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTM2Ni1cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MzY3OlxcdHhmc19nZXRmc21hcF9mb3JtYXQobXAsIFxcdTAwMjZmbXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zNjgtb3V0Olxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTM3ND1zdGF0aWMgaW5saW5lIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzozNzU6eGZzX2dldGZzbWFwX2dyb3VwX2hlbHBlcihcXG5mcy94ZnMveGZzX2ZzbWFwLmM6Mzc2OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0zNzctXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0zOTctXFx0ZnJlYy1cXHUwMDNlbGVuX2RhZGRyID0gWEZTX0ZTQl9UT19CQih4Zy1cXHUwMDNleGdfbW91bnQsIGJsb2NrY291bnQpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzozOTg6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIGZyZWMpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0zOTktfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTQwMj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjQwMzp4ZnNfZ2V0ZnNtYXBfcm1hcGJ0X2hlbHBlcihcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDA0LVxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0XFx0KmN1cixcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy00MTMtXFx0fTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDE0OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvID0gcHJpdjtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDE1LVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo0MTY6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9ncm91cF9oZWxwZXIoaW5mbywgY3VyLVxcdTAwM2ViY190cCwgY3VyLVxcdTAwM2ViY19ncm91cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDE3LVxcdFxcdFxcdHJlYy1cXHUwMDNlcm1fc3RhcnRibG9jaywgcmVjLVxcdTAwM2VybV9ibG9ja2NvdW50LCBcXHUwMDI2ZnJlYyk7XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9NDIxPVNUQVRJQyBpbnRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDIyOnhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0X2hlbHBlcihcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDIzLVxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0XFx0KmN1cixcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy00MzAtXFx0fTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDMxOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvID0gcHJpdjtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDMyLVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo0MzM6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9ncm91cF9oZWxwZXIoaW5mbywgY3VyLVxcdTAwM2ViY190cCwgY3VyLVxcdTAwM2ViY19ncm91cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDM0LVxcdFxcdFxcdHJlYy1cXHUwMDNlYXJfc3RhcnRibG9jaywgcmVjLVxcdTAwM2Vhcl9ibG9ja2NvdW50LCBcXHUwMDI2ZnJlYyk7XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9NDM4PXN0YXRpYyB2b2lkXFxuZnMveGZzL3hmc19mc21hcC5jOjQzOTp4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXFxuZnMveGZzL3hmc19mc21hcC5jLTQ0MC1cXHRzdHJ1Y3QgeGZzX3JtYXBfaXJlY1xcdCppcmVjLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTQ2Nj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjQ2NzpfX3hmc19nZXRmc21hcF9kYXRhZGV2KFxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NjgtXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNDY5LVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqa2V5cyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NDcwOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NzEtXFx0aW50XFx0XFx0XFx0XFx0KCpxdWVyeV9mbikoc3RydWN0IHhmc190cmFucyAqLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo0NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mbyAqLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy00NzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnNfYnRyZWVfY3VyICoqLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTUwMS1cXHRpbmZvLVxcdTAwM2Vsb3cucm1fYmxvY2tjb3VudCA9IFhGU19CQl9UT19GU0JUKG1wLCBrZXlzWzBdLmZtcl9sZW5ndGgpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo1MDI6XFx0eGZzX2dldGZzbWFwX3NldF9pcmVjX2ZsYWdzKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb3csIFxcdTAwMjZrZXlzWzBdKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNTAzLVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTU0My1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NTQ0OlxcdFxcdFxcdHhmc19nZXRmc21hcF9zZXRfaXJlY19mbGFncyhcXHUwMDI2aW5mby1cXHUwMDNlaGlnaCwgXFx1MDAyNmtleXNbMV0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy01NDUtXFx0XFx0fVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTYwNz1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjYwODp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnRfcXVlcnkoXFxuZnMveGZzL3hmc19mc21hcC5jLTYwOS1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MTA6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8sXFxuZnMveGZzL3hmc19mc21hcC5jLTYxMS1cXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdFxcdCoqY3VycHAsXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjE1LVxcdGlmIChpbmZvLVxcdTAwM2VsYXN0KVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MTY6XFx0XFx0cmV0dXJuIHhmc19nZXRmc21hcF9ybWFwYnRfaGVscGVyKCpjdXJwcCwgXFx1MDAyNmluZm8tXFx1MDAzZWhpZ2gsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02MTctXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjIxLVxcdHJldHVybiB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgqY3VycHAsIFxcdTAwMjZpbmZvLVxcdTAwM2Vsb3csIFxcdTAwMjZpbmZvLVxcdTAwM2VoaWdoLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MjI6XFx0XFx0XFx0eGZzX2dldGZzbWFwX3JtYXBidF9oZWxwZXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02MjMtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTYyNj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjYyNzp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ybWFwYnQoXFxuZnMveGZzL3hmc19mc21hcC5jLTYyOC1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy02MjktXFx0Y29uc3Qgc3RydWN0IHhmc19mc21hcFxcdFxcdCprZXlzLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzA6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8pXFxuZnMveGZzL3hmc19mc21hcC5jLTYzMS17XFxuZnMveGZzL3hmc19mc21hcC5jLTYzMi1cXHRpbmZvLVxcdTAwM2VtaXNzaW5nX293bmVyID0gWEZTX0ZNUl9PV05fRlJFRTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjMzOlxcdHJldHVybiBfX3hmc19nZXRmc21hcF9kYXRhZGV2KHRwLCBrZXlzLCBpbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2MzQ6XFx0XFx0XFx0eGZzX2dldGZzbWFwX2RhdGFkZXZfcm1hcGJ0X3F1ZXJ5LCBOVUxMKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjM1LX1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz02Mzg9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2Mzk6eGZzX2dldGZzbWFwX2RhdGFkZXZfYm5vYnRfcXVlcnkoXFxuZnMveGZzL3hmc19mc21hcC5jLTY0MC1cXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0XFx0KnRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NDE6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8sXFxuZnMveGZzL3hmc19mc21hcC5jLTY0Mi1cXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdFxcdCoqY3VycHAsXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjQ4LVxcdGlmIChpbmZvLVxcdTAwM2VsYXN0KVxcbmZzL3hmcy94ZnNfZnNtYXAuYzo2NDk6XFx0XFx0cmV0dXJuIHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0X2hlbHBlcigqY3VycHAsIFxcdTAwMjZrZXlbMV0sIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTAtXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjU2LVxcdHJldHVybiB4ZnNfYWxsb2NfcXVlcnlfcmFuZ2UoKmN1cnBwLCBrZXksIFxcdTAwMjZrZXlbMV0sXFxuZnMveGZzL3hmc19mc21hcC5jOjY1NzpcXHRcXHRcXHR4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idF9oZWxwZXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02NTgtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTY2MT1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjY2Mjp4ZnNfZ2V0ZnNtYXBfZGF0YWRldl9ibm9idChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjYzLVxcdHN0cnVjdCB4ZnNfdHJhbnNcXHRcXHQqdHAsXFxuZnMveGZzL3hmc19mc21hcC5jLTY2NC1cXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXFx0XFx0KmtleXMsXFxuZnMveGZzL3hmc19mc21hcC5jOjY2NTpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbylcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjY2LXtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzAtXFx0aW5mby1cXHUwMDNlbWlzc2luZ19vd25lciA9IFhGU19GTVJfT1dOX1VOS05PV047XFxuZnMveGZzL3hmc19mc21hcC5jOjY3MTpcXHRyZXR1cm4gX194ZnNfZ2V0ZnNtYXBfZGF0YWRldih0cCwga2V5cywgaW5mbyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjcyOlxcdFxcdFxcdHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0X3F1ZXJ5LCBcXHUwMDI2YWtleXNbMF0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzMtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTY3Nj1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjY3Nzp4ZnNfZ2V0ZnNtYXBfbG9nZGV2KFxcbmZzL3hmcy94ZnNfZnNtYXAuYy02NzgtXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNjc5LVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqa2V5cyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NjgwOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy02ODEte1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTcwOS1cXHRmcmVjLmxlbl9kYWRkciA9IFhGU19GU0JfVE9fQkIobXAsIG1wLVxcdTAwM2VtX3NiLnNiX2xvZ2Jsb2Nrcyk7XFxuZnMveGZzL3hmc19mc21hcC5jOjcxMDpcXHRyZXR1cm4geGZzX2dldGZzbWFwX2hlbHBlcih0cCwgaW5mbywgXFx1MDAyNmZyZWMpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy03MTEtfVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTcxNT1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjcxNjp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcnRiaXRtYXBfaGVscGVyKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy03MTctXFx0c3RydWN0IHhmc19ydGdyb3VwXFx0XFx0KnJ0ZyxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy03MjUtXFx0c3RydWN0IHhmc19tb3VudFxcdFxcdCptcCA9IHJ0Z19tb3VudChydGcpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo3MjY6XFx0c3RydWN0IHhmc19nZXRmc21hcF9pbmZvXFx0KmluZm8gPSBwcml2O1xcbmZzL3hmcy94ZnNfZnNtYXAuYy03MjctXFx0eGZzX3J0YmxvY2tfdFxcdFxcdFxcdHN0YXJ0X3J0YiA9XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzQ2LVxcdGZyZWMubGVuX2RhZGRyID0gWEZTX0ZTQl9UT19CQihtcCwgcnRiY291bnQpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo3NDc6XFx0cmV0dXJuIHhmc19nZXRmc21hcF9oZWxwZXIodHAsIGluZm8sIFxcdTAwMjZmcmVjKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzQ4LX1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz03NTE9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo3NTI6eGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTMtXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmMtNzU0LVxcdGNvbnN0IHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqa2V5cyxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6NzU1OlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy03NTYte1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTc5Ny1cXHRcXHRlcnJvciA9IHhmc19ydGFsbG9jX3F1ZXJ5X3JhbmdlKHJ0ZywgdHAsIHN0YXJ0X3J0eCwgZW5kX3J0eCxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6Nzk4OlxcdFxcdFxcdFxcdHhmc19nZXRmc21hcF9ydGRldl9ydGJpdG1hcF9oZWxwZXIsIGluZm8pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy03OTktXFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTgxMy1cXHRcXHRcXHRpbmZvLVxcdTAwM2VsYXN0ID0gdHJ1ZTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODE0OlxcdFxcdFxcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3J0Yml0bWFwX2hlbHBlcihydGcsIHRwLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy04MTUtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmFoaWdoLCBpbmZvKTtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz04Mzg9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo4Mzk6eGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9oZWxwZXIoXFxuZnMveGZzL3hmc19mc21hcC5jLTg0MC1cXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdFxcdCpjdXIsXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtODQ5LVxcdH07XFxuZnMveGZzL3hmc19mc21hcC5jOjg1MDpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbyA9IHByaXY7XFxuZnMveGZzL3hmc19mc21hcC5jLTg1MS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODUyOlxcdHJldHVybiB4ZnNfZ2V0ZnNtYXBfZ3JvdXBfaGVscGVyKGluZm8sIGN1ci1cXHUwMDNlYmNfdHAsIGN1ci1cXHUwMDNlYmNfZ3JvdXAsXFxuZnMveGZzL3hmc19mc21hcC5jLTg1My1cXHRcXHRcXHRyZWMtXFx1MDAzZXJtX3N0YXJ0YmxvY2ssIHJlYy1cXHUwMDNlcm1fYmxvY2tjb3VudCwgXFx1MDAyNmZyZWMpO1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jPTg1Nz1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19mc21hcC5jOjg1ODp4ZnNfZ2V0ZnNtYXBfcnRkZXZfcm1hcGJ0X3F1ZXJ5KFxcbmZzL3hmcy94ZnNfZnNtYXAuYy04NTktXFx0c3RydWN0IHhmc190cmFuc1xcdFxcdCp0cCxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODYwOlxcdHN0cnVjdCB4ZnNfZ2V0ZnNtYXBfaW5mb1xcdCppbmZvLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy04NjEtXFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHRcXHQqKmN1cnBwKVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTg2OC1cXHRyZXR1cm4geGZzX3JtYXBfcXVlcnlfcmFuZ2UoKmN1cnBwLCBcXHUwMDI2aW5mby1cXHUwMDNlbG93LCBcXHUwMDI2aW5mby1cXHUwMDNlaGlnaCxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6ODY5OlxcdFxcdFxcdHhmc19nZXRmc21hcF9ydGRldl9ybWFwYnRfaGVscGVyLCBpbmZvKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtODcwLX1cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz04NzM9U1RBVElDIGludFxcbmZzL3hmcy94ZnNfZnNtYXAuYzo4NzQ6eGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtODc1LVxcdHN0cnVjdCB4ZnNfdHJhbnNcXHRcXHQqdHAsXFxuZnMveGZzL3hmc19mc21hcC5jLTg3Ni1cXHRjb25zdCBzdHJ1Y3QgeGZzX2ZzbWFwXFx0XFx0KmtleXMsXFxuZnMveGZzL3hmc19mc21hcC5jOjg3NzpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHQqaW5mbylcXG5mcy94ZnMveGZzX2ZzbWFwLmMtODc4LXtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy05MTUtXFx0XFx0aWYgKGtleTAuZm1yX3BoeXNpY2FsIFxcdTAwM2MgcnRzdGFydF9kYWRkcikge1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo5MTY6XFx0XFx0XFx0ZXJyb3IgPSB4ZnNfZ2V0ZnNtYXBfaGVscGVyKHRwLCBpbmZvLCBcXHUwMDI2ZnJlYyk7XFxuZnMveGZzL3hmc19mc21hcC5jLTkxNy1cXHRcXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtOTQyLVxcdGluZm8tXFx1MDAzZWxvdy5ybV9ibG9ja2NvdW50ID0gWEZTX0JCX1RPX0ZTQlQobXAsIGtleTAuZm1yX2xlbmd0aCk7XFxuZnMveGZzL3hmc19mc21hcC5jOjk0MzpcXHR4ZnNfZ2V0ZnNtYXBfc2V0X2lyZWNfZmxhZ3MoXFx1MDAyNmluZm8tXFx1MDAzZWxvdywgXFx1MDAyNmtleTApO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy05NDQtXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtOTg0LVxcdFxcdFxcdFxcdGJyZWFrO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzo5ODU6XFx0XFx0XFx0eGZzX2dldGZzbWFwX3NldF9pcmVjX2ZsYWdzKFxcdTAwMjZpbmZvLVxcdTAwM2VoaWdoLCBcXHUwMDI2a2V5c1sxXSk7XFxuZnMveGZzL3hmc19mc21hcC5jLTk4Ni1cXHRcXHR9XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTAwMC1cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTAwMTpcXHRcXHRlcnJvciA9IHhmc19nZXRmc21hcF9ydGRldl9ybWFwYnRfcXVlcnkodHAsIGluZm8sIFxcdTAwMjZidF9jdXIpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDAyLVxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDE4LVxcdFxcdFxcdGluZm8tXFx1MDAzZWxhc3QgPSB0cnVlO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDE5OlxcdFxcdFxcdGVycm9yID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidF9oZWxwZXIoYnRfY3VyLFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDIwLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpbmZvLVxcdTAwM2VoaWdoLCBpbmZvKTtcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xMDQ0PXN0YXRpYyB1aW50MzJfdFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDQ1Onhmc19nZXRmc21hcF9kZXZpY2UoXFxuZnMveGZzL3hmc19mc21hcC5jLTEwNDYtXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xMDY3PVNUQVRJQyBib29sXFxuZnMveGZzL3hmc19mc21hcC5jOjEwNjg6eGZzX2dldGZzbWFwX2lzX3ZhbGlkX2RldmljZShcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA2OS1cXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEwNzMtXFx0XFx0Zm0tXFx1MDAzZWZtcl9kZXZpY2UgPT0gVUlOVF9NQVggfHxcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTA3NDpcXHRcXHRmbS1cXHUwMDNlZm1yX2RldmljZSA9PSB4ZnNfZ2V0ZnNtYXBfZGV2aWNlKG1wLCBYRlNfREVWX0RBVEEpIHx8XFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzU6XFx0XFx0Zm0tXFx1MDAzZWZtcl9kZXZpY2UgPT0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9MT0cpIHx8XFxuZnMveGZzL3hmc19mc21hcC5jLTEwNzYtXFx0XFx0KG1wLVxcdTAwM2VtX3J0ZGV2X3RhcmdwIFxcdTAwMjZcXHUwMDI2XFxuZnMveGZzL3hmc19mc21hcC5jOjEwNzc6XFx0XFx0IGZtLVxcdTAwM2VmbXJfZGV2aWNlID09IHhmc19nZXRmc21hcF9kZXZpY2UobXAsIFhGU19ERVZfUlQpKTtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTA3OC19XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9MTA4MT1TVEFUSUMgYm9vbFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMDgyOnhmc19nZXRmc21hcF9jaGVja19rZXlzKFxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMDgzLVxcdHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHQqbG93X2tleSxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTQ1LSAqXFx0XFx0XFx0XFx0ICAgYnVtcGVkIHVwIGJ5IGZtcl9sZW5ndGguXFxuZnMveGZzL3hmc19mc21hcC5jOjExNDY6ICogeGZzX2dldGZzbWFwX2luZm8ubmV4dF9kYWRkclxcdC0tIG5leHQgZGlzayBhZGRyIHdlIGV4cGVjdCB0byBzZWU7IHRoaXNcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0Ny0gKlxcdFxcdFxcdFxcdCAgIGlzIGhvdyB3ZSBkZXRlY3QgZ2FwcyBpbiB0aGUgZnNtYXBcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE0OC1cXHRcXHRcXHRcXHQgICByZWNvcmRzIGFuZCByZXBvcnQgdGhlbS5cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE0OTogKiB4ZnNfZ2V0ZnNtYXBfaW5mby5sb3cvaGlnaFxcdC0tIHBlci1BRyBsb3cvaGlnaCBrZXlzIGNvbXB1dGVkIGZyb21cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE1MC0gKlxcdFxcdFxcdFxcdCAgIGRrZXlzOyB1c2VkIHRvIHF1ZXJ5IHRoZSBtZXRhZGF0YS5cXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYz0xMTUyPVNUQVRJQyBpbnRcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE1Mzp4ZnNfZ2V0ZnNtYXAoXFxuZnMveGZzL3hmc19mc21hcC5jLTExNTQtXFx0c3RydWN0IHhmc19tb3VudFxcdFxcdCptcCxcXG4tLVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTU5LVxcdHN0cnVjdCB4ZnNfZnNtYXBcXHRcXHRka2V5c1syXTtcXHQvKiBwZXItZGV2IGtleXMgKi9cXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE2MDpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2RldlxcdFxcdGhhbmRsZXJzW1hGU19HRVRGU01BUF9ERVZTXTtcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE2MTpcXHRzdHJ1Y3QgeGZzX2dldGZzbWFwX2luZm9cXHRpbmZvID0ge1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTYyLVxcdFxcdC5mc21hcF9yZWNzXFx0XFx0PSBmc21hcF9yZWNzLFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTExNzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMveGZzL3hmc19mc21hcC5jOjExNzE6XFx0aWYgKCF4ZnNfZ2V0ZnNtYXBfaXNfdmFsaWRfZGV2aWNlKG1wLCBcXHUwMDI2aGVhZC1cXHUwMDNlZm1oX2tleXNbMF0pIHx8XFxuZnMveGZzL3hmc19mc21hcC5jOjExNzI6XFx0ICAgICF4ZnNfZ2V0ZnNtYXBfaXNfdmFsaWRfZGV2aWNlKG1wLCBcXHUwMDI2aGVhZC1cXHUwMDNlZm1oX2tleXNbMV0pKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTczLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTc0OlxcdGlmICgheGZzX2dldGZzbWFwX2NoZWNrX2tleXMoXFx1MDAyNmhlYWQtXFx1MDAzZWZtaF9rZXlzWzBdLCBcXHUwMDI2aGVhZC1cXHUwMDNlZm1oX2tleXNbMV0pKVxcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTc1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTExODItXFx0aGFuZGxlcnNbMF0ubnJfc2VjdG9ycyA9IFhGU19GU0JfVE9fQkIobXAsIG1wLVxcdTAwM2VtX3NiLnNiX2RibG9ja3MpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTgzOlxcdGhhbmRsZXJzWzBdLmRldiA9IHhmc19nZXRmc21hcF9kZXZpY2UobXAsIFhGU19ERVZfREFUQSk7XFxuZnMveGZzL3hmc19mc21hcC5jLTExODQtXFx0aWYgKHVzZV9ybWFwKVxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTg1OlxcdFxcdGhhbmRsZXJzWzBdLmZuID0geGZzX2dldGZzbWFwX2RhdGFkZXZfcm1hcGJ0O1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTg2LVxcdGVsc2VcXG5mcy94ZnMveGZzX2ZzbWFwLmM6MTE4NzpcXHRcXHRoYW5kbGVyc1swXS5mbiA9IHhmc19nZXRmc21hcF9kYXRhZGV2X2Jub2J0O1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMTg4LVxcdGlmIChtcC1cXHUwMDNlbV9sb2dkZXZfdGFyZ3AgIT0gbXAtXFx1MDAzZW1fZGRldl90YXJncCkge1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTExOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1wLVxcdTAwM2VtX3NiLnNiX2xvZ2Jsb2Nrcyk7XFxuZnMveGZzL3hmc19mc21hcC5jOjExOTE6XFx0XFx0aGFuZGxlcnNbMV0uZGV2ID0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9MT0cpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMTkyOlxcdFxcdGhhbmRsZXJzWzFdLmZuID0geGZzX2dldGZzbWFwX2xvZ2RldjtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTE5My1cXHR9XFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTIwMC1cXHRcXHRoYW5kbGVyc1syXS5ucl9zZWN0b3JzID0gWEZTX0ZTQl9UT19CQihtcCwgbXAtXFx1MDAzZW1fc2Iuc2JfcmJsb2Nrcyk7XFxuZnMveGZzL3hmc19mc21hcC5jOjEyMDE6XFx0XFx0aGFuZGxlcnNbMl0uZGV2ID0geGZzX2dldGZzbWFwX2RldmljZShtcCwgWEZTX0RFVl9SVCk7XFxuZnMveGZzL3hmc19mc21hcC5jLTEyMDItXFx0XFx0aWYgKHVzZV9ybWFwKVxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMjAzOlxcdFxcdFxcdGhhbmRsZXJzWzJdLmZuID0geGZzX2dldGZzbWFwX3J0ZGV2X3JtYXBidDtcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTIwNC1cXHRcXHRlbHNlXFxuZnMveGZzL3hmc19mc21hcC5jOjEyMDU6XFx0XFx0XFx0aGFuZGxlcnNbMl0uZm4gPSB4ZnNfZ2V0ZnNtYXBfcnRkZXZfcnRiaXRtYXA7XFxuZnMveGZzL3hmc19mc21hcC5jLTEyMDYtXFx0fVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEyMDgtXFxuZnMveGZzL3hmc19mc21hcC5jOjEyMDk6XFx0eGZzX3NvcnQoaGFuZGxlcnMsIFhGU19HRVRGU01BUF9ERVZTLCBzaXplb2Yoc3RydWN0IHhmc19nZXRmc21hcF9kZXYpLFxcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMjEwOlxcdFxcdFxcdHhmc19nZXRmc21hcF9kZXZfY29tcGFyZSk7XFxuZnMveGZzL3hmc19mc21hcC5jLTEyMTEtXFxuLS1cXG5mcy94ZnMveGZzX2ZzbWFwLmM9MTMwMD14ZnNfaW9jX2dldGZzbWFwKFxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEzNDAtXFxuZnMveGZzL3hmc19mc21hcC5jOjEzNDE6XFx0dHJhY2VfeGZzX2dldGZzbWFwX2xvd19rZXkoaXAtXFx1MDAzZWlfbW91bnQsIFxcdTAwMjZ4aGVhZC5mbWhfa2V5c1swXSk7XFxuZnMveGZzL3hmc19mc21hcC5jOjEzNDI6XFx0dHJhY2VfeGZzX2dldGZzbWFwX2hpZ2hfa2V5KGlwLVxcdTAwM2VpX21vdW50LCBcXHUwMDI2eGhlYWQuZm1oX2tleXNbMV0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzQzLVxcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEzNTQtXFx0XFx0LyogUnVuIHF1ZXJ5LCByZWNvcmQgaG93IG1hbnkgZW50cmllcyB3ZSBnb3QuICovXFxuZnMveGZzL3hmc19mc21hcC5jOjEzNTU6XFx0XFx0ZXJyb3IgPSB4ZnNfZ2V0ZnNtYXAoaXAtXFx1MDAzZWlfbW91bnQsIFxcdTAwMjZ4aGVhZCwgcmVjcyk7XFxuZnMveGZzL3hmc19mc21hcC5jLTEzNTYtXFx0XFx0c3dpdGNoIChlcnJvcikge1xcbi0tXFxuZnMveGZzL3hmc19mc21hcC5jLTEzOTctXFx0XFx0eGZzX2ZzbWFwX3RvX2ludGVybmFsKFxcdTAwMjZ4aGVhZC5mbWhfa2V5c1swXSwgbGFzdF9yZWMpO1xcbmZzL3hmcy94ZnNfZnNtYXAuYzoxMzk4OlxcdFxcdHRyYWNlX3hmc19nZXRmc21hcF9sb3dfa2V5KGlwLVxcdTAwM2VpX21vdW50LCBcXHUwMDI2eGhlYWQuZm1oX2tleXNbMF0pO1xcbmZzL3hmcy94ZnNfZnNtYXAuYy0xMzk5LVxcdH0gd2hpbGUgKCFkb25lIFxcdTAwMjZcXHUwMDI2IGhlYWQuZm1oX2VudHJpZXMgXFx1MDAzYyBoZWFkLmZtaF9jb3VudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIyOjI4LjM1MTEyMjEzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNDg0MzI3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgWEZTIEZpbGVzeXN0ZW0gTWFwcGluZyBJT0NUTCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gYHhmc19pb2NfZ2V0ZnNtYXBgLiBUaGF0J3MgdGhlIGNvcmUgaW9jdGwgaGFuZGxlciwgdGhlIG9uZSB0aGF0J3MgZ29pbmcgdG8gaW50ZXJmYWNlIHdpdGggdGhlIHVzZXIgc3BhY2UsIGFuZCBzcGVjaWZpY2FsbHksIGl0IGNhbGxzIGB4ZnNfZ2V0ZnNtYXBgIGZvciB0aGUgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBzb2xpZCB0YXJnZXQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBrbm93aW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBtYXAgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3csIHRvIHRyYWNlIHRoaXMsIEknbGwgaGVhZCBvdmVyIHRvIGBmcy94ZnMveGZzX2lvY3RsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBzZXR1cCBmb3IgdGhlIGB4ZnNfaW9jX2dldGZzbWFwYCBpb2N0bCB3aWxsIGJlIG5lYXJieSwgYWxvbmcgd2l0aCB0aGUgb3RoZXIgaW9jdGxzIHRoYXQgWEZTIGhhbmRsZXMuIFRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9uIGluIHRoaXMgZmlsZSB3aWxsIGJlIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGJhc2VkIG9uIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIzOjUwLjgzNTQ1MTkzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1OTE4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMveGZzX2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb2N0bC5jPTYzND1zdGF0aWMgc3RydWN0IHhmc190cmFucyAqXFxuZnMveGZzL3hmc19pb2N0bC5jOjYzNTp4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnMoXFxuZnMveGZzL3hmc19pb2N0bC5jLTYzNi1cXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwLFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTc1MD14ZnNfZmlsZWF0dHJfc2V0KFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jLTgwNi1cXG5mcy94ZnMveGZzX2lvY3RsLmM6ODA3OlxcdHRwID0geGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zKGlwLCBwZHFwKTtcXG5mcy94ZnMveGZzX2lvY3RsLmMtODA4LVxcdGlmIChJU19FUlIodHApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjIzOjUxLjE5MTM3NTcwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE5MzQ1NDc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQncyBnb2luZyBvbjpcblxuKipYRlMgQXR0cmlidXRlIFNldHRpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHhmc19maWxlYXR0cl9zZXRgIGFuZCBpbW1lZGlhdGVseSBrbm93IGl0J3MgdGhlIFhGUyBpbXBsZW1lbnRhdGlvbiBmb3Igc2V0dGluZyBmaWxlIGF0dHJpYnV0ZXMuIFRoZSBrZXkgaXMgdGhhdCBpdCdzIGNhbGxpbmcgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2AsIHdoaWNoIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBpb2N0bC1iYXNlZCBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIHRoYXQncyBtYW5hZ2luZyB0cmFuc2FjdGlvbnMuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoaXMgbWlnaHQgYmUgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb3Igc29tZXRoaW5nIGJleW9uZCBiYXNpYyBwZXJtaXNzaW9ucy90aW1lc3RhbXBzLCBidXQgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gemVybyBpbiBvbiBgeGZzX3NldGF0dHJfbm9uc2l6ZWAgYW5kIGNvbmZpcm0gd2hlcmUgaXQgcmVzaWRlcy4gVGhlIGNvZGUgcGF0aCBsb29rcyBsaWtlIGl0IGxpa2VseSBoYW5kbGVzIHRoZSBub24tc2l6ZSBhc3BlY3RzIG9mIHRoZSBmaWxlIGF0dHJpYnV0ZSB1cGRhdGUsIHNvLCBJJ20gZ29pbmcgdG8gbG9vayBpbiBgZnMveGZzL3hmc19pb3BzLmNgIGFuZCB0YWtlIGEgbG9vay4gVGhpcyBtaWdodCBiZSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgYXR0cmlidXRlIGNoYW5nZSBoYXBwZW5zLCBvciBhdCBsZWFzdCB3aGVyZSB0aGUgZGV0YWlscyBvZiBpdCBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDowMy4zODQ4MzI4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDIzMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmc19zZXRhdHRyX25vbnNpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMveGZzL3hmc19pb3BzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb3BzLmM9Nzc5PXN0YXRpYyBpbnRcXG5mcy94ZnMveGZzX2lvcHMuYzo3ODA6eGZzX3NldGF0dHJfbm9uc2l6ZShcXG5mcy94ZnMveGZzX2lvcHMuYy03ODEtXFx0c3RydWN0IG1udF9pZG1hcFxcdCppZG1hcCxcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTkwNz14ZnNfdm5fc2V0YXR0cl9zaXplKFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtOTQ1LVxcdFxcdGlhdHRyLVxcdTAwM2VpYV92YWxpZCBcXHUwMDI2PSB+QVRUUl9TSVpFO1xcbmZzL3hmcy94ZnNfaW9wcy5jOjk0NjpcXHRcXHRyZXR1cm4geGZzX3NldGF0dHJfbm9uc2l6ZShpZG1hcCwgZGVudHJ5LCBpcCwgaWF0dHIpO1xcbmZzL3hmcy94ZnNfaW9wcy5jLTk0Ny1cXHR9XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMTM0PXhmc192bl9zZXRhdHRyKFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtMTE2MS1cXHRcXHRpZiAoIWVycm9yKVxcbmZzL3hmcy94ZnNfaW9wcy5jOjExNjI6XFx0XFx0XFx0ZXJyb3IgPSB4ZnNfc2V0YXR0cl9ub25zaXplKGlkbWFwLCBkZW50cnksIGlwLCBpYXR0cik7XFxuZnMveGZzL3hmc19pb3BzLmMtMTE2My1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjAzLjQ1MTg2MzE1M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU2NDYzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIFhGUyBBdHRyaWJ1dGUgU2V0dGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgWEZTIGhhbmRsZXMgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgaXQgbG9va3MgbGlrZSBgeGZzX3ZuX3NldGF0dHJgIGFuZCBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBhcyB0aGV5IGJvdGggdWx0aW1hdGVseSBjYWxsIGB4ZnNfc2V0YXR0cl9ub25zaXplYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuXG5cblNvLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBzY3J1dGluaXplIGFyZTogYGlnbm9yZV9oYXJkbGltaXRgIChvciBtYXliZSBgZHF1b3RfYWRkX2lub2Rlc2Agb3IgYGRxdW90X2FkZF9zcGFjZWAgYXMgdGhleSByZWxhdGUgdG8gcXVvdGFzKSwgYHhmc19pb2NfZ2V0ZnNtYXBgLCBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCwgb2YgY291cnNlLCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBgeGZzX3ZuX3NldGF0dHJgLlxuXG5Ib2xkIG9uLi4uIGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uIHdpdGhpbiBgZnMvcXVvdGEvZHF1b3QuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBgeGZzX2lvY19nZXRmc21hcGAgZGVmaW5pdGVseSBzZWVtcyBpbnRlcmVzdGluZywgYXMgZG9lcyBgeGZzX2ZpbGVhdHRyX3NldGAsIGFuZCBgeGZzX3ZuX3NldGF0dHJgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgaWdub3JlX2hhcmRsaW1pdGAgaXMgaW5kZWVkIHN0YXRpYy4gT2theSwgY29uZmlybWVkLiBOb3csIEkgbmVlZCB0byBjaGVjayBpZiBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgIGFyZSBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZS4gVGltZSB0byBjaGVjayBgZnMvcXVvdGEvZHF1b3QuY2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjQ6MDguODA4MzI5MjI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY1OTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcXVvdF9hZGRfaW5vZGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMzA3PXN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE1LVxcbmZzL3F1b3RhL2RxdW90LmM6MTMxNjpzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZHF1b3Rfd2FybiAqd2FybilcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTc3Nz1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTc5NS1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9xdW90YS9kcXVvdC5jOjE3OTY6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2RlcyhkcXVvdCwgMSwgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzk3LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MjAwOT1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjA2My1cXHRcXHRcXHRcXHRcXHUwMDI2ZHF1b3Rfc3JjdSwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkcV9kYXRhX2xvY2spKTtcXG5mcy9xdW90YS9kcXVvdC5jOjIwNjQ6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCBpbm9kZV91c2FnZSxcXG5mcy9xdW90YS9kcXVvdC5jLTIwNjUtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3YXJuX3RvW2NudF0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDowOC44Njc5OTQzNzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0ODQwODk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRHF1b3QgQWxsb2NhdGlvbiBhbmQgVHJhbnNmZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgZHF1b3RzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGFsbG9jYXRpb24gYW5kIHRyYW5zZmVyIHByb2Nlc3Nlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRxdW90X2FsbG9jX2lub2RlYCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgIGJvdGggY2FsbCBgZHF1b3RfYWRkX2lub2Rlc2AuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiDigJMgdGhleSdyZSB1c2luZyB0aGUgc2FtZSBjb3JlIGZ1bmN0aW9uIGZvciBhZGRpbmcgaW5vZGVzLiBgZHF1b3RfYWxsb2NfaW5vZGVgIGlzIGV4cG9ydGVkLCBzbyBpdCdzIHByb2JhYmx5IGdvdCBleHRlcm5hbCB1c2UsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGRxdW90X2FkZF9pbm9kZXNgIGlzIGRvaW5nLCBzbyB0aGF0IHdpbGwgbWFrZSBtZSBjaGVjayBgZHF1b3RfYWRkX3NwYWNlYC4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggc3BhY2UgaXMgYmVpbmcgYWRkZWQgZm9yIHdoaWNoIGlub2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjExLjgxNjQwNTYzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3NTU4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHF1b3RfYWRkX3NwYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMzE2PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcyxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTM2MC1cXG5mcy9xdW90YS9kcXVvdC5jOjEzNjE6c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcXG5mcy9xdW90YS9kcXVvdC5jLTEzNjItXFx0XFx0XFx0ICAgcXNpemVfdCByc3Zfc3BhY2UsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTcwNj1pbnQgX19kcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IGZsYWdzKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xNzM1LVxcdFxcdGlmIChyZXNlcnZlKSB7XFxuZnMvcXVvdGEvZHF1b3QuYzoxNzM2OlxcdFxcdFxcdHJldCA9IGRxdW90X2FkZF9zcGFjZShkcXVvdCwgMCwgbnVtYmVyLCBmbGFncywgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzM3LVxcdFxcdH0gZWxzZSB7XFxuZnMvcXVvdGEvZHF1b3QuYzoxNzM4OlxcdFxcdFxcdHJldCA9IGRxdW90X2FkZF9zcGFjZShkcXVvdCwgbnVtYmVyLCAwLCBmbGFncywgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzM5LVxcdFxcdH1cXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MjAwOT1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjA2Ny1cXHRcXHRcXHRnb3RvIG92ZXJfcXVvdGE7XFxuZnMvcXVvdGEvZHF1b3QuYzoyMDY4OlxcdFxcdHJldCA9IGRxdW90X2FkZF9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCBjdXJfc3BhY2UsIHJzdl9zcGFjZSxcXG5mcy9xdW90YS9kcXVvdC5jLTIwNjktXFx0XFx0XFx0XFx0ICAgICAgRFFVT1RfU1BBQ0VfV0FSTiwgXFx1MDAyNndhcm5fdG9bY250XSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjExLjg3NzE2NjYwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg3ODg5NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgWEZTIFF1b3RhIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSBgX19kcXVvdF9hbGxvY19zcGFjZWAgYW5kIGBfX2RxdW90X3RyYW5zZmVyYCBzaW5jZSB0aGV5IGNhbGwgYGRxdW90X2FkZF9zcGFjZWAsIGFuZCB0aGUgZm9ybWVyIGlzIGV4cG9ydGVkLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcy4gVGhlbiBJIGFsc28gY29uc2lkZXJlZCBgZHF1b3RfYWxsb2NfaW5vZGVgLiBCdXQsIGhhbmcgb24uLi4gdGhvc2UgYXJlIGxpa2VseSBleHRyZW1lbHkgaG90IHBhdGhzIGZvciBxdW90YSBvcGVyYXRpb25zLiBQZXJoYXBzIHNvbWV0aGluZyBsZXNzIGZyZXF1ZW50bHkgY2FsbGVkIHdvdWxkIGJlIG1vcmUgcmV2ZWFsaW5nIGluIHRlcm1zIG9mIHJlc291cmNlIGNvbnRlbnRpb24gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblNvLCBzaGlmdGluZyBnZWFycywgSSdtIHRoaW5raW5nIGB4ZnNfaW9jX2dldGZzbWFwYCwgYHhmc19maWxlYXR0cl9zZXRgLCBhbmQgYHhmc192bl9zZXRhdHRyYCBtaWdodCBiZSBiZXR0ZXIgdGFyZ2V0cy4gSSByZWNhbGwgYGlnbm9yZV9oYXJkbGltaXRgIGJlaW5nIGNhbGxlZCBmcm9tIGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgYGRxdW90X2FkZF9zcGFjZWAsIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIGR1cmluZyBhbGxvY2F0aW9uLCBub3QgYXQgdGhlIGBxdW90YWN0bGAgbGV2ZWwuIEl0J3MgdGhlIHN5c3RlbSBjYWxsLCBzbyB0aGUgb3RoZXIgbWlnaHQgYmUgYmV0dGVyIGZvY3VzZXMgZm9yIHRoaXMgYW5hbHlzaXMuXG5cblllcywgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIGFuIGlvY3RsIGhhbmRsZXIg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGB4ZnNfZmlsZWF0dHJfc2V0YCBhbmQgYHhmc192bl9zZXRhdHRyYCBhbHNvIHNlZW0gcHJvbWlzaW5nLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBRVU9UQWAgYW5kIGBYRlNfRlNgIGFyZSBlc3NlbnRpYWwuIEFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/XG5cbkhtbSwgYHhmc19oYXNfcm1hcGJ0KG1wKWAgaXMgdXNlZCBpbiBgeGZzX2dldGZzbWFwYC4gRG9lcyB0aGUgYFhGU19GU2AgY29uZmlndXJhdGlvbiBoYXZlIGFueSBkZXBlbmRlbmN5IG9uIFJtYXBidD8gTm8sIGl0J3MgYSBydW50aW1lIGZlYXR1cmUsIG5vdCBhIGNvbXBpbGUtdGltZSBkZXBlbmRlbmN5LCB0aGF0J3MgaW1wb3J0YW50LiBSZXZlcnNlIE1hcHBpbmcgQit0cmVlLlxuXG5BbHNvLCB3aGF0IGFib3V0IGBjYXBhYmxlX25vYXVkaXRgPyBUaGF0J3MgdXNlZCBpbiBzZWN1cml0eS9hdWRpdGluZyBjb250ZXh0cy4gTGV0J3MgY2hlY2sgYGtlcm5lbC9jYXBhYmlsaXR5LmNgIGZvciBgY2FwYWJsZV9ub2F1ZGl0YC4gSXQgc2VlbXMgdGhhdCdzIGFsd2F5cyBjb21waWxlZCBpbi4gT2theSwgc28gdGhhdCdzIG5vdCBhIGNvbmZpZyBvcHRpb24gY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjQ6MTguOTY1MDU4ODc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY1MDIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXBhYmxlX25vYXVkaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2NhcGFiaWxpdHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvY2FwYWJpbGl0eS5jPTM2ND1FWFBPUlRfU1lNQk9MKG5zX2NhcGFibGUpO1xcbi0tXFxua2VybmVsL2NhcGFiaWxpdHkuYy0zNjYtLyoqXFxua2VybmVsL2NhcGFiaWxpdHkuYzozNjc6ICogbnNfY2FwYWJsZV9ub2F1ZGl0IC0gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIGEgc3VwZXJpb3IgY2FwYWJpbGl0eVxcbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzY4LSAqICh1bmF1ZGl0ZWQpIGluIGVmZmVjdFxcbi0tXFxua2VybmVsL2NhcGFiaWxpdHkuYy0zNzctICovXFxua2VybmVsL2NhcGFiaWxpdHkuYzozNzg6Ym9vbCBuc19jYXBhYmxlX25vYXVkaXQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcClcXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTM3OS17XFxuLS1cXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTM4MS19XFxua2VybmVsL2NhcGFiaWxpdHkuYzozODI6RVhQT1JUX1NZTUJPTChuc19jYXBhYmxlX25vYXVkaXQpO1xcbmtlcm5lbC9jYXBhYmlsaXR5LmMtMzgzLVxcbi0tXFxua2VybmVsL2NhcGFiaWxpdHkuYz00MTc9RVhQT1JUX1NZTUJPTChjYXBhYmxlKTtcXG4tLVxcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDE5LS8qKlxcbmtlcm5lbC9jYXBhYmlsaXR5LmM6NDIwOiAqIGNhcGFibGVfbm9hdWRpdCAtIERldGVybWluZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIHN1cGVyaW9yXFxua2VybmVsL2NhcGFiaWxpdHkuYy00MjEtICogY2FwYWJpbGl0eSBpbiBlZmZlY3QgKHVuYXVkaXRlZCkuXFxuLS1cXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTQyOS0gKi9cXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQzMDpib29sIGNhcGFibGVfbm9hdWRpdChpbnQgY2FwKVxcbmtlcm5lbC9jYXBhYmlsaXR5LmMtNDMxLXtcXG5rZXJuZWwvY2FwYWJpbGl0eS5jOjQzMjpcXHRyZXR1cm4gbnNfY2FwYWJsZV9ub2F1ZGl0KFxcdTAwMjZpbml0X3VzZXJfbnMsIGNhcCk7XFxua2VybmVsL2NhcGFiaWxpdHkuYy00MzMtfVxcbmtlcm5lbC9jYXBhYmlsaXR5LmM6NDM0OkVYUE9SVF9TWU1CT0woY2FwYWJsZV9ub2F1ZGl0KTtcXG5rZXJuZWwvY2FwYWJpbGl0eS5jLTQzNS0jZW5kaWYgLyogQ09ORklHX01VTFRJVVNFUiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDoxOS4wMjc3MTQzNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5NTk3MjIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIEZpbGVzeXN0ZW0gRmVhdHVyZXMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBXZSdyZSBsb29raW5nIGF0IGZpbGVzeXN0ZW0gZmVhdHVyZXMsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBrbm93IHdlJ3JlIG1vc3QgbGlrZWx5IGRlYWxpbmcgd2l0aCBgQ09ORklHX01VTFRJVVNFUmAgaGVyZS4gQnV0IGhvbmVzdGx5LCB0aGF0J3MgbmVhcmx5IGFsd2F5cyBlbmFibGVkLCBzbyBpdCdzIHByb2JhYmx5IG5vdCB0aGUgY3JpdGljYWwgY29uZGl0aW9uYWwuIE15IG1haW4gZm9jdXMgaGFzIHRvIGJlIG9uIGBRVU9UQWAgYW5kIGBYRlNfRlNgLCB0aG9zZSBhcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGNvZGUgdG8gc2VlIGlmIHNvbWV0aGluZyBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgZnMveGZzL3hmc19mc21hcC5jYCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgY29tcGlsZSB0aW1lIGNoZWNrcyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIExldCdzIG1ha2Ugc3VyZSBpdOKAmXMgYmVoYXZpbmcgZXhhY3RseSBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNDozMy45ODc0Mzk3MzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODc1MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmc19mc21hcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3hmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy94ZnMvTWFrZWZpbGU9NzE9eGZzLXlcXHRcXHRcXHRcXHQrPSB4ZnNfYW9wcy5vIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS04NS1cXHRcXHRcXHRcXHQgICB4ZnNfZmlsZXN0cmVhbS5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGU6ODY6XFx0XFx0XFx0XFx0ICAgeGZzX2ZzbWFwLm8gXFxcXFxcbmZzL3hmcy9NYWtlZmlsZS04Ny1cXHRcXHRcXHRcXHQgICB4ZnNfZnNvcHMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI0OjM0LjA1NTMyMzQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDMwNTQ0NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBYRlMgSW50ZWdyYXRpb24gYW5kIFF1b3RhIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBYRlMgYW5kIGl0cyBpbnRlZ3JhdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgdGhlIFhGUyBmaWxlc3lzdGVtIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgd2hlbiBgQ09ORklHX1hGU19GU2AgaXMgZGVmaW5lZC4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgbWFrZXMgc2Vuc2UuIEJ1dCBpdCBhbHdheXMgbWFrZXMgbWUgcGF1c2UgYW5kIHRoaW5rIGFib3V0IHRoZSBvdGhlciBiaXRzLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcXVvdGEgaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBhcyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW1zLiBMZXQgbWUganVzdCB0YWtlIGEgcGVlayBhdCBgZnMvcXVvdGEvZHF1b3QuY2AgdG8gcmVtaW5kIG15c2VsZiBob3cgdGhhdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiwgZXNwZWNpYWxseSBpZiB0aGVyZSdzIGFueSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBiZWhhdmlvciBvciBvcHRpbWl6YXRpb25zIHRoYXQgZGVwZW5kIG9uIFhGUyBiZWluZyBidWlsdC1pbiB0aGlzIHdheS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRvIGJlIGF3YXJlIG9mP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjA0LjA4NTg3MTU2M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4OTcyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRxdW90Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZnMvcXVvdGEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUVVPVEEpXFx0XFx0Kz0gZHF1b3Qub1xcbmZzL3F1b3RhL01ha2VmaWxlLTMtb2JqLSQoQ09ORklHX1FGTVRfVjEpXFx0XFx0Kz0gcXVvdGFfdjEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNTowNC40NjQ4NDkzMDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMDM4MzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBYRlMgUXVvdGEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBxdW90YXMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBYRlMgZmlsZXN5c3RlbS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBhbGwgY29udGluZ2VudCBvbiBgQ09ORklHX1FVT1RBYCBiZWluZyBlbmFibGVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgY29yZSBzd2l0Y2guXG5cbk5vdywgc3BlY2lmaWNhbGx5LCBpdCdzIHRpZWQgdG8gdGhlIGBRVU9UQWAgYW5kIGBYRlNfRlNgIGNvbmZpZ3VyYXRpb25zLiBJJ20gZm9jdXNpbmcgb24gYSBmZXcga2V5IHN5bWJvbHM6IGB4ZnNfaW9jX2dldGZzbWFwYCwgYHhmc19maWxlYXR0cl9zZXRgLCBhbmQgYHhmc192bl9zZXRhdHRyYC4gYHhmc192bl9zZXRhdHRyYCBpcyBwcmV0dHkgZ2VuZXJhbCwgaXQgaXMgWEZTJ3MgZ2VuZXJpYyBgc2V0YXR0cmAgaGFuZGxlciBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYGNobW9kYCwgYGNob3duYCwgYW5kIGB0cnVuY2F0ZWAsIHNvIGl0J3MgYSBob3QgcGF0aCwgYnV0IG5vdCBhIGh1Z2UgY29uY2Vybi4gYHhmc19maWxlYXR0cl9zZXRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCBgRlNfSU9DX1NFVEZMQUdTYCBhbmQgYEZTX0lPQ19GU1NFVFhBVFRSYCwgd2hpY2ggYXJlIGlvY3RsIGNvbW1hbmRzLiBgeGZzX2lvY19nZXRmc21hcGAgaXMgZm9yIGBGU19JT0NfR0VURlNNQVBgLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGltcG9ydGFudCByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkP1xuXG5MZXQncyBzZWUsIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGlzIGNhbGxlZCBieSBgeGZzX2ZpbGVhdHRyX3NldGAuIEFuZCBib3RoIGB4ZnNfdm5fc2V0YXR0cmAgYW5kIGB4ZnNfdm5fc2V0YXR0cl9zaXplYCBjYWxsIGB4ZnNfc2V0YXR0cl9ub25zaXplYC4gR29vZCB0byBrbm93IHRoZSBjYWxsIGNoYWlucy5cblxuQWxyaWdodCwgbm93IGxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgeGZzX2lvY19nZXRmc21hcGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY291bGQgaW1wYWN0IGhvdyBpdCdzIGxpbmtlZCBvciBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjEwLjk2NTIzNDY4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NTgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2lvY19nZXRmc21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMveGZzX2ZzbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19mc21hcC5jPTEyOTk9aW50XFxuZnMveGZzL3hmc19mc21hcC5jOjEzMDA6eGZzX2lvY19nZXRmc21hcChcXG5mcy94ZnMveGZzX2ZzbWFwLmMtMTMwMS1cXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNToxMS4wMjk3OTg2ODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1NDE5NzY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cblJpZ2h0LCBpdCdzIG5vdCBhIGZpeGVkIGVudGl0eSB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoaW5ncyBhcmUgaW4gZmx1eCwgY29uc3RhbnRseSBjaGFuZ2luZy4gVGhhdCBzdGF0aWMgcGVyc3BlY3RpdmUgaXMgZGFuZ2Vyb3VzOyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIGR5bmFtaWMgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwbGF5cyBvdXQgaW4gdGhlIGtlcm5lbC5cblxuSSBuZWVkIHRvIGRpZyBpbjsgSSBuZWVkIHRvIGxvb2sgYXQgaG93IHdlJ3JlIHJlYWxseSBtYWtpbmcgYWRqdXN0bWVudHMuIExldCdzIHN0YXJ0IHdpdGggYHhmc19maWxlYXR0cl9zZXRgLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgaW50ZXJhY3Rpb24gcmVzaWRlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGNoYW5nZXMgYXJlIGhhbmRsZWQsIHdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSwgaG93IGVycm9yIGNvbmRpdGlvbnMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIGFueSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGF0IHRoZSBzeXN0ZW0gaXMgbm90IHN0YXRpYywgYW5kIGNoYW5nZXMgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHN0YXRlLCBJIG5lZWQgdG8gc2VlIGhvdyBgeGZzX2ZpbGVhdHRyX3NldGAgbWFuYWdlcyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjE2Ljc4Mzk5ODY4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNzQ5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2ZpbGVhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMveGZzX2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb2N0bC5jPTc0OT1pbnRcXG5mcy94ZnMveGZzX2lvY3RsLmM6NzUwOnhmc19maWxlYXR0cl9zZXQoXFxuZnMveGZzL3hmc19pb2N0bC5jLTc1MS1cXHRzdHJ1Y3QgbW50X2lkbWFwXFx0KmlkbWFwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNDoyNToxNi44NDgwNzc5MTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwNDUzNzMwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEeW5hbWljIFN5c3RlbSBCZWhhdmlvcioqXG5cbkFscmlnaHQsIHNvIGl0J3Mgbm90IGEgZml4ZWQsIGltbXV0YWJsZSB0aGluZy4gVGhpcyBzeXN0ZW0sIHRoaXMgYmVoYXZpb3IsIGl0J3MgKmR5bmFtaWMqLiBUaGF0J3MgdGhlIGtleS4gV2UgY2FuJ3QgdHJlYXQgaXQgbGlrZSBhIHNuYXBzaG90OyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vdmluZyBwYXJ0cy4gV2hlcmUncyB0aGUgY2hhbmdlIGhhcHBlbmluZz9cblxuTGV0J3MgZGlnIGluLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgaW5xdWlyeSwgbXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gaG93IGF0dHJpYnV0ZXMgYXJlIHNldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB3cml0ZXMgbWV0YWRhdGEuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYHhmc192bl9zZXRhdHRyYC4gVGhhdCdzIGxpa2VseSB0aGUgcmlnaHQgYXJlYSB0byBzdGFydCB3aXRoLCBnaXZlbiB0aGUgY2hhbmdlcyBiZWluZyBkZXNjcmliZWQuIEl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjI5Ljg5MzQ1Mjg0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxMTc0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX3ZuX3NldGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMveGZzL3hmc19pb3BzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19pb3BzLmM9OTA2PWludFxcbmZzL3hmcy94ZnNfaW9wcy5jOjkwNzp4ZnNfdm5fc2V0YXR0cl9zaXplKFxcbmZzL3hmcy94ZnNfaW9wcy5jLTkwOC1cXHRzdHJ1Y3QgbW50X2lkbWFwXFx0KmlkbWFwLFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmM9MTEzMz1TVEFUSUMgaW50XFxuZnMveGZzL3hmc19pb3BzLmM6MTEzNDp4ZnNfdm5fc2V0YXR0cihcXG5mcy94ZnMveGZzX2lvcHMuYy0xMTM1LVxcdHN0cnVjdCBtbnRfaWRtYXBcXHQqaWRtYXAsXFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYy0xMTU0LVxcbmZzL3hmcy94ZnNfaW9wcy5jOjExNTU6XFx0XFx0ZXJyb3IgPSB4ZnNfdm5fc2V0YXR0cl9zaXplKGlkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy94ZnMveGZzX2lvcHMuYy0xMTU2LVxcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCk7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMjY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB4ZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyNjgtXFx0LmdldGF0dHJcXHRcXHQ9IHhmc192bl9nZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jOjEyNjk6XFx0LnNldGF0dHJcXHRcXHQ9IHhmc192bl9zZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyNzAtXFx0Lmxpc3R4YXR0clxcdFxcdD0geGZzX3ZuX2xpc3R4YXR0cixcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTEyNzg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyOTYtXFx0LmdldGF0dHJcXHRcXHQ9IHhmc192bl9nZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jOjEyOTc6XFx0LnNldGF0dHJcXHRcXHQ9IHhmc192bl9zZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTEyOTgtXFx0Lmxpc3R4YXR0clxcdFxcdD0geGZzX3ZuX2xpc3R4YXR0cixcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTEzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfY2lfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzMjQtXFx0LmdldGF0dHJcXHRcXHQ9IHhmc192bl9nZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jOjEzMjU6XFx0LnNldGF0dHJcXHRcXHQ9IHhmc192bl9zZXRhdHRyLFxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzMjYtXFx0Lmxpc3R4YXR0clxcdFxcdD0geGZzX3ZuX2xpc3R4YXR0cixcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTEzMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYy0xMzM2LVxcdC5nZXRhdHRyXFx0XFx0PSB4ZnNfdm5fZ2V0YXR0cixcXG5mcy94ZnMveGZzX2lvcHMuYzoxMzM3OlxcdC5zZXRhdHRyXFx0XFx0PSB4ZnNfdm5fc2V0YXR0cixcXG5mcy94ZnMveGZzX2lvcHMuYy0xMzM4LVxcdC5saXN0eGF0dHJcXHRcXHQ9IHhmc192bl9saXN0eGF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE0OjI1OjI5Ljk2ODU3NzYzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUzNTkxNTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgVGFyZ2V0IFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIENhcGFiaWxpdHkgQ2hlY2sgQXVkaXQgTWl0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGB4ZnNfdm5fc2V0YXR0cmAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGtleSBwb2ludCB0byBzdGFydCB3aXRoLiBgeGZzX3ZuX3NldGF0dHJfc2l6ZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBub24tc3RhdGljLiBXZSB3ZXJlIGNvbnNpZGVyaW5nIGB4ZnNfdm5fc2V0YXR0cl9zaXplYCBhcyBhIHJlcGxhY2VtZW50LCBidXQgdGhhdCdzIG9ubHkgZm9yIHNpemUgY2hhbmdlcy4gYHhmc19zZXRhdHRyX25vbnNpemVgIGhhbmRsZXMgdGhlIG5vbi1zaXplIGF0dHJpYnV0ZSBjaGFuZ2VzLCBhbmQgdGhhdCBvbmUsIHN1cnByaXNpbmdseSwgKmlzKiBzdGF0aWMgYnV0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBhY3R1YWxseSBtb2RpZmllZCBpbiB0aGUgcGF0Y2guIE5vdywgdGhlIGZ1enplciAqY2FuKiB0YXJnZXQgc3RhdGljIGZ1bmN0aW9ucywgaWYgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYnV0IGdlbmVyYWxseSBpdCdzIGJldHRlciB0byBwcm92aWRlIG5vbi1zdGF0aWMgc3ltYm9scy4gSG93ZXZlciwgU3l6a2FsbGVyICpjYW4qIGdldCBzdGF0aWMgZnVuY3Rpb25zLlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoICptb2RpZmllcyogYHhmc19zZXRhdHRyX25vbnNpemVgIGRpcmVjdGx5LiBUaGVyZWZvcmUsIHRoYXQgaXMgZXNzZW50aWFsLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIG90aGVyIHN0YXRpYyBmdW5jdGlvbnM6IGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgLCBgeGZzX2dldGZzbWFwYCwgYW5kIGBpZ25vcmVfaGFyZGxpbWl0YC4gU28sIEkgc3RhcnRlZCB3aXRoIHRoZSBzZXQgb2YgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9uczpcblxuKiAgIGBpZ25vcmVfaGFyZGxpbWl0YFxuKiAgIGB4ZnNfZ2V0ZnNtYXBgXG4qICAgYHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFuc2BcbiogICBgeGZzX3NldGF0dHJfbm9uc2l6ZWBcblxuQnV0IHdhaXQsIGB4ZnNfZ2V0ZnNtYXBgIGlzIHN0YXRpYywgd2hpbGUgYHhmc19pb2NfZ2V0ZnNtYXBgIGlzIG5vbi1zdGF0aWMuIFNhbWUgZm9yIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgIGFuZCBgeGZzX2ZpbGVhdHRyX3NldGAgYW5kIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBhbmQgYHhmc192bl9zZXRhdHRyX3NpemVgLiBTbywgSSdsbCBwcm92aWRlIGJvdGggdGhlIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMgQU5EIHRoZWlyIG5vbi1zdGF0aWMgY2FsbGVyczpcblxuKiAgIGB4ZnNfaW9jX2dldGZzbWFwYFxuKiAgIGB4ZnNfZmlsZWF0dHJfc2V0YFxuKiAgIGB4ZnNfdm5fc2V0YXR0cl9zaXplYFxuKiAgIGBfX2RxdW90X2FsbG9jX3NwYWNlYFxuKiAgIGBkcXVvdF9hbGxvY19pbm9kZWBcbiogICBgX19kcXVvdF90cmFuc2ZlcmBcblxuSG93ZXZlciwgdGhlIG1haW4gY2FsbGVyIHRvIGB4ZnNfc2V0YXR0cl9ub25zaXplYCBpcywgaW4gZmFjdCwgYHhmc192bl9zZXRhdHRyYCwgd2hpY2ggaXMgc3RhdGljLiBTbywgdGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gcHJvdmlkZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGVpciAqZGlyZWN0KiBjYWxsZXJzLCBsZWFkaW5nIHRvIHRoaXMgc2V0IG9mIHN5bWJvbHM6XG5cbiogICBgaWdub3JlX2hhcmRsaW1pdGBcbiogICBgeGZzX2dldGZzbWFwYFxuKiAgIGB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnNgXG4qICAgYHhmc19zZXRhdHRyX25vbnNpemVgXG4qICAgYHhmc19pb2NfZ2V0ZnNtYXBgXG4qICAgYHhmc19maWxlYXR0cl9zZXRgXG4qICAgYGRxdW90X2FkZF9pbm9kZXNgXG4qICAgYGRxdW90X2FkZF9zcGFjZWBcblxuVGhlbiwgcmVmaW5pbmcgZXZlbiBmdXJ0aGVyLCBJJ2xsIGZvY3VzIG9uIHRoZXNlOlxuXG4qICAgYHhmc19pb2NfZ2V0ZnNtYXBgXG4qICAgYHhmc19maWxlYXR0cl9zZXRgXG4qICAgYHhmc19zZXRhdHRyX25vbnNpemVgXG4qICAgYGRxdW90X2FkZF9pbm9kZXNgXG4qICAgYGRxdW90X2FkZF9zcGFjZWBcblxuVGhpcyBzaG91bGQgZ2l2ZSBnb29kIGNvdmVyYWdlLCBoaXR0aW5nIHRoZSBpb2N0bHMgYW5kIHF1b3RhIHBhdGhzIHRvdWNoZWQgYnkgdGhlIHBhdGNoLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhlIGNvcmUgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYGNhcGFibGVfbm9hdWRpdGAsIHJlcGxhY2luZyBgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdGAgYW5kIGBjYXBhYmxlYCwgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBjYXBhYmlsaXR5IGNoZWNrcyB3aXRoaW4gcXVvdGEgZW5mb3JjZW1lbnQgYW5kIFhGUyBpb2N0bHMvc2V0YXR0ciBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlOiBgUVVPVEFgIGFuZCBgWEZTX0ZTYCwgd2hpY2ggYXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kaWZpZWQgZmlsZXMuIFllcywgdGhvc2UgYXJlIHN1ZmZpY2llbnQuIE9rYXksIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzIG5vdy4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NywiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTQ6MjU6NTguNTA0NDk1NDM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5MDg1Njg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVVPVEFcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2NfZ2V0ZnNtYXBcIixcbiAgICBcInhmc19maWxlYXR0cl9zZXRcIixcbiAgICBcInhmc19zZXRhdHRyX25vbnNpemVcIixcbiAgICBcImRxdW90X2FkZF9pbm9kZXNcIixcbiAgICBcImRxdW90X2FkZF9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGNhcGFibGVfbm9hdWRpdGAgYW5kIHJlcGxhY2VzIGBoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0YCBhbmQgYGNhcGFibGVgIHdpdGggaXQgaW4gWEZTIGFuZCBxdW90YSBzdWJzeXN0ZW1zLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIGJ5IHNldHRpbmcgYFBGX1NVUEVSUFJJVmAgd2l0aG91dCBnZW5lcmF0aW5nIGF1ZGl0IG1lc3NhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY2FwYWJpbGl0eSBjaGVja3MgZHVyaW5nIHF1b3RhIGVuZm9yY2VtZW50IGFuZCBYRlMgaW9jdGxzL3NldGF0dHIgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRVU9UQVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2lvY19nZXRmc21hcFwiLFxuICAgIFwieGZzX2ZpbGVhdHRyX3NldFwiLFxuICAgIFwieGZzX3NldGF0dHJfbm9uc2l6ZVwiLFxuICAgIFwiZHF1b3RfYWRkX2lub2Rlc1wiLFxuICAgIFwiZHF1b3RfYWRkX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2FwYWJsZV9ub2F1ZGl0YCBhbmQgcmVwbGFjZXMgYGhhc19jYXBhYmlsaXR5X25vYXVkaXRgIGFuZCBgY2FwYWJsZWAgd2l0aCBpdCBpbiBYRlMgYW5kIHF1b3RhIHN1YnN5c3RlbXMuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3IgYnkgc2V0dGluZyBgUEZfU1VQRVJQUklWYCB3aXRob3V0IGdlbmVyYXRpbmcgYXVkaXQgbWVzc2FnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjYXBhYmlsaXR5IGNoZWNrcyBkdXJpbmcgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIFhGUyBpb2N0bHMvc2V0YXR0ciBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[1] Phase: Succeeded StartedAt: 2026-07-02 14:26:14 +0000 UTC FinishedAt: 2026-07-02 14:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 14:26:14 +0000 UTC FinishedAt: 2026-07-02 14:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2] Phase: Succeeded StartedAt: 2026-07-02 14:26:14 +0000 UTC FinishedAt: 2026-07-02 17:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-02 14:26:14 +0000 UTC FinishedAt: 2026-07-02 17:30:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 14:26:14 +0000 UTC FinishedAt: 2026-07-02 14:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 14:26:14 +0000 UTC FinishedAt: 2026-07-02 14:26:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowbghvm/series-workflowbghvm-convert-artifact-649933630/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 14:26:48 +0000 UTC FinishedAt: 2026-07-02 14:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 14:26:48 +0000 UTC FinishedAt: 2026-07-02 14:57:34 +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:*a2729f24-5574-45bf-b5d1-9986d456b7c7,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-workflowbghvm/series-workflowbghvm-convert-artifact-649933630/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": "23a4e774-0401-447d-aed4-e69ab1387bdb", "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-workflowbghvm/series-workflowbghvm-build-action-1211436068/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 14:26:48 +0000 UTC FinishedAt: 2026-07-02 14:57:09 +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:*a2729f24-5574-45bf-b5d1-9986d456b7c7,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-workflowbghvm/series-workflowbghvm-convert-artifact-649933630/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": "23a4e774-0401-447d-aed4-e69ab1387bdb", "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-workflowbghvm/series-workflowbghvm-build-action-1211436068/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 14:57:34 +0000 UTC FinishedAt: 2026-07-02 14:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 14:57:34 +0000 UTC FinishedAt: 2026-07-02 14:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 14:57:34 +0000 UTC FinishedAt: 2026-07-02 14:57:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 14:57:34 +0000 UTC FinishedAt: 2026-07-02 14:57:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowbghvm/series-workflowbghvm-convert-artifact-3788188529/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 14:57:55 +0000 UTC FinishedAt: 2026-07-02 15:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 14:57:55 +0000 UTC FinishedAt: 2026-07-02 15:00:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23a4e774-0401-447d-aed4-e69ab1387bdb,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-workflowbghvm/series-workflowbghvm-build-action-1211436068/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-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 15:00:15 +0000 UTC FinishedAt: 2026-07-02 15:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 15:00:15 +0000 UTC FinishedAt: 2026-07-02 15:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 15:00:15 +0000 UTC FinishedAt: 2026-07-02 15:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 15:00:15 +0000 UTC FinishedAt: 2026-07-02 15:25:14 +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:*a2729f24-5574-45bf-b5d1-9986d456b7c7,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-workflowbghvm/series-workflowbghvm-convert-artifact-3788188529/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": "d3dd4462-17e4-433a-9725-6c03da7e9e78", "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-workflowbghvm/series-workflowbghvm-build-action-1344325949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 15:00:15 +0000 UTC FinishedAt: 2026-07-02 15:23:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a2729f24-5574-45bf-b5d1-9986d456b7c7,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-workflowbghvm/series-workflowbghvm-convert-artifact-3788188529/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": "d3dd4462-17e4-433a-9725-6c03da7e9e78", "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-workflowbghvm/series-workflowbghvm-build-action-1344325949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 15:25:14 +0000 UTC FinishedAt: 2026-07-02 15:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 15:25:14 +0000 UTC FinishedAt: 2026-07-02 15:25:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 15:25:14 +0000 UTC FinishedAt: 2026-07-02 15:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 15:25:14 +0000 UTC FinishedAt: 2026-07-02 15:27:23 +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:*d3dd4462-17e4-433a-9725-6c03da7e9e78,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-workflowbghvm/series-workflowbghvm-build-action-1344325949/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-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-02 15:27:32 +0000 UTC FinishedAt: 2026-07-02 17:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-02 15:27:32 +0000 UTC FinishedAt: 2026-07-02 17:30:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*23a4e774-0401-447d-aed4-e69ab1387bdb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3dd4462-17e4-433a-9725-6c03da7e9e78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbghvm/series-workflowbghvm-build-action-1211436068/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbghvm/series-workflowbghvm-build-action-1344325949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 15:27:32 +0000 UTC FinishedAt: 2026-07-02 15:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 15:27:32 +0000 UTC FinishedAt: 2026-07-02 15:27:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbghvm/series-workflowbghvm-convert-artifact-2841431846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 15:27:32 +0000 UTC FinishedAt: 2026-07-02 15:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 15:27:32 +0000 UTC FinishedAt: 2026-07-02 15:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 15:27:32 +0000 UTC FinishedAt: 2026-07-02 15:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-07-02 15:27:42 +0000 UTC FinishedAt: 2026-07-02 17:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbghvm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_ioc_getfsmap","xfs_fileattr_set","xfs_setattr_nonsize","dquot_add_inodes","dquot_add_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","XFS_FS"],"series_id":"2d7309dd-5a9f-4ea5-8759-4d92bf4b8c85","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-07-02 15:27:42 +0000 UTC FinishedAt: 2026-07-02 17:30:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23a4e774-0401-447d-aed4-e69ab1387bdb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3dd4462-17e4-433a-9725-6c03da7e9e78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbghvm/series-workflowbghvm-build-action-1211436068/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbghvm/series-workflowbghvm-build-action-1344325949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbghvm/series-workflowbghvm-convert-artifact-2841431846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil