Name: series-workflows28gd Phase: Succeeded StartedAt: 2026-07-31 16:38:10 +0000 UTC FinishedAt: 2026-07-31 20:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[0] Phase: Succeeded StartedAt: 2026-07-31 16:38:10 +0000 UTC FinishedAt: 2026-07-31 16:42:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 16:38:10 +0000 UTC FinishedAt: 2026-07-31 16:42:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BUFFER_HEAD", "FS_IOMAP", "XFS_FS", "EROFS_FS", "EROFS_FS_ZIP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BUFFER_HEAD", "FS_IOMAP", "XFS_FS", "EROFS_FS", "EROFS_FS_ZIP" ], "series_id": "d4b1d569-1c4c-4be3-95e2-281d21d22d14" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__bio_complete_in_task", "iomap_add_to_ioend" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19aSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jpb19jb21wbGV0ZV9pbl90YXNrJiMzNDssCiAgICAmIzM0O2lvbWFwX2FkZF90b19pb2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGluZnJhc3RydWN0dXJlIGluIHRoZSBibG9jayBsYXllciBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdmlhIGEgcGVyLUNQVSB3b3JrcXVldWUuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBmbGFnLCB3aGljaCBpcyBzZXQgaW4gZnMvYnVmZmVyLmMgYW5kIGZzL2lvbWFwL2lvZW5kLmMgd2hlbiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pIGlzIHRydWUgKGUuZy4sIHZpYSBSV0ZfRE9OVENBQ0hFIHdyaXRlcykuIFRoZSBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2sgYW5kIGludGVncmF0ZWQgaW50byBiaW9fZW5kaW8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aHMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTY6Mzk6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggNmEyZjZmYzM0MTNlOC4uYTk2MTA5NTAzMjViMCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTE3NDEsNiAmIzQzOzE3NDEsNjEgQEAgdm9pZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZiaW9fZGlydHlfd29yayk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBJbmZyYXN0cnVjdHVyZSBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrLWNvbnRleHQgdmlhIGEgcGVyLUNQVVxuJiM0MzsgKiB3b3JrcXVldWUuIFRyaWdnZXJlZCBlaXRoZXIgYnkgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIGJpbyBmbGFnIChzdGF0aWNcbiYjNDM7ICogZGVjaXNpb24gYXQgc3VibWl0IHRpbWUpIG9yIGJ5IGNhbGxpbmcgYmlvX2NvbXBsZXRlX2luX3Rhc2soKSBmcm9tXG4mIzQzOyAqIGJpX2VuZF9pbygpIChkeW5hbWljIGRlY2lzaW9uIGF0IGNvbXBsZXRpb24gdGltZSkuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCB7XG4mIzQzO1x0c3RydWN0IGJpb19saXN0IGxpc3Q7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCBiaW9fY29tcGxldGVfYmF0Y2gpO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJpb19jb21wbGV0ZV93cTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJpb19jb21wbGV0ZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCB3b3JrKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xuJiM0MztcdFx0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcbiYjNDM7XHRcdGxvY2FsX2lycV9kaXNhYmxlKCk7XG4mIzQzO1x0XHRsaXN0ID0gYmF0Y2gtXHUwMDNlbGlzdDtcbiYjNDM7XHRcdGJpb19saXN0X2luaXQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJpb19saXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZsaXN0KSkpXG4mIzQzO1x0XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8oYmlvKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgd2FzX2VtcHR5O1xuJiM0MztcbiYjNDM7XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0YmF0Y2ggPSB0aGlzX2NwdV9wdHIoXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoKTtcbiYjNDM7XHR3YXNfZW1wdHkgPSBiaW9fbGlzdF9lbXB0eShcdTAwMjZiYXRjaC1cdTAwM2VsaXN0KTtcbiYjNDM7XHRiaW9fbGlzdF9hZGQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCwgYmlvKTtcbiYjNDM7XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3YXNfZW1wdHkpXG4mIzQzO1x0XHRxdWV1ZV93b3JrX29uKGJhdGNoLVx1MDAzZWNwdSwgYmlvX2NvbXBsZXRlX3dxLCBcdTAwMjZiYXRjaC1cdTAwM2V3b3JrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19jb21wbGV0ZV9pbl90YXNrKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGJpb19yZW1haW5pbmdfZG9uZShzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0LypcbkBAIC0xODE1LDcgJiM0MzsxODcwLDkgQEAgdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0fVxuICNlbmRpZlxuIFxuLVx0aWYgKGJpby1cdTAwM2ViaV9lbmRfaW8pXG4mIzQzO1x0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spIFx1MDAyNlx1MDAyNiBiaW9faW5fYXRvbWljKCkpXG4mIzQzO1x0XHRfX2Jpb19jb21wbGV0ZV9pbl90YXNrKGJpbyk7XG4mIzQzO1x0ZWxzZSBpZiAoYmlvLVx1MDAzZWJpX2VuZF9pbylcbiBcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyhiaW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGJpb19lbmRpbyk7XG5AQCAtMjAwMSw2ICYjNDM7MjA1OCw1NSBAQCBpbnQgYmlvc2V0X2luaXQoc3RydWN0IGJpb19zZXQgKmJzLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGJpb3NldF9pbml0KTtcbiBcbiYjNDM7c3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2ggPSBcdTAwMjZwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcbiYjNDM7XG4mIzQzO1x0ZW5hYmxlX3dvcmsoXHUwMDI2YmF0Y2gtXHUwMDNld29yayk7XG4mIzQzO1x0aWYgKCFiaW9fbGlzdF9lbXB0eShcdTAwMjZiYXRjaC1cdTAwM2VsaXN0KSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmtfb24oY3B1LCBiaW9fY29tcGxldGVfd3EsIFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEaXNhYmxlIHRoaXMgQ1BVJiMzOTtzIHdvcmsgaXRlbSBzbyB0aGF0IGl0IGNhbm5vdCBydW4gb24gYW4gdW5ib3VuZCB3b3JrZXJcbiYjNDM7ICogYWZ0ZXIgdGhlIENQVSBpcyBvZmZsaW5lZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kb3duX3ByZXAodW5zaWduZWQgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoYmlvX2NvbXBsZXRlX2JhdGNoLCBjcHUpLndvcmspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBhIGRlYWQgQ1BVJiMzOTtzIGRlZmVycmVkIGJpbyBjb21wbGV0aW9ucy4gVGhlIENQVSBpcyBkZWFkIGFuZCB0aGUgd29ya2VyXG4mIzQzOyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cbiYjNDM7XHRcdHBlcl9jcHVfcHRyKFx1MDAyNmJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW87XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QpKSlcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8oYmlvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBiaW9fY29tcGxldGVfYmF0Y2hfaW5pdChpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2ggPVxuJiM0MztcdFx0cGVyX2NwdV9wdHIoXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRiaW9fbGlzdF9pbml0KFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZiYXRjaC1cdTAwM2V3b3JrLCBiaW9fY29tcGxldGVfd29ya19mbik7XG4mIzQzO1x0YmF0Y2gtXHUwMDNlY3B1ID0gY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIWNwdV9vbmxpbmUoY3B1KSlcbiYjNDM7XHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYmlvKHZvaWQpXG4ge1xuIFx0aW50IGk7XG5AQCAtMjAxNSw2ICYjNDM7MjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxuIFx0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQywgTlVMTCk7XG4gXHR9XG4gXG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXG4mIzQzO1x0XHRiaW9fY29tcGxldGVfYmF0Y2hfaW5pdChpKTtcbiYjNDM7XG4mIzQzO1x0YmlvX2NvbXBsZXRlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O2Jpb19jb21wbGV0ZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwKTtcbiYjNDM7XHRpZiAoIWJpb19jb21wbGV0ZV93cSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O2JpbzogY2FuJiMzOTt0IGFsbG9jYXRlIGJpb19jb21wbGV0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJpbyB0YXNrLWNvbnRleHQgY29tcGxldGlvbiBkcmFpbmluZyBvbiBob3QtdW5wbHVnZ2VkIENQVXM6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiAgIDEuIFN0b3AgdGhlIHBlci1DUFUgd29yayBpdGVtIHdoaWxlIHRoZSBDUFUgaXMgc3RpbGwgb25saW5lLCBzb1xuJiM0MztcdCAqICAgICAgdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyIGxhdGVyLlxuJiM0MztcdCAqICAgMi4gRHJhaW4gbGVmdG92ZXIgYmlvcyBhZGRlZCBiZXR3ZWVuIHdvcmtlciBkaXNhYmxpbmcgYW5kIENQVVxuJiM0MztcdCAqICAgICAgb2ZmbGluaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfT05MSU5FX0RZTixcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O2Jsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSxcbiYjNDM7XHRcdFx0XHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKTtcbiYjNDM7XHRjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQX0JQX1BSRVBBUkVfRFlOLFxuJiM0MztcdFx0XHRcdCAgXCYjMzQ7YmxvY2svYmlvOmNvbXBsZXRlOmRlYWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBOVUxMLCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWQpO1xuJiM0MztcbiBcdGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0JJT19ERUFELCBcJiMzNDtibG9jay9iaW86ZGVhZFwmIzM0OywgTlVMTCxcbiBcdFx0XHRcdFx0YmlvX2NwdV9kZWFkKTtcbiBcbmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmNcbmluZGV4IDE1NzgzYTYxODBkZWMuLjhiMzljNTNiNjM5MzQgMTAwNjQ0XG4tLS0gYS9ibG9jay9mb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2ZvcHMuY1xuQEAgLTk0MSw3ICYjNDM7OTQxLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7XG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQuZmFsbG9jYXRlXHQ9IGJsa2Rldl9mYWxsb2NhdGUsXG4gXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG4tXHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DLFxuJiM0MztcdC5mb3BfZmxhZ3NcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxuIH07XG4gXG4gc3RhdGljIF9faW5pdCBpbnQgYmxrZGV2X2luaXQodm9pZClcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCA5YWY1ZjA2MWExZjg1Li42ZjA5OTg0NzI0MGUwIDEwMDY0NFxuLS0tIGEvZnMvYnVmZmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J1ZmZlci5jXG5AQCAtMTIwMyw2ICYjNDM7MTIwMyw5IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXG4gXHRiaW8gPSBiaW9fYWxsb2MoYmgtXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcbiBcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuJiM0MztcdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcbiBcdFx0YnVmZmVyX3NldF9jcnlwdG9fY3R4KGJpbywgYmgsIEdGUF9OT0lPKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy96ZGF0YS5jIGIvZnMvZXJvZnMvemRhdGEuY1xuaW5kZXggNzQ1MjBlOTEwMjU5Ni4uZjc5NmJiM2VmNTNiOSAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3pkYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3pkYXRhLmNcbkBAIC0xNDI3LDE1ICYjNDM7MTQyNyw2IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlX2t0aHJlYWRfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuIH1cbiAjZW5kaWZcbiBcbi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgel9lcm9mc19pbl9hdG9taWModm9pZClcbi17XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gIXByZWVtcHRpYmxlKCk7XG4tfVxuIFxuIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXG4gXHRcdFx0XHQgICAgICAgaW50IGJpb3MpXG5AQCAtMTQ1Miw3ICYjNDM7MTQ0Myw3IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXG4gXG4gXHRpZiAoYXRvbWljX2FkZF9yZXR1cm4oYmlvcywgXHUwMDI2aW8tXHUwMDNlcGVuZGluZ19iaW9zKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKHpfZXJvZnNfaW5fYXRvbWljKCkpIHtcbiYjNDM7XHRpZiAoYmlvX2luX2F0b21pYygpKSB7XG4gXHRcdC8qIFNlZSBgc3luY19kZWNvbXByZXNzYCBpbiBzeXNmcy1mcy1lcm9mcyBmb3IgbW9yZSBkZXRhaWxzICovXG4gXHRcdGlmIChzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID09IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPKVxuIFx0XHRcdHNiaS1cdTAwM2VzeW5jX2RlY29tcHJlc3MgPSBFUk9GU19TWU5DX0RFQ09NUFJFU1NfRk9SQ0VfT047XG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcbmluZGV4IDMwNDY4ZDUxYjVhZDcuLjFhZThhOGZiODUwMzggMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9pb2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9pb2VuZC5jXG5AQCAtMjM4LDggJiM0MzsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0aWYgKHdwYy1cdTAwM2Vpb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9TSEFSRUQpXG4gXHRcdGlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX1NIQVJFRDtcbi1cdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuLVx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9ET05UQ0FDSEU7XG4gXHRpZiAocG9zID09IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgXHUwMDI2XHUwMDI2ICh3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgXHUwMDI2IElPTUFQX0ZfQk9VTkRBUlkpKVxuIFx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9CT1VOREFSWTtcbiBcbkBAIC0yNTYsNiAmIzQzOzI1NCw5IEBAIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRpZiAoIWJpb19hZGRfZm9saW8oXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvLCBmb2xpbywgbWFwX2xlbiwgcG9mZikpXG4gXHRcdGdvdG8gbmV3X2lvZW5kO1xuIFxuJiM0MztcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuJiM0MztcdFx0YmlvX3NldF9mbGFnKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBDbGFtcCBpb19vZmZzZXQgYW5kIGlvX3NpemUgdG8gdGhlIGluY29yZSBFT0Ygc28gdGhhdCBvbmRpc2tcbiBcdCAqIGZpbGUgc2l6ZSB1cGRhdGVzIGluIHRoZSBpb2VuZCBjb21wbGV0aW9uIGFyZSBieXRlLWFjY3VyYXRlLlxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmNcbmluZGV4IDUxMjkzYjZmMzMxZjAuLmNkOGRlOGM4MmQ3OGMgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC01MjIsMTAgJiM0Mzs1MjIsNiBAQCB4ZnNfaW9lbmRfbmVlZHNfd3FfY29tcGxldGlvbihcbiBcdGlmIChpb2VuZC1cdTAwM2Vpb19mbGFncyBcdTAwMjYgKElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX1NIQVJFRCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0LyogUGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gY2Fubm90IGJlIGRvbmUgaW4gaXJxIGNvbnRleHQuICovXG4tXHRpZiAoaW9lbmQtXHUwMDNlaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0lPRU5EX0RPTlRDQUNIRSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oXG5pbmRleCA4ZjMzZjcxN2IxNGY1Li5hODA5MWEzZTlkODcyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW8uaFxuQEAgLTM2OCw2ICYjNDM7MzY4LDQ1IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqYmlvX2FsbG9jKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXG4gdm9pZCBzdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBiaW9faW5fYXRvbWljIC0gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyB1bnNhZmUgZm9yIGJpbyBjb21wbGV0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogJXRydWUgaW4gYXRvbWljIGNvbnRleHRzIChlLmcuIGhhcmQvc29mdCBJUlEsIHByZWVtcHQtZGlzYWJsZWQpO1xuJiM0MzsgKiAlZmFsc2Ugd2hlbiBhIGJpbyBjYW4gYmUgc2FmZWx5IGNvbXBsZXRlZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpb19pbl9hdG9taWModm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gIXByZWVtcHRpYmxlKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJpb19jb21wbGV0ZV9pbl90YXNrIC0gZW5zdXJlIGEgYmlvIGlzIGNvbXBsZXRlZCBpbiBwcmVlbXB0aWJsZSB0YXNrIGNvbnRleHRcbiYjNDM7ICogQGJpbzogYmlvIHRvIGNvbXBsZXRlXG4mIzQzOyAqXG4mIzQzOyAqIElmIGNhbGxlZCBmcm9tIG5vbi10YXNrIGNvbnRleHQsIG9mZmxvYWQgdGhlIGJpbyBjb21wbGV0aW9uIHRvIGEgd29ya2VyXG4mIzQzOyAqIHRocmVhZCBhbmQgcmV0dXJuICV0cnVlLiBFbHNlIHJldHVybiAlZmFsc2UgYW5kIGRvIG5vdGhpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgQklPX0NPTVBMRVRFX0lOX1RBU0sgYXMgYSBzZW50aW5lbDogaWYgc2V0LCB0aGUgYmlvIHdhcyBhbHJlYWR5XG4mIzQzOyAqIGRlZmVycmVkIGFuZCB3ZSBhcmUgcnVubmluZyBpbiB0aGUgd29ya2VyIOKAlCByZXR1cm4gJWZhbHNlIHNvIHRoZVxuJiM0MzsgKiBjYWxsYmFjayBwcm9jZWVkcyBpbnN0ZWFkIG9mIHJlLWRlZmVycmluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFiaW9faW5fYXRvbWljKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBleHRlcm4gdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggODgwOGVlNzZlNzNjMC4uZDQ5ZDk3YTA1MGQwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC0zMjIsNiAmIzQzOzMyMiw3IEBAIGVudW0ge1xuIFx0QklPX1JFTUFQUEVELFxuIFx0QklPX1pPTkVfV1JJVEVfUExVR0dJTkcsIC8qIGJpbyBoYW5kbGVkIHRocm91Z2ggem9uZSB3cml0ZSBwbHVnZ2luZyAqL1xuIFx0QklPX0VNVUxBVEVTX1pPTkVfQVBQRU5ELCAvKiBiaW8gZW11bGF0ZXMgYSB6b25lIGFwcGVuZCBvcGVyYXRpb24gKi9cbiYjNDM7XHRCSU9fQ09NUExFVEVfSU5fVEFTSywgLyogY29tcGxldGUgYmlfZW5kX2lvKCkgaW4gdGFzayBjb250ZXh0ICovXG4gXHRCSU9fRkxBR19MQVNUXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IDU2YjQzZDU5NGU2ZTIuLjY4YWY0OTM1YTEwN2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuQEAgLTQwNCwxNiAmIzQzOzQwNCwxMyBAQCBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gI2RlZmluZSBJT01BUF9JT0VORF9CT1VOREFSWVx0XHQoMVUgXHUwMDNjXHUwMDNjIDIpXG4gLyogaXMgZGlyZWN0IEkvTyAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUXHRcdCgxVSBcdTAwM2NcdTAwM2MgMylcbi0vKiBpcyBET05UQ0FDSEUgSS9PICovXG4tI2RlZmluZSBJT01BUF9JT0VORF9ET05UQ0FDSEVcdFx0KDFVIFx1MDAzY1x1MDAzYyA0KVxuIFxuIC8qXG4gICogRmxhZ3MgdGhhdCBpZiBzZXQgb24gZWl0aGVyIGlvZW5kIHByZXZlbnQgdGhlIG1lcmdlIG9mIHR3byBpb2VuZHMuXG4gICogKElPTUFQX0lPRU5EX0JPVU5EQVJZIGFsc28gcHJldmVudHMgbWVyZ2VzLCBidXQgb25seSBvbmUtd2F5KVxuICAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfTk9NRVJHRV9GTEFHUyBcXFxuLVx0KElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVCB8IFxcXG4tXHQgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKVxuJiM0MztcdChJT01BUF9JT0VORF9TSEFSRUQgfCBJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9ESVJFQ1QpXG4gXG4gLypcbiAgKiBTdHJ1Y3R1cmUgZm9yIHdyaXRlYmFjayBJL08gY29tcGxldGlvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19aSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jpb19jb21wbGV0ZV9pbl90YXNrJiMzNDssCiAgICAmIzM0O2lvbWFwX2FkZF90b19pb2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGluZnJhc3RydWN0dXJlIGluIHRoZSBibG9jayBsYXllciBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdmlhIGEgcGVyLUNQVSB3b3JrcXVldWUuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBmbGFnLCB3aGljaCBpcyBzZXQgaW4gZnMvYnVmZmVyLmMgYW5kIGZzL2lvbWFwL2lvZW5kLmMgd2hlbiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pIGlzIHRydWUgKGUuZy4sIHZpYSBSV0ZfRE9OVENBQ0hFIHdyaXRlcykuIFRoZSBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2sgYW5kIGludGVncmF0ZWQgaW50byBiaW9fZW5kaW8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aHMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTY6Mzk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jCmluZGV4IDZhMmY2ZmMzNDEzZTguLmE5NjEwOTUwMzI1YjAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC0xNzQxLDYgJiM0MzsxNzQxLDYxIEBAIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbykKIAlzY2hlZHVsZV93b3JrKCZhbXA7YmlvX2RpcnR5X3dvcmspOwogfQogCiYjNDM7LyoKJiM0MzsgKiBJbmZyYXN0cnVjdHVyZSBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrLWNvbnRleHQgdmlhIGEgcGVyLUNQVQomIzQzOyAqIHdvcmtxdWV1ZS4gVHJpZ2dlcmVkIGVpdGhlciBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgYmlvIGZsYWcgKHN0YXRpYwomIzQzOyAqIGRlY2lzaW9uIGF0IHN1Ym1pdCB0aW1lKSBvciBieSBjYWxsaW5nIGJpb19jb21wbGV0ZV9pbl90YXNrKCkgZnJvbQomIzQzOyAqIGJpX2VuZF9pbygpIChkeW5hbWljIGRlY2lzaW9uIGF0IGNvbXBsZXRpb24gdGltZSkuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCB7CiYjNDM7CXN0cnVjdCBiaW9fbGlzdCBsaXN0OwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJaW50IGNwdTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCBiaW9fY29tcGxldGVfYmF0Y2gpOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmlvX2NvbXBsZXRlX3dxOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJpb19jb21wbGV0ZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCB3b3JrKTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXN0cnVjdCBiaW9fbGlzdCBsaXN0OwomIzQzOwkJc3RydWN0IGJpbyAqYmlvOwomIzQzOwomIzQzOwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKJiM0MzsJCWxpc3QgPSBiYXRjaC0mZ3Q7bGlzdDsKJiM0MzsJCWJpb19saXN0X2luaXQoJmFtcDtiYXRjaC0mZ3Q7bGlzdCk7CiYjNDM7CQlsb2NhbF9pcnFfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CQlpZiAoYmlvX2xpc3RfZW1wdHkoJmFtcDtsaXN0KSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZhbXA7bGlzdCkpKQomIzQzOwkJCWJpby0mZ3Q7YmlfZW5kX2lvKGJpbyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlib29sIHdhc19lbXB0eTsKJiM0MzsKJiM0MzsJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwliYXRjaCA9IHRoaXNfY3B1X3B0cigmYW1wO2Jpb19jb21wbGV0ZV9iYXRjaCk7CiYjNDM7CXdhc19lbXB0eSA9IGJpb19saXN0X2VtcHR5KCZhbXA7YmF0Y2gtJmd0O2xpc3QpOwomIzQzOwliaW9fbGlzdF9hZGQoJmFtcDtiYXRjaC0mZ3Q7bGlzdCwgYmlvKTsKJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAod2FzX2VtcHR5KQomIzQzOwkJcXVldWVfd29ya19vbihiYXRjaC0mZ3Q7Y3B1LCBiaW9fY29tcGxldGVfd3EsICZhbXA7YmF0Y2gtJmd0O3dvcmspOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19jb21wbGV0ZV9pbl90YXNrKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fcmVtYWluaW5nX2RvbmUoc3RydWN0IGJpbyAqYmlvKQogewogCS8qCkBAIC0xODE1LDcgJiM0MzsxODcwLDkgQEAgdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKQogCX0KICNlbmRpZgogCi0JaWYgKGJpby0mZ3Q7YmlfZW5kX2lvKQomIzQzOwlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykgJmFtcDsmYW1wOyBiaW9faW5fYXRvbWljKCkpCiYjNDM7CQlfX2Jpb19jb21wbGV0ZV9pbl90YXNrKGJpbyk7CiYjNDM7CWVsc2UgaWYgKGJpby0mZ3Q7YmlfZW5kX2lvKQogCQliaW8tJmd0O2JpX2VuZF9pbyhiaW8pOwogfQogRVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pOwpAQCAtMjAwMSw2ICYjNDM7MjA1OCw1NSBAQCBpbnQgYmlvc2V0X2luaXQoc3RydWN0IGJpb19zZXQgKmJzLAogfQogRVhQT1JUX1NZTUJPTChiaW9zZXRfaW5pdCk7CiAKJiM0MztzdGF0aWMgaW50IGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9ICZhbXA7cGVyX2NwdShiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7CiYjNDM7CiYjNDM7CWVuYWJsZV93b3JrKCZhbXA7YmF0Y2gtJmd0O3dvcmspOwomIzQzOwlpZiAoIWJpb19saXN0X2VtcHR5KCZhbXA7YmF0Y2gtJmd0O2xpc3QpKQomIzQzOwkJcXVldWVfd29ya19vbihjcHUsIGJpb19jb21wbGV0ZV93cSwgJmFtcDtiYXRjaC0mZ3Q7d29yayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERpc2FibGUgdGhpcyBDUFUmIzM5O3Mgd29yayBpdGVtIHNvIHRoYXQgaXQgY2Fubm90IHJ1biBvbiBhbiB1bmJvdW5kIHdvcmtlcgomIzQzOyAqIGFmdGVyIHRoZSBDUFUgaXMgb2ZmbGluZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2Rvd25fcHJlcCh1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJZGlzYWJsZV93b3JrX3N5bmMoJmFtcDtwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KS53b3JrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRHJhaW4gYSBkZWFkIENQVSYjMzk7cyBkZWZlcnJlZCBiaW8gY29tcGxldGlvbnMuIFRoZSBDUFUgaXMgZGVhZCBhbmQgdGhlIHdvcmtlcgomIzQzOyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9CiYjNDM7CQlwZXJfY3B1X3B0cigmYW1wO2Jpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTsKJiM0MzsJc3RydWN0IGJpbyAqYmlvOwomIzQzOwomIzQzOwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYW1wO2JhdGNoLSZndDtsaXN0KSkpCiYjNDM7CQliaW8tJmd0O2JpX2VuZF9pbyhiaW8pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGJpb19jb21wbGV0ZV9iYXRjaF9pbml0KGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9CiYjNDM7CQlwZXJfY3B1X3B0cigmYW1wO2Jpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTsKJiM0MzsKJiM0MzsJYmlvX2xpc3RfaW5pdCgmYW1wO2JhdGNoLSZndDtsaXN0KTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7YmF0Y2gtJmd0O3dvcmssIGJpb19jb21wbGV0ZV93b3JrX2ZuKTsKJiM0MzsJYmF0Y2gtJmd0O2NwdSA9IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFjcHVfb25saW5lKGNwdSkpCiYjNDM7CQlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2JhdGNoLSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKQogewogCWludCBpOwpAQCAtMjAxNSw2ICYjNDM7MjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKQogCQkJCVNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMsIE5VTEwpOwogCX0KIAomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKJiM0MzsJCWJpb19jb21wbGV0ZV9iYXRjaF9pbml0KGkpOwomIzQzOwomIzQzOwliaW9fY29tcGxldGVfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtiaW9fY29tcGxldGUmIzM0OywKJiM0MzsJCQkJCSAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwKTsKJiM0MzsJaWYgKCFiaW9fY29tcGxldGVfd3EpCiYjNDM7CQlwYW5pYygmIzM0O2JpbzogY2FuJiMzOTt0IGFsbG9jYXRlIGJpb19jb21wbGV0ZSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogYmlvIHRhc2stY29udGV4dCBjb21wbGV0aW9uIGRyYWluaW5nIG9uIGhvdC11bnBsdWdnZWQgQ1BVczoKJiM0MzsJICoKJiM0MzsJICogICAxLiBTdG9wIHRoZSBwZXItQ1BVIHdvcmsgaXRlbSB3aGlsZSB0aGUgQ1BVIGlzIHN0aWxsIG9ubGluZSwgc28KJiM0MzsJICogICAgICB0aGF0IGl0IGNhbm5vdCBydW4gb24gYW4gdW5ib3VuZCB3b3JrZXIgbGF0ZXIuCiYjNDM7CSAqICAgMi4gRHJhaW4gbGVmdG92ZXIgYmlvcyBhZGRlZCBiZXR3ZWVuIHdvcmtlciBkaXNhYmxpbmcgYW5kIENQVQomIzQzOwkgKiAgICAgIG9mZmxpbmluZy4KJiM0MzsJICovCiYjNDM7CWNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfT05MSU5FX0RZTiwKJiM0MzsJCQkJICAmIzM0O2Jsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmUmIzM0OywKJiM0MzsJCQkJICBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSwKJiM0MzsJCQkJICBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2Rvd25fcHJlcCk7CiYjNDM7CWNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQlBfUFJFUEFSRV9EWU4sCiYjNDM7CQkJCSAgJiMzNDtibG9jay9iaW86Y29tcGxldGU6ZGVhZCYjMzQ7LAomIzQzOwkJCQkgIE5VTEwsIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZGVhZCk7CiYjNDM7CiAJY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQklPX0RFQUQsICYjMzQ7YmxvY2svYmlvOmRlYWQmIzM0OywgTlVMTCwKIAkJCQkJYmlvX2NwdV9kZWFkKTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jCmluZGV4IDE1NzgzYTYxODBkZWMuLjhiMzljNTNiNjM5MzQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2ZvcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9mb3BzLmMKQEAgLTk0MSw3ICYjNDM7OTQxLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7CiAJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiAJLmZhbGxvY2F0ZQk9IGJsa2Rldl9mYWxsb2NhdGUsCiAJLnVyaW5nX2NtZAk9IGJsa2Rldl91cmluZ19jbWQsCi0JLmZvcF9mbGFncwk9IEZPUF9CVUZGRVJfUkFTWU5DLAomIzQzOwkuZm9wX2ZsYWdzCT0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgYmxrZGV2X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggOWFmNWYwNjFhMWY4NS4uNmYwOTk4NDcyNDBlMCAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTEyMDMsNiAmIzQzOzEyMDMsOSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLAogCiAJYmlvID0gYmlvX2FsbG9jKGJoLSZndDtiX2JkZXYsIDEsIG9wZiwgR0ZQX05PSU8pOwogCiYjNDM7CWlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtJmd0O2JfZm9saW8pICZhbXA7JmFtcDsgb3BfaXNfd3JpdGUob3BmKSkKJiM0MzsJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKJiM0MzsKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpCiAJCWJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3pkYXRhLmMgYi9mcy9lcm9mcy96ZGF0YS5jCmluZGV4IDc0NTIwZTkxMDI1OTYuLmY3OTZiYjNlZjUzYjkgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL3pkYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvemRhdGEuYwpAQCAtMTQyNywxNSAmIzQzOzE0MjcsNiBAQCBzdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZV9rdGhyZWFkX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIH0KICNlbmRpZgogCi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCB6X2Vyb2ZzX2luX2F0b21pYyh2b2lkKQotewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKCkpCi0JCXJldHVybiB0cnVlOwotCWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiAhcHJlZW1wdGlibGUoKTsKLX0KIAogc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbywKIAkJCQkgICAgICAgaW50IGJpb3MpCkBAIC0xNDUyLDcgJiM0MzsxNDQzLDcgQEAgc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbywKIAogCWlmIChhdG9taWNfYWRkX3JldHVybihiaW9zLCAmYW1wO2lvLSZndDtwZW5kaW5nX2Jpb3MpKQogCQlyZXR1cm47Ci0JaWYgKHpfZXJvZnNfaW5fYXRvbWljKCkpIHsKJiM0MzsJaWYgKGJpb19pbl9hdG9taWMoKSkgewogCQkvKiBTZWUgYHN5bmNfZGVjb21wcmVzc2AgaW4gc3lzZnMtZnMtZXJvZnMgZm9yIG1vcmUgZGV0YWlscyAqLwogCQlpZiAoc2JpLSZndDtzeW5jX2RlY29tcHJlc3MgPT0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE8pCiAJCQlzYmktJmd0O3N5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19GT1JDRV9PTjsKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jCmluZGV4IDMwNDY4ZDUxYjVhZDcuLjFhZThhOGZiODUwMzggMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2lvZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvaW9lbmQuYwpAQCAtMjM4LDggJiM0MzsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJaWYgKHdwYy0mZ3Q7aW9tYXAuZmxhZ3MgJmFtcDsgSU9NQVBfRl9TSEFSRUQpCiAJCWlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX1NIQVJFRDsKLQlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKLQkJaW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfRE9OVENBQ0hFOwogCWlmIChwb3MgPT0gd3BjLSZndDtpb21hcC5vZmZzZXQgJmFtcDsmYW1wOyAod3BjLSZndDtpb21hcC5mbGFncyAmYW1wOyBJT01BUF9GX0JPVU5EQVJZKSkKIAkJaW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfQk9VTkRBUlk7CiAKQEAgLTI1Niw2ICYjNDM7MjU0LDkgQEAgc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAoIWJpb19hZGRfZm9saW8oJmFtcDtpb2VuZC0mZ3Q7aW9fYmlvLCBmb2xpbywgbWFwX2xlbiwgcG9mZikpCiAJCWdvdG8gbmV3X2lvZW5kOwogCiYjNDM7CWlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKQomIzQzOwkJYmlvX3NldF9mbGFnKCZhbXA7aW9lbmQtJmd0O2lvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwomIzQzOwogCS8qCiAJICogQ2xhbXAgaW9fb2Zmc2V0IGFuZCBpb19zaXplIHRvIHRoZSBpbmNvcmUgRU9GIHNvIHRoYXQgb25kaXNrCiAJICogZmlsZSBzaXplIHVwZGF0ZXMgaW4gdGhlIGlvZW5kIGNvbXBsZXRpb24gYXJlIGJ5dGUtYWNjdXJhdGUuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jCmluZGV4IDUxMjkzYjZmMzMxZjAuLmNkOGRlOGM4MmQ3OGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYW9wcy5jCkBAIC01MjIsMTAgJiM0Mzs1MjIsNiBAQCB4ZnNfaW9lbmRfbmVlZHNfd3FfY29tcGxldGlvbigKIAlpZiAoaW9lbmQtJmd0O2lvX2ZsYWdzICZhbXA7IChJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9TSEFSRUQpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCS8qIFBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGNhbm5vdCBiZSBkb25lIGluIGlycSBjb250ZXh0LiAqLwotCWlmIChpb2VuZC0mZ3Q7aW9fZmxhZ3MgJmFtcDsgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKQotCQlyZXR1cm4gdHJ1ZTsKLQogCXJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggOGYzM2Y3MTdiMTRmNS4uYTgwOTFhM2U5ZDg3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC0zNjgsNiAmIzQzOzM2OCw0NSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCiB2b2lkIHN1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKTsKIAomIzQzOy8qKgomIzQzOyAqIGJpb19pbl9hdG9taWMgLSBjaGVjayBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHVuc2FmZSBmb3IgYmlvIGNvbXBsZXRpb24KJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaW4gYXRvbWljIGNvbnRleHRzIChlLmcuIGhhcmQvc29mdCBJUlEsIHByZWVtcHQtZGlzYWJsZWQpOwomIzQzOyAqICVmYWxzZSB3aGVuIGEgYmlvIGNhbiBiZSBzYWZlbHkgY29tcGxldGVkIGluIHRoZSBjdXJyZW50IGNvbnRleHQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpb19pbl9hdG9taWModm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gIXByZWVtcHRpYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJpb19jb21wbGV0ZV9pbl90YXNrIC0gZW5zdXJlIGEgYmlvIGlzIGNvbXBsZXRlZCBpbiBwcmVlbXB0aWJsZSB0YXNrIGNvbnRleHQKJiM0MzsgKiBAYmlvOiBiaW8gdG8gY29tcGxldGUKJiM0MzsgKgomIzQzOyAqIElmIGNhbGxlZCBmcm9tIG5vbi10YXNrIGNvbnRleHQsIG9mZmxvYWQgdGhlIGJpbyBjb21wbGV0aW9uIHRvIGEgd29ya2VyCiYjNDM7ICogdGhyZWFkIGFuZCByZXR1cm4gJXRydWUuIEVsc2UgcmV0dXJuICVmYWxzZSBhbmQgZG8gbm90aGluZy4KJiM0MzsgKgomIzQzOyAqIFVzZXMgQklPX0NPTVBMRVRFX0lOX1RBU0sgYXMgYSBzZW50aW5lbDogaWYgc2V0LCB0aGUgYmlvIHdhcyBhbHJlYWR5CiYjNDM7ICogZGVmZXJyZWQgYW5kIHdlIGFyZSBydW5uaW5nIGluIHRoZSB3b3JrZXIg4oCUIHJldHVybiAlZmFsc2Ugc28gdGhlCiYjNDM7ICogY2FsbGJhY2sgcHJvY2VlZHMgaW5zdGVhZCBvZiByZS1kZWZlcnJpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbykKJiM0Mzt7CiYjNDM7CWlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFiaW9faW5fYXRvbWljKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKJiM0MzsJX19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBleHRlcm4gdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqKTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAppbmRleCA4ODA4ZWU3NmU3M2MwLi5kNDlkOTdhMDUwZDBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKQEAgLTMyMiw2ICYjNDM7MzIyLDcgQEAgZW51bSB7CiAJQklPX1JFTUFQUEVELAogCUJJT19aT05FX1dSSVRFX1BMVUdHSU5HLCAvKiBiaW8gaGFuZGxlZCB0aHJvdWdoIHpvbmUgd3JpdGUgcGx1Z2dpbmcgKi8KIAlCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQsIC8qIGJpbyBlbXVsYXRlcyBhIHpvbmUgYXBwZW5kIG9wZXJhdGlvbiAqLwomIzQzOwlCSU9fQ09NUExFVEVfSU5fVEFTSywgLyogY29tcGxldGUgYmlfZW5kX2lvKCkgaW4gdGFzayBjb250ZXh0ICovCiAJQklPX0ZMQUdfTEFTVAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTIuLjY4YWY0OTM1YTEwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTQwNCwxNiAmIzQzOzQwNCwxMyBAQCBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sCiAjZGVmaW5lIElPTUFQX0lPRU5EX0JPVU5EQVJZCQkoMVUgJmx0OyZsdDsgMikKIC8qIGlzIGRpcmVjdCBJL08gKi8KICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUCQkoMVUgJmx0OyZsdDsgMykKLS8qIGlzIERPTlRDQUNIRSBJL08gKi8KLSNkZWZpbmUgSU9NQVBfSU9FTkRfRE9OVENBQ0hFCQkoMVUgJmx0OyZsdDsgNCkKIAogLyoKICAqIEZsYWdzIHRoYXQgaWYgc2V0IG9uIGVpdGhlciBpb2VuZCBwcmV2ZW50IHRoZSBtZXJnZSBvZiB0d28gaW9lbmRzLgogICogKElPTUFQX0lPRU5EX0JPVU5EQVJZIGFsc28gcHJldmVudHMgbWVyZ2VzLCBidXQgb25seSBvbmUtd2F5KQogICovCiAjZGVmaW5lIElPTUFQX0lPRU5EX05PTUVSR0VfRkxBR1MgXAotCShJT01BUF9JT0VORF9TSEFSRUQgfCBJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9ESVJFQ1QgfCBcCi0JIElPTUFQX0lPRU5EX0RPTlRDQUNIRSkKJiM0MzsJKElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVCkKIAogLyoKICAqIFN0cnVjdHVyZSBmb3Igd3JpdGViYWNrIEkvTyBjb21wbGV0aW9ucy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCBmb3IgRGVmZXJyZWQgQmlvIENvbXBsZXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgZGVmZXJzIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdXNpbmcgYSBwZXItQ1BVIHdvcmtxdWV1ZS4gTG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBhIGxvdCBvZiBjb3JlIGZpbGVzOiBgYmxvY2svYmlvLmNgLCBgYmxvY2svZm9wcy5jYCwgYGZzL2J1ZmZlci5jYCwgc29tZSBvZiB0aGUgZmlsZSBzeXN0ZW1zLCBhbmQgYSBmZXcgaW5jbHVkZSBmaWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuCgpCYXNlZCBvbiB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGltcGxlbWVudGF0aW9uLiBJdCBhZGRzIHRoZSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBiaW9fY29tcGxldGVfaW5fdGFza2AgZnVuY3Rpb25zLCBhbmQgc2V0cyB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnIGluIGBmcy9idWZmZXIuY2AgYW5kIGBmcy9pb21hcC9pb2VuZC5jYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zIHJlbGF0ZWQgdG8gYGZvbGlvX3Rlc3RfZHJvcGJlaGluZGAuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGBiaW9fZW5kaW9gIHRvIGNoZWNrIGZvciB0aGlzIG5ldyBmbGFnIGFuZCBhdG9taWMgY29udGV4dCwgY2FsbGluZyBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaWYgbmVlZGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBtb3JlIGluLWRlcHRoIGFuYWx5c2lzLiBUaGUgY29yZSBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCwgYGJpb19jb21wbGV0ZV93b3JrX2ZuYCwgYGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lYCwgYGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwYCwgYW5kIGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWRgLiBBaCwgd2FpdC4uLiBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaXMgZXhwb3J0ZWQhIFRoaXMgbWFrZXMgaXQgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZWdyYXRpb24gb3IgaW50ZXJhY3Rpb24uCgpMb29raW5nIGZ1cnRoZXIsIGBiaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBiaW9faW5fYXRvbWljYCBhcmUgaW5saW5lZC4gR29pbmcgYmFjayB0byBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGBfX2JoX3N1Ym1pdGAgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUuLi4gYF9fYmhfc3VibWl0YCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZXhwb3N1cmUuIEhvd2V2ZXIsIGBpb21hcF9hZGRfdG9faW9lbmRgIGlzbiYjMzk7dCBzdGF0aWMsIGFuZCBJIHRoaW5rIGl0JiMzOTtzIGV4cG9ydGVkLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBiZSBhIGtleSBpbnRlZ3JhdGlvbiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9hZGRfdG9faW9lbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svZm9wcy5jPTUyMj1zdGF0aWMgc3NpemVfdCBibGtkZXZfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuYmxvY2svZm9wcy5jLTUzOS1cbmJsb2NrL2ZvcHMuYzo1NDA6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmJsb2NrL2ZvcHMuYy01NDEtfVxuLS1cbmZzL2V4ZmF0L2lvbWFwLmM9MjAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuLS1cbmZzL2V4ZmF0L2lvbWFwLmMtMjEyLVxuZnMvZXhmYXQvaW9tYXAuYzoyMTM6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL2V4ZmF0L2lvbWFwLmMtMjE0LX1cbi0tXG5mcy9nZnMyL2JtYXAuYz0yNTA2PXN0YXRpYyBzc2l6ZV90IGdmczJfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvZ2ZzMi9ibWFwLmMtMjUyMS1cbmZzL2dmczIvYm1hcC5jOjI1MjI6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL2dmczIvYm1hcC5jLTI1MjMtfVxuLS1cbmZzL2lvbWFwL2lvZW5kLmM9MTczPXN0YXRpYyBib29sIGlvbWFwX2Nhbl9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgbG9mZl90IHBvcyxcbi0tXG5mcy9pb21hcC9pb2VuZC5jLTIxMS0gKi9cbmZzL2lvbWFwL2lvZW5kLmM6MjEyOnNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9pb21hcC9pb2VuZC5jLTIxMy1cdFx0bG9mZl90IHBvcywgbG9mZl90IGVuZF9wb3MsIHVuc2lnbmVkIGludCBkaXJ0eV9sZW4pXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy0yMjEtXG5mcy9pb21hcC9pb2VuZC5jOjIyMjpcdHRyYWNlX2lvbWFwX2FkZF90b19pb2VuZCh3cGMtXHUwMDNlaW5vZGUsIHBvcywgZGlydHlfbGVuLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXApO1xuZnMvaW9tYXAvaW9lbmQuYy0yMjMtXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy0zMTEtfVxuZnMvaW9tYXAvaW9lbmQuYzozMTI6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfYWRkX3RvX2lvZW5kKTtcbmZzL2lvbWFwL2lvZW5kLmMtMzEzLVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9MTc0PURFRklORV9JT01BUF9FVkVOVChpb21hcF9pdGVyX3NyY21hcCk7XG5mcy9pb21hcC90cmFjZS5oLTE3NS1cbmZzL2lvbWFwL3RyYWNlLmg6MTc2OlRSQUNFX0VWRU5UKGlvbWFwX2FkZF90b19pb2VuZCxcbmZzL2lvbWFwL3RyYWNlLmgtMTc3LVx0VFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHBvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbixcbi0tXG5mcy9udGZzL2lvbWFwLmM9Nzk4PXN0YXRpYyBzc2l6ZV90IG50ZnNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTgxMi1cbmZzL250ZnMvaW9tYXAuYzo4MTM6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL250ZnMvaW9tYXAuYy04MTQtfVxuLS1cbmZzL250ZnMzL2lub2RlLmM9OTU0PXN0YXRpYyBzc2l6ZV90IG50ZnNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy05ODEtXG5mcy9udGZzMy9pbm9kZS5jOjk4MjpcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuZnMvbnRmczMvaW5vZGUuYy05ODMtfVxuLS1cbmZzL3hmcy94ZnNfYW9wcy5jPTQ5Nj14ZnNfd3JpdGViYWNrX3JhbmdlKFxuLS1cbmZzL3hmcy94ZnNfYW9wcy5jLTUwNi1cdGlmICghcmV0KVxuZnMveGZzL3hmc19hb3BzLmM6NTA3Olx0XHRyZXQgPSBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuZnMveGZzL3hmc19hb3BzLmMtNTA4LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy94ZnMveGZzX2FvcHMuYz02NDI9eGZzX3pvbmVkX3dyaXRlYmFja19yYW5nZShcbi0tXG5mcy94ZnMveGZzX2FvcHMuYy02NTItXHRpZiAoIXJldClcbmZzL3hmcy94ZnNfYW9wcy5jOjY1MzpcdFx0cmV0ID0gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL3hmcy94ZnNfYW9wcy5jLTY1NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvem9uZWZzL2ZpbGUuYz0xMjg9c3RhdGljIHNzaXplX3Qgem9uZWZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuLS1cbmZzL3pvbmVmcy9maWxlLmMtMTQ5LVxuZnMvem9uZWZzL2ZpbGUuYzoxNTA6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL3pvbmVmcy9maWxlLmMtMTUxLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9NDg4PXZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCk7XG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6NDg5OnNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtNDkwLVx0XHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgSU8gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIGdvb2QgZW50cnkgcG9pbnRzIHRvIGFuYWx5emUgdGhlIElPIHBhdGguIGBpb21hcF9hZGRfdG9faW9lbmRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGFjcm9zcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBJIGNhbiBzaW5rIG15IHRlZXRoIGludG8uCgpUaGVuIHRoZXJlJiMzOTtzIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYC4gQW5vdGhlciBnb29kIG9uZSwgZXhwb3J0ZWQsIG9mZmVyaW5nIHNpbWlsYXIgcG90ZW50aWFsLiBJ4oCZbGwgbWFrZSBhIG5vdGUgb2YgdGhpcyB0byBnZXQgYSBiaWdnZXItcGljdHVyZSBzZW5zZSBvZiB0aGUgZnVsbCBlY29zeXN0ZW0uCgpOb3csIHdoYXQgYWJvdXQgYGJpb19lbmRpb2A/IFRlbXB0aW5nLCBiZWNhdXNlIGl0JiMzOTtzIG1vZGlmaWVkLCBidXQgZ2l2ZW4gaG93IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHRoaXMgaXMsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBnZXR0aW5nIGluIHRoZSB3YXkgb24gdGhhdCAmIzM0O2hvdCBwYXRoLiYjMzQ7IEkgc2hvdWxkIHByb2JhYmx5IGF2b2lkIHRoYXQgb25lLCBhcyBpdCB3b3VsZCBiZSB0b28gbXVjaCBkaXNydXB0aW9uIGFuZCBtYWtlIG1lYXN1cmVtZW50cyBsZXNzIHJlbGlhYmxlLgoKSG1tLCB3aGF0IGFib3V0IGBfX2JoX3N1Ym1pdGA/IEl04oCZcyBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgYSBub24tc3RhcnRlci4gQnV0IHRoYXQgbWFrZXMgbWUgd29uZGVyLi4uIFdoYXQgYWN0dWFsbHkgKmNhbGxzKiB0aGF0IGZ1bmN0aW9uPyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjaGFpbiB1cCBmcm9tIHRoZXJlIGlmIEkgY2FuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmhfc3VibWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9idWZmZXIuYy0xMTgwLVxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuZnMvYnVmZmVyLmMtMTE4Mi1cdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2J1ZmZlci5jPTEyNDA9dm9pZCBiaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwgYmlvX2VuZF9pb190IGVuZF9pbylcbmZzL2J1ZmZlci5jLTEyNDEte1xuZnMvYnVmZmVyLmM6MTI0MjpcdF9fYmhfc3VibWl0KGJoLCBvcGYsIFdSSVRFX0xJRkVfTk9UX1NFVCwgTlVMTCwgZW5kX2lvKTtcbmZzL2J1ZmZlci5jLTEyNDMtfVxuLS1cbmZzL2J1ZmZlci5jPTE4MTc9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2J1ZmZlci5jLTE5MTItXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9idWZmZXIuYzoxOTEzOlx0XHRcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcbmZzL2J1ZmZlci5jLTE5MTQtXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxuLS1cbmZzL2J1ZmZlci5jLTE5NjctXHRcdFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbmZzL2J1ZmZlci5jOjE5Njg6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTk2OS1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkNvbnNpZGVyaW5nIEJsb2NrIERldmljZSBTdWJtaXNzaW9uIENhbmRpZGF0ZXMqKgoKSG1tLCBzbyBgYmhfc3VibWl0YCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgZXhwb3J0ZWQsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBzZWVuIGluIHRoZSBoZWFkZXIgZmlsZXMuIEJ1dCwgbm93IHRoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdCwgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2AgYWxzbyBsb29rcyBsaWtlIGEgc29saWQgY29udGVuZGVyIGZvciB0aGlzLiBJdCYjMzk7cyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgeWVzLCBidXQgaXQgaGFuZGxlcyB0aGUgYWN0dWFsIHdyaXRlIG9wZXJhdGlvbiBhdCB0aGUgZm9saW8gbGV2ZWwsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGZvciB0aGUgY3VycmVudCB0YXNrLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IHN0aWNrIHdpdGggYGJoX3N1Ym1pdGAgYXMgaXQgaXMgZXhwb3J0ZWQsIGFuZCB3ZWxsIGRvY3VtZW50ZWQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIHRoZSByaWdodCBjaG9pY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ymhfc3VibWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0xNTc4PWZ1bmN0aW9uLXRyYWNlLCB3ZSBnZXQgYSBtdWNoIGxhcmdlciBvdXRwdXQ6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xNjMwLSAgID1cdTAwM2Ugc3VibWl0X2Jpb1xuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE2MzE6ICAgPVx1MDAzZSBiaF9zdWJtaXRcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xNjMyLSAgID1cdTAwM2UgX19leHQzX2dldF9pbm9kZV9sb2Ncbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q9MTg3MT10cmFjZXJzLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xOTE1LSAgID1cdTAwM2Ugc3VibWl0X2Jpb1xuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE5MTY6ICAgPVx1MDAzZSBiaF9zdWJtaXRcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xOTE3LSAgID1cdTAwM2UgZXh0M19icmVhZFxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9NTE3PXN0YXRpYyB2b2lkIHdyaXRlX2ZpbGVfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgd2FpdClcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUyNC1cdFx0c2V0X2J1ZmZlcl9tYXBwZWQoYmgpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo1MjU6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMsIGVuZF9iaXRtYXBfd3JpdGUpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MjYtXHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01NTg9c3RhdGljIGludCByZWFkX2ZpbGVfcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYwMC1cdFx0XHRzZXRfYnVmZmVyX21hcHBlZChiaCk7XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjYwMTpcdFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBlbmRfYml0bWFwX3dyaXRlKTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAyLVx0XHR9XG4tLVxuZnMvYnVmZmVyLmM9MTIyPXN0YXRpYyB2b2lkIGJ1ZmZlcl9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICptc2cpXG4tLVxuZnMvYnVmZmVyLmMtMTM1LSAqIENhbGwgdGhpcyBpbiB5b3VyIGJpb19lbmRfaW8gaGFuZGxlciB0byByZXRyaWV2ZSB0aGUgYnVmZmVyX2hlYWRcbmZzL2J1ZmZlci5jOjEzNjogKiBzdWJtaXR0ZWQgaW4gYmhfc3VibWl0KCkuICBJZiB5b3UgZGlkIG5vdCBjYWxsIGJoX3N1Ym1pdCgpLCBkbyBub3RcbmZzL2J1ZmZlci5jLTEzNy0gKiBjYWxsIHRoaXMgZnVuY3Rpb247IGl0IHdpbGwgcmV0dXJuIGdhcmJhZ2UuXG4tLVxuZnMvYnVmZmVyLmM9MTU2PUVYUE9SVF9TWU1CT0woYmlvX2VuZGlvX2JoKTtcbi0tXG5mcy9idWZmZXIuYy0xNjItICpcbmZzL2J1ZmZlci5jOjE2MzogKiBJZiBhIGJ1ZmZlciBpcyByZWFkIHRocm91Z2ggYSBtZWNoYW5pc20gdGhhdCBpc24mIzM5O3QgYmhfc3VibWl0KCksIHlvdVxuZnMvYnVmZmVyLmMtMTY0LSAqIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmluaXNoIHRoZSByZWFkLlxuLS1cbmZzL2J1ZmZlci5jPTE3Nj1FWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfcmVhZF9zeW5jKTtcbi0tXG5mcy9idWZmZXIuYy0xODEtICpcbmZzL2J1ZmZlci5jOjE4MjogKiBQYXNzIHRoaXMgZnVuY3Rpb24gdG8gYmhfc3VibWl0KCkgaWYgeW91JiMzOTtyZSByZWFkaW5nIGludG8gdGhlIGJ1ZmZlcixcbmZzL2J1ZmZlci5jLTE4My0gKiB1bmxlc3MgeW91IG5lZWQgeW91ciBvd24gc3BlY2lhbCBJL08gZW5kIGhhbmRsZXIuXG4tLVxuZnMvYnVmZmVyLmM9MTkxPUVYUE9SVF9TWU1CT0woYmhfZW5kX3JlYWQpO1xuLS1cbmZzL2J1ZmZlci5jLTE5Ni0gKlxuZnMvYnVmZmVyLmM6MTk3OiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UmIzM5O3JlIHdyaXRpbmcgZnJvbSB0aGUgYnVmZmVyLFxuZnMvYnVmZmVyLmMtMTk4LSAqIHVubGVzcyB5b3UgbmVlZCB5b3VyIG93biBzcGVjaWFsIEkvTyBlbmQgaGFuZGxlci5cbi0tXG5mcy9idWZmZXIuYz0zODU9c3RhdGljIHZvaWQgYmhfZW5kX2FzeW5jX3JlYWQoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2J1ZmZlci5jLTQyMS0gKlxuZnMvYnVmZmVyLmM6NDIyOiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UmIzM5O3JlIGRvaW5nIHRoZSBlcXVpdmFsZW50IG9mXG5mcy9idWZmZXIuYy00MjMtICogYmxvY2tfd3JpdGVfZnVsbF9mb2xpbygpLiAgVGhhdCBpcywgdGhlIGZvbGlvIGlzIHVubG9ja2VkLCBhbmQgd2lsbFxuLS1cbmZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9idWZmZXIuYy0xMTgwLVxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuZnMvYnVmZmVyLmMtMTE4Mi1cdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2J1ZmZlci5jLTEyMzEtLyoqXG5mcy9idWZmZXIuYzoxMjMyOiAqIGJoX3N1Ym1pdCAtIFN0YXJ0IEkvTyBhZ2FpbnN0IGEgYnVmZmVyIGhlYWRcbmZzL2J1ZmZlci5jLTEyMzMtICogQGJoOiBUaGUgYnVmZmVyIGhlYWQgdG8gcGVyZm9ybSBJL08gb24uXG4tLVxuZnMvYnVmZmVyLmMtMTIzOS0gKi9cbmZzL2J1ZmZlci5jOjEyNDA6dm9pZCBiaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwgYmlvX2VuZF9pb190IGVuZF9pbylcbmZzL2J1ZmZlci5jLTEyNDEte1xuZnMvYnVmZmVyLmM6MTI0MjpcdF9fYmhfc3VibWl0KGJoLCBvcGYsIFdSSVRFX0xJRkVfTk9UX1NFVCwgTlVMTCwgZW5kX2lvKTtcbmZzL2J1ZmZlci5jLTEyNDMtfVxuZnMvYnVmZmVyLmM6MTI0NDpFWFBPUlRfU1lNQk9MKGJoX3N1Ym1pdCk7XG5mcy9idWZmZXIuYy0xMjQ1LVxuZnMvYnVmZmVyLmM9MTI0Nj1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2JyZWFkX3Nsb3coc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9idWZmZXIuYy0xMjUyLVx0fSBlbHNlIHtcbmZzL2J1ZmZlci5jOjEyNTM6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL2J1ZmZlci5jLTEyNTQtXHRcdHdhaXRfb25fYnVmZmVyKGJoKTtcbi0tXG5mcy9idWZmZXIuYz0xNzczPXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2NyZWF0ZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtMTgwOS0gKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgb25seSBjYW4gaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cbmZzL2J1ZmZlci5jOjE4MTA6ICogdGhlIGJ1ZmZlciBkaXJlY3RseSwgd2l0aCBiaF9zdWJtaXQoKS4gIEF0IHRoZSBhZGRyZXNzX3NwYWNlIGxldmVsXG5mcy9idWZmZXIuYy0xODExLSAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXG4tLVxuZnMvYnVmZmVyLmM9MTgxNz1pbnQgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtMTkxMi1cdFx0aWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHtcbmZzL2J1ZmZlci5jOjE5MTM6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTkxNC1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4tLVxuZnMvYnVmZmVyLmMtMTkyNy1cdFx0ICogY2xlYW4uICBTb21lb25lIHdyb3RlIHRoZW0gYmFjayBieSBoYW5kIHdpdGhcbmZzL2J1ZmZlci5jOjE5Mjg6XHRcdCAqIHdyaXRlX2RpcnR5X2J1ZmZlci9iaF9zdWJtaXQuICBBIHJhcmUgY2FzZS5cbmZzL2J1ZmZlci5jLTE5MjktXHRcdCAqL1xuLS1cbmZzL2J1ZmZlci5jLTE5NjctXHRcdFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbmZzL2J1ZmZlci5jOjE5Njg6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTk2OS1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4tLVxuZnMvYnVmZmVyLmM9MjM3MD1pbnQgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdldF9ibG9ja190ICpnZXRfYmxvY2spXG4tLVxuZnMvYnVmZmVyLmMtMjQ1MS1cdFx0aWYgKHByZXYpXG5mcy9idWZmZXIuYzoyNDUyOlx0XHRcdGJoX3N1Ym1pdChwcmV2LCBSRVFfT1BfUkVBRCwgYmhfZW5kX2FzeW5jX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjQ1My1cdFx0cHJldiA9IGJoO1xuLS1cbmZzL2J1ZmZlci5jLTI0NjUtXHRpZiAocHJldilcbmZzL2J1ZmZlci5jOjI0NjY6XHRcdGJoX3N1Ym1pdChwcmV2LCBSRVFfT1BfUkVBRCwgYmhfZW5kX2FzeW5jX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjQ2Ny1cdGVsc2Vcbi0tXG5mcy9idWZmZXIuYz0yNzc0PXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbi0tXG5mcy9idWZmZXIuYy0yNzgwLVx0fVxuZnMvYnVmZmVyLmM6Mjc4MTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgb3BfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XG5mcy9idWZmZXIuYy0yNzgyLX1cbi0tXG5mcy9idWZmZXIuYz0yNzkwPWludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbi0tXG5mcy9idWZmZXIuYy0yODAzLVxuZnMvYnVmZmVyLmM6MjgwNDpcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcbmZzL2J1ZmZlci5jLTI4MDUtXHRcdHdhaXRfb25fYnVmZmVyKGJoKTtcbi0tXG5mcy9idWZmZXIuYz0zMDMwPWludCBfX2JoX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXG4tLVxuZnMvYnVmZmVyLmMtMzAzNS1cbmZzL2J1ZmZlci5jOjMwMzY6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcbmZzL2J1ZmZlci5jLTMwMzctXHRpZiAod2FpdCkge1xuLS1cbmZzL2J1ZmZlci5jPTMwNTY9dm9pZCBfX2JoX3JlYWRfYmF0Y2goaW50IG5yLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdLFxuLS1cbmZzL2J1ZmZlci5jLTMwNzctXG5mcy9idWZmZXIuYzozMDc4Olx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcbmZzL2J1ZmZlci5jLTMwNzktXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTY4Mz1zdGF0aWMgdm9pZCBleHQ0X2ZjX3N1Ym1pdF9iaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIGlzX3RhaWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTY5My1cdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjY5NDpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02OTUtXHRFWFQ0X1NCKHNiKS1cdTAwM2VzX2ZjX2JoID0gTlVMTDtcbi0tXG5mcy9leHQ0L21tcC5jPTQyPXN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbW1wLmMtNDgtXHRsb2NrX2J1ZmZlcihiaCk7XG5mcy9leHQ0L21tcC5jOjQ5Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9NRVRBIHwgUkVRX1BSSU8sXG5mcy9leHQ0L21tcC5jLTUwLVx0XHRcdGJoX2VuZF93cml0ZSk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xODAtXHRcdGVuZF9pbyA9IGJoX2VuZF9yZWFkO1xuZnMvZXh0NC9zdXBlci5jOjE4MTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgZW5kX2lvKTtcbmZzL2V4dDQvc3VwZXIuYy0xODItfVxuLS1cbmZzL2V4dDQvc3VwZXIuYz02Mjk4PXN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjMyOS1cdGNsZWFyX2J1ZmZlcl9kaXJ0eShzYmgpO1xuZnMvZXh0NC9zdXBlci5jOjYzMzA6XHRiaF9zdWJtaXQoc2JoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8XG5mcy9leHQ0L3N1cGVyLmMtNjMzMS1cdFx0ICAodGVzdF9vcHQoc2IsIEJBUlJJRVIpID8gUkVRX0ZVQSA6IDApLCBiaF9lbmRfd3JpdGUpO1xuLS1cbmZzL2dmczIvYm1hcC5jPTI5ND1zdGF0aWMgdm9pZCBnZnMyX21ldGFwYXRoX3JhKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgX19iZTY0ICpzdGFydCwgX19iZTY0ICplbmQpXG4tLVxuZnMvZ2ZzMi9ibWFwLmMtMzA2LVx0XHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKHJhYmgpKSB7XG5mcy9nZnMyL2JtYXAuYzozMDc6XHRcdFx0XHRiaF9zdWJtaXQocmFiaCxcbmZzL2dmczIvYm1hcC5jLTMwOC1cdFx0XHRcdFx0UkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHwgUkVRX01FVEEgfFxuLS1cbmZzL2dmczIvZGlyLmM9MTQ4MD1zdGF0aWMgdm9pZCBnZnMyX2Rpcl9yZWFkYWhlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaHNpemUsIHUzMiBpbmRleCxcbi0tXG5mcy9nZnMyL2Rpci5jLTE1MDgtXHRcdFx0fSBlbHNlIHtcbmZzL2dmczIvZGlyLmM6MTUwOTpcdFx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHxcbmZzL2dmczIvZGlyLmMtMTUxMC1cdFx0XHRcdFx0XHRSRVFfTUVUQSB8IFJFUV9QUklPLFxuLS1cbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzctXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9nZnMyL21ldGFfaW8uYzo3ODpcdFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzktXHRcdFx0XHRcdGJoX2VuZF9hc3luY193cml0ZSk7XG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmM9MjAyPXN0YXRpYyB2b2lkIGdmczJfbWV0YV9yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9nZnMyL21ldGFfaW8uYy0yMjQtICogU3VibWl0IHNldmVyYWwgY29uc2VjdXRpdmUgYnVmZmVyIGhlYWQgSS9PIHJlcXVlc3RzIGFzIGEgc2luZ2xlIGJpbyBJL09cbmZzL2dmczIvbWV0YV9pby5jOjIyNTogKiByZXF1ZXN0LiAgKFNlZSBiaF9zdWJtaXQuKVxuZnMvZ2ZzMi9tZXRhX2lvLmMtMjI2LSAqL1xuLS1cbmZzL2piZDIvY29tbWl0LmM9MTE0PXN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfY29tbWl0X3JlY29yZChqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9jb21taXQuYy0xNTQtXG5mcy9qYmQyL2NvbW1pdC5jOjE1NTpcdGJoX3N1Ym1pdChiaCwgd3JpdGVfZmxhZ3MsIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKTtcbmZzL2piZDIvY29tbWl0LmMtMTU2LVx0KmNiaCA9IGJoO1xuLS1cbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvamJkMi9jb21taXQuYy03NTAtXHRcdFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbmZzL2piZDIvY29tbWl0LmM6NzUxOlx0XHRcdFx0Ymhfc3VibWl0KGJoLFxuZnMvamJkMi9jb21taXQuYy03NTItXHRcdFx0XHRcdFJFUV9PUF9XUklURSB8IEpCRDJfSk9VUk5BTF9SRVFfRkxBR1MsXG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MTc4Mj1zdGF0aWMgaW50IGpiZDJfd3JpdGVfc3VwZXJibG9jayhqb3VybmFsX3QgKmpvdXJuYWwsIGJsa19vcGZfdCB3cml0ZV9mbGFncylcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0xODIwLVx0XHRzYi1cdTAwM2VzX2NoZWNrc3VtID0gamJkMl9zdXBlcmJsb2NrX2NzdW0oc2IpO1xuZnMvamJkMi9qb3VybmFsLmM6MTgyMTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XG5mcy9qYmQyL2pvdXJuYWwuYy0xODIyLVx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL25pbGZzMi9idG5vZGUuYz04Nz1pbnQgbmlsZnNfYnRub2RlX3N1Ym1pdF9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywgX191NjQgYmxvY2tucixcbi0tXG5mcy9uaWxmczIvYnRub2RlLmMtMTM2LVx0YmgtXHUwMDNlYl9ibG9ja25yID0gcGJsb2NrbnI7IC8qIHNldCBibG9jayBhZGRyZXNzIGZvciByZWFkICovXG5mcy9uaWxmczIvYnRub2RlLmM6MTM3Olx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcbmZzL25pbGZzMi9idG5vZGUuYy0xMzgtXHRiaC1cdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yOyAvKiBzZXQgYmFjayB0byB0aGUgZ2l2ZW4gYmxvY2sgYWRkcmVzcyAqL1xuLS1cbmZzL25pbGZzMi9nY2lub2RlLmM9NTU9aW50IG5pbGZzX2djY2FjaGVfc3VibWl0X3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibGtvZmYsXG4tLVxuZnMvbmlsZnMyL2djaW5vZGUuYy04NS1cdGJoLVx1MDAzZWJfYmxvY2tuciA9IHBibjtcbmZzL25pbGZzMi9nY2lub2RlLmM6ODY6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XG5mcy9uaWxmczIvZ2Npbm9kZS5jLTg3LVx0aWYgKHZibilcbi0tXG5mcy9uaWxmczIvbWR0LmM9MTE2PW5pbGZzX21kdF9zdWJtaXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibGtvZmYsIGJsa19vcGZfdCBvcGYsXG4tLVxuZnMvbmlsZnMyL21kdC5jLTE1MC1cbmZzL25pbGZzMi9tZHQuYzoxNTE6XHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xuZnMvbmlsZnMyL21kdC5jLTE1Mi1cdHJldCA9IDA7XG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zOD1pbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy02NC1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NjU6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSwgYmhfZW5kX3dyaXRlKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjYtXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz04Nz1pbnQgb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLFxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ1LVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzoxNDY6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ3LVx0fVxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9MTg5PWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0zMjMtXHRcdFx0XHRzZXRfYnVmZmVyX25lZWRzX3ZhbGlkYXRlKGJoKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6MzI0Olx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzI1LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDIzPWludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDQtXHRvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi1cdTAwM2VzYiwgYmgtXHUwMDNlYl9kYXRhLCBcdTAwMjZkaS1cdTAwM2VpX2NoZWNrKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NDQ1Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUsIGJoX2VuZF93cml0ZSk7XG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQ0Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9NDg9c3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU2LSAqIGEgZm9saW8gKHZpYSBhIGZvbGlvX21hcHBpbmcpIGFuZCBmb3Igd3JhcHBpbmcgYmlvIHN1Ym1pc3Npb25cbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDo1NzogKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIChlLmcuIGJoX3N1Ym1pdCkuXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtNTgtICovXG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTIwND1ib29sIGJpb19lbmRpb19iaChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjA1LVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjIwNjovKiBDb21wbGV0aW9uIHJvdXRpbmVzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGJoX3N1Ym1pdCgpICovXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjA3LXZvaWQgYmhfZW5kX3JlYWQoc3RydWN0IGJpbyAqYmlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9MjQzPXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjQ0OnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqLCBibGtfb3BmX3QsIGJpb19lbmRfaW9fdCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjQ1LXZvaWQgd3JpdGVfYm91bmRhcnlfYmxvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNDQ4LVx0XHQgKiBUaGlzIGhhcHBlbnMgaWYgdGhlIGJ1ZmZlcnMgd2VyZSB3cml0dGVuIG91dCBkaXJlY3RseSxcbm1tL3Ztc2Nhbi5jOjE0NDk6XHRcdCAqIHdpdGggYmhfc3VibWl0KCkuIGV4dDMgd2lsbCBkbyB0aGlzLCBhcyB3ZWxsIGFzXG5tbS92bXNjYW4uYy0xNDUwLVx0XHQgKiB0aGUgYmxvY2tkZXYgbWFwcGluZy4gIGZpbGVtYXBfcmVsZWFzZV9mb2xpbygpIHdpbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkxNQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIExvZ2ljKioKCk9rYXksIHNvIGBiaF9zdWJtaXRgIGdldHMgY2FsbGVkIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbmRpdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hlbiBhIEJJTyBpcyBtYXJrZWQgdG8gYmUgY29tcGxldGVkIHdpdGhpbiB0aGUgdGFzay4gQWhhISBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaXMgY2FsbGVkICppZiogYGJpb19mbGFnZ2VkKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spYCByZXR1cm5zIHRydWUuIFRoYXQmIzM5O3MgdGhlIGtleS4KClRoaXMgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnIGlzIHNldCBpbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBzcG90czogYGZzL2J1ZmZlci5jYCBhbmQgYGZzL2lvbWFwL2lvZW5kLmNgLiBMZXQmIzM5O3MgbG9vayBhdCB0aG9zZS4gSW4gYGZzL2J1ZmZlci5jYCwgdGhlIGNvbmRpdGlvbiBpczoKCmBgYGMKaWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbykgJmFtcDsmYW1wOyBvcF9pc193cml0ZShvcGYpKQogICAgYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwpgYGAKCkFuZCBzaW1pbGFybHkgaW4gYGZzL2lvbWFwL2lvZW5kLmNgOgoKYGBgYwppZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKICAgIGJpb19zZXRfZmxhZygmYW1wO2lvZW5kLSZndDtpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKYGBgCgpTbyBpdCBsb29rcyBsaWtlIHRoZSBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgZnVuY3Rpb24gaXMgdGhlIGNydWNpYWwgcGFydCB0aGF0IHNldHMgdGhlIGZsYWcuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgdHJpZ2dlciBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWA/IExldCYjMzk7cyB0cmFjZSB0aGF0LgoKSXQgbG9va3MgbGlrZSB0aGUgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIGNvbnRyb2xsZWQgYnkgYEZPUF9ET05UQ0FDSEVgIGluIGBmb3BfZmxhZ3NgLiBPa2F5LCBob3cgaXMgdGhhdCBzZXQ/IENoZWNraW5nIGBibG9jay9mb3BzLmNgOgoKYGBgYwpjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHsKLi4uCiAgICAuZm9wX2ZsYWdzICAgICAgPSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsCn07CmBgYAoKU28sIHRoZSBkZWZhdWx0IGJsb2NrIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgZGVmaW5lIGBGT1BfRE9OVENBQ0hFYC4gQnV0LCBkb2VzIHRoYXQgbWVhbiBhbGwgYmxvY2sgZGV2aWNlIHdyaXRlcyBnZXQgYEZPUF9ET05UQ0FDSEVgPyBObywgd2FpdCwgYEZPUF9ET05UQ0FDSEVgIGlzIGEgKmZpbGUgb3BlcmF0aW9uIGZsYWcqLiBJdCYjMzk7cyBub3QgYSBnbG9iYWwgc2V0dGluZy4gSXQgc3VwcG9ydHMgYFJXRl9ET05UQ0FDSEVgIG9yIGl0IHNldHMgZHJvcGJlaGluZC4gT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgRk9QX0RPTlRDQUNIRWAgKm1lYW5zKiBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZPUF9ET05UQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjUtICBSV0ZfRE9OVENBQ0hFXCYjMzQ7KVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjY6LSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFwmIzM0O3hmczogZmxhZyBhcyBzdXBwb3J0aW5nIEZPUF9ET05UQ0FDSEVcJiMzNDspXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ny1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTY4PU5GU0RfSU9fRE9OVENBQ0hFIHdpbGwgZmFsbCBiYWNrIHRvIE5GU0RfSU9fQlVGRkVSRUQgaWYgdGhlIHVuZGVybHlpbmdcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjY5OmZpbGVzeXN0ZW0gZG9lc24mIzM5O3QgaW5kaWNhdGUgc3VwcG9ydCBieSBzZXR0aW5nIEZPUF9ET05UQ0FDSEUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC03MC1cbi0tXG5ibG9jay9mb3BzLmM9OTI3PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuLS1cbmJsb2NrL2ZvcHMuYy05NDMtXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG5ibG9jay9mb3BzLmM6OTQ0Olx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsXG5ibG9jay9mb3BzLmMtOTQ1LX07XG4tLVxuZnMvZXh0NC9maWxlLmM9OTc0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0NF9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZXh0NC9maWxlLmMtOTkyLVx0XHRcdCAgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XG5mcy9leHQ0L2ZpbGUuYzo5OTM6XHRcdFx0ICBGT1BfRE9OVENBQ0hFLFxuZnMvZXh0NC9maWxlLmMtOTk0LVx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4tLVxuZnMvbmZzL2ZpbGUuYz05NjY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL25mcy9maWxlLmMtOTc5LVx0LmNoZWNrX2ZsYWdzXHQ9IG5mc19jaGVja19mbGFncyxcbmZzL25mcy9maWxlLmM6OTgwOlx0LmZvcF9mbGFnc1x0PSBGT1BfRE9OVENBQ0hFLFxuZnMvbmZzL2ZpbGUuYy05ODEtfTtcbi0tXG5mcy9uZnMvbmZzNGZpbGUuYz00MzY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnM0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9uZnMvbmZzNGZpbGUuYy00NTctI2VuZGlmXG5mcy9uZnMvbmZzNGZpbGUuYzo0NTg6XHQuZm9wX2ZsYWdzXHQ9IEZPUF9ET05UQ0FDSEUsXG5mcy9uZnMvbmZzNGZpbGUuYy00NTktfTtcbi0tXG5mcy9uZnNkL3Zmcy5jPTExOTI9X19iZTMyIG5mc2RfaXRlcl9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTEyMTQtXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxuZnMvbmZzZC92ZnMuYzoxMjE1Olx0XHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSlcbmZzL25mc2QvdmZzLmMtMTIxNi1cdFx0XHRraW9jYi5raV9mbGFncyA9IElPQ0JfRE9OVENBQ0hFO1xuLS1cbmZzL25mc2QvdmZzLmM9MTM2OT1uZnNkX2RpcmVjdF93cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMzkzLVx0XHRcdCAqL1xuZnMvbmZzZC92ZnMuYzoxMzk0Olx0XHRcdGlmIChuZi1cdTAwM2VuZl9maWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxuZnMvbmZzZC92ZnMuYy0xMzk1LVx0XHRcdFx0a2lvY2ItXHUwMDNla2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XG4tLVxuZnMvbmZzZC92ZnMuYz0xNDI2PW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTE0OTctXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxuZnMvbmZzZC92ZnMuYzoxNDk4Olx0XHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSlcbmZzL25mc2QvdmZzLmMtMTQ5OS1cdFx0XHRraW9jYi5raV9mbGFncyB8PSBJT0NCX0RPTlRDQUNIRTtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz0yMDg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0yMTA0LVx0XHRcdCAgRk9QX0JVRkZFUl9XQVNZTkMgfCBGT1BfRElPX1BBUkFMTEVMX1dSSVRFIHxcbmZzL3hmcy94ZnNfZmlsZS5jOjIxMDU6XHRcdFx0ICBGT1BfRE9OVENBQ0hFLFxuZnMveGZzL3hmc19maWxlLmMtMjEwNi1cdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0xOTIxPXN0cnVjdCBmaWxlX29wZXJhdGlvbnMge1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0xOTgxLS8qIEZpbGUgc3lzdGVtIHN1cHBvcnRzIHVuY2FjaGVkIHJlYWQvd3JpdGUgYnVmZmVyZWQgSU8gKi9cbmluY2x1ZGUvbGludXgvZnMuaDoxOTgyOiNkZWZpbmUgRk9QX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZm9wX2ZsYWdzX3QpKDEgXHUwMDNjXHUwMDNjIDcpKVxuaW5jbHVkZS9saW51eC9mcy5oLTE5ODMtXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTM0Mjc9c3RhdGljIGlubGluZSBpbnQga2lvY2Jfc2V0X3J3X2ZsYWdzKHN0cnVjdCBraW9jYiAqa2ksIHJ3Zl90IGZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0zNDUzLVx0XHQvKiBmaWxlIHN5c3RlbSBtdXN0IHN1cHBvcnQgaXQgKi9cbmluY2x1ZGUvbGludXgvZnMuaDozNDU0Olx0XHRpZiAoIShraS1cdTAwM2VraV9maWxwLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfRE9OVENBQ0hFKSlcbmluY2x1ZGUvbGludXgvZnMuaC0zNDU1LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgRk9QX0RPTlRDQUNIRWAgRmxhZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBGT1BfRE9OVENBQ0hFYCBhY3RzIGFzIGFuIGluZGljYXRvciB0aGF0IHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtIHN1cHBvcnRzIGBSV0ZfRE9OVENBQ0hFYCBvciBpdHMgZXF1aXZhbGVudCwgYElPQ0JfRE9OVENBQ0hFYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBsaW5rLiBUaGUgcHJlc2VuY2Ugb2YgYElPQ0JfRE9OVENBQ0hFYCB0aGVuIHRyaWdnZXJzIHBvdGVudGlhbCB1c2Ugb2YgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgLiBUaGlzIGlzIGNsZWFybHkgcmVhY2hhYmxlIHRocm91Z2ggYHB3cml0ZXYyYCBpZiB0aGUgYFJXRl9ET05UQ0FDSEVgIGZsYWcgaXMgc2V0LCBlc3BlY2lhbGx5IG9uIGJsb2NrIGRldmljZXMgb3IgZmlsZXN5c3RlbXMgbGlrZSBleHQ0IG9yIHhmcy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgYGlvbWFwX2FkZF90b19pb2VuZGAgYXJlIHRoZSBtYWpvciBwbGF5ZXJzLiBXYWl0IGEgbWludXRl4oCmIGBpb21hcF9hZGRfdG9faW9lbmRgIGhhc24mIzM5O3QgYmVlbiByZXBsYWNlZCB3aXRoIGEgbmV3IGZ1bmN0aW9uOyBpdCBqdXN0IGhhcyBhIG5ldyBjb25kaXRpb25hbCBjaGVjayBhZGRlZD8gSW50ZXJlc3RpbmcuCgpJcyB0aGF0ICppdCogdGhvdWdoPyBBcmUgdGhlcmUgYW55ICpvdGhlciogbmV3IGZ1bmN0aW9ucz8gT2theSwgYGJpb19jb21wbGV0ZV9pbl90YXNrYCBpcyBpbmxpbmVkLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgY3JpdGljYWwgcGllY2UuIFRoYXQgbGVhdmVzIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhcyB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBjaGVjayBmb3Igb3RoZXIgbmV3IGZ1bmN0aW9uIGRlZmluaXRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmlvX2NvbXBsZXRlX2luX3Rhc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTc2MD1zdGF0aWMgdm9pZCBiaW9fY29tcGxldGVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuYmxvY2svYmlvLmMtMTc4MS1cbmJsb2NrL2Jpby5jOjE3ODI6dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jpby5jLTE3ODMte1xuLS1cbmJsb2NrL2Jpby5jLTE3OTYtfVxuYmxvY2svYmlvLmM6MTc5NzpFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19jb21wbGV0ZV9pbl90YXNrKTtcbmJsb2NrL2Jpby5jLTE3OTgtXG4tLVxuYmxvY2svYmlvLmM9MTgzMT12b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmlvLmMtMTg3My1cdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSBcdTAwMjZcdTAwMjYgYmlvX2luX2F0b21pYygpKVxuYmxvY2svYmlvLmM6MTg3NDpcdFx0X19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pO1xuYmxvY2svYmlvLmMtMTg3NS1cdGVsc2UgaWYgKGJpby1cdTAwM2ViaV9lbmRfaW8pXG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD0zNzc9c3RhdGljIGlubGluZSBib29sIGJpb19pbl9hdG9taWModm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTM4NS1cbmluY2x1ZGUvbGludXgvYmlvLmg6Mzg2OnZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pO1xuaW5jbHVkZS9saW51eC9iaW8uaC0zODctXG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD0zOTk9c3RhdGljIGlubGluZSBib29sIGJpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQwNS1cdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbmluY2x1ZGUvbGludXgvYmlvLmg6NDA2Olx0X19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pO1xuaW5jbHVkZS9saW51eC9iaW8uaC00MDctXHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gYWRkZWQgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuJiMzNDsgQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIHdoYXQgYWJvdXQgYGJpb19jb21wbGV0ZV93b3JrX2ZuYD8gSXQgKmlzKiBzdGF0aWMsIGJ1dCB0aGF0JiMzOTtzIHRoZSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIHByb2JhYmx5IGltcG9ydGFudCB0b28uIEFuZCB3aGF0IGFib3V0IGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZWAsIGFsc28gc3RhdGljPyBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGBmcy9idWZmZXIuY2AuIEhtbSwgYF9fYmhfc3VibWl0YCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdGhlcmUuIEFoLCByaWdodCwgYGJoX3N1Ym1pdGAgKmNhbGxzKiBgX19iaF9zdWJtaXRgLCBhbmQsIGltcG9ydGFudGx5LCBgYmhfc3VibWl0YCBpcyBleHBvcnRlZC4gT2theSwgKmlzKiBgYmhfc3VibWl0YCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBPbiB0aGUgb25lIGhhbmQsIGl0JiMzOTtzIGEgZ2VuZXJpYyBmdW5jdGlvbiBzbyBpdCAqY291bGQqIGJlIGNhbGxlZCB0b28gZnJlcXVlbnRseS4gSG93ZXZlciwgaXQmIzM5O3Mgbm90IGEgaG90IHBhdGggZnVuY3Rpb24gbGlrZSwgc2F5LCBgYmlvX2VuZGlvYC4gQWN0dWFsbHksIGBiaF9zdWJtaXRgIGlzIGNhbGxlZCBmb3IgYnVmZmVyIGhlYWQgSU8sIHdoaWNoIGlzIHF1aXRlIGNvbW1vbiwgc28gdGhhdCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuCgpNb3Zpbmcgb24sIEkgbmVlZCB0byBjaGVjayBgZnMvaW9tYXAvaW9lbmQuY2AuIEFoYSwgYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgbW9kaWZpZWQgdGhlcmUuIElzICp0aGF0KiBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBXZWxsLCBpdCYjMzk7cyBjYWxsZWQgZm9yIGlvbWFwIHdyaXRlYmFjaywgYW5kIHRoYXQmIzM5O3MgYWxzbyBxdWl0ZSBjb21tb24sIHNvIHRoYXQgb25lIGlzIGRlZmluaXRlbHkgd29ydGggY29uc2lkZXJpbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBhdCBgZnMvZXJvZnMvemRhdGEuY2AuIE9rYXksIGB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgbW9kaWZpZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3pkYXRhLmM9MTQyND1zdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZV9rdGhyZWFkX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbi0tXG5mcy9lcm9mcy96ZGF0YS5jLTE0MzAtXG5mcy9lcm9mcy96ZGF0YS5jOjE0MzE6c3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbyxcbmZzL2Vyb2ZzL3pkYXRhLmMtMTQzMi1cdFx0XHRcdCAgICAgICBpbnQgYmlvcylcbi0tXG5mcy9lcm9mcy96ZGF0YS5jPTE2MjM9c3RhdGljIHZvaWQgel9lcm9mc19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvZXJvZnMvemRhdGEuYy0xNjQyLVx0XHRxLVx1MDAzZWVpbyA9IHRydWU7XG5mcy9lcm9mcy96ZGF0YS5jOjE2NDM6XHR6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZihxLCAtMSk7XG5mcy9lcm9mcy96ZGF0YS5jLTE2NDQtXHRpZiAoYmlvLVx1MDAzZWJpX2JkZXYpXG4tLVxuZnMvZXJvZnMvemRhdGEuYz0xNjQ4PXN0YXRpYyB2b2lkIHpfZXJvZnNfc3VibWl0X3F1ZXVlKHN0cnVjdCB6X2Vyb2ZzX2Zyb250ZW5kICpmLFxuLS1cbmZzL2Vyb2ZzL3pkYXRhLmMtMTc3My1cdH1cbmZzL2Vyb2ZzL3pkYXRhLmM6MTc3NDpcdHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHFbSlFfU1VCTUlUXSwgbnJfYmlvcyk7XG5mcy9lcm9mcy96ZGF0YS5jLTE3NzUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZW50cnkgcG9pbnQgZm9yIHN5emthbGxlci4gVGhlIGB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZmAgZnVuY3Rpb24gaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJvYWRibG9jay4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIHN5bWJvbCBgX19iaW9fY29tcGxldGVfaW5fdGFza2AuIElzIHRoZXJlIGFueSBvdGhlciB1c2VmdWwgZnVuY3Rpb24gaGVyZT8gYGJpb19jb21wbGV0ZV93b3JrX2ZuYCBpcyBhbHNvIHN0YXRpYywgbWFraW5nIGl0IHRyaWNreSBhcyBhIGRpcmVjdCB0YXJnZXQsIGV2ZW4gdGhvdWdoIHN5emthbGxlciBjYW4gc29tZXRpbWVzIHN1cnByaXNlIHVzIHdpdGggaXRzIGFiaWxpdHkgdG8gZmluZCB0aGVzZS4gVGhlIGd1aWRlbGluZXMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBzbyB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bSBhaW1pbmcgZm9yLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBgYmxvY2svYmlvLmNgLCBgYmxvY2svZm9wcy5jYCwgYGZzL2J1ZmZlci5jYCwgYGZzL2Vyb2ZzL3pkYXRhLmNgLCBgZnMvaW9tYXAvaW9lbmQuY2AsIGFuZCBgZnMveGZzL3hmc19hb3BzLmNgLiBUaGVzZSBhcmUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSBjb21wb25lbnRzLCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBkZXBlbmRlbmNpZXMuCgpPYnZpb3VzbHksIGBDT05GSUdfQkxPQ0tgIGlzIGEgZ2l2ZW47IGl0JiMzOTtzIHByYWN0aWNhbGx5IGVzc2VudGlhbCwgYnV0IHRoYW5rZnVsbHkgaXQmIzM5O3Mgb24gYnkgZGVmYXVsdC4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX0ZTX0lPTUFQYCBmb3IgdGhlIGBmcy9pb21hcC9pb2VuZC5jYCBjaGFuZ2VzLCBgQ09ORklHX1hGU19GU2AgZm9yIHRoZSBgZnMveGZzL3hmc19hb3BzLmNgIG1vZGlmaWNhdGlvbnMsIGFuZCwgY3JpdGljYWxseSwgYENPTkZJR19FUk9GU19GU2AgZm9yIHRoZSBgZnMvZXJvZnMvemRhdGEuY2AgYml0cy4gR2l2ZW4gdGhhdCBpdCBtZW50aW9ucyBjb21wcmVzc2VkIGVyb2ZzIChgemRhdGFgKSwgSSYjMzk7bGwgYWxzbyBuZWVkIGBDT05GSUdfRVJPRlNfRlNfWklQYC4gVGltZSB0byBjaGVjayBgZnMvZXJvZnMvemRhdGEuY2AgZGlyZWN0bHkgaW4gS2NvbmZpZyB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pkYXRhXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9NYWtlZmlsZT01PWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSAmIzQzOz0geGF0dHIub1xuZnMvZXJvZnMvTWFrZWZpbGU6Njplcm9mcy0kKENPTkZJR19FUk9GU19GU19aSVApICYjNDM7PSBkZWNvbXByZXNzb3IubyB6bWFwLm8gemRhdGEubyB6dXRpbC5vXG5mcy9lcm9mcy9NYWtlZmlsZS03LWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1pJUF9MWk1BKSAmIzQzOz0gZGVjb21wcmVzc29yX2x6bWEub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEVST0ZTIFN1cHBvcnQgZm9yIHpkYXRhLmMqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBpbnRvIGBFUk9GU19GU19aSVBgIGZvciBgemRhdGEuY2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBpdHMgY29uZmlndXJhdGlvbi4gV2hlcmUgc2hvdWxkIEkgc3RhcnQ/IEFoLCByaWdodCwgdGhlIEtjb25maWcgZm9yIGBmcy9pb21hcC9pb2VuZC5jYCBpcyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cywgYW5kIHBvc3NpYmx5IHdoYXQgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBgRVJPRlNfRlNfWklQYCBoYXMgbW9yZSBicm9hZGx5IHdpdGhpbiB0aGUgaW9tYXAgZnJhbWV3b3JrLiBHb3R0YSBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgYW5kIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2VuZFxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvTWFrZWZpbGU9MTQ9aW9tYXAtJChDT05GSUdfQkxPQ0spXHRcdCYjNDM7PSBkaXJlY3QtaW8ubyBcXFxuZnMvaW9tYXAvTWFrZWZpbGU6MTU6XHRcdFx0XHQgICBpb2VuZC5vIFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNi1cdFx0XHRcdCAgIGZpZW1hcC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDg5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipUcmFjaW5nIERlcGVuZGVuY2llcyBmb3IgYGlvZW5kLm9gKioKCkFscmlnaHQsIEkmIzM5O20gZW5jb3VudGVyaW5nIGEgc2l0dWF0aW9uIHdoZXJlIGBpb2VuZC5vYCBuZWVkcyBgQ09ORklHX0JMT0NLYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGVyZSB0aGlzIGRlcGVuZGVuY3kgaXMgZGVmaW5lZCBhbmQgaWYgaXQmIzM5O3MgY29ycmVjdC4mIzM0OyBUaGlzIHVzdWFsbHkgbWVhbnMgbmF2aWdhdGluZyB0aGUgYnVpbGQgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGVyZSBgQ09ORklHX0JMT0NLYCBpcyB1c2VkIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBTaW5jZSB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBmaWxlIHN5c3RlbSByZWxhdGVkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZmlsZXMgYW5kIHRoZWlyIEtjb25maWcgZmlsZXMuIFRoZSBtZW50aW9uIG9mIGB4ZnNfYW9wcy5jYCBzcGFya3MgYSBtZW1vcnkuIGBmcy94ZnMvYCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgYHhmc19hb3BzLmNgIHNvdW5kcyBsaWtlIGl0IHdvdWxkIGJlIGluIHRoZXJlLiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdGhlcmUsIGFzIGl0IHdpbGwgc3BlY2lmeSB3aGF0IGRlcGVuZGVuY2llcyBhbmQgY29uZmlnIG9wdGlvbnMgYXJlIG5lZWRlZC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIGxvb2sgaXMgYGZzL3hmcy9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZzX2FvcHNcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hmcy9NYWtlZmlsZT02ND14ZnMtJChDT05GSUdfWEZTX1JUKVx0XHQmIzQzOz0gJChhZGRwcmVmaXggbGlieGZzLywgXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGUtNzAtIyBoaWdobGV2ZWwgY29kZVxuZnMveGZzL01ha2VmaWxlOjcxOnhmcy15XHRcdFx0XHQmIzQzOz0geGZzX2FvcHMubyBcXFxuZnMveGZzL01ha2VmaWxlLTcyLVx0XHRcdFx0ICAgeGZzX2F0dHJfaW5hY3RpdmUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg5NgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFhGUyBhbmQgQnVmZmVyIENhY2hlIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1hGU19GU2AgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBidWlsZGluZyBgeGZzX2FvcHMub2AuIE5vdCB1bmV4cGVjdGVkLCBvYnZpb3VzbHksIGJ1dCBnb29kIHRvIGhhdmUgdGhhdCBjb25maXJtZWQuIFRoZSBhcmNoaXRlY3R1cmUgaGVyZSByZWxpZXMgb24gWEZTIHN1cHBvcnQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBjYXBhYmlsaXRpZXMuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXM/IGBmcy9idWZmZXIuY2Agc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3BvdCBmb3IgdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIGJ1ZmZlciBjYWNoZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVmZmVyIGNhY2hlIGludGVyYWN0cyB3aXRoIFhGUywgYW5kIHNwZWNpZmljYWxseSBob3cgdGhhdCBgeGZzX2FvcHMub2AgbW9kdWxlIHRpZXMgaW50byB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGJ1ZmZlciBjYWNoZSYjMzk7cyBLY29uZmlnIGVudHJpZXMgdGhlcmUuIE1heWJlIHRoZXJlJiMzOTtzIGEgbW9yZSBleHBsaWNpdCBsaW5rIG9yIGRlcGVuZGVuY3kgbGlzdGVkIHRoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWZmZXJcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9ODI9a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSAmIzQzOz0gXFxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTkwLVx0Ym9vazNzX2h2X25lc3RlZHYyLm8gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6OTE6XHRndWVzdC1zdGF0ZS1idWZmZXIubyBcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS05Mi1cdCQoa3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMteSkgXFxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTk0LVxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfR1VFU1RfU1RBVEVfQlVGRkVSX1RFU1QpICYjNDM7PSB0ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5vXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTk2LWVuZGlmXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9NYWtlZmlsZT05PUhMX0NPTU1PTl9GSUxFUyA6PSBjb21tb24vaGFiYW5hbGFic19kcnYubyBjb21tb24vZGV2aWNlLm8gY29tbW9uL2NvbnRleHQubyBcXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9NYWtlZmlsZS0xMC1cdFx0Y29tbW9uL2FzaWQubyBjb21tb24vaGFiYW5hbGFic19pb2N0bC5vIFxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL01ha2VmaWxlOjExOlx0XHRjb21tb24vY29tbWFuZF9idWZmZXIubyBjb21tb24vaHdfcXVldWUubyBjb21tb24vaXJxLm8gXFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vTWFrZWZpbGUtMTItXHRcdGNvbW1vbi9zeXNmcy5vIGNvbW1vbi9od21vbi5vIGNvbW1vbi9tZW1vcnkubyBcXFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGU9MTU0PWFjcGkteSAmIzQzOz1cdFx0XFxcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlLTE1Ny1cdHV0YXNjaWkub1x0XFxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGU6MTU4Olx0dXRidWZmZXIub1x0XFxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUtMTU5LVx0dXRja3N1bS5vXHRcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0zNT1kcm0teSA6PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS01My1cdGRybV9mb3VyY2MubyBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjU0Olx0ZHJtX2ZyYW1lYnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS01NS1cdGRybV9nZW0ubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGU9Nz1rb21lZGEteSA6PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGUtMTMtXHRrb21lZGFfcGlwZWxpbmVfc3RhdGUubyBcXFxuZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9NYWtlZmlsZToxNDpcdGtvbWVkYV9mcmFtZWJ1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL01ha2VmaWxlLTE1LVx0a29tZWRhX2ttcy5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvTWFrZWZpbGU9Mj1ldG5hdml2LXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L01ha2VmaWxlOjM6XHRldG5hdml2X2J1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9NYWtlZmlsZS00LVx0ZXRuYXZpdl9jbWRfcGFyc2VyLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL01ha2VmaWxlPTY9Z21hNTAwX2dmeC15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUtMTMtXHQgIGNkdl9pbnRlbF9sdmRzLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGU6MTQ6XHQgIGZyYW1lYnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUtMTUtXHQgIGdlbS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9Nzg9aTkxNS15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTgxLVx0aTkxNV9kcHQubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6ODI6XHRpOTE1X2RzYl9idWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtODMtXHRpOTE1X2ZiX3Bpbi5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9MTU2PWdlbS15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTE2Mi1cdGdlbS9pOTE1X2dlbV9kb21haW4ubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6MTYzOlx0Z2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY0LVx0Z2VtL2k5MTVfZ2VtX2ludGVybmFsLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0xNjctXHRnZW0vaTkxNV9nZW1fb2JqZWN0Lm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlOjE2ODpcdGdlbS9pOTE1X2dlbV9vYmplY3RfZnJvbnRidWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY5LVx0Z2VtL2k5MTVfZ2VtX3BhZ2VzLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZT0yMzU9aTkxNS15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTI4Ny1cdGRpc3BsYXkvaW50ZWxfZmxpcHEubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6Mjg4Olx0ZGlzcGxheS9pbnRlbF9mcm9udGJ1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0yODktXHRkaXNwbGF5L2ludGVsX2dsb2JhbF9zdGF0ZS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZT0xMTI9bXNtLXkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZS0xMjYtXHRtc21fcmQubyBcXFxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZToxMjc6XHRtc21fcmluZ2J1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlLTEyOC1cdG1zbV9zdWJtaXRxdWV1ZS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlPTU9c3VuNGktZHJtLXlcdFx0XHQmIzQzOz0gc3VuNGlfZHJ2Lm9cbmRyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZTo2OnN1bjRpLWRybS15XHRcdFx0JiM0Mzs9IHN1bjRpX2ZyYW1lYnVmZmVyLm9cbmRyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGU9Mj12bXdnZngteSA6PSB2bXdnZnhfZXhlY2J1Zi5vIHZtd2dmeF9nbXIubyB2bXdnZnhfa21zLm8gdm13Z2Z4X2Rydi5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlOjM6XHQgICAgdm13Z2Z4X2lvY3RsLm8gdm13Z2Z4X3Jlc291cmNlLm8gdm13Z2Z4X3R0bV9idWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZS00LVx0ICAgIHZtd2dmeF9jbWQubyB2bXdnZnhfaXJxLm8gdm13Z2Z4X2xkdS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIxOD14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyMy1cdGRpc3BsYXkveGVfZGlzcGxheV93YS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MjI0Olx0ZGlzcGxheS94ZV9kc2JfYnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0yMjUtXHRkaXNwbGF5L3hlX2ZiX3Bpbi5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MjI2Olx0ZGlzcGxheS94ZV9mcm9udGJ1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMjI3LVx0ZGlzcGxheS94ZV9oZGNwX2dzYy5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIzND14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTI5OC1cdGk5MTUtZGlzcGxheS9pbnRlbF9mbGlwcS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6Mjk5Olx0aTkxNS1kaXNwbGF5L2ludGVsX2Zyb250YnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0zMDAtXHRpOTE1LWRpc3BsYXkvaW50ZWxfZ2xvYmFsX3N0YXRlLm8gXFxcbi0tXG5kcml2ZXJzL2h2L01ha2VmaWxlPTExPWh2X3ZtYnVzLXkgOj0gdm1idXNfZHJ2Lm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTItXHRcdCBodi5vIGNvbm5lY3Rpb24ubyBjaGFubmVsLm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTM6XHRcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTQtaHZfdm1idXMtJChDT05GSUdfSFlQRVJWX1RFU1RJTkcpXHQmIzQzOz0gaHZfZGVidWdmcy5vXG4tLVxuZHJpdmVycy9paW8vTWFrZWZpbGU9Nz1pbmR1c3RyaWFsaW8teSA6PSBpbmR1c3RyaWFsaW8tY29yZS5vIGluZHVzdHJpYWxpby1ldmVudC5vIGlua2Vybi5vXG5kcml2ZXJzL2lpby9NYWtlZmlsZTo4OmluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fQlVGRkVSKSAmIzQzOz0gaW5kdXN0cmlhbGlvLWJ1ZmZlci5vXG5kcml2ZXJzL2lpby9NYWtlZmlsZS05LWluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fVFJJR0dFUikgJiM0Mzs9IGluZHVzdHJpYWxpby10cmlnZ2VyLm9cbi0tXG5kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZT04Nj1zdF9hY2NlbC15IDo9IHN0X2FjY2VsX2NvcmUub1xuZHJpdmVycy9paW8vYWNjZWwvTWFrZWZpbGU6ODc6c3RfYWNjZWwtJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IHN0X2FjY2VsX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZS04OC1cbi0tXG5kcml2ZXJzL2lpby9idWZmZXIvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0lJT19CVUZGRVJfSFdfQ09OU1VNRVIpICYjNDM7PSBpbmR1c3RyaWFsaW8taHctY29uc3VtZXIub1xuZHJpdmVycy9paW8vYnVmZmVyL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19JSU9fVFJJR0dFUkVEX0JVRkZFUikgJiM0Mzs9IGluZHVzdHJpYWxpby10cmlnZ2VyZWQtYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2J1ZmZlci9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfSUlPX0tGSUZPX0JVRikgJiM0Mzs9IGtmaWZvX2J1Zi5vXG4tLVxuZHJpdmVycy9paW8vY29tbW9uL3N0X3NlbnNvcnMvTWFrZWZpbGU9OT1zdF9zZW5zb3JzLXkgOj0gc3Rfc2Vuc29yc19jb3JlLm9cbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlOjEwOnN0X3NlbnNvcnMtJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IHN0X3NlbnNvcnNfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlLTExLXN0X3NlbnNvcnMtJChDT05GSUdfSUlPX1RSSUdHRVIpICYjNDM7PSBzdF9zZW5zb3JzX3RyaWdnZXIub1xuLS1cbmRyaXZlcnMvaWlvL2R1bW15L01ha2VmaWxlPTg9aWlvX2R1bW15LSQoQ09ORklHX0lJT19TSU1QTEVfRFVNTVlfRVZFTlRTKSAmIzQzOz0gaWlvX3NpbXBsZV9kdW1teV9ldmVudHMub1xuZHJpdmVycy9paW8vZHVtbXkvTWFrZWZpbGU6OTppaW9fZHVtbXktJChDT05GSUdfSUlPX1NJTVBMRV9EVU1NWV9CVUZGRVIpICYjNDM7PSBpaW9fc2ltcGxlX2R1bW15X2J1ZmZlci5vXG5kcml2ZXJzL2lpby9kdW1teS9NYWtlZmlsZS0xMC1cbi0tXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlPTI3PWl0ZzMyMDAteSAgICAgICAgICAgICAgIDo9IGl0ZzMyMDBfY29yZS5vXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlOjI4Oml0ZzMyMDAtJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IGl0ZzMyMDBfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGUtMjktb2JqLSQoQ09ORklHX0lURzMyMDApICAgJiM0Mzs9IGl0ZzMyMDAub1xuLS1cbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGU9MzQ9c3RfZ3lyby15IDo9IHN0X2d5cm9fY29yZS5vXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlOjM1OnN0X2d5cm8tJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IHN0X2d5cm9fYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGUtMzYtXG4tLVxuZHJpdmVycy9paW8vaHVtaWRpdHkvTWFrZWZpbGU9MTQ9aHRzMjIxLXkgOj0gaHRzMjIxX2NvcmUubyBcXFxuZHJpdmVycy9paW8vaHVtaWRpdHkvTWFrZWZpbGU6MTU6XHQgICAgaHRzMjIxX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9odW1pZGl0eS9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfSFRTMjIxKSAmIzQzOz0gaHRzMjIxLm9cbi0tXG5kcml2ZXJzL2lpby9pbXUvTWFrZWZpbGU9MTQ9YWRpc19saWItJChDT05GSUdfSUlPX0FESVNfTElCX0JVRkZFUikgJiM0Mzs9IGFkaXNfdHJpZ2dlci5vXG5kcml2ZXJzL2lpby9pbXUvTWFrZWZpbGU6MTU6YWRpc19saWItJChDT05GSUdfSUlPX0FESVNfTElCX0JVRkZFUikgJiM0Mzs9IGFkaXNfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfSUlPX0FESVNfTElCKSAmIzQzOz0gYWRpc19saWIub1xuLS1cbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGU9Nz1pbnYtaWNtNDI2MDAteSAmIzQzOz0gaW52X2ljbTQyNjAwX3RlbXAub1xuZHJpdmVycy9paW8vaW11L2ludl9pY200MjYwMC9NYWtlZmlsZTo4Omludi1pY200MjYwMC15ICYjNDM7PSBpbnZfaWNtNDI2MDBfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL2lpby9pbXUvaW52X2ljbTQ1NjAwL01ha2VmaWxlPTQ9aW52LWljbTQ1NjAwLXkgJiM0Mzs9IGludl9pY200NTYwMF9jb3JlLm9cbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDU2MDAvTWFrZWZpbGU6NTppbnYtaWNtNDU2MDAteSAmIzQzOz0gaW52X2ljbTQ1NjAwX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9pbXUvaW52X2ljbTQ1NjAwL01ha2VmaWxlLTYtaW52LWljbTQ1NjAwLXkgJiM0Mzs9IGludl9pY200NTYwMF9neXJvLm9cbi0tXG5kcml2ZXJzL2lpby9pbXUvc3RfbHNtNmRzeC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9paW8vaW11L3N0X2xzbTZkc3gvTWFrZWZpbGU6MjpzdF9sc202ZHN4LXkgOj0gc3RfbHNtNmRzeF9jb3JlLm8gc3RfbHNtNmRzeF9idWZmZXIubyBcXFxuZHJpdmVycy9paW8vaW11L3N0X2xzbTZkc3gvTWFrZWZpbGUtMy1cdFx0c3RfbHNtNmRzeF9zaHViLm8gc3RfbHNtNmRzeF9mdXNpb24ub1xuLS1cbmRyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZT0yMj1zdF9tYWduLXkgOj0gc3RfbWFnbl9jb3JlLm9cbmRyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZToyMzpzdF9tYWduLSQoQ09ORklHX0lJT19CVUZGRVIpICYjNDM7PSBzdF9tYWduX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUtMjQtXG4tLVxuZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGU9NDA9c3RfcHJlc3N1cmUteSA6PSBzdF9wcmVzc3VyZV9jb3JlLm9cbmRyaXZlcnMvaWlvL3ByZXNzdXJlL01ha2VmaWxlOjQxOnN0X3ByZXNzdXJlLSQoQ09ORklHX0lJT19CVUZGRVIpICYjNDM7PSBzdF9wcmVzc3VyZV9idWZmZXIub1xuZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGUtNDItb2JqLSQoQ09ORklHX0lJT19TVF9QUkVTU19JMkMpICYjNDM7PSBzdF9wcmVzc3VyZV9pMmMub1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGU9OT1kdmItY29yZS1vYmpzIDo9IGR2YmRldi5vIGRteGRldi5vIGR2Yl9kZW11eC5vXHRcdFx0XFxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGUtMTAtXHRcdCBkdmJfY2FfZW41MDIyMS5vIGR2Yl9mcm9udGVuZC5vXHRcdFxcXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlOjExOlx0XHQgJChkdmItbmV0LXkpIGR2Yl9yaW5nYnVmZmVyLm8gJChkdmItdmIyLXkpXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlLTEyLVxuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGU9Mj1zYWE3MTY0LW9ianNcdDo9IHNhYTcxNjQtY2FyZHMubyBzYWE3MTY0LWNvcmUubyBzYWE3MTY0LWkyYy5vIHNhYTcxNjQtZHZiLm8gXFxcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGUtMy1cdFx0XHRzYWE3MTY0LWZ3Lm8gc2FhNzE2NC1idXMubyBzYWE3MTY0LWNtZC5vIHNhYTcxNjQtYXBpLm8gXFxcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGU6NDpcdFx0XHRzYWE3MTY0LWJ1ZmZlci5vIHNhYTcxNjQtZW5jb2Rlci5vIHNhYTcxNjQtdmJpLm9cbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGUtNS1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZToxOnFjb20taXJpcy1vYmpzICYjNDM7PSBpcmlzX2J1ZmZlci5vIFxcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZS0yLSAgICAgICAgICAgICBpcmlzX2NvbW1vbi5vIFxcXG4tLVxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2lyaXMvTWFrZWZpbGUtMjgtICAgICAgICAgICAgIGlyaXNfdnB1NHgubyBcXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2lyaXMvTWFrZWZpbGU6Mjk6ICAgICAgICAgICAgIGlyaXNfdnB1X2J1ZmZlci5vIFxcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZS0zMC0gICAgICAgICAgICAgaXJpc192cHVfY29tbW9uLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9Mzk9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfRU5fUlhORkMpICAgICYjNDM7PSBlbl9mc19ldGh0b29sLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0MDptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DT1JFX0VOX0RDQikgJiM0Mzs9IGVuX2RjYm5sLm8gZW4vcG9ydF9idWZmZXIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTQxLW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgJiM0Mzs9IGVuL2h2X3ZoY2Ffc3RhdHMub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jPTUyOT10eGdiZV9nZXRfbW9kdWxlX2VlcHJvbV9ieV9wYWdlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQwLVx0YnVmZmVyLmxlbmd0aCA9IGNwdV90b19iZTMyKHBhZ2VfZGF0YS1cdTAwM2VsZW5ndGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6NTQxOlx0YnVmZmVyLm9mZnNldCA9IGNwdV90b19iZTMyKHBhZ2VfZGF0YS1cdTAwM2VvZmZzZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQyLVx0YnVmZmVyLnBhZ2UgPSBwYWdlX2RhdGEtXHUwMDNlcGFnZTtcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9NTI3PXN0YXRpYyBpbnQgZGVsbF9yZmtpbGxfc2V0KHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQwLVx0XHRyZXR1cm4gcmV0O1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjU0MTpcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQyLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy01NDYtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NTQ3Olx0aHdzd2l0Y2ggPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU0OC1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9NTgzPXN0YXRpYyB2b2lkIGRlbGxfcmZraWxsX3F1ZXJ5KHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTkyLVx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo1OTM6XHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU5NC1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjAwLVx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo2MDE6XHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjAyLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz02MTY9c3RhdGljIGludCBkZWxsX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYyNy1cdFx0cmV0dXJuIHJldDtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo2Mjg6XHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYyOS1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjMzLVx0XHRyZXR1cm4gaHdzd2l0Y2hfcmV0O1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYzNDpcdGh3c3dpdGNoX3N0YXRlID0gYnVmZmVyLm91dHB1dFsxXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy02MzUtXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTcwMT1zdGF0aWMgdm9pZCBkZWxsX3VwZGF0ZV9yZmtpbGwoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MDktXHRyZXQgPSBkZWxsX3NlbmRfcmVxdWVzdChcdTAwMjZidWZmZXIsIENMQVNTX0lORk8sIFNFTEVDVF9SRktJTEwpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjcxMDpcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzExLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MTgtXHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IChzdGF0dXMgXHUwMDI2IEJJVCgwKSkpXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NzE5Olx0XHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzIwLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz03NzU9c3RhdGljIGludCBfX2luaXQgZGVsbF9zZXR1cF9yZmtpbGwodm9pZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzk0LVx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo3OTU6XHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTc5Ni1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9OTU3PXN0YXRpYyBpbnQgZGVsbF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtOTY3LVx0aWYgKHJldCA9PSAwKVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjk2ODpcdFx0cmV0ID0gYnVmZmVyLm91dHB1dFsxXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy05NjktXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTEyMzI9c3RhdGljIGludCBrYmRfZ2V0X2luZm8oc3RydWN0IGtiZF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjQzLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDQ6XHRpbmZvLVx1MDAzZW1vZGVzID0gYnVmZmVyLm91dHB1dFsxXSBcdTAwMjYgMHhGRkZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDU6XHRpbmZvLVx1MDAzZXR5cGUgPSAoYnVmZmVyLm91dHB1dFsxXSBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDY6XHRpbmZvLVx1MDAzZXRyaWdnZXJzID0gYnVmZmVyLm91dHB1dFsyXSBcdTAwMjYgMHhGRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjQ3Olx0dW5pdHMgPSAoYnVmZmVyLm91dHB1dFsyXSBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4RkY7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0ODpcdGluZm8tXHUwMDNlbGV2ZWxzID0gKGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhGRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjQ5LVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjUzLVx0aWYgKHVuaXRzIFx1MDAyNiBCSVQoMCkpXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI1NDpcdFx0aW5mby1cdTAwM2VzZWNvbmRzID0gKGJ1ZmZlci5vdXRwdXRbM10gXHUwMDNlXHUwMDNlIDApIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTUtXHRpZiAodW5pdHMgXHUwMDI2IEJJVCgxKSlcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU2Olx0XHRpbmZvLVx1MDAzZW1pbnV0ZXMgPSAoYnVmZmVyLm91dHB1dFszXSBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4RkY7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTI1Ny1cdGlmICh1bml0cyBcdTAwMjYgQklUKDIpKVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNTg6XHRcdGluZm8tXHUwMDNlaG91cnMgPSAoYnVmZmVyLm91dHB1dFszXSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTktXHRpZiAodW5pdHMgXHUwMDI2IEJJVCgzKSlcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjYwOlx0XHRpbmZvLVx1MDAzZWRheXMgPSAoYnVmZmVyLm91dHB1dFszXSBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNjEtXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTEzMTg9c3RhdGljIGludCBrYmRfZ2V0X3N0YXRlKHN0cnVjdCBrYmRfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMzI4LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMjk6XHRzdGF0ZS1cdTAwM2Vtb2RlX2JpdCA9IGZmcyhidWZmZXIub3V0cHV0WzFdIFx1MDAyNiAweEZGRkYpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzMzAtXHRpZiAoc3RhdGUtXHUwMDNlbW9kZV9iaXQgIT0gMClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTMzMi1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzMzOlx0c3RhdGUtXHUwMDNldHJpZ2dlcnMgPSAoYnVmZmVyLm91dHB1dFsxXSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzQ6XHRzdGF0ZS1cdTAwM2V0aW1lb3V0X3ZhbHVlID0gKGJ1ZmZlci5vdXRwdXRbMV0gXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgMHgzRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzM1Olx0c3RhdGUtXHUwMDNldGltZW91dF91bml0ID0gKGJ1ZmZlci5vdXRwdXRbMV0gXHUwMDNlXHUwMDNlIDMwKSBcdTAwMjYgMHgzO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzY6XHRzdGF0ZS1cdTAwM2VhbHNfc2V0dGluZyA9IGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDI2IDB4RkY7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNzpcdHN0YXRlLVx1MDAzZWFsc192YWx1ZSA9IChidWZmZXIub3V0cHV0WzJdIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhGRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzM4Olx0c3RhdGUtXHUwMDNlbGV2ZWwgPSAoYnVmZmVyLm91dHB1dFsyXSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzk6XHRzdGF0ZS1cdTAwM2V0aW1lb3V0X3ZhbHVlX2FjID0gKGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgMHgzRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzQwOlx0c3RhdGUtXHUwMDNldGltZW91dF91bml0X2FjID0gKGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDNlXHUwMDNlIDMwKSBcdTAwMjYgMHgzO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzNDEtXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTEzOTc9c3RhdGljIGludCBrYmRfZ2V0X3Rva2VuX2JpdCh1OCBiaXQpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTE0MTUtXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTQxNjpcdHZhbCA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTQxNy1cdHJldHVybiAodmFsID09IHRva2VuLVx1MDAzZXZhbHVlKTtcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MjE5NT1zdGF0aWMgaW50IGRlbGxfYmF0dGVyeV9yZWFkKGNvbnN0IHUxNiB0b2tlbmlkKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA0LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjIyMDU6XHRpZiAoYnVmZmVyLm91dHB1dFsxXSBcdTAwM2UgSU5UX01BWClcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA2LVx0XHRyZXR1cm4gLUVJTztcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA3LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjIyMDg6XHRyZXR1cm4gYnVmZmVyLm91dHB1dFsxXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA5LX1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MjQ1OD1zdGF0aWMgaW50IF9faW5pdCBkZWxsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMjUyNC1cdGlmIChyZXQgPT0gMClcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoyNTI1Olx0XHRtYXhfaW50ZW5zaXR5ID0gYnVmZmVyLm91dHB1dFszXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yNTI2LVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jPTEyMD1zdGF0aWMgaW50IHRoZXJtYWxfZ2V0X21vZGUodm9pZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xMjktXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxMzA6XHRzdGF0ZSA9IGJ1ZmZlci5vdXRwdXRbMl07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xMzEtXHRpZiAoc3RhdGUgXHUwMDI2IERFTExfQkFMQU5DRUQpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM9MTQzPXN0YXRpYyBpbnQgdGhlcm1hbF9nZXRfc3VwcG9ydGVkX21vZGVzKGludCAqc3VwcG9ydGVkX2JpdHMpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmMtMTUxLVx0XHRyZXR1cm4gcmV0O1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM6MTUyOlx0KnN1cHBvcnRlZF9iaXRzID0gRklFTERfR0VUKERFTExfVEhFUk1BTF9TVVBQT1JURUQsIGJ1ZmZlci5vdXRwdXRbMV0pO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmMtMTUzLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM9MTU2PXN0YXRpYyBpbnQgdGhlcm1hbF9nZXRfYWNjX21vZGUoaW50ICphY2NfbW9kZSlcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xNjQtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxNjU6XHQqYWNjX21vZGUgPSBGSUVMRF9HRVQoREVMTF9BQ0NfR0VUX0ZJRUxELCBidWZmZXIub3V0cHV0WzNdKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jLTE2Ni1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdHR5L01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX1RUWSlcdFx0JiM0Mzs9IHR0eV9pby5vIG5fdHR5Lm8gdHR5X2lvY3RsLm8gdHR5X2xkaXNjLm8gXFxcbmRyaXZlcnMvdHR5L01ha2VmaWxlOjM6XHRcdFx0XHQgICB0dHlfYnVmZmVyLm8gdHR5X3BvcnQubyB0dHlfbXV0ZXgubyBcXFxuZHJpdmVycy90dHkvTWFrZWZpbGUtNC1cdFx0XHRcdCAgIHR0eV9sZHNlbS5vIHR0eV9iYXVkcmF0ZS5vIHR0eV9qb2JjdHJsLm8gXFxcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlPTk9dXNiY29yZS15IDo9IHVzYi5vIGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIub1xuZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZToxMDp1c2Jjb3JlLXkgJiM0Mzs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cbmRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUtMTEtdXNiY29yZS15ICYjNDM7PSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cbi0tXG5mcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTIwLVxuZnMvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKVx0JiM0Mzs9IGJ1ZmZlci5vIG1wYWdlLm9cbmZzL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QUk9DX0ZTKVx0XHQmIzQzOz0gcHJvY19uYW1lc3BhY2Uub1xuLS1cbmZzL2hwZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFBGU19GUykgJiM0Mzs9IGhwZnMub1xuZnMvaHBmcy9NYWtlZmlsZS03LVxuZnMvaHBmcy9NYWtlZmlsZTo4OmhwZnMtb2JqcyA6PSBhbGxvYy5vIGFub2RlLm8gYnVmZmVyLm8gZGVudHJ5Lm8gZGlyLm8gZG5vZGUubyBlYS5vIGZpbGUubyBcXFxuZnMvaHBmcy9NYWtlZmlsZS05LVx0ICAgICBpbm9kZS5vIG1hcC5vIG5hbWUubyBuYW1laS5vIHN1cGVyLm9cbi0tXG5mcy9uZXRmcy9NYWtlZmlsZT0zPW5ldGZzLXkgOj0gXFxcbi0tXG5mcy9uZXRmcy9NYWtlZmlsZS0xNi1cdHJlYWRfc2luZ2xlLm8gXFxcbmZzL25ldGZzL01ha2VmaWxlOjE3Olx0cm9sbGluZ19idWZmZXIubyBcXFxuZnMvbmV0ZnMvTWFrZWZpbGUtMTgtXHR3cml0ZV9jb2xsZWN0Lm8gXFxcbi0tXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaD00Nz1zdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHtcbi0tXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaC02Mi1cdCAqIHN0b3JlZCBpbiBzdHJ1Y3QgXHUwMDI2ZHJtX2ZyYW1lYnVmZmVyLCBpbmNsdWRpbmcgYWxsIHJlbGV2YW50IG1ldGFkYXRhXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaDo2MzpcdCAqIGxpa2UgXHUwMDI2ZHJtX2ZyYW1lYnVmZmVyLnBpdGNoZXMgYW5kIFx1MDAyNmRybV9mcmFtZWJ1ZmZlci5vZmZzZXRzIGlmIHRoZVxuaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgtNjQtXHQgKiBtb2RpZmllciBlbmFibGVzIGFkZGl0aW9uYWwgcGxhbmVzIGJleW9uZCB0aGUgZm91cmNjIHBpeGVsIGZvcm1hdFxuLS1cbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vIHJpbmdfYnVmZmVyLm8gY2FsbGNoYWluLm9cbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMy1cbi0tXG5rZXJuZWwvcHJpbnRrL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1BSSU5USykgICAgICAgICAgICAgICAgICYjNDM7PSBwcmludGtfc3VwcG9ydC5vXG5rZXJuZWwvcHJpbnRrL01ha2VmaWxlOjg6cHJpbnRrX3N1cHBvcnQteVx0ICAgICAgICAgICAgIDo9IHByaW50a19yaW5nYnVmZmVyLm9cbmtlcm5lbC9wcmludGsvTWFrZWZpbGUtOS1wcmludGtfc3VwcG9ydC0kKENPTkZJR19TWVNDVEwpXHQgICAgICYjNDM7PSBzeXNjdGwub1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSAmIzQzOz0gbGliZnRyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfUklOR19CVUZGRVIpICYjNDM7PSByaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSykgJiM0Mzs9IHJpbmdfYnVmZmVyX2JlbmNobWFyay5vXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSAmIzQzOz0gdHJhY2VfcmVtb3RlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgJiM0Mzs9IHJlbW90ZV90ZXN0Lm9cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTYxPSQob2JqKS8lLm8uY2hlY2tlZDogJChvYmopLyUubyAkKG9iaikvdW5kZWZzeW1zX2Jhc2UubyBGT1JDRVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTY0OmFsd2F5cy0kKENPTkZJR19TSU1QTEVfUklOR19CVUZGRVIpICYjNDM7PSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTY1LVxuLS1cbm5ldC9jZXBoL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0NFUEhfTElCKSAmIzQzOz0gbGliY2VwaC5vXG5uZXQvY2VwaC9NYWtlZmlsZS02LVxubmV0L2NlcGgvTWFrZWZpbGU6NzpsaWJjZXBoLXkgOj0gY2VwaF9jb21tb24ubyBtZXNzZW5nZXIubyBtc2dwb29sLm8gYnVmZmVyLm8gcGFnZWxpc3QubyBcXFxubmV0L2NlcGgvTWFrZWZpbGUtOC1cdG1vbl9jbGllbnQubyBkZWNvZGUubyBcXFxuLS1cbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlPTM9Q0ZMQUdTX2FtZHRwLXN0cmVhbS5vXHQ6PSAtSSQoc3JjKVxuc291bmQvZmlyZXdpcmUvTWFrZWZpbGUtNC1cbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlOjU6c25kLWZpcmV3aXJlLWxpYi15IDo9IGxpYi5vIGlzby1yZXNvdXJjZXMubyBwYWNrZXRzLWJ1ZmZlci5vIFxcXG5zb3VuZC9maXJld2lyZS9NYWtlZmlsZS02LVx0XHRcdCBmY3AubyBjbXAubyBhbWR0cC1zdHJlYW0ubyBhbWR0cC1hbTgyNC5vXG4tLVxudG9vbHMvaWlvL0J1aWxkPTM9aWlvX2V2ZW50X21vbml0b3IteSAmIzQzOz0gaWlvX2V2ZW50X21vbml0b3IubyBpaW9fdXRpbHMub1xudG9vbHMvaWlvL0J1aWxkOjQ6aWlvX2dlbmVyaWNfYnVmZmVyLXkgJiM0Mzs9IGlpb19nZW5lcmljX2J1ZmZlci5vIGlpb191dGlscy5vXG4tLVxudG9vbHMvcGVyZi90ZXN0cy9CdWlsZD00NT1wZXJmLXRlc3QteSAmIzQzOz0gZXhwci5vXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkOjQ2OnBlcmYtdGVzdC15ICYjNDM7PSBiYWNrd2FyZC1yaW5nLWJ1ZmZlci5vXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkLTQ3LXBlcmYtdGVzdC15ICYjNDM7PSBzZHQub1xuLS1cbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGU9MjA9VE9PTF9PQkpTID0gXFxcbi0tXG50b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL01ha2VmaWxlLTI5LVx0dXRhc2NpaS5vXFxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGU6MzA6XHR1dGJ1ZmZlci5vXFxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGUtMzEtXHR1dGNrc3VtLm9cXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk2OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDg3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCbG9jayBMYXllciBDaGFuZ2VzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBzZXQgdXAgbXkgZnV6emluZyBlbnZpcm9ubWVudCB0byB0YXJnZXQgdGhpcyBuZXcgYmxvY2sgbGF5ZXIgaW5mcmFzdHJ1Y3R1cmUgZm9yIGRlZmVycmVkIGJpbyBjb21wbGV0aW9ucy4gIEl0IHNlZW1zIHRoZSBjcml0aWNhbCBjb21wb25lbnQsIGBDT05GSUdfQlVGRkVSX0hFQURgLCBpcyBpbmRlZWQgcmVxdWlyZWQgZm9yIGBmcy9idWZmZXIuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBlbmFibGVkOiBgQkxPQ0tgLCBgQlVGRkVSX0hFQURgLCBgRlNfSU9NQVBgLCBgWEZTX0ZTYCwgYEVST0ZTX0ZTYCwgYW5kIGBFUk9GU19GU19aSVBgLiBHb29kLCB0aGUgYmFzZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIEkgaGF2ZSB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gYENPTkZJR19CVUZGRVJfSEVBRGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBmaWxlc3lzdGVtcyBsaWtlIGBFWFQ0X0ZTYCwgYW5kIGBYRlNfRlNgLiBTaW1pbGFybHkgYENPTkZJR19GU19JT01BUGAgaXMgc2VsZWN0ZWQgYnkgZmlsZXN5c3RlbXMgbGlrZSBgWEZTX0ZTYCwgYW5kIGBFWFQ0X0ZTYCwgbWVhbmluZyBteSBjb25maWcgbGlzdCBpcyBnb29kIHRvIGdvLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC4gSSBzZWUgdGhhdCBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgIGFyZSB0aGUgdHdvIGJlc3QgY2FuZGlkYXRlcy4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgaW9tYXBfYWRkX3RvX2lvZW5kYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMuIFRoZSBjb2RlIHNob3dzOgoKYGBgYwpzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAoJCWxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKQpgYGAKCkFuZCBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaXMgYWxzbyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgbGlrZSB0aGlzOgoKYGBgYwp2b2lkIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKQpgYGAKCkkgYWxzbyBsb29rZWQgYXQgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBgYmhfc3VibWl0YCBpcyBub3QgbW9kaWZpZWQsIGJ1dCBgX19iaF9zdWJtaXRgIGlzLiBCdXQgYF9fYmhfc3VibWl0YCBpcyBzdGF0aWMuIEluIGBmcy94ZnMveGZzX2FvcHMuY2AsIGB4ZnNfaW9lbmRfbmVlZHNfd3FfY29tcGxldGlvbmAgaXMgbW9kaWZpZWQgYnV0IGl0IGlzIHN0YXRpYy4gSW4gYGZzL2Vyb2ZzL3pkYXRhLmNgLCBgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmZgIGlzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgc3RhdGljLgoKYGJpb19lbmRpb2AgaXMgbW9kaWZpZWQsIGJ1dCB0aGF0JiMzOTtzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aCwgc28gbGV0JiMzOTtzIGF2b2lkIGl0LiBgYmlvc2V0X2luaXRgIGlzIHVudG91Y2hlZCwgYW5kIGBpbml0X2Jpb2AgaXMgYF9faW5pdGAuCgpTbyB0aGUgY2VudHJhbCBpZGVhIGlzIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGluZnJhc3RydWN0dXJlIHRvIGRlZmVyIGJpbyBjb21wbGV0aW9ucyB1c2luZyBhIHBlci1DUFUgd29ya3F1ZXVlIGluIHRoZSBibG9jayBsYXllci4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcsIHNldCBpbiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Agd2hlbiBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgaXMgdHJ1ZSwgbGlrZSB3aXRoIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuIFRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGFuZCBpcyBpbnRlZ3JhdGVkIGludG8gYGJpb19lbmRpb2AuIFRoaXMgbWVhbnMgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjay4gSXQmIzM5O3MgcmlwZSBmb3IgZnV6emluZyEKCkkgbmVlZCB0byBjb25maXJtIGlmIGBSV0ZfRE9OVENBQ0hFYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBObywgaXQmIzM5O3MgYSBmbGFnIGZvciBgcHdyaXRldjJgLgoKSW4gc3VtbWFyeSwgSSBuZWVkIHRoZSBmb2xsb3dpbmcgY29uZmlnczogYEJMT0NLYCwgYEJVRkZFUl9IRUFEYCwgYEZTX0lPTUFQYCwgYFhGU19GU2AsIGBFUk9GU19GU2AsIGFuZCBgRVJPRlNfRlNfWklQYCB0byB0YXJnZXQgdGhlc2UgYXJlYXMuIE9rYXksIGxldCBtZSBtYWtlIHN1cmUgdGhhdCBgRVJPRlNfRlNfWklQYCBpcyBhIGJvb2wgb3IgdHJpc3RhdGUuIEkgd2lsbCBjaGVjayB0aGUgYGZzL2Vyb2ZzL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVJPRlNfRlNfWklQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWc9OTg9Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNDQtXG5mcy9lcm9mcy9LY29uZmlnOjE0NTpjb25maWcgRVJPRlNfRlNfWklQX1pTVERcbmZzL2Vyb2ZzL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFUk9GUyBac3RhbmRhcmQgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE1NS1cbmZzL2Vyb2ZzL0tjb25maWc6MTU2OmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRVJPRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgRVJPRlNfRlNfWklQYC4uLiB5ZXAsIHRoYXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgYm9vbGVhbiwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCBxdWlja2x5IGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBmbGFncy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbmV4dCBsb2dpY2FsIGNoZWNrIGlzIGdvaW5nIHRvIGJlIGBGU19JT01BUGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSByZW1lbWJlcmluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGNvbXByZXNzZWQgSS9PIGFuZCBkaXJlY3QgYWNjZXNzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCB0aGUgY29kZWJhc2Ugb3IgZG9jdW1lbnRhdGlvbiB0byBhdm9pZCBtaXNzaW5nIGFuIGltcG9ydGFudCBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIEludGVybmFscyoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBGU19JT01BUGAgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4uIE5lZWQgdG8gY29uZmlybSB0aGF0IHF1aWNrbHksIGJ1dCBJJiMzOTttIG9wZXJhdGluZyBvbiB0aGF0IGFzc3VtcHRpb24gZm9yIHRoZSBtb21lbnQuIE5vdywgd2hlcmUgd2FzIHRoYXQgcmVsYXRlZCB0byBgQlVGRkVSX0hFQURgPyBMZXQgbWUgc2VlIHdoYXQgdGhhdCBkYXRhIHN0cnVjdHVyZSBob2xkcyB3aXRoaW4gaXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGludGVybmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJVRkZFUl9IRUFEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjI9Y29uZmlnIEZTX1NUQUNLXG4tLVxuZnMvS2NvbmZpZy0yNC1cbmZzL0tjb25maWc6MjU6Y29uZmlnIEJVRkZFUl9IRUFEXG5mcy9LY29uZmlnLTI2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqUmVmbGVjdGluZyBvbiBEYXRhIFN0cnVjdHVyZXMgaW4gS2VybmVsIE1lbW9yeSoqCgpSaWdodCwgc28gYEJVRkZFUl9IRUFEYC4gQWJzb2x1dGVseSwgaXQmIzM5O3MgYSBCb29sZWFuIHR5cGUuIFNpbXBsZSBlbm91Z2gsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYmFzaWNzIGFyZSBwZXJmZWN0bHkgdW5kZXJzdG9vZC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHJlbGF0ZWQgbWVtb3J5IGxheW91dC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2Ygd2hhdCBgQkxPQ0tgIGlzIGRlZmluZWQgYXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgb24gd2hhdCB0aGF0IHN0cnVjdHVyZSBob2xkcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBCVUZGRVJfSEVBRGAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBvZiB0aGUgSS9PIHN5c3RlbSwgc28gYSBxdWljayBtZW50YWwgcmV2aWV3IHdpbGwgYmUgd29ydGh3aGlsZS4gV2UgbmVlZCB0byBiZSBvbiB0b3Agb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWctNC0jXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xuYmxvY2svS2NvbmZpZy02LSAgICAgICBib29sIFwmIzM0O0VuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcJiMzNDsgaWYgRVhQRVJUXG4tLVxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xuYmxvY2svS2NvbmZpZy0yOC1cbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxuYmxvY2svS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXG4tLVxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbmJsb2NrL0tjb25maWctMjE5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjgwNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyB0aGUgTG9naWNhbCBGbG93KioKCk9rYXksIHNvIHRoZSBjdXJyZW50IHN0YXRlIGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBuYW1lZCBgQkxPQ0tgLiBTaW1wbGUgZW5vdWdoLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJlbGF0aW9uIHRvIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIGBYRlNfRlNgIGlzIGxpa2VseSB0aGUga2V5LiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBzdGF0dXMgb2YgYFhGU19GU2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgaW4gY29tYmluYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdXRpbGlzZSB0aGVtIHRvIGNoZWNrIGZvciBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xuZnMveGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1hGUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRmlsZXN5c3RlbSBUcmktU3RhdGVzKioKClJpZ2h0LCBzbyBgWEZTX0ZTYCBpcyBjb25maXJtZWQgYXMgYSB0cmlzdGF0ZSDigJMgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzIGluIGZhY3QgdHJpc3RhdGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBFUk9GU19GU2AgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFUk9GU19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9LY29uZmlnLTItXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXG5mcy9lcm9mcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxuZnMvZXJvZnMvS2NvbmZpZzo1MDpjb25maWcgRVJPRlNfRlNfREVCVUdcbmZzL2Vyb2ZzL0tjb25maWctNTEtXHRib29sIFwmIzM0O0VST0ZTIGRlYnVnZ2luZyBmZWF0dXJlXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy01OS1cbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXG5mcy9lcm9mcy9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy03MC1cbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxuZnMvZXJvZnMvS2NvbmZpZy03Mi1cdGJvb2wgXCYjMzQ7RVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxuZnMvZXJvZnMvS2NvbmZpZzo4NTpjb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcbmZzL2Vyb2ZzL0tjb25maWctODYtXHRib29sIFwmIzM0O0VST0ZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOTctXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxuZnMvZXJvZnMvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNDQtXG5mcy9lcm9mcy9LY29uZmlnOjE0NTpjb25maWcgRVJPRlNfRlNfWklQX1pTVERcbmZzL2Vyb2ZzL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFUk9GUyBac3RhbmRhcmQgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE1NS1cbmZzL2Vyb2ZzL0tjb25maWc6MTU2OmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE2OS1cbmZzL2Vyb2ZzL0tjb25maWc6MTcwOmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURcbmZzL2Vyb2ZzL0tjb25maWctMTcxLVx0Ym9vbCBcJiMzNDtFUk9GUyBwZXItY3B1IGRlY29tcHJlc3Npb24ga3RocmVhZCB3b3JrZXJzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNzgtXG5mcy9lcm9mcy9LY29uZmlnOjE3OTpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEX0hJUFJJXG5mcy9lcm9mcy9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7RVJPRlMgaGlnaCBwcmlvcml0eSBwZXItQ1BVIGt0aHJlYWQgd29ya2Vyc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTg4LVxuZnMvZXJvZnMvS2NvbmZpZzoxODk6Y29uZmlnIEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVcbmZzL2Vyb2ZzL0tjb25maWctMTkwLVx0Ym9vbCBcJiMzNDtFUk9GUyBwYWdlIGNhY2hlIHNoYXJlIHN1cHBvcnQgKGV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMTYKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBMYXllciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBFUk9GU19GU2AgaXMgaW5kZWVkIGEgdHJpc3RhdGUgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQgd2hlbiBsb29raW5nIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUgaGVyZS4gSSBzZWUgYSBmZXcga2V5IGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkOiBgQkxPQ0tgLCBgQlVGRkVSX0hFQURgLCBgRlNfSU9NQVBgLCBgWEZTX0ZTYCwgYEVST0ZTX0ZTYCwgYW5kIGBFUk9GU19GU19aSVBgLiBUaGVzZSBhcmUgbGlrZWx5IGFsbCByZWxldmFudCB0byB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGEgZmV3IGNyaXRpY2FsIHN5bWJvbHMsIHNwZWNpZmljYWxseSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgLiBUaGUgbWFpbiB0aHJ1c3Qgb2YgdGhpcyBwYXRjaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0JiMzOTtzIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHRocm91Z2ggYSBwZXItQ1BVIHdvcmtxdWV1ZS4gVGhpcyBpcyBhY3RpdmF0ZWQgYnkgdGhlIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZy4gSSBzZWUgdGhhdCBmbGFnIGlzIHNldCBpbiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Agd2hlbiBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgaXMgdHJ1ZS4gVGhhdCBzdWdnZXN0cyB0aGVzZSBjaGFuZ2VzIGFyZSB0aWVkIHRvIG9wZXJhdGlvbnMgbGlrZSBgUldGX0RPTlRDQUNIRWAgd3JpdGVzLgoKVGhpcyBzdHJpa2VzIG1lIGFzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgZm9yIGZ1enppbmcsIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCB0aGVzZSBjb21wb25lbnRzIGFyZS4gVGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgd2lkZS1yZWFjaGluZyBpbXBhY3QsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1enogdGFyZ2V0cy4KCkkgbmVlZCB0byBtYWtlIGEgbm90ZSBoZXJlOyB0aGlzIGlzIHNvbWV0aGluZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtCVUZGRVJfSEVBRCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfWklQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19iaW9fY29tcGxldGVfaW5fdGFzayYjMzQ7LAogICAgJiMzNDtpb21hcF9hZGRfdG9faW9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtCVUZGRVJfSEVBRCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfWklQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19iaW9fY29tcGxldGVfaW5fdGFzayYjMzQ7LAogICAgJiMzNDtpb21hcF9hZGRfdG9faW9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6Mzk6NDQuODA1NzMyNzMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODgyMjk3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJCVUZGRVJfSEVBRFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX1pJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYmlvX2NvbXBsZXRlX2luX3Rhc2tcIixcbiAgICBcImlvbWFwX2FkZF90b19pb2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW5mcmFzdHJ1Y3R1cmUgaW4gdGhlIGJsb2NrIGxheWVyIGZvciBkZWZlcnJpbmcgYmlvIGNvbXBsZXRpb25zIHRvIHRhc2sgY29udGV4dCB2aWEgYSBwZXItQ1BVIHdvcmtxdWV1ZS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIGZsYWcsIHdoaWNoIGlzIHNldCBpbiBmcy9idWZmZXIuYyBhbmQgZnMvaW9tYXAvaW9lbmQuYyB3aGVuIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykgaXMgdHJ1ZSAoZS5nLiwgdmlhIFJXRl9ET05UQ0FDSEUgd3JpdGVzKS4gVGhlIGNvcmUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gX19iaW9fY29tcGxldGVfaW5fdGFzayBhbmQgaW50ZWdyYXRlZCBpbnRvIGJpb19lbmRpby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjayBwYXRocywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6Mzk6NDQuODA1NzQwMDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzExNzQ4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDE2OjM5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcXG5pbmRleCA2YTJmNmZjMzQxM2U4Li5hOTYxMDk1MDMyNWIwIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jpby5jXFxuKysrIGIvYmxvY2svYmlvLmNcXG5AQCAtMTc0MSw2ICsxNzQxLDYxIEBAIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2YmlvX2RpcnR5X3dvcmspO1xcbiB9XFxuIFxcbisvKlxcbisgKiBJbmZyYXN0cnVjdHVyZSBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrLWNvbnRleHQgdmlhIGEgcGVyLUNQVVxcbisgKiB3b3JrcXVldWUuIFRyaWdnZXJlZCBlaXRoZXIgYnkgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIGJpbyBmbGFnIChzdGF0aWNcXG4rICogZGVjaXNpb24gYXQgc3VibWl0IHRpbWUpIG9yIGJ5IGNhbGxpbmcgYmlvX2NvbXBsZXRlX2luX3Rhc2soKSBmcm9tXFxuKyAqIGJpX2VuZF9pbygpIChkeW5hbWljIGRlY2lzaW9uIGF0IGNvbXBsZXRpb24gdGltZSkuXFxuKyAqL1xcbitcXG4rc3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCB7XFxuK1xcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0aW50IGNwdTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCBiaW9fY29tcGxldGVfYmF0Y2gpO1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJpb19jb21wbGV0ZV93cTtcXG4rXFxuK3N0YXRpYyB2b2lkIGJpb19jb21wbGV0ZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4re1xcbitcXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCB3b3JrKTtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xcbitcXHRcXHRzdHJ1Y3QgYmlvICpiaW87XFxuK1xcbitcXHRcXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xcbitcXHRcXHRsaXN0ID0gYmF0Y2gtXFx1MDAzZWxpc3Q7XFxuK1xcdFxcdGJpb19saXN0X2luaXQoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0bG9jYWxfaXJxX2VuYWJsZSgpO1xcbitcXG4rXFx0XFx0aWYgKGJpb19saXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcXHUwMDI2bGlzdCkpKVxcbitcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyhiaW8pO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pXFxuK3tcXG4rXFx0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2g7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGJvb2wgd2FzX2VtcHR5O1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHRiYXRjaCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoKTtcXG4rXFx0d2FzX2VtcHR5ID0gYmlvX2xpc3RfZW1wdHkoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KTtcXG4rXFx0YmlvX2xpc3RfYWRkKFxcdTAwMjZiYXRjaC1cXHUwMDNlbGlzdCwgYmlvKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHdhc19lbXB0eSlcXG4rXFx0XFx0cXVldWVfd29ya19vbihiYXRjaC1cXHUwMDNlY3B1LCBiaW9fY29tcGxldGVfd3EsIFxcdTAwMjZiYXRjaC1cXHUwMDNld29yayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoX19iaW9fY29tcGxldGVfaW5fdGFzayk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3JlbWFpbmluZ19kb25lKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHQvKlxcbkBAIC0xODE1LDcgKzE4NzAsOSBAQCB2b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdH1cXG4gI2VuZGlmXFxuIFxcbi1cXHRpZiAoYmlvLVxcdTAwM2ViaV9lbmRfaW8pXFxuK1xcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSBcXHUwMDI2XFx1MDAyNiBiaW9faW5fYXRvbWljKCkpXFxuK1xcdFxcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcXG4rXFx0ZWxzZSBpZiAoYmlvLVxcdTAwM2ViaV9lbmRfaW8pXFxuIFxcdFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvKGJpbyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pO1xcbkBAIC0yMDAxLDYgKzIwNTgsNTUgQEAgaW50IGJpb3NldF9pbml0KHN0cnVjdCBiaW9fc2V0ICpicyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGJpb3NldF9pbml0KTtcXG4gXFxuK3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9IFxcdTAwMjZwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcXG4rXFxuK1xcdGVuYWJsZV93b3JrKFxcdTAwMjZiYXRjaC1cXHUwMDNld29yayk7XFxuK1xcdGlmICghYmlvX2xpc3RfZW1wdHkoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KSlcXG4rXFx0XFx0cXVldWVfd29ya19vbihjcHUsIGJpb19jb21wbGV0ZV93cSwgXFx1MDAyNmJhdGNoLVxcdTAwM2V3b3JrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERpc2FibGUgdGhpcyBDUFUncyB3b3JrIGl0ZW0gc28gdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyXFxuKyAqIGFmdGVyIHRoZSBDUFUgaXMgb2ZmbGluZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKHVuc2lnbmVkIGludCBjcHUpXFxuK3tcXG4rXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNnBlcl9jcHUoYmlvX2NvbXBsZXRlX2JhdGNoLCBjcHUpLndvcmspO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogRHJhaW4gYSBkZWFkIENQVSdzIGRlZmVycmVkIGJpbyBjb21wbGV0aW9ucy4gVGhlIENQVSBpcyBkZWFkIGFuZCB0aGUgd29ya2VyXFxuKyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLlxcbisgKi9cXG4rc3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9XFxuK1xcdFxcdHBlcl9jcHVfcHRyKFxcdTAwMjZiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbztcXG4rXFxuK1xcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZiYXRjaC1cXHUwMDNlbGlzdCkpKVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyhiaW8pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBiaW9fY29tcGxldGVfYmF0Y2hfaW5pdChpbnQgY3B1KVxcbit7XFxuK1xcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cXG4rXFx0XFx0cGVyX2NwdV9wdHIoXFx1MDAyNmJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcXG4rXFxuK1xcdGJpb19saXN0X2luaXQoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZiYXRjaC1cXHUwMDNld29yaywgYmlvX2NvbXBsZXRlX3dvcmtfZm4pO1xcbitcXHRiYXRjaC1cXHUwMDNlY3B1ID0gY3B1O1xcbitcXG4rXFx0aWYgKCFjcHVfb25saW5lKGNwdSkpXFxuK1xcdFxcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZiYXRjaC1cXHUwMDNld29yayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYmlvKHZvaWQpXFxuIHtcXG4gXFx0aW50IGk7XFxuQEAgLTIwMTUsNiArMjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxcbiBcXHRcXHRcXHRcXHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDLCBOVUxMKTtcXG4gXFx0fVxcbiBcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXFxuK1xcdFxcdGJpb19jb21wbGV0ZV9iYXRjaF9pbml0KGkpO1xcbitcXG4rXFx0YmlvX2NvbXBsZXRlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJiaW9fY29tcGxldGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7XFxuK1xcdGlmICghYmlvX2NvbXBsZXRlX3dxKVxcbitcXHRcXHRwYW5pYyhcXFwiYmlvOiBjYW4ndCBhbGxvY2F0ZSBiaW9fY29tcGxldGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGJpbyB0YXNrLWNvbnRleHQgY29tcGxldGlvbiBkcmFpbmluZyBvbiBob3QtdW5wbHVnZ2VkIENQVXM6XFxuK1xcdCAqXFxuK1xcdCAqICAgMS4gU3RvcCB0aGUgcGVyLUNQVSB3b3JrIGl0ZW0gd2hpbGUgdGhlIENQVSBpcyBzdGlsbCBvbmxpbmUsIHNvXFxuK1xcdCAqICAgICAgdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyIGxhdGVyLlxcbitcXHQgKiAgIDIuIERyYWluIGxlZnRvdmVyIGJpb3MgYWRkZWQgYmV0d2VlbiB3b3JrZXIgZGlzYWJsaW5nIGFuZCBDUFVcXG4rXFx0ICogICAgICBvZmZsaW5pbmcuXFxuK1xcdCAqL1xcbitcXHRjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQX0FQX09OTElORV9EWU4sXFxuK1xcdFxcdFxcdFxcdCAgXFxcImJsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmVcXFwiLFxcbitcXHRcXHRcXHRcXHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lLFxcbitcXHRcXHRcXHRcXHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKTtcXG4rXFx0Y3B1aHBfc2V0dXBfc3RhdGVfbm9jYWxscyhDUFVIUF9CUF9QUkVQQVJFX0RZTixcXG4rXFx0XFx0XFx0XFx0ICBcXFwiYmxvY2svYmlvOmNvbXBsZXRlOmRlYWRcXFwiLFxcbitcXHRcXHRcXHRcXHQgIE5VTEwsIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZGVhZCk7XFxuK1xcbiBcXHRjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9CSU9fREVBRCwgXFxcImJsb2NrL2JpbzpkZWFkXFxcIiwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0YmlvX2NwdV9kZWFkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xcbmluZGV4IDE1NzgzYTYxODBkZWMuLjhiMzljNTNiNjM5MzQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svZm9wcy5jXFxuKysrIGIvYmxvY2svZm9wcy5jXFxuQEAgLTk0MSw3ICs5NDEsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4gXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gXFx0LmZhbGxvY2F0ZVxcdD0gYmxrZGV2X2ZhbGxvY2F0ZSxcXG4gXFx0LnVyaW5nX2NtZFxcdD0gYmxrZGV2X3VyaW5nX2NtZCxcXG4tXFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMsXFxuK1xcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBfX2luaXQgaW50IGJsa2Rldl9pbml0KHZvaWQpXFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcXG5pbmRleCA5YWY1ZjA2MWExZjg1Li42ZjA5OTg0NzI0MGUwIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtMTIwMyw2ICsxMjAzLDkgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFxuIFxcdGJpbyA9IGJpb19hbGxvYyhiaC1cXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcXG4gXFxuK1xcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXFxuK1xcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4rXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcXG4gXFx0XFx0YnVmZmVyX3NldF9jcnlwdG9fY3R4KGJpbywgYmgsIEdGUF9OT0lPKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3pkYXRhLmMgYi9mcy9lcm9mcy96ZGF0YS5jXFxuaW5kZXggNzQ1MjBlOTEwMjU5Ni4uZjc5NmJiM2VmNTNiOSAxMDA2NDRcXG4tLS0gYS9mcy9lcm9mcy96ZGF0YS5jXFxuKysrIGIvZnMvZXJvZnMvemRhdGEuY1xcbkBAIC0xNDI3LDE1ICsxNDI3LDYgQEAgc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzcXVldWVfa3RocmVhZF93b3JrKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuIH1cXG4gI2VuZGlmXFxuIFxcbi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi9cXG4tc3RhdGljIGlubGluZSBib29sIHpfZXJvZnNfaW5fYXRvbWljKHZvaWQpXFxuLXtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRJT04pIFxcdTAwMjZcXHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xcbi19XFxuIFxcbiBzdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZihzdHJ1Y3Qgel9lcm9mc19kZWNvbXByZXNzcXVldWUgKmlvLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW50IGJpb3MpXFxuQEAgLTE0NTIsNyArMTQ0Myw3IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXFxuIFxcbiBcXHRpZiAoYXRvbWljX2FkZF9yZXR1cm4oYmlvcywgXFx1MDAyNmlvLVxcdTAwM2VwZW5kaW5nX2Jpb3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdGlmICh6X2Vyb2ZzX2luX2F0b21pYygpKSB7XFxuK1xcdGlmIChiaW9faW5fYXRvbWljKCkpIHtcXG4gXFx0XFx0LyogU2VlIGBzeW5jX2RlY29tcHJlc3NgIGluIHN5c2ZzLWZzLWVyb2ZzIGZvciBtb3JlIGRldGFpbHMgKi9cXG4gXFx0XFx0aWYgKHNiaS1cXHUwMDNlc3luY19kZWNvbXByZXNzID09IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPKVxcbiBcXHRcXHRcXHRzYmktXFx1MDAzZXN5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19GT1JDRV9PTjtcXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcXG5pbmRleCAzMDQ2OGQ1MWI1YWQ3Li4xYWU4YThmYjg1MDM4IDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2lvZW5kLmNcXG4rKysgYi9mcy9pb21hcC9pb2VuZC5jXFxuQEAgLTIzOCw4ICsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0aWYgKHdwYy1cXHUwMDNlaW9tYXAuZmxhZ3MgXFx1MDAyNiBJT01BUF9GX1NIQVJFRClcXG4gXFx0XFx0aW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfU0hBUkVEO1xcbi1cXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4tXFx0XFx0aW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfRE9OVENBQ0hFO1xcbiBcXHRpZiAocG9zID09IHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IFxcdTAwMjZcXHUwMDI2ICh3cGMtXFx1MDAzZWlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9CT1VOREFSWSkpXFxuIFxcdFxcdGlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX0JPVU5EQVJZO1xcbiBcXG5AQCAtMjU2LDYgKzI1NCw5IEBAIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGlmICghYmlvX2FkZF9mb2xpbyhcXHUwMDI2aW9lbmQtXFx1MDAzZWlvX2JpbywgZm9saW8sIG1hcF9sZW4sIHBvZmYpKVxcbiBcXHRcXHRnb3RvIG5ld19pb2VuZDtcXG4gXFxuK1xcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbitcXHRcXHRiaW9fc2V0X2ZsYWcoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENsYW1wIGlvX29mZnNldCBhbmQgaW9fc2l6ZSB0byB0aGUgaW5jb3JlIEVPRiBzbyB0aGF0IG9uZGlza1xcbiBcXHQgKiBmaWxlIHNpemUgdXBkYXRlcyBpbiB0aGUgaW9lbmQgY29tcGxldGlvbiBhcmUgYnl0ZS1hY2N1cmF0ZS5cXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xcbmluZGV4IDUxMjkzYjZmMzMxZjAuLmNkOGRlOGM4MmQ3OGMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19hb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xcbkBAIC01MjIsMTAgKzUyMiw2IEBAIHhmc19pb2VuZF9uZWVkc193cV9jb21wbGV0aW9uKFxcbiBcXHRpZiAoaW9lbmQtXFx1MDAzZWlvX2ZsYWdzIFxcdTAwMjYgKElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX1NIQVJFRCkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0LyogUGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gY2Fubm90IGJlIGRvbmUgaW4gaXJxIGNvbnRleHQuICovXFxuLVxcdGlmIChpb2VuZC1cXHUwMDNlaW9fZmxhZ3MgXFx1MDAyNiBJT01BUF9JT0VORF9ET05UQ0FDSEUpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxcbmluZGV4IDhmMzNmNzE3YjE0ZjUuLmE4MDkxYTNlOWQ4NzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcXG5AQCAtMzY4LDYgKzM2OCw0NSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiBcXG4gdm9pZCBzdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XFxuIFxcbisvKipcXG4rICogYmlvX2luX2F0b21pYyAtIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdW5zYWZlIGZvciBiaW8gY29tcGxldGlvblxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGluIGF0b21pYyBjb250ZXh0cyAoZS5nLiBoYXJkL3NvZnQgSVJRLCBwcmVlbXB0LWRpc2FibGVkKTtcXG4rICogJWZhbHNlIHdoZW4gYSBiaW8gY2FuIGJlIHNhZmVseSBjb21wbGV0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW5fYXRvbWljKHZvaWQpXFxuK3tcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRJT04pIFxcdTAwMjZcXHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xcbit9XFxuK1xcbit2b2lkIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKTtcXG4rXFxuKy8qKlxcbisgKiBiaW9fY29tcGxldGVfaW5fdGFzayAtIGVuc3VyZSBhIGJpbyBpcyBjb21wbGV0ZWQgaW4gcHJlZW1wdGlibGUgdGFzayBjb250ZXh0XFxuKyAqIEBiaW86IGJpbyB0byBjb21wbGV0ZVxcbisgKlxcbisgKiBJZiBjYWxsZWQgZnJvbSBub24tdGFzayBjb250ZXh0LCBvZmZsb2FkIHRoZSBiaW8gY29tcGxldGlvbiB0byBhIHdvcmtlclxcbisgKiB0aHJlYWQgYW5kIHJldHVybiAldHJ1ZS4gRWxzZSByZXR1cm4gJWZhbHNlIGFuZCBkbyBub3RoaW5nLlxcbisgKlxcbisgKiBVc2VzIEJJT19DT01QTEVURV9JTl9UQVNLIGFzIGEgc2VudGluZWw6IGlmIHNldCwgdGhlIGJpbyB3YXMgYWxyZWFkeVxcbisgKiBkZWZlcnJlZCBhbmQgd2UgYXJlIHJ1bm5pbmcgaW4gdGhlIHdvcmtlciDigJQgcmV0dXJuICVmYWxzZSBzbyB0aGVcXG4rICogY2FsbGJhY2sgcHJvY2VlZHMgaW5zdGVhZCBvZiByZS1kZWZlcnJpbmcuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxcbit7XFxuK1xcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoIWJpb19pbl9hdG9taWMoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuK1xcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIGV4dGVybiB2b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICopO1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuaW5kZXggODgwOGVlNzZlNzNjMC4uZDQ5ZDk3YTA1MGQwZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbkBAIC0zMjIsNiArMzIyLDcgQEAgZW51bSB7XFxuIFxcdEJJT19SRU1BUFBFRCxcXG4gXFx0QklPX1pPTkVfV1JJVEVfUExVR0dJTkcsIC8qIGJpbyBoYW5kbGVkIHRocm91Z2ggem9uZSB3cml0ZSBwbHVnZ2luZyAqL1xcbiBcXHRCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQsIC8qIGJpbyBlbXVsYXRlcyBhIHpvbmUgYXBwZW5kIG9wZXJhdGlvbiAqL1xcbitcXHRCSU9fQ09NUExFVEVfSU5fVEFTSywgLyogY29tcGxldGUgYmlfZW5kX2lvKCkgaW4gdGFzayBjb250ZXh0ICovXFxuIFxcdEJJT19GTEFHX0xBU1RcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbmluZGV4IDU2YjQzZDU5NGU2ZTIuLjY4YWY0OTM1YTEwN2QgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuQEAgLTQwNCwxNiArNDA0LDEzIEBAIHNlY3Rvcl90IGlvbWFwX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJubyxcXG4gI2RlZmluZSBJT01BUF9JT0VORF9CT1VOREFSWVxcdFxcdCgxVSBcXHUwMDNjXFx1MDAzYyAyKVxcbiAvKiBpcyBkaXJlY3QgSS9PICovXFxuICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUXFx0XFx0KDFVIFxcdTAwM2NcXHUwMDNjIDMpXFxuLS8qIGlzIERPTlRDQUNIRSBJL08gKi9cXG4tI2RlZmluZSBJT01BUF9JT0VORF9ET05UQ0FDSEVcXHRcXHQoMVUgXFx1MDAzY1xcdTAwM2MgNClcXG4gXFxuIC8qXFxuICAqIEZsYWdzIHRoYXQgaWYgc2V0IG9uIGVpdGhlciBpb2VuZCBwcmV2ZW50IHRoZSBtZXJnZSBvZiB0d28gaW9lbmRzLlxcbiAgKiAoSU9NQVBfSU9FTkRfQk9VTkRBUlkgYWxzbyBwcmV2ZW50cyBtZXJnZXMsIGJ1dCBvbmx5IG9uZS13YXkpXFxuICAqL1xcbiAjZGVmaW5lIElPTUFQX0lPRU5EX05PTUVSR0VfRkxBR1MgXFxcXFxcbi1cXHQoSU9NQVBfSU9FTkRfU0hBUkVEIHwgSU9NQVBfSU9FTkRfVU5XUklUVEVOIHwgSU9NQVBfSU9FTkRfRElSRUNUIHwgXFxcXFxcbi1cXHQgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKVxcbitcXHQoSU9NQVBfSU9FTkRfU0hBUkVEIHwgSU9NQVBfSU9FTkRfVU5XUklUVEVOIHwgSU9NQVBfSU9FTkRfRElSRUNUKVxcbiBcXG4gLypcXG4gICogU3RydWN0dXJlIGZvciB3cml0ZWJhY2sgSS9PIGNvbXBsZXRpb25zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjozOTo0NS4yMzc1NDQxOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA0NTA0NzgxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJVRkZFUl9IRUFEXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfWklQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19iaW9fY29tcGxldGVfaW5fdGFza1wiLFxuICAgIFwiaW9tYXBfYWRkX3RvX2lvZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTY6Mzk6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCA2YTJmNmZjMzQxM2U4Li5hOTYxMDk1MDMyNWIwIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtMTc0MSw2ICsxNzQxLDYxIEBAIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbylcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2YmlvX2RpcnR5X3dvcmspO1xuIH1cbiBcbisvKlxuKyAqIEluZnJhc3RydWN0dXJlIGZvciBkZWZlcnJpbmcgYmlvIGNvbXBsZXRpb25zIHRvIHRhc2stY29udGV4dCB2aWEgYSBwZXItQ1BVXG4rICogd29ya3F1ZXVlLiBUcmlnZ2VyZWQgZWl0aGVyIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBiaW8gZmxhZyAoc3RhdGljXG4rICogZGVjaXNpb24gYXQgc3VibWl0IHRpbWUpIG9yIGJ5IGNhbGxpbmcgYmlvX2NvbXBsZXRlX2luX3Rhc2soKSBmcm9tXG4rICogYmlfZW5kX2lvKCkgKGR5bmFtaWMgZGVjaXNpb24gYXQgY29tcGxldGlvbiB0aW1lKS5cbisgKi9cbitcbitzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoIHtcbitcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRpbnQgY3B1O1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2gsIGJpb19jb21wbGV0ZV9iYXRjaCk7XG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpiaW9fY29tcGxldGVfd3E7XG4rXG4rc3RhdGljIHZvaWQgYmlvX2NvbXBsZXRlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuK3tcbitcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cbitcdFx0Y29udGFpbmVyX29mKHcsIHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2gsIHdvcmspO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0c3RydWN0IGJpb19saXN0IGxpc3Q7XG4rXHRcdHN0cnVjdCBiaW8gKmJpbztcbitcbitcdFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbitcdFx0bGlzdCA9IGJhdGNoLVx1MDAzZWxpc3Q7XG4rXHRcdGJpb19saXN0X2luaXQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCk7XG4rXHRcdGxvY2FsX2lycV9lbmFibGUoKTtcbitcbitcdFx0aWYgKGJpb19saXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZsaXN0KSkpXG4rXHRcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyhiaW8pO1xuK1x0fVxuK31cbitcbit2b2lkIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgd2FzX2VtcHR5O1xuK1xuK1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0YmF0Y2ggPSB0aGlzX2NwdV9wdHIoXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoKTtcbitcdHdhc19lbXB0eSA9IGJpb19saXN0X2VtcHR5KFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QpO1xuK1x0YmlvX2xpc3RfYWRkKFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QsIGJpbyk7XG4rXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRpZiAod2FzX2VtcHR5KVxuK1x0XHRxdWV1ZV93b3JrX29uKGJhdGNoLVx1MDAzZWNwdSwgYmlvX2NvbXBsZXRlX3dxLCBcdTAwMjZiYXRjaC1cdTAwM2V3b3JrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoX19iaW9fY29tcGxldGVfaW5fdGFzayk7XG4rXG4gc3RhdGljIGlubGluZSBib29sIGJpb19yZW1haW5pbmdfZG9uZShzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0LypcbkBAIC0xODE1LDcgKzE4NzAsOSBAQCB2b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHR9XG4gI2VuZGlmXG4gXG4tXHRpZiAoYmlvLVx1MDAzZWJpX2VuZF9pbylcbitcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSBcdTAwMjZcdTAwMjYgYmlvX2luX2F0b21pYygpKVxuK1x0XHRfX2Jpb19jb21wbGV0ZV9pbl90YXNrKGJpbyk7XG4rXHRlbHNlIGlmIChiaW8tXHUwMDNlYmlfZW5kX2lvKVxuIFx0XHRiaW8tXHUwMDNlYmlfZW5kX2lvKGJpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woYmlvX2VuZGlvKTtcbkBAIC0yMDAxLDYgKzIwNTgsNTUgQEAgaW50IGJpb3NldF9pbml0KHN0cnVjdCBiaW9fc2V0ICpicyxcbiB9XG4gRVhQT1JUX1NZTUJPTChiaW9zZXRfaW5pdCk7XG4gXG4rc3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID0gXHUwMDI2cGVyX2NwdShiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7XG4rXG4rXHRlbmFibGVfd29yayhcdTAwMjZiYXRjaC1cdTAwM2V3b3JrKTtcbitcdGlmICghYmlvX2xpc3RfZW1wdHkoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCkpXG4rXHRcdHF1ZXVlX3dvcmtfb24oY3B1LCBiaW9fY29tcGxldGVfd3EsIFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogRGlzYWJsZSB0aGlzIENQVSdzIHdvcmsgaXRlbSBzbyB0aGF0IGl0IGNhbm5vdCBydW4gb24gYW4gdW5ib3VuZCB3b3JrZXJcbisgKiBhZnRlciB0aGUgQ1BVIGlzIG9mZmxpbmVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kb3duX3ByZXAodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KS53b3JrKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERyYWluIGEgZGVhZCBDUFUncyBkZWZlcnJlZCBiaW8gY29tcGxldGlvbnMuIFRoZSBDUFUgaXMgZGVhZCBhbmQgdGhlIHdvcmtlclxuKyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpXG4re1xuK1x0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2ggPVxuK1x0XHRwZXJfY3B1X3B0cihcdTAwMjZiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7XG4rXHRzdHJ1Y3QgYmlvICpiaW87XG4rXG4rXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZiYXRjaC1cdTAwM2VsaXN0KSkpXG4rXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8oYmlvKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXQgYmlvX2NvbXBsZXRlX2JhdGNoX2luaXQoaW50IGNwdSlcbit7XG4rXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9XG4rXHRcdHBlcl9jcHVfcHRyKFx1MDAyNmJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcbitcbitcdGJpb19saXN0X2luaXQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCk7XG4rXHRJTklUX1dPUksoXHUwMDI2YmF0Y2gtXHUwMDNld29yaywgYmlvX2NvbXBsZXRlX3dvcmtfZm4pO1xuK1x0YmF0Y2gtXHUwMDNlY3B1ID0gY3B1O1xuK1xuK1x0aWYgKCFjcHVfb25saW5lKGNwdSkpXG4rXHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuK31cbitcbiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxuIHtcbiBcdGludCBpO1xuQEAgLTIwMTUsNiArMjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxuIFx0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQywgTlVMTCk7XG4gXHR9XG4gXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSlcbitcdFx0YmlvX2NvbXBsZXRlX2JhdGNoX2luaXQoaSk7XG4rXG4rXHRiaW9fY29tcGxldGVfd3EgPSBhbGxvY193b3JrcXVldWUoXCJiaW9fY29tcGxldGVcIixcbitcdFx0XHRcdFx0ICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDApO1xuK1x0aWYgKCFiaW9fY29tcGxldGVfd3EpXG4rXHRcdHBhbmljKFwiYmlvOiBjYW4ndCBhbGxvY2F0ZSBiaW9fY29tcGxldGUgd29ya3F1ZXVlXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIGJpbyB0YXNrLWNvbnRleHQgY29tcGxldGlvbiBkcmFpbmluZyBvbiBob3QtdW5wbHVnZ2VkIENQVXM6XG4rXHQgKlxuK1x0ICogICAxLiBTdG9wIHRoZSBwZXItQ1BVIHdvcmsgaXRlbSB3aGlsZSB0aGUgQ1BVIGlzIHN0aWxsIG9ubGluZSwgc29cbitcdCAqICAgICAgdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyIGxhdGVyLlxuK1x0ICogICAyLiBEcmFpbiBsZWZ0b3ZlciBiaW9zIGFkZGVkIGJldHdlZW4gd29ya2VyIGRpc2FibGluZyBhbmQgQ1BVXG4rXHQgKiAgICAgIG9mZmxpbmluZy5cbitcdCAqL1xuK1x0Y3B1aHBfc2V0dXBfc3RhdGVfbm9jYWxscyhDUFVIUF9BUF9PTkxJTkVfRFlOLFxuK1x0XHRcdFx0ICBcImJsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmVcIixcbitcdFx0XHRcdCAgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9vbmxpbmUsXG4rXHRcdFx0XHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKTtcbitcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQlBfUFJFUEFSRV9EWU4sXG4rXHRcdFx0XHQgIFwiYmxvY2svYmlvOmNvbXBsZXRlOmRlYWRcIixcbitcdFx0XHRcdCAgTlVMTCwgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkKTtcbitcbiBcdGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0JJT19ERUFELCBcImJsb2NrL2JpbzpkZWFkXCIsIE5VTEwsXG4gXHRcdFx0XHRcdGJpb19jcHVfZGVhZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXG5pbmRleCAxNTc4M2E2MTgwZGVjLi44YjM5YzUzYjYzOTM0IDEwMDY0NFxuLS0tIGEvYmxvY2svZm9wcy5jXG4rKysgYi9ibG9jay9mb3BzLmNcbkBAIC05NDEsNyArOTQxLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7XG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQuZmFsbG9jYXRlXHQ9IGJsa2Rldl9mYWxsb2NhdGUsXG4gXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG4tXHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DLFxuK1x0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsXG4gfTtcbiBcbiBzdGF0aWMgX19pbml0IGludCBibGtkZXZfaW5pdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDlhZjVmMDYxYTFmODUuLjZmMDk5ODQ3MjQwZTAgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuKysrIGIvZnMvYnVmZmVyLmNcbkBAIC0xMjAzLDYgKzEyMDMsOSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4rXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4rXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXG4gXHRcdGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvemRhdGEuYyBiL2ZzL2Vyb2ZzL3pkYXRhLmNcbmluZGV4IDc0NTIwZTkxMDI1OTYuLmY3OTZiYjNlZjUzYjkgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy96ZGF0YS5jXG4rKysgYi9mcy9lcm9mcy96ZGF0YS5jXG5AQCAtMTQyNywxNSArMTQyNyw2IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlX2t0aHJlYWRfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuIH1cbiAjZW5kaWZcbiBcbi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgel9lcm9mc19pbl9hdG9taWModm9pZClcbi17XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gIXByZWVtcHRpYmxlKCk7XG4tfVxuIFxuIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXG4gXHRcdFx0XHQgICAgICAgaW50IGJpb3MpXG5AQCAtMTQ1Miw3ICsxNDQzLDcgQEAgc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbyxcbiBcbiBcdGlmIChhdG9taWNfYWRkX3JldHVybihiaW9zLCBcdTAwMjZpby1cdTAwM2VwZW5kaW5nX2Jpb3MpKVxuIFx0XHRyZXR1cm47XG4tXHRpZiAoel9lcm9mc19pbl9hdG9taWMoKSkge1xuK1x0aWYgKGJpb19pbl9hdG9taWMoKSkge1xuIFx0XHQvKiBTZWUgYHN5bmNfZGVjb21wcmVzc2AgaW4gc3lzZnMtZnMtZXJvZnMgZm9yIG1vcmUgZGV0YWlscyAqL1xuIFx0XHRpZiAoc2JpLVx1MDAzZXN5bmNfZGVjb21wcmVzcyA9PSBFUk9GU19TWU5DX0RFQ09NUFJFU1NfQVVUTylcbiBcdFx0XHRzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXG5pbmRleCAzMDQ2OGQ1MWI1YWQ3Li4xYWU4YThmYjg1MDM4IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvaW9lbmQuY1xuKysrIGIvZnMvaW9tYXAvaW9lbmQuY1xuQEAgLTIzOCw4ICsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0aWYgKHdwYy1cdTAwM2Vpb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9TSEFSRUQpXG4gXHRcdGlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX1NIQVJFRDtcbi1cdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuLVx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9ET05UQ0FDSEU7XG4gXHRpZiAocG9zID09IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgXHUwMDI2XHUwMDI2ICh3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgXHUwMDI2IElPTUFQX0ZfQk9VTkRBUlkpKVxuIFx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9CT1VOREFSWTtcbiBcbkBAIC0yNTYsNiArMjU0LDkgQEAgc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGlmICghYmlvX2FkZF9mb2xpbyhcdTAwMjZpb2VuZC1cdTAwM2Vpb19iaW8sIGZvbGlvLCBtYXBfbGVuLCBwb2ZmKSlcbiBcdFx0Z290byBuZXdfaW9lbmQ7XG4gXG4rXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbitcdFx0YmlvX3NldF9mbGFnKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuK1xuIFx0LypcbiBcdCAqIENsYW1wIGlvX29mZnNldCBhbmQgaW9fc2l6ZSB0byB0aGUgaW5jb3JlIEVPRiBzbyB0aGF0IG9uZGlza1xuIFx0ICogZmlsZSBzaXplIHVwZGF0ZXMgaW4gdGhlIGlvZW5kIGNvbXBsZXRpb24gYXJlIGJ5dGUtYWNjdXJhdGUuXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xuaW5kZXggNTEyOTNiNmYzMzFmMC4uY2Q4ZGU4YzgyZDc4YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTUyMiwxMCArNTIyLDYgQEAgeGZzX2lvZW5kX25lZWRzX3dxX2NvbXBsZXRpb24oXG4gXHRpZiAoaW9lbmQtXHUwMDNlaW9fZmxhZ3MgXHUwMDI2IChJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9TSEFSRUQpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdC8qIFBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGNhbm5vdCBiZSBkb25lIGluIGlycSBjb250ZXh0LiAqL1xuLVx0aWYgKGlvZW5kLVx1MDAzZWlvX2ZsYWdzIFx1MDAyNiBJT01BUF9JT0VORF9ET05UQ0FDSEUpXG4tXHRcdHJldHVybiB0cnVlO1xuLVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNS4uYTgwOTFhM2U5ZDg3MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC0zNjgsNiArMzY4LDQ1IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqYmlvX2FsbG9jKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXG4gdm9pZCBzdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4rLyoqXG4rICogYmlvX2luX2F0b21pYyAtIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdW5zYWZlIGZvciBiaW8gY29tcGxldGlvblxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpbiBhdG9taWMgY29udGV4dHMgKGUuZy4gaGFyZC9zb2Z0IElSUSwgcHJlZW1wdC1kaXNhYmxlZCk7XG4rICogJWZhbHNlIHdoZW4gYSBiaW8gY2FuIGJlIHNhZmVseSBjb21wbGV0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2luX2F0b21pYyh2b2lkKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcbit9XG4rXG4rdm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbyk7XG4rXG4rLyoqXG4rICogYmlvX2NvbXBsZXRlX2luX3Rhc2sgLSBlbnN1cmUgYSBiaW8gaXMgY29tcGxldGVkIGluIHByZWVtcHRpYmxlIHRhc2sgY29udGV4dFxuKyAqIEBiaW86IGJpbyB0byBjb21wbGV0ZVxuKyAqXG4rICogSWYgY2FsbGVkIGZyb20gbm9uLXRhc2sgY29udGV4dCwgb2ZmbG9hZCB0aGUgYmlvIGNvbXBsZXRpb24gdG8gYSB3b3JrZXJcbisgKiB0aHJlYWQgYW5kIHJldHVybiAldHJ1ZS4gRWxzZSByZXR1cm4gJWZhbHNlIGFuZCBkbyBub3RoaW5nLlxuKyAqXG4rICogVXNlcyBCSU9fQ09NUExFVEVfSU5fVEFTSyBhcyBhIHNlbnRpbmVsOiBpZiBzZXQsIHRoZSBiaW8gd2FzIGFscmVhZHlcbisgKiBkZWZlcnJlZCBhbmQgd2UgYXJlIHJ1bm5pbmcgaW4gdGhlIHdvcmtlciDigJQgcmV0dXJuICVmYWxzZSBzbyB0aGVcbisgKiBjYWxsYmFjayBwcm9jZWVkcyBpbnN0ZWFkIG9mIHJlLWRlZmVycmluZy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFiaW9faW5fYXRvbWljKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbitcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBleHRlcm4gdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggODgwOGVlNzZlNzNjMC4uZDQ5ZDk3YTA1MGQwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC0zMjIsNiArMzIyLDcgQEAgZW51bSB7XG4gXHRCSU9fUkVNQVBQRUQsXG4gXHRCSU9fWk9ORV9XUklURV9QTFVHR0lORywgLyogYmlvIGhhbmRsZWQgdGhyb3VnaCB6b25lIHdyaXRlIHBsdWdnaW5nICovXG4gXHRCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQsIC8qIGJpbyBlbXVsYXRlcyBhIHpvbmUgYXBwZW5kIG9wZXJhdGlvbiAqL1xuK1x0QklPX0NPTVBMRVRFX0lOX1RBU0ssIC8qIGNvbXBsZXRlIGJpX2VuZF9pbygpIGluIHRhc2sgY29udGV4dCAqL1xuIFx0QklPX0ZMQUdfTEFTVFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCA1NmI0M2Q1OTRlNmUyLi42OGFmNDkzNWExMDdkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC00MDQsMTYgKzQwNCwxMyBAQCBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gI2RlZmluZSBJT01BUF9JT0VORF9CT1VOREFSWVx0XHQoMVUgXHUwMDNjXHUwMDNjIDIpXG4gLyogaXMgZGlyZWN0IEkvTyAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUXHRcdCgxVSBcdTAwM2NcdTAwM2MgMylcbi0vKiBpcyBET05UQ0FDSEUgSS9PICovXG4tI2RlZmluZSBJT01BUF9JT0VORF9ET05UQ0FDSEVcdFx0KDFVIFx1MDAzY1x1MDAzYyA0KVxuIFxuIC8qXG4gICogRmxhZ3MgdGhhdCBpZiBzZXQgb24gZWl0aGVyIGlvZW5kIHByZXZlbnQgdGhlIG1lcmdlIG9mIHR3byBpb2VuZHMuXG4gICogKElPTUFQX0lPRU5EX0JPVU5EQVJZIGFsc28gcHJldmVudHMgbWVyZ2VzLCBidXQgb25seSBvbmUtd2F5KVxuICAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfTk9NRVJHRV9GTEFHUyBcXFxuLVx0KElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVCB8IFxcXG4tXHQgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKVxuK1x0KElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVClcbiBcbiAvKlxuICAqIFN0cnVjdHVyZSBmb3Igd3JpdGViYWNrIEkvTyBjb21wbGV0aW9ucy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjM5OjQ1LjIzNzU0NTQ2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjI1OTA2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2ggZm9yIERlZmVycmVkIEJpbyBDb21wbGV0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBibG9jayBsYXllciB0aGF0IGRlZmVycyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHVzaW5nIGEgcGVyLUNQVSB3b3JrcXVldWUuIExvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBhIGxvdCBvZiBjb3JlIGZpbGVzOiBgYmxvY2svYmlvLmNgLCBgYmxvY2svZm9wcy5jYCwgYGZzL2J1ZmZlci5jYCwgc29tZSBvZiB0aGUgZmlsZSBzeXN0ZW1zLCBhbmQgYSBmZXcgaW5jbHVkZSBmaWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cbkJhc2VkIG9uIHRoZSBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXBsZW1lbnRhdGlvbi4gSXQgYWRkcyB0aGUgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGFuZCBgYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGZ1bmN0aW9ucywgYW5kIHNldHMgdGhlIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyBpbiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyByZWxhdGVkIHRvIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLiBJdCdzIGFsc28gbW9kaWZ5aW5nIGBiaW9fZW5kaW9gIHRvIGNoZWNrIGZvciB0aGlzIG5ldyBmbGFnIGFuZCBhdG9taWMgY29udGV4dCwgY2FsbGluZyBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaWYgbmVlZGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBmb3IgbW9yZSBpbi1kZXB0aCBhbmFseXNpcy4gVGhlIGNvcmUgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AsIGBiaW9fY29tcGxldGVfd29ya19mbmAsIGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZWAsIGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2Rvd25fcHJlcGAsIGFuZCBgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkYC4gQWgsIHdhaXQuLi4gYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIGV4cG9ydGVkISBUaGlzIG1ha2VzIGl0IGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVncmF0aW9uIG9yIGludGVyYWN0aW9uLlxuXG5Mb29raW5nIGZ1cnRoZXIsIGBiaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBiaW9faW5fYXRvbWljYCBhcmUgaW5saW5lZC4gR29pbmcgYmFjayB0byBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGBfX2JoX3N1Ym1pdGAgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIExldCdzIHNlZS4uLiBgX19iaF9zdWJtaXRgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBleHBvc3VyZS4gSG93ZXZlciwgYGlvbWFwX2FkZF90b19pb2VuZGAgaXNuJ3Qgc3RhdGljLCBhbmQgSSB0aGluayBpdCdzIGV4cG9ydGVkLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBiZSBhIGtleSBpbnRlZ3JhdGlvbiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjM5OjUzLjQ2MDEzOTkxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2MzUwMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2FkZF90b19pb2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9NTIyPXN0YXRpYyBzc2l6ZV90IGJsa2Rldl93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmJsb2NrL2ZvcHMuYy01MzktXFxuYmxvY2svZm9wcy5jOjU0MDpcXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcXG5ibG9jay9mb3BzLmMtNTQxLX1cXG4tLVxcbmZzL2V4ZmF0L2lvbWFwLmM9MjAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvZXhmYXQvaW9tYXAuYy0yMTItXFxuZnMvZXhmYXQvaW9tYXAuYzoyMTM6XFx0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XFxuZnMvZXhmYXQvaW9tYXAuYy0yMTQtfVxcbi0tXFxuZnMvZ2ZzMi9ibWFwLmM9MjUwNj1zdGF0aWMgc3NpemVfdCBnZnMyX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvZ2ZzMi9ibWFwLmMtMjUyMS1cXG5mcy9nZnMyL2JtYXAuYzoyNTIyOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL2dmczIvYm1hcC5jLTI1MjMtfVxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYz0xNzM9c3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy0yMTEtICovXFxuZnMvaW9tYXAvaW9lbmQuYzoyMTI6c3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9pb21hcC9pb2VuZC5jLTIxMy1cXHRcXHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbilcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmMtMjIxLVxcbmZzL2lvbWFwL2lvZW5kLmM6MjIyOlxcdHRyYWNlX2lvbWFwX2FkZF90b19pb2VuZCh3cGMtXFx1MDAzZWlub2RlLCBwb3MsIGRpcnR5X2xlbiwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXApO1xcbmZzL2lvbWFwL2lvZW5kLmMtMjIzLVxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy0zMTEtfVxcbmZzL2lvbWFwL2lvZW5kLmM6MzEyOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2FkZF90b19pb2VuZCk7XFxuZnMvaW9tYXAvaW9lbmQuYy0zMTMtXFxuLS1cXG5mcy9pb21hcC90cmFjZS5oPTE3ND1ERUZJTkVfSU9NQVBfRVZFTlQoaW9tYXBfaXRlcl9zcmNtYXApO1xcbmZzL2lvbWFwL3RyYWNlLmgtMTc1LVxcbmZzL2lvbWFwL3RyYWNlLmg6MTc2OlRSQUNFX0VWRU5UKGlvbWFwX2FkZF90b19pb2VuZCxcXG5mcy9pb21hcC90cmFjZS5oLTE3Ny1cXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jPTc5OD1zdGF0aWMgc3NpemVfdCBudGZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTgxMi1cXG5mcy9udGZzL2lvbWFwLmM6ODEzOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL250ZnMvaW9tYXAuYy04MTQtfVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz05NTQ9c3RhdGljIHNzaXplX3QgbnRmc193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtOTgxLVxcbmZzL250ZnMzL2lub2RlLmM6OTgyOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL250ZnMzL2lub2RlLmMtOTgzLX1cXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTQ5Nj14ZnNfd3JpdGViYWNrX3JhbmdlKFxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmMtNTA2LVxcdGlmICghcmV0KVxcbmZzL3hmcy94ZnNfYW9wcy5jOjUwNzpcXHRcXHRyZXQgPSBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL3hmcy94ZnNfYW9wcy5jLTUwOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTY0Mj14ZnNfem9uZWRfd3JpdGViYWNrX3JhbmdlKFxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmMtNjUyLVxcdGlmICghcmV0KVxcbmZzL3hmcy94ZnNfYW9wcy5jOjY1MzpcXHRcXHRyZXQgPSBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL3hmcy94ZnNfYW9wcy5jLTY1NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmM9MTI4PXN0YXRpYyBzc2l6ZV90IHpvbmVmc193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtMTQ5LVxcbmZzL3pvbmVmcy9maWxlLmM6MTUwOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL3pvbmVmcy9maWxlLmMtMTUxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW9tYXAuaD00ODg9dm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6NDg5OnNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTQ5MC1cXHRcXHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjM5OjU1Ljc2NjQ5NTIyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDIwMTkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IElPIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3IgZ29vZCBlbnRyeSBwb2ludHMgdG8gYW5hbHl6ZSB0aGUgSU8gcGF0aC4gYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXN5c3RlbXMgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cy4gSXQncyBhIGtleSBmdW5jdGlvbiBJIGNhbiBzaW5rIG15IHRlZXRoIGludG8uXG5cblRoZW4gdGhlcmUncyBgX19iaW9fY29tcGxldGVfaW5fdGFza2AuIEFub3RoZXIgZ29vZCBvbmUsIGV4cG9ydGVkLCBvZmZlcmluZyBzaW1pbGFyIHBvdGVudGlhbC4gSeKAmWxsIG1ha2UgYSBub3RlIG9mIHRoaXMgdG8gZ2V0IGEgYmlnZ2VyLXBpY3R1cmUgc2Vuc2Ugb2YgdGhlIGZ1bGwgZWNvc3lzdGVtLlxuXG5Ob3csIHdoYXQgYWJvdXQgYGJpb19lbmRpb2A/IFRlbXB0aW5nLCBiZWNhdXNlIGl0J3MgbW9kaWZpZWQsIGJ1dCBnaXZlbiBob3cgcGVyZm9ybWFuY2UtY3JpdGljYWwgdGhpcyBpcywgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGdldHRpbmcgaW4gdGhlIHdheSBvbiB0aGF0IFwiaG90IHBhdGguXCIgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgdGhhdCBvbmUsIGFzIGl0IHdvdWxkIGJlIHRvbyBtdWNoIGRpc3J1cHRpb24gYW5kIG1ha2UgbWVhc3VyZW1lbnRzIGxlc3MgcmVsaWFibGUuXG5cbkhtbSwgd2hhdCBhYm91dCBgX19iaF9zdWJtaXRgPyBJdOKAmXMgc3RhdGljLCBzbyB0aGF0J3MgYSBub24tc3RhcnRlci4gQnV0IHRoYXQgbWFrZXMgbWUgd29uZGVyLi4uIFdoYXQgYWN0dWFsbHkgKmNhbGxzKiB0aGF0IGZ1bmN0aW9uPyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjaGFpbiB1cCBmcm9tIHRoZXJlIGlmIEkgY2FuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODA2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjAwLjE2ODUxNzAxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA0MDc2NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmhfc3VibWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2J1ZmZlci5jLTExODAtXFxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxcbmZzL2J1ZmZlci5jLTExODItXFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmM9MTI0MD12b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLCBiaW9fZW5kX2lvX3QgZW5kX2lvKVxcbmZzL2J1ZmZlci5jLTEyNDEte1xcbmZzL2J1ZmZlci5jOjEyNDI6XFx0X19iaF9zdWJtaXQoYmgsIG9wZiwgV1JJVEVfTElGRV9OT1RfU0VULCBOVUxMLCBlbmRfaW8pO1xcbmZzL2J1ZmZlci5jLTEyNDMtfVxcbi0tXFxuZnMvYnVmZmVyLmM9MTgxNz1pbnQgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9idWZmZXIuYy0xOTEyLVxcdFxcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XFxuZnMvYnVmZmVyLmM6MTkxMzpcXHRcXHRcXHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvYnVmZmVyLmMtMTkxNC1cXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXFxuLS1cXG5mcy9idWZmZXIuYy0xOTY3LVxcdFxcdFxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XFxuZnMvYnVmZmVyLmM6MTk2ODpcXHRcXHRcXHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvYnVmZmVyLmMtMTk2OS1cXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjAyLjQ3MjYwMDE5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDMzMTI0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgQmxvY2sgRGV2aWNlIFN1Ym1pc3Npb24gQ2FuZGlkYXRlcyoqXG5cbkhtbSwgc28gYGJoX3N1Ym1pdGAgaXMgdGhlIG9uZSB0aGF0J3MgZXhwb3J0ZWQsIHRoYXQncyB3aGF0IEkndmUgc2VlbiBpbiB0aGUgaGVhZGVyIGZpbGVzLiBCdXQsIG5vdyB0aGF0IEknbSB0aGlua2luZyBhYm91dCBpdCwgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2AgYWxzbyBsb29rcyBsaWtlIGEgc29saWQgY29udGVuZGVyIGZvciB0aGlzLiBJdCdzIGFuIGludGVybmFsIGZ1bmN0aW9uLCB5ZXMsIGJ1dCBpdCBoYW5kbGVzIHRoZSBhY3R1YWwgd3JpdGUgb3BlcmF0aW9uIGF0IHRoZSBmb2xpbyBsZXZlbCwgd2hpY2ggaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBmb3IgdGhlIGN1cnJlbnQgdGFzay4gSSBzaG91bGQgcHJvYmFibHkganVzdCBzdGljayB3aXRoIGBiaF9zdWJtaXRgIGFzIGl0IGlzIGV4cG9ydGVkLCBhbmQgd2VsbCBkb2N1bWVudGVkLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgbWFrZSBzdXJlIGl0J3MgdGhlIHJpZ2h0IGNob2ljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5NSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjA1LjkxNTkxNDcwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU1NTU5Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJoX3N1Ym1pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q9MTU3OD1mdW5jdGlvbi10cmFjZSwgd2UgZ2V0IGEgbXVjaCBsYXJnZXIgb3V0cHV0OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xNjMwLSAgID1cXHUwMDNlIHN1Ym1pdF9iaW9cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTYzMTogICA9XFx1MDAzZSBiaF9zdWJtaXRcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTYzMi0gICA9XFx1MDAzZSBfX2V4dDNfZ2V0X2lub2RlX2xvY1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTE4NzE9dHJhY2Vycy5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xOTE1LSAgID1cXHUwMDNlIHN1Ym1pdF9iaW9cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTkxNjogICA9XFx1MDAzZSBiaF9zdWJtaXRcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTkxNy0gICA9XFx1MDAzZSBleHQzX2JyZWFkXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTUxNz1zdGF0aWMgdm9pZCB3cml0ZV9maWxlX3BhZ2Uoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHdhaXQpXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUyNC1cXHRcXHRzZXRfYnVmZmVyX21hcHBlZChiaCk7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo1MjU6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQywgZW5kX2JpdG1hcF93cml0ZSk7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MjYtXFx0XFx0YmggPSBiaC1cXHUwMDNlYl90aGlzX3BhZ2U7XFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTU1OD1zdGF0aWMgaW50IHJlYWRfZmlsZV9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MDAtXFx0XFx0XFx0c2V0X2J1ZmZlcl9tYXBwZWQoYmgpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjAxOlxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGVuZF9iaXRtYXBfd3JpdGUpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAyLVxcdFxcdH1cXG4tLVxcbmZzL2J1ZmZlci5jPTEyMj1zdGF0aWMgdm9pZCBidWZmZXJfaW9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqbXNnKVxcbi0tXFxuZnMvYnVmZmVyLmMtMTM1LSAqIENhbGwgdGhpcyBpbiB5b3VyIGJpb19lbmRfaW8gaGFuZGxlciB0byByZXRyaWV2ZSB0aGUgYnVmZmVyX2hlYWRcXG5mcy9idWZmZXIuYzoxMzY6ICogc3VibWl0dGVkIGluIGJoX3N1Ym1pdCgpLiAgSWYgeW91IGRpZCBub3QgY2FsbCBiaF9zdWJtaXQoKSwgZG8gbm90XFxuZnMvYnVmZmVyLmMtMTM3LSAqIGNhbGwgdGhpcyBmdW5jdGlvbjsgaXQgd2lsbCByZXR1cm4gZ2FyYmFnZS5cXG4tLVxcbmZzL2J1ZmZlci5jPTE1Nj1FWFBPUlRfU1lNQk9MKGJpb19lbmRpb19iaCk7XFxuLS1cXG5mcy9idWZmZXIuYy0xNjItICpcXG5mcy9idWZmZXIuYzoxNjM6ICogSWYgYSBidWZmZXIgaXMgcmVhZCB0aHJvdWdoIGEgbWVjaGFuaXNtIHRoYXQgaXNuJ3QgYmhfc3VibWl0KCksIHlvdVxcbmZzL2J1ZmZlci5jLTE2NC0gKiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGZpbmlzaCB0aGUgcmVhZC5cXG4tLVxcbmZzL2J1ZmZlci5jPTE3Nj1FWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfcmVhZF9zeW5jKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MS0gKlxcbmZzL2J1ZmZlci5jOjE4MjogKiBQYXNzIHRoaXMgZnVuY3Rpb24gdG8gYmhfc3VibWl0KCkgaWYgeW91J3JlIHJlYWRpbmcgaW50byB0aGUgYnVmZmVyLFxcbmZzL2J1ZmZlci5jLTE4My0gKiB1bmxlc3MgeW91IG5lZWQgeW91ciBvd24gc3BlY2lhbCBJL08gZW5kIGhhbmRsZXIuXFxuLS1cXG5mcy9idWZmZXIuYz0xOTE9RVhQT1JUX1NZTUJPTChiaF9lbmRfcmVhZCk7XFxuLS1cXG5mcy9idWZmZXIuYy0xOTYtICpcXG5mcy9idWZmZXIuYzoxOTc6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSdyZSB3cml0aW5nIGZyb20gdGhlIGJ1ZmZlcixcXG5mcy9idWZmZXIuYy0xOTgtICogdW5sZXNzIHlvdSBuZWVkIHlvdXIgb3duIHNwZWNpYWwgSS9PIGVuZCBoYW5kbGVyLlxcbi0tXFxuZnMvYnVmZmVyLmM9Mzg1PXN0YXRpYyB2b2lkIGJoX2VuZF9hc3luY19yZWFkKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2J1ZmZlci5jLTQyMS0gKlxcbmZzL2J1ZmZlci5jOjQyMjogKiBQYXNzIHRoaXMgZnVuY3Rpb24gdG8gYmhfc3VibWl0KCkgaWYgeW91J3JlIGRvaW5nIHRoZSBlcXVpdmFsZW50IG9mXFxuZnMvYnVmZmVyLmMtNDIzLSAqIGJsb2NrX3dyaXRlX2Z1bGxfZm9saW8oKS4gIFRoYXQgaXMsIHRoZSBmb2xpbyBpcyB1bmxvY2tlZCwgYW5kIHdpbGxcXG4tLVxcbmZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2J1ZmZlci5jLTExODAtXFxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxcbmZzL2J1ZmZlci5jLTExODItXFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTIzMS0vKipcXG5mcy9idWZmZXIuYzoxMjMyOiAqIGJoX3N1Ym1pdCAtIFN0YXJ0IEkvTyBhZ2FpbnN0IGEgYnVmZmVyIGhlYWRcXG5mcy9idWZmZXIuYy0xMjMzLSAqIEBiaDogVGhlIGJ1ZmZlciBoZWFkIHRvIHBlcmZvcm0gSS9PIG9uLlxcbi0tXFxuZnMvYnVmZmVyLmMtMTIzOS0gKi9cXG5mcy9idWZmZXIuYzoxMjQwOnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsIGJpb19lbmRfaW9fdCBlbmRfaW8pXFxuZnMvYnVmZmVyLmMtMTI0MS17XFxuZnMvYnVmZmVyLmM6MTI0MjpcXHRfX2JoX3N1Ym1pdChiaCwgb3BmLCBXUklURV9MSUZFX05PVF9TRVQsIE5VTEwsIGVuZF9pbyk7XFxuZnMvYnVmZmVyLmMtMTI0My19XFxuZnMvYnVmZmVyLmM6MTI0NDpFWFBPUlRfU1lNQk9MKGJoX3N1Ym1pdCk7XFxuZnMvYnVmZmVyLmMtMTI0NS1cXG5mcy9idWZmZXIuYz0xMjQ2PXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fYnJlYWRfc2xvdyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvYnVmZmVyLmMtMTI1Mi1cXHR9IGVsc2Uge1xcbmZzL2J1ZmZlci5jOjEyNTM6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xcbmZzL2J1ZmZlci5jLTEyNTQtXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbi0tXFxuZnMvYnVmZmVyLmM9MTc3Mz1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpmb2xpb19jcmVhdGVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTgwOS0gKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgb25seSBjYW4gaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cXG5mcy9idWZmZXIuYzoxODEwOiAqIHRoZSBidWZmZXIgZGlyZWN0bHksIHdpdGggYmhfc3VibWl0KCkuICBBdCB0aGUgYWRkcmVzc19zcGFjZSBsZXZlbFxcbmZzL2J1ZmZlci5jLTE4MTEtICogdGhlIGZvbGlvIHdyaXRlYmFjayBmbGFnIHByZXZlbnRzIHRoaXMgY29udGVudGlvbiBmcm9tIG9jY3VycmluZy5cXG4tLVxcbmZzL2J1ZmZlci5jPTE4MTc9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTkxMi1cXHRcXHRpZiAoYnVmZmVyX2FzeW5jX3dyaXRlKGJoKSkge1xcbmZzL2J1ZmZlci5jOjE5MTM6XFx0XFx0XFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxcbmZzL2J1ZmZlci5jLTE5MTQtXFx0XFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTkyNy1cXHRcXHQgKiBjbGVhbi4gIFNvbWVvbmUgd3JvdGUgdGhlbSBiYWNrIGJ5IGhhbmQgd2l0aFxcbmZzL2J1ZmZlci5jOjE5Mjg6XFx0XFx0ICogd3JpdGVfZGlydHlfYnVmZmVyL2JoX3N1Ym1pdC4gIEEgcmFyZSBjYXNlLlxcbmZzL2J1ZmZlci5jLTE5MjktXFx0XFx0ICovXFxuLS1cXG5mcy9idWZmZXIuYy0xOTY3LVxcdFxcdFxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XFxuZnMvYnVmZmVyLmM6MTk2ODpcXHRcXHRcXHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvYnVmZmVyLmMtMTk2OS1cXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXFxuLS1cXG5mcy9idWZmZXIuYz0yMzcwPWludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaylcXG4tLVxcbmZzL2J1ZmZlci5jLTI0NTEtXFx0XFx0aWYgKHByZXYpXFxuZnMvYnVmZmVyLmM6MjQ1MjpcXHRcXHRcXHRiaF9zdWJtaXQocHJldiwgUkVRX09QX1JFQUQsIGJoX2VuZF9hc3luY19yZWFkKTtcXG5mcy9idWZmZXIuYy0yNDUzLVxcdFxcdHByZXYgPSBiaDtcXG4tLVxcbmZzL2J1ZmZlci5jLTI0NjUtXFx0aWYgKHByZXYpXFxuZnMvYnVmZmVyLmM6MjQ2NjpcXHRcXHRiaF9zdWJtaXQocHJldiwgUkVRX09QX1JFQUQsIGJoX2VuZF9hc3luY19yZWFkKTtcXG5mcy9idWZmZXIuYy0yNDY3LVxcdGVsc2VcXG4tLVxcbmZzL2J1ZmZlci5jPTI3NzQ9dm9pZCB3cml0ZV9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxcbi0tXFxuZnMvYnVmZmVyLmMtMjc4MC1cXHR9XFxuZnMvYnVmZmVyLmM6Mjc4MTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbmZzL2J1ZmZlci5jLTI3ODItfVxcbi0tXFxuZnMvYnVmZmVyLmM9Mjc5MD1pbnQgX19zeW5jX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MpXFxuLS1cXG5mcy9idWZmZXIuYy0yODAzLVxcbmZzL2J1ZmZlci5jOjI4MDQ6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcXG5mcy9idWZmZXIuYy0yODA1LVxcdFxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTMwMzA9aW50IF9fYmhfcmVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsIGJvb2wgd2FpdClcXG4tLVxcbmZzL2J1ZmZlci5jLTMwMzUtXFxuZnMvYnVmZmVyLmM6MzAzNjpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcXG5mcy9idWZmZXIuYy0zMDM3LVxcdGlmICh3YWl0KSB7XFxuLS1cXG5mcy9idWZmZXIuYz0zMDU2PXZvaWQgX19iaF9yZWFkX2JhdGNoKGludCBuciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbXSxcXG4tLVxcbmZzL2J1ZmZlci5jLTMwNzctXFxuZnMvYnVmZmVyLmM6MzA3ODpcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcXG5mcy9idWZmZXIuYy0zMDc5LVxcdH1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz02ODM9c3RhdGljIHZvaWQgZXh0NF9mY19zdWJtaXRfYmgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBpc190YWlsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTY5My1cXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6Njk0OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjk1LVxcdEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZjX2JoID0gTlVMTDtcXG4tLVxcbmZzL2V4dDQvbW1wLmM9NDI9c3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21tcC5jLTQ4LVxcdGxvY2tfYnVmZmVyKGJoKTtcXG5mcy9leHQ0L21tcC5jOjQ5OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLFxcbmZzL2V4dDQvbW1wLmMtNTAtXFx0XFx0XFx0YmhfZW5kX3dyaXRlKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjM9c3RhdGljIGlubGluZSB2b2lkIF9fZXh0NF9yZWFkX2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xODAtXFx0XFx0ZW5kX2lvID0gYmhfZW5kX3JlYWQ7XFxuZnMvZXh0NC9zdXBlci5jOjE4MTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGVuZF9pbyk7XFxuZnMvZXh0NC9zdXBlci5jLTE4Mi19XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjI5OD1zdGF0aWMgaW50IGV4dDRfY29tbWl0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjMyOS1cXHRjbGVhcl9idWZmZXJfZGlydHkoc2JoKTtcXG5mcy9leHQ0L3N1cGVyLmM6NjMzMDpcXHRiaF9zdWJtaXQoc2JoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8XFxuZnMvZXh0NC9zdXBlci5jLTYzMzEtXFx0XFx0ICAodGVzdF9vcHQoc2IsIEJBUlJJRVIpID8gUkVRX0ZVQSA6IDApLCBiaF9lbmRfd3JpdGUpO1xcbi0tXFxuZnMvZ2ZzMi9ibWFwLmM9Mjk0PXN0YXRpYyB2b2lkIGdmczJfbWV0YXBhdGhfcmEoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBfX2JlNjQgKnN0YXJ0LCBfX2JlNjQgKmVuZClcXG4tLVxcbmZzL2dmczIvYm1hcC5jLTMwNi1cXHRcXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShyYWJoKSkge1xcbmZzL2dmczIvYm1hcC5jOjMwNzpcXHRcXHRcXHRcXHRiaF9zdWJtaXQocmFiaCxcXG5mcy9nZnMyL2JtYXAuYy0zMDgtXFx0XFx0XFx0XFx0XFx0UkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHwgUkVRX01FVEEgfFxcbi0tXFxuZnMvZ2ZzMi9kaXIuYz0xNDgwPXN0YXRpYyB2b2lkIGdmczJfZGlyX3JlYWRhaGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBoc2l6ZSwgdTMyIGluZGV4LFxcbi0tXFxuZnMvZ2ZzMi9kaXIuYy0xNTA4LVxcdFxcdFxcdH0gZWxzZSB7XFxuZnMvZ2ZzMi9kaXIuYzoxNTA5OlxcdFxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHxcXG5mcy9nZnMyL2Rpci5jLTE1MTAtXFx0XFx0XFx0XFx0XFx0XFx0UkVRX01FVEEgfCBSRVFfUFJJTyxcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9nZnMyL21ldGFfaW8uYy03Ny1cXHRcXHRpZiAoYnVmZmVyX2FzeW5jX3dyaXRlKGJoKSkge1xcbmZzL2dmczIvbWV0YV9pby5jOjc4OlxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzktXFx0XFx0XFx0XFx0XFx0YmhfZW5kX2FzeW5jX3dyaXRlKTtcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jPTIwMj1zdGF0aWMgdm9pZCBnZnMyX21ldGFfcmVhZF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9nZnMyL21ldGFfaW8uYy0yMjQtICogU3VibWl0IHNldmVyYWwgY29uc2VjdXRpdmUgYnVmZmVyIGhlYWQgSS9PIHJlcXVlc3RzIGFzIGEgc2luZ2xlIGJpbyBJL09cXG5mcy9nZnMyL21ldGFfaW8uYzoyMjU6ICogcmVxdWVzdC4gIChTZWUgYmhfc3VibWl0LilcXG5mcy9nZnMyL21ldGFfaW8uYy0yMjYtICovXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jPTExND1zdGF0aWMgaW50IGpvdXJuYWxfc3VibWl0X2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLFxcbi0tXFxuZnMvamJkMi9jb21taXQuYy0xNTQtXFxuZnMvamJkMi9jb21taXQuYzoxNTU6XFx0Ymhfc3VibWl0KGJoLCB3cml0ZV9mbGFncywgam91cm5hbF9lbmRfYnVmZmVyX2lvX3N5bmMpO1xcbmZzL2piZDIvY29tbWl0LmMtMTU2LVxcdCpjYmggPSBiaDtcXG4tLVxcbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTc1MC1cXHRcXHRcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG5mcy9qYmQyL2NvbW1pdC5jOjc1MTpcXHRcXHRcXHRcXHRiaF9zdWJtaXQoYmgsXFxuZnMvamJkMi9jb21taXQuYy03NTItXFx0XFx0XFx0XFx0XFx0UkVRX09QX1dSSVRFIHwgSkJEMl9KT1VSTkFMX1JFUV9GTEFHUyxcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jPTE3ODI9c3RhdGljIGludCBqYmQyX3dyaXRlX3N1cGVyYmxvY2soam91cm5hbF90ICpqb3VybmFsLCBibGtfb3BmX3Qgd3JpdGVfZmxhZ3MpXFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy0xODIwLVxcdFxcdHNiLVxcdTAwM2VzX2NoZWNrc3VtID0gamJkMl9zdXBlcmJsb2NrX2NzdW0oc2IpO1xcbmZzL2piZDIvam91cm5hbC5jOjE4MjE6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncywgYmhfZW5kX3dyaXRlKTtcXG5mcy9qYmQyL2pvdXJuYWwuYy0xODIyLVxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4tLVxcbmZzL25pbGZzMi9idG5vZGUuYz04Nz1pbnQgbmlsZnNfYnRub2RlX3N1Ym1pdF9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywgX191NjQgYmxvY2tucixcXG4tLVxcbmZzL25pbGZzMi9idG5vZGUuYy0xMzYtXFx0YmgtXFx1MDAzZWJfYmxvY2tuciA9IHBibG9ja25yOyAvKiBzZXQgYmxvY2sgYWRkcmVzcyBmb3IgcmVhZCAqL1xcbmZzL25pbGZzMi9idG5vZGUuYzoxMzc6XFx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcXG5mcy9uaWxmczIvYnRub2RlLmMtMTM4LVxcdGJoLVxcdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yOyAvKiBzZXQgYmFjayB0byB0aGUgZ2l2ZW4gYmxvY2sgYWRkcmVzcyAqL1xcbi0tXFxuZnMvbmlsZnMyL2djaW5vZGUuYz01NT1pbnQgbmlsZnNfZ2NjYWNoZV9zdWJtaXRfcmVhZF9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsa29mZixcXG4tLVxcbmZzL25pbGZzMi9nY2lub2RlLmMtODUtXFx0YmgtXFx1MDAzZWJfYmxvY2tuciA9IHBibjtcXG5mcy9uaWxmczIvZ2Npbm9kZS5jOjg2OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcXG5mcy9uaWxmczIvZ2Npbm9kZS5jLTg3LVxcdGlmICh2Ym4pXFxuLS1cXG5mcy9uaWxmczIvbWR0LmM9MTE2PW5pbGZzX21kdF9zdWJtaXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibGtvZmYsIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5mcy9uaWxmczIvbWR0LmMtMTUwLVxcbmZzL25pbGZzMi9tZHQuYzoxNTE6XFx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcXG5mcy9uaWxmczIvbWR0LmMtMTUyLVxcdHJldCA9IDA7XFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jPTM4PWludCBvY2ZzMl93cml0ZV9ibG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjQtXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzo2NTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSwgYmhfZW5kX3dyaXRlKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTY2LVxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz04Nz1pbnQgb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0xNDUtXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzoxNDY6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ3LVxcdH1cXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9MTg5PWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTMyMy1cXHRcXHRcXHRcXHRzZXRfYnVmZmVyX25lZWRzX3ZhbGlkYXRlKGJoKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjMyNDpcXHRcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0zMjUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jPTQyMz1pbnQgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDQtXFx0b2NmczJfY29tcHV0ZV9tZXRhX2VjYyhvc2ItXFx1MDAzZXNiLCBiaC1cXHUwMDNlYl9kYXRhLCBcXHUwMDI2ZGktXFx1MDAzZWlfY2hlY2spO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NDQ1OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFLCBiaF9lbmRfd3JpdGUpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNDQ2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTQ4PXN0cnVjdCBhZGRyZXNzX3NwYWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU2LSAqIGEgZm9saW8gKHZpYSBhIGZvbGlvX21hcHBpbmcpIGFuZCBmb3Igd3JhcHBpbmcgYmlvIHN1Ym1pc3Npb25cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6NTc6ICogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyAoZS5nLiBiaF9zdWJtaXQpLlxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC01OC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yMDQ9Ym9vbCBiaW9fZW5kaW9fYmgoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApO1xcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yMDUtXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjIwNjovKiBDb21wbGV0aW9uIHJvdXRpbmVzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGJoX3N1Ym1pdCgpICovXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTIwNy12b2lkIGJoX2VuZF9yZWFkKHN0cnVjdCBiaW8gKmJpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9MjQzPXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjI0NDp2b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgYmxrX29wZl90LCBiaW9fZW5kX2lvX3QpO1xcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yNDUtdm9pZCB3cml0ZV9ib3VuZGFyeV9ibG9jayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xNDQ4LVxcdFxcdCAqIFRoaXMgaGFwcGVucyBpZiB0aGUgYnVmZmVycyB3ZXJlIHdyaXR0ZW4gb3V0IGRpcmVjdGx5LFxcbm1tL3Ztc2Nhbi5jOjE0NDk6XFx0XFx0ICogd2l0aCBiaF9zdWJtaXQoKS4gZXh0MyB3aWxsIGRvIHRoaXMsIGFzIHdlbGwgYXNcXG5tbS92bXNjYW4uYy0xNDUwLVxcdFxcdCAqIHRoZSBibG9ja2RldiBtYXBwaW5nLiAgZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKCkgd2lsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDowOC4wNzE0OTEyMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg5Mjc3MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgTG9naWMqKlxuXG5Pa2F5LCBzbyBgYmhfc3VibWl0YCBnZXRzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb25kaXRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZW4gYSBCSU8gaXMgbWFya2VkIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIHRhc2suIEFoYSEgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIGNhbGxlZCAqaWYqIGBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKWAgcmV0dXJucyB0cnVlLiBUaGF0J3MgdGhlIGtleS5cblxuVGhpcyBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcgaXMgc2V0IGluIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHNwb3RzOiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AuIExldCdzIGxvb2sgYXQgdGhvc2UuIEluIGBmcy9idWZmZXIuY2AsIHRoZSBjb25kaXRpb24gaXM6XG5cbmBgYGNcbmlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbykgXHUwMDI2XHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXG4gICAgYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuYGBgXG5cbkFuZCBzaW1pbGFybHkgaW4gYGZzL2lvbWFwL2lvZW5kLmNgOlxuXG5gYGBjXG5pZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbiAgICBiaW9fc2V0X2ZsYWcoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG5gYGBcblxuU28gaXQgbG9va3MgbGlrZSB0aGUgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGZ1bmN0aW9uIGlzIHRoZSBjcnVjaWFsIHBhcnQgdGhhdCBzZXRzIHRoZSBmbGFnLiBUaGUgbmV4dCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHRyaWdnZXIgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgPyBMZXQncyB0cmFjZSB0aGF0LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgaXMgY29udHJvbGxlZCBieSBgRk9QX0RPTlRDQUNIRWAgaW4gYGZvcF9mbGFnc2AuIE9rYXksIGhvdyBpcyB0aGF0IHNldD8gQ2hlY2tpbmcgYGJsb2NrL2ZvcHMuY2A6XG5cbmBgYGNcbmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuLi4uXG4gICAgLmZvcF9mbGFncyAgICAgID0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxufTtcbmBgYFxuXG5TbywgdGhlIGRlZmF1bHQgYmxvY2sgZGV2aWNlIGZpbGUgb3BlcmF0aW9ucyBkZWZpbmUgYEZPUF9ET05UQ0FDSEVgLiBCdXQsIGRvZXMgdGhhdCBtZWFuIGFsbCBibG9jayBkZXZpY2Ugd3JpdGVzIGdldCBgRk9QX0RPTlRDQUNIRWA/IE5vLCB3YWl0LCBgRk9QX0RPTlRDQUNIRWAgaXMgYSAqZmlsZSBvcGVyYXRpb24gZmxhZyouIEl0J3Mgbm90IGEgZ2xvYmFsIHNldHRpbmcuIEl0IHN1cHBvcnRzIGBSV0ZfRE9OVENBQ0hFYCBvciBpdCBzZXRzIGRyb3BiZWhpbmQuIE9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgRk9QX0RPTlRDQUNIRWAgKm1lYW5zKiBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTE1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjE1LjA2MDc3MDY2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzExOTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGT1BfRE9OVENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTYwPUZvciBtb3JlIGNvbnRleHQgb24gRE9OVENBQ0hFLCBwbGVhc2Ugc2VlIHRoZXNlIExpbnV4IGNvbW1pdCBoZWFkZXJzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjUtICBSV0ZfRE9OVENBQ0hFXFxcIilcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo2NjotIGZvciBXUklURTogOTc0YzVlNjEzOWRiMyAoXFxcInhmczogZmxhZyBhcyBzdXBwb3J0aW5nIEZPUF9ET05UQ0FDSEVcXFwiKVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTY3LVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTY4PU5GU0RfSU9fRE9OVENBQ0hFIHdpbGwgZmFsbCBiYWNrIHRvIE5GU0RfSU9fQlVGRkVSRUQgaWYgdGhlIHVuZGVybHlpbmdcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo2OTpmaWxlc3lzdGVtIGRvZXNuJ3QgaW5kaWNhdGUgc3VwcG9ydCBieSBzZXR0aW5nIEZPUF9ET05UQ0FDSEUuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNzAtXFxuLS1cXG5ibG9jay9mb3BzLmM9OTI3PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xcbi0tXFxuYmxvY2svZm9wcy5jLTk0My1cXHQudXJpbmdfY21kXFx0PSBibGtkZXZfdXJpbmdfY21kLFxcbmJsb2NrL2ZvcHMuYzo5NDQ6XFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxcbmJsb2NrL2ZvcHMuYy05NDUtfTtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTk3ND1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtOTkyLVxcdFxcdFxcdCAgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XFxuZnMvZXh0NC9maWxlLmM6OTkzOlxcdFxcdFxcdCAgRk9QX0RPTlRDQUNIRSxcXG5mcy9leHQ0L2ZpbGUuYy05OTQtXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbi0tXFxuZnMvbmZzL2ZpbGUuYz05NjY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvbmZzL2ZpbGUuYy05NzktXFx0LmNoZWNrX2ZsYWdzXFx0PSBuZnNfY2hlY2tfZmxhZ3MsXFxuZnMvbmZzL2ZpbGUuYzo5ODA6XFx0LmZvcF9mbGFnc1xcdD0gRk9QX0RPTlRDQUNIRSxcXG5mcy9uZnMvZmlsZS5jLTk4MS19O1xcbi0tXFxuZnMvbmZzL25mczRmaWxlLmM9NDM2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzNF9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9uZnMvbmZzNGZpbGUuYy00NTctI2VuZGlmXFxuZnMvbmZzL25mczRmaWxlLmM6NDU4OlxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9ET05UQ0FDSEUsXFxuZnMvbmZzL25mczRmaWxlLmMtNDU5LX07XFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTExOTI9X19iZTMyIG5mc2RfaXRlcl9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTIxNC1cXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxcbmZzL25mc2QvdmZzLmM6MTIxNTpcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSlcXG5mcy9uZnNkL3Zmcy5jLTEyMTYtXFx0XFx0XFx0a2lvY2Iua2lfZmxhZ3MgPSBJT0NCX0RPTlRDQUNIRTtcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTM2OT1uZnNkX2RpcmVjdF93cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTEzOTMtXFx0XFx0XFx0ICovXFxuZnMvbmZzZC92ZnMuYzoxMzk0OlxcdFxcdFxcdGlmIChuZi1cXHUwMDNlbmZfZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSlcXG5mcy9uZnNkL3Zmcy5jLTEzOTUtXFx0XFx0XFx0XFx0a2lvY2ItXFx1MDAzZWtpX2ZsYWdzIHw9IElPQ0JfRE9OVENBQ0hFO1xcbi0tXFxuZnMvbmZzZC92ZnMuYz0xNDI2PW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTQ5Ny1cXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxcbmZzL25mc2QvdmZzLmM6MTQ5ODpcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSlcXG5mcy9uZnNkL3Zmcy5jLTE0OTktXFx0XFx0XFx0a2lvY2Iua2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz0yMDg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTIxMDQtXFx0XFx0XFx0ICBGT1BfQlVGRkVSX1dBU1lOQyB8IEZPUF9ESU9fUEFSQUxMRUxfV1JJVEUgfFxcbmZzL3hmcy94ZnNfZmlsZS5jOjIxMDU6XFx0XFx0XFx0ICBGT1BfRE9OVENBQ0hFLFxcbmZzL3hmcy94ZnNfZmlsZS5jLTIxMDYtXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTE5MjE9c3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTk4MS0vKiBGaWxlIHN5c3RlbSBzdXBwb3J0cyB1bmNhY2hlZCByZWFkL3dyaXRlIGJ1ZmZlcmVkIElPICovXFxuaW5jbHVkZS9saW51eC9mcy5oOjE5ODI6I2RlZmluZSBGT1BfRE9OVENBQ0hFXFx0XFx0KChfX2ZvcmNlIGZvcF9mbGFnc190KSgxIFxcdTAwM2NcXHUwMDNjIDcpKVxcbmluY2x1ZGUvbGludXgvZnMuaC0xOTgzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTM0Mjc9c3RhdGljIGlubGluZSBpbnQga2lvY2Jfc2V0X3J3X2ZsYWdzKHN0cnVjdCBraW9jYiAqa2ksIHJ3Zl90IGZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NTMtXFx0XFx0LyogZmlsZSBzeXN0ZW0gbXVzdCBzdXBwb3J0IGl0ICovXFxuaW5jbHVkZS9saW51eC9mcy5oOjM0NTQ6XFx0XFx0aWYgKCEoa2ktXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfb3AtXFx1MDAzZWZvcF9mbGFncyBcXHUwMDI2IEZPUF9ET05UQ0FDSEUpKVxcbmluY2x1ZGUvbGludXgvZnMuaC0zNDU1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MTYuNTc3OTAzMjI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODM5ODEyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgRk9QX0RPTlRDQUNIRWAgRmxhZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIGlmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgYEZPUF9ET05UQ0FDSEVgIGFjdHMgYXMgYW4gaW5kaWNhdG9yIHRoYXQgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0gc3VwcG9ydHMgYFJXRl9ET05UQ0FDSEVgIG9yIGl0cyBlcXVpdmFsZW50LCBgSU9DQl9ET05UQ0FDSEVgLiBUaGF0J3MgdGhlIGNydWNpYWwgbGluay4gVGhlIHByZXNlbmNlIG9mIGBJT0NCX0RPTlRDQUNIRWAgdGhlbiB0cmlnZ2VycyBwb3RlbnRpYWwgdXNlIG9mIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pYC4gVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSB0aHJvdWdoIGBwd3JpdGV2MmAgaWYgdGhlIGBSV0ZfRE9OVENBQ0hFYCBmbGFnIGlzIHNldCwgZXNwZWNpYWxseSBvbiBibG9jayBkZXZpY2VzIG9yIGZpbGVzeXN0ZW1zIGxpa2UgZXh0NCBvciB4ZnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGV4YW1pbmluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgYGlvbWFwX2FkZF90b19pb2VuZGAgYXJlIHRoZSBtYWpvciBwbGF5ZXJzLiBXYWl0IGEgbWludXRl4oCmIGBpb21hcF9hZGRfdG9faW9lbmRgIGhhc24ndCBiZWVuIHJlcGxhY2VkIHdpdGggYSBuZXcgZnVuY3Rpb247IGl0IGp1c3QgaGFzIGEgbmV3IGNvbmRpdGlvbmFsIGNoZWNrIGFkZGVkPyBJbnRlcmVzdGluZy5cblxuSXMgdGhhdCAqaXQqIHRob3VnaD8gQXJlIHRoZXJlIGFueSAqb3RoZXIqIG5ldyBmdW5jdGlvbnM/IE9rYXksIGBiaW9fY29tcGxldGVfaW5fdGFza2AgaXMgaW5saW5lZCwgc28gdGhhdCdzIG5vdCB0aGUgY3JpdGljYWwgcGllY2UuIFRoYXQgbGVhdmVzIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhcyB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0IG1lIGNoZWNrIGZvciBvdGhlciBuZXcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MjIuMTYxODg3NjE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNTA4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmlvX2NvbXBsZXRlX2luX3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTc2MD1zdGF0aWMgdm9pZCBiaW9fY29tcGxldGVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5ibG9jay9iaW8uYy0xNzgxLVxcbmJsb2NrL2Jpby5jOjE3ODI6dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9iaW8uYy0xNzgzLXtcXG4tLVxcbmJsb2NrL2Jpby5jLTE3OTYtfVxcbmJsb2NrL2Jpby5jOjE3OTc6RVhQT1JUX1NZTUJPTF9HUEwoX19iaW9fY29tcGxldGVfaW5fdGFzayk7XFxuYmxvY2svYmlvLmMtMTc5OC1cXG4tLVxcbmJsb2NrL2Jpby5jPTE4MzE9dm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmlvLmMtMTg3My1cXHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykgXFx1MDAyNlxcdTAwMjYgYmlvX2luX2F0b21pYygpKVxcbmJsb2NrL2Jpby5jOjE4NzQ6XFx0XFx0X19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pO1xcbmJsb2NrL2Jpby5jLTE4NzUtXFx0ZWxzZSBpZiAoYmlvLVxcdTAwM2ViaV9lbmRfaW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTM3Nz1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2luX2F0b21pYyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaC0zODUtXFxuaW5jbHVkZS9saW51eC9iaW8uaDozODY6dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbyk7XFxuaW5jbHVkZS9saW51eC9iaW8uaC0zODctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTM5OT1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaC00MDUtXFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xcbmluY2x1ZGUvbGludXgvYmlvLmg6NDA2OlxcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQwNy1cXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MjMuNzczNDAxNDAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDAzOTYyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtb2RpZmljYXRpb25zLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldhaXQsIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBpcyB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9uIGFkZGVkIGhlcmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlwiIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCB3aGF0IGFib3V0IGBiaW9fY29tcGxldGVfd29ya19mbmA/IEl0ICppcyogc3RhdGljLCBidXQgdGhhdCdzIHRoZSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIGl0J3MgcHJvYmFibHkgaW1wb3J0YW50IHRvby4gQW5kIHdoYXQgYWJvdXQgYGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lYCwgYWxzbyBzdGF0aWM/IEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGBmcy9idWZmZXIuY2AuIEhtbSwgYF9fYmhfc3VibWl0YCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdGhlcmUuIEFoLCByaWdodCwgYGJoX3N1Ym1pdGAgKmNhbGxzKiBgX19iaF9zdWJtaXRgLCBhbmQsIGltcG9ydGFudGx5LCBgYmhfc3VibWl0YCBpcyBleHBvcnRlZC4gT2theSwgKmlzKiBgYmhfc3VibWl0YCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBPbiB0aGUgb25lIGhhbmQsIGl0J3MgYSBnZW5lcmljIGZ1bmN0aW9uIHNvIGl0ICpjb3VsZCogYmUgY2FsbGVkIHRvbyBmcmVxdWVudGx5LiBIb3dldmVyLCBpdCdzIG5vdCBhIGhvdCBwYXRoIGZ1bmN0aW9uIGxpa2UsIHNheSwgYGJpb19lbmRpb2AuIEFjdHVhbGx5LCBgYmhfc3VibWl0YCBpcyBjYWxsZWQgZm9yIGJ1ZmZlciBoZWFkIElPLCB3aGljaCBpcyBxdWl0ZSBjb21tb24sIHNvIHRoYXQgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLlxuXG5Nb3Zpbmcgb24sIEkgbmVlZCB0byBjaGVjayBgZnMvaW9tYXAvaW9lbmQuY2AuIEFoYSwgYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgbW9kaWZpZWQgdGhlcmUuIElzICp0aGF0KiBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBXZWxsLCBpdCdzIGNhbGxlZCBmb3IgaW9tYXAgd3JpdGViYWNrLCBhbmQgdGhhdCdzIGFsc28gcXVpdGUgY29tbW9uLCBzbyB0aGF0IG9uZSBpcyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBhdCBgZnMvZXJvZnMvemRhdGEuY2AuIE9rYXksIGB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBtb2RpZmllZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MzAuMDEzNzk5NjE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2NDI3NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL3pkYXRhLmM9MTQyND1zdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZV9rdGhyZWFkX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmMtMTQzMC1cXG5mcy9lcm9mcy96ZGF0YS5jOjE0MzE6c3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbyxcXG5mcy9lcm9mcy96ZGF0YS5jLTE0MzItXFx0XFx0XFx0XFx0ICAgICAgIGludCBiaW9zKVxcbi0tXFxuZnMvZXJvZnMvemRhdGEuYz0xNjIzPXN0YXRpYyB2b2lkIHpfZXJvZnNfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuZnMvZXJvZnMvemRhdGEuYy0xNjQyLVxcdFxcdHEtXFx1MDAzZWVpbyA9IHRydWU7XFxuZnMvZXJvZnMvemRhdGEuYzoxNjQzOlxcdHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHEsIC0xKTtcXG5mcy9lcm9mcy96ZGF0YS5jLTE2NDQtXFx0aWYgKGJpby1cXHUwMDNlYmlfYmRldilcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmM9MTY0OD1zdGF0aWMgdm9pZCB6X2Vyb2ZzX3N1Ym1pdF9xdWV1ZShzdHJ1Y3Qgel9lcm9mc19mcm9udGVuZCAqZixcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmMtMTc3My1cXHR9XFxuZnMvZXJvZnMvemRhdGEuYzoxNzc0OlxcdHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHFbSlFfU1VCTUlUXSwgbnJfYmlvcyk7XFxuZnMvZXJvZnMvemRhdGEuYy0xNzc1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MzEuNDIwMjMzNjM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzEzMjUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb25zdHJ1Y3RpbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludCBmb3Igc3l6a2FsbGVyLiBUaGUgYHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmYCBmdW5jdGlvbiBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgc3ltYm9sIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYC4gSXMgdGhlcmUgYW55IG90aGVyIHVzZWZ1bCBmdW5jdGlvbiBoZXJlPyBgYmlvX2NvbXBsZXRlX3dvcmtfZm5gIGlzIGFsc28gc3RhdGljLCBtYWtpbmcgaXQgdHJpY2t5IGFzIGEgZGlyZWN0IHRhcmdldCwgZXZlbiB0aG91Z2ggc3l6a2FsbGVyIGNhbiBzb21ldGltZXMgc3VycHJpc2UgdXMgd2l0aCBpdHMgYWJpbGl0eSB0byBmaW5kIHRoZXNlLiBUaGUgZ3VpZGVsaW5lcyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHNvIHRoYXQncyB3aGF0IEknbSBhaW1pbmcgZm9yLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGJsb2NrL2Jpby5jYCwgYGJsb2NrL2ZvcHMuY2AsIGBmcy9idWZmZXIuY2AsIGBmcy9lcm9mcy96ZGF0YS5jYCwgYGZzL2lvbWFwL2lvZW5kLmNgLCBhbmQgYGZzL3hmcy94ZnNfYW9wcy5jYC4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cywgc28gd2UncmUgbG9va2luZyBhdCBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBkZXBlbmRlbmNpZXMuXG5cbk9idmlvdXNseSwgYENPTkZJR19CTE9DS2AgaXMgYSBnaXZlbjsgaXQncyBwcmFjdGljYWxseSBlc3NlbnRpYWwsIGJ1dCB0aGFua2Z1bGx5IGl0J3Mgb24gYnkgZGVmYXVsdC4gSSdsbCBuZWVkIGBDT05GSUdfRlNfSU9NQVBgIGZvciB0aGUgYGZzL2lvbWFwL2lvZW5kLmNgIGNoYW5nZXMsIGBDT05GSUdfWEZTX0ZTYCBmb3IgdGhlIGBmcy94ZnMveGZzX2FvcHMuY2AgbW9kaWZpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCBgQ09ORklHX0VST0ZTX0ZTYCBmb3IgdGhlIGBmcy9lcm9mcy96ZGF0YS5jYCBiaXRzLiBHaXZlbiB0aGF0IGl0IG1lbnRpb25zIGNvbXByZXNzZWQgZXJvZnMgKGB6ZGF0YWApLCBJJ2xsIGFsc28gbmVlZCBgQ09ORklHX0VST0ZTX0ZTX1pJUGAuIFRpbWUgdG8gY2hlY2sgYGZzL2Vyb2ZzL3pkYXRhLmNgIGRpcmVjdGx5IGluIEtjb25maWcgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzAwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjM3Ljc5MTU2MjE4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjI2OTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZGF0YVxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9NYWtlZmlsZT01PWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSArPSB4YXR0ci5vXFxuZnMvZXJvZnMvTWFrZWZpbGU6Njplcm9mcy0kKENPTkZJR19FUk9GU19GU19aSVApICs9IGRlY29tcHJlc3Nvci5vIHptYXAubyB6ZGF0YS5vIHp1dGlsLm9cXG5mcy9lcm9mcy9NYWtlZmlsZS03LWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1pJUF9MWk1BKSArPSBkZWNvbXByZXNzb3JfbHptYS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjM5LjQ3MzgzNzA5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTU0Nzk4MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFUk9GUyBTdXBwb3J0IGZvciB6ZGF0YS5jKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBpbnRvIGBFUk9GU19GU19aSVBgIGZvciBgemRhdGEuY2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEknbGwgZG91YmxlLWNoZWNrIGl0cyBjb25maWd1cmF0aW9uLiBXaGVyZSBzaG91bGQgSSBzdGFydD8gQWgsIHJpZ2h0LCB0aGUgS2NvbmZpZyBmb3IgYGZzL2lvbWFwL2lvZW5kLmNgIGlzIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMsIGFuZCBwb3NzaWJseSB3aGF0IGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgYEVST0ZTX0ZTX1pJUGAgaGFzIG1vcmUgYnJvYWRseSB3aXRoaW4gdGhlIGlvbWFwIGZyYW1ld29yay4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgbGlua2VkIGFuZCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo0Ni40Mjg2MzgyMDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzA5NTY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9lbmRcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9MTQ9aW9tYXAtJChDT05GSUdfQkxPQ0spXFx0XFx0Kz0gZGlyZWN0LWlvLm8gXFxcXFxcbmZzL2lvbWFwL01ha2VmaWxlOjE1OlxcdFxcdFxcdFxcdCAgIGlvZW5kLm8gXFxcXFxcbmZzL2lvbWFwL01ha2VmaWxlLTE2LVxcdFxcdFxcdFxcdCAgIGZpZW1hcC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6NDguNTk5NjAxNTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NDgxNjI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaG93IEknZCBhcHByb2FjaCB0aGlzIHByb2JsZW06XG5cbioqVHJhY2luZyBEZXBlbmRlbmNpZXMgZm9yIGBpb2VuZC5vYCoqXG5cbkFscmlnaHQsIEknbSBlbmNvdW50ZXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgYGlvZW5kLm9gIG5lZWRzIGBDT05GSUdfQkxPQ0tgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIFwiT2theSwgbGV0J3MgZmlndXJlIG91dCB3aGVyZSB0aGlzIGRlcGVuZGVuY3kgaXMgZGVmaW5lZCBhbmQgaWYgaXQncyBjb3JyZWN0LlwiIFRoaXMgdXN1YWxseSBtZWFucyBuYXZpZ2F0aW5nIHRoZSBidWlsZCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgYENPTkZJR19CTE9DS2AgaXMgdXNlZCBpbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlcy4gU2luY2UgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgZmlsZSBzeXN0ZW0gcmVsYXRlZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZpbGVzIGFuZCB0aGVpciBLY29uZmlnIGZpbGVzLiBUaGUgbWVudGlvbiBvZiBgeGZzX2FvcHMuY2Agc3BhcmtzIGEgbWVtb3J5LiBgZnMveGZzL2Agc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGB4ZnNfYW9wcy5jYCBzb3VuZHMgbGlrZSBpdCB3b3VsZCBiZSBpbiB0aGVyZS4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIHRoZXJlLCBhcyBpdCB3aWxsIHNwZWNpZnkgd2hhdCBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQuIFRoZSBmaXJzdCBwbGFjZSBJJ2xsIGxvb2sgaXMgYGZzL3hmcy9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo1My4wODQ0MjAzNTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzgxNTE2ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2FvcHNcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL01ha2VmaWxlPTY0PXhmcy0kKENPTkZJR19YRlNfUlQpXFx0XFx0Kz0gJChhZGRwcmVmaXggbGlieGZzLywgXFxcXFxcbi0tXFxuZnMveGZzL01ha2VmaWxlLTcwLSMgaGlnaGxldmVsIGNvZGVcXG5mcy94ZnMvTWFrZWZpbGU6NzE6eGZzLXlcXHRcXHRcXHRcXHQrPSB4ZnNfYW9wcy5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGUtNzItXFx0XFx0XFx0XFx0ICAgeGZzX2F0dHJfaW5hY3RpdmUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjU0LjkyMjU3ODA2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyNTQ2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFhGUyBhbmQgQnVmZmVyIENhY2hlIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfWEZTX0ZTYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGJ1aWxkaW5nIGB4ZnNfYW9wcy5vYC4gTm90IHVuZXhwZWN0ZWQsIG9idmlvdXNseSwgYnV0IGdvb2QgdG8gaGF2ZSB0aGF0IGNvbmZpcm1lZC4gVGhlIGFyY2hpdGVjdHVyZSBoZXJlIHJlbGllcyBvbiBYRlMgc3VwcG9ydCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGZpbGUgc3lzdGVtJ3MgY2FwYWJpbGl0aWVzLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcz8gYGZzL2J1ZmZlci5jYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzcG90IGZvciB0aGUgS2NvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gYnVmZmVyIGNhY2hlIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBidWZmZXIgY2FjaGUgaW50ZXJhY3RzIHdpdGggWEZTLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGF0IGB4ZnNfYW9wcy5vYCBtb2R1bGUgdGllcyBpbnRvIHRoaW5ncy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBidWZmZXIgY2FjaGUncyBLY29uZmlnIGVudHJpZXMgdGhlcmUuIE1heWJlIHRoZXJlJ3MgYSBtb3JlIGV4cGxpY2l0IGxpbmsgb3IgZGVwZW5kZW5jeSBsaXN0ZWQgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODk2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6NTguMjE1MTI3MTEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3ODU5ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1ZmZlclxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTgyPWt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgKz0gXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS05MC1cXHRib29rM3NfaHZfbmVzdGVkdjIubyBcXFxcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo5MTpcXHRndWVzdC1zdGF0ZS1idWZmZXIubyBcXFxcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS05Mi1cXHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLXkpIFxcXFxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtOTQtXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfR1VFU1RfU1RBVEVfQlVGRkVSX1RFU1QpICs9IHRlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLm9cXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTk2LWVuZGlmXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL01ha2VmaWxlPTk9SExfQ09NTU9OX0ZJTEVTIDo9IGNvbW1vbi9oYWJhbmFsYWJzX2Rydi5vIGNvbW1vbi9kZXZpY2UubyBjb21tb24vY29udGV4dC5vIFxcXFxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL01ha2VmaWxlLTEwLVxcdFxcdGNvbW1vbi9hc2lkLm8gY29tbW9uL2hhYmFuYWxhYnNfaW9jdGwubyBcXFxcXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9NYWtlZmlsZToxMTpcXHRcXHRjb21tb24vY29tbWFuZF9idWZmZXIubyBjb21tb24vaHdfcXVldWUubyBjb21tb24vaXJxLm8gXFxcXFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vTWFrZWZpbGUtMTItXFx0XFx0Y29tbW9uL3N5c2ZzLm8gY29tbW9uL2h3bW9uLm8gY29tbW9uL21lbW9yeS5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGU9MTU0PWFjcGkteSArPVxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUtMTU3LVxcdHV0YXNjaWkub1xcdFxcXFxcXG5kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlOjE1ODpcXHR1dGJ1ZmZlci5vXFx0XFxcXFxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUtMTU5LVxcdHV0Y2tzdW0ub1xcdFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0zNT1kcm0teSA6PSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtNTMtXFx0ZHJtX2ZvdXJjYy5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6NTQ6XFx0ZHJtX2ZyYW1lYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS01NS1cXHRkcm1fZ2VtLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9NYWtlZmlsZT03PWtvbWVkYS15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGUtMTMtXFx0a29tZWRhX3BpcGVsaW5lX3N0YXRlLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGU6MTQ6XFx0a29tZWRhX2ZyYW1lYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGUtMTUtXFx0a29tZWRhX2ttcy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L01ha2VmaWxlPTI9ZXRuYXZpdi15IDo9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9NYWtlZmlsZTozOlxcdGV0bmF2aXZfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L01ha2VmaWxlLTQtXFx0ZXRuYXZpdl9jbWRfcGFyc2VyLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZT02PWdtYTUwMF9nZngteSArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL01ha2VmaWxlLTEzLVxcdCAgY2R2X2ludGVsX2x2ZHMubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZToxNDpcXHQgIGZyYW1lYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUtMTUtXFx0ICBnZW0ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZT03OD1pOTE1LXkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtODEtXFx0aTkxNV9kcHQubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6ODI6XFx0aTkxNV9kc2JfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTgzLVxcdGk5MTVfZmJfcGluLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9MTU2PWdlbS15ICs9IFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTE2Mi1cXHRnZW0vaTkxNV9nZW1fZG9tYWluLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlOjE2MzpcXHRnZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0xNjQtXFx0Z2VtL2k5MTVfZ2VtX2ludGVybmFsLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY3LVxcdGdlbS9pOTE1X2dlbV9vYmplY3QubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6MTY4OlxcdGdlbS9pOTE1X2dlbV9vYmplY3RfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY5LVxcdGdlbS9pOTE1X2dlbV9wYWdlcy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlPTIzNT1pOTE1LXkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMjg3LVxcdGRpc3BsYXkvaW50ZWxfZmxpcHEubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6Mjg4OlxcdGRpc3BsYXkvaW50ZWxfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMjg5LVxcdGRpc3BsYXkvaW50ZWxfZ2xvYmFsX3N0YXRlLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZT0xMTI9bXNtLXkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZS0xMjYtXFx0bXNtX3JkLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGU6MTI3OlxcdG1zbV9yaW5nYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUtMTI4LVxcdG1zbV9zdWJtaXRxdWV1ZS5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZT01PXN1bjRpLWRybS15XFx0XFx0XFx0Kz0gc3VuNGlfZHJ2Lm9cXG5kcml2ZXJzL2dwdS9kcm0vc3VuNGkvTWFrZWZpbGU6NjpzdW40aS1kcm0teVxcdFxcdFxcdCs9IHN1bjRpX2ZyYW1lYnVmZmVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vc3VuNGkvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGU9Mj12bXdnZngteSA6PSB2bXdnZnhfZXhlY2J1Zi5vIHZtd2dmeF9nbXIubyB2bXdnZnhfa21zLm8gdm13Z2Z4X2Rydi5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlOjM6XFx0ICAgIHZtd2dmeF9pb2N0bC5vIHZtd2dmeF9yZXNvdXJjZS5vIHZtd2dmeF90dG1fYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUtNC1cXHQgICAgdm13Z2Z4X2NtZC5vIHZtd2dmeF9pcnEubyB2bXdnZnhfbGR1Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIxOD14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyMy1cXHRkaXNwbGF5L3hlX2Rpc3BsYXlfd2EubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjIyNDpcXHRkaXNwbGF5L3hlX2RzYl9idWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyNS1cXHRkaXNwbGF5L3hlX2ZiX3Bpbi5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MjI2OlxcdGRpc3BsYXkveGVfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyNy1cXHRkaXNwbGF5L3hlX2hkY3BfZ3NjLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIzND14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTI5OC1cXHRpOTE1LWRpc3BsYXkvaW50ZWxfZmxpcHEubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjI5OTpcXHRpOTE1LWRpc3BsYXkvaW50ZWxfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTMwMC1cXHRpOTE1LWRpc3BsYXkvaW50ZWxfZ2xvYmFsX3N0YXRlLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9odi9NYWtlZmlsZT0xMT1odl92bWJ1cy15IDo9IHZtYnVzX2Rydi5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEyLVxcdFxcdCBodi5vIGNvbm5lY3Rpb24ubyBjaGFubmVsLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTM6XFx0XFx0IGNoYW5uZWxfbWdtdC5vIHJpbmdfYnVmZmVyLm8gaHZfdHJhY2Uub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTQtaHZfdm1idXMtJChDT05GSUdfSFlQRVJWX1RFU1RJTkcpXFx0Kz0gaHZfZGVidWdmcy5vXFxuLS1cXG5kcml2ZXJzL2lpby9NYWtlZmlsZT03PWluZHVzdHJpYWxpby15IDo9IGluZHVzdHJpYWxpby1jb3JlLm8gaW5kdXN0cmlhbGlvLWV2ZW50Lm8gaW5rZXJuLm9cXG5kcml2ZXJzL2lpby9NYWtlZmlsZTo4OmluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fQlVGRkVSKSArPSBpbmR1c3RyaWFsaW8tYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9NYWtlZmlsZS05LWluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fVFJJR0dFUikgKz0gaW5kdXN0cmlhbGlvLXRyaWdnZXIub1xcbi0tXFxuZHJpdmVycy9paW8vYWNjZWwvTWFrZWZpbGU9ODY9c3RfYWNjZWwteSA6PSBzdF9hY2NlbF9jb3JlLm9cXG5kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZTo4NzpzdF9hY2NlbC0kKENPTkZJR19JSU9fQlVGRkVSKSArPSBzdF9hY2NlbF9idWZmZXIub1xcbmRyaXZlcnMvaWlvL2FjY2VsL01ha2VmaWxlLTg4LVxcbi0tXFxuZHJpdmVycy9paW8vYnVmZmVyL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19JSU9fQlVGRkVSX0hXX0NPTlNVTUVSKSArPSBpbmR1c3RyaWFsaW8taHctY29uc3VtZXIub1xcbmRyaXZlcnMvaWlvL2J1ZmZlci9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSUlPX1RSSUdHRVJFRF9CVUZGRVIpICs9IGluZHVzdHJpYWxpby10cmlnZ2VyZWQtYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9idWZmZXIvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0lJT19LRklGT19CVUYpICs9IGtmaWZvX2J1Zi5vXFxuLS1cXG5kcml2ZXJzL2lpby9jb21tb24vc3Rfc2Vuc29ycy9NYWtlZmlsZT05PXN0X3NlbnNvcnMteSA6PSBzdF9zZW5zb3JzX2NvcmUub1xcbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlOjEwOnN0X3NlbnNvcnMtJChDT05GSUdfSUlPX0JVRkZFUikgKz0gc3Rfc2Vuc29yc19idWZmZXIub1xcbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlLTExLXN0X3NlbnNvcnMtJChDT05GSUdfSUlPX1RSSUdHRVIpICs9IHN0X3NlbnNvcnNfdHJpZ2dlci5vXFxuLS1cXG5kcml2ZXJzL2lpby9kdW1teS9NYWtlZmlsZT04PWlpb19kdW1teS0kKENPTkZJR19JSU9fU0lNUExFX0RVTU1ZX0VWRU5UUykgKz0gaWlvX3NpbXBsZV9kdW1teV9ldmVudHMub1xcbmRyaXZlcnMvaWlvL2R1bW15L01ha2VmaWxlOjk6aWlvX2R1bW15LSQoQ09ORklHX0lJT19TSU1QTEVfRFVNTVlfQlVGRkVSKSArPSBpaW9fc2ltcGxlX2R1bW15X2J1ZmZlci5vXFxuZHJpdmVycy9paW8vZHVtbXkvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlPTI3PWl0ZzMyMDAteSAgICAgICAgICAgICAgIDo9IGl0ZzMyMDBfY29yZS5vXFxuZHJpdmVycy9paW8vZ3lyby9NYWtlZmlsZToyODppdGczMjAwLSQoQ09ORklHX0lJT19CVUZGRVIpICs9IGl0ZzMyMDBfYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19JVEczMjAwKSAgICs9IGl0ZzMyMDAub1xcbi0tXFxuZHJpdmVycy9paW8vZ3lyby9NYWtlZmlsZT0zND1zdF9neXJvLXkgOj0gc3RfZ3lyb19jb3JlLm9cXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlOjM1OnN0X2d5cm8tJChDT05GSUdfSUlPX0JVRkZFUikgKz0gc3RfZ3lyb19idWZmZXIub1xcbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGUtMzYtXFxuLS1cXG5kcml2ZXJzL2lpby9odW1pZGl0eS9NYWtlZmlsZT0xND1odHMyMjEteSA6PSBodHMyMjFfY29yZS5vIFxcXFxcXG5kcml2ZXJzL2lpby9odW1pZGl0eS9NYWtlZmlsZToxNTpcXHQgICAgaHRzMjIxX2J1ZmZlci5vXFxuZHJpdmVycy9paW8vaHVtaWRpdHkvTWFrZWZpbGUtMTYtb2JqLSQoQ09ORklHX0hUUzIyMSkgKz0gaHRzMjIxLm9cXG4tLVxcbmRyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZT0xND1hZGlzX2xpYi0kKENPTkZJR19JSU9fQURJU19MSUJfQlVGRkVSKSArPSBhZGlzX3RyaWdnZXIub1xcbmRyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZToxNTphZGlzX2xpYi0kKENPTkZJR19JSU9fQURJU19MSUJfQlVGRkVSKSArPSBhZGlzX2J1ZmZlci5vXFxuZHJpdmVycy9paW8vaW11L01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19JSU9fQURJU19MSUIpICs9IGFkaXNfbGliLm9cXG4tLVxcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGU9Nz1pbnYtaWNtNDI2MDAteSArPSBpbnZfaWNtNDI2MDBfdGVtcC5vXFxuZHJpdmVycy9paW8vaW11L2ludl9pY200MjYwMC9NYWtlZmlsZTo4Omludi1pY200MjYwMC15ICs9IGludl9pY200MjYwMF9idWZmZXIub1xcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDU2MDAvTWFrZWZpbGU9ND1pbnYtaWNtNDU2MDAteSArPSBpbnZfaWNtNDU2MDBfY29yZS5vXFxuZHJpdmVycy9paW8vaW11L2ludl9pY200NTYwMC9NYWtlZmlsZTo1Omludi1pY200NTYwMC15ICs9IGludl9pY200NTYwMF9idWZmZXIub1xcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDU2MDAvTWFrZWZpbGUtNi1pbnYtaWNtNDU2MDAteSArPSBpbnZfaWNtNDU2MDBfZ3lyby5vXFxuLS1cXG5kcml2ZXJzL2lpby9pbXUvc3RfbHNtNmRzeC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaWlvL2ltdS9zdF9sc202ZHN4L01ha2VmaWxlOjI6c3RfbHNtNmRzeC15IDo9IHN0X2xzbTZkc3hfY29yZS5vIHN0X2xzbTZkc3hfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvaWlvL2ltdS9zdF9sc202ZHN4L01ha2VmaWxlLTMtXFx0XFx0c3RfbHNtNmRzeF9zaHViLm8gc3RfbHNtNmRzeF9mdXNpb24ub1xcbi0tXFxuZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL01ha2VmaWxlPTIyPXN0X21hZ24teSA6PSBzdF9tYWduX2NvcmUub1xcbmRyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZToyMzpzdF9tYWduLSQoQ09ORklHX0lJT19CVUZGRVIpICs9IHN0X21hZ25fYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUtMjQtXFxuLS1cXG5kcml2ZXJzL2lpby9wcmVzc3VyZS9NYWtlZmlsZT00MD1zdF9wcmVzc3VyZS15IDo9IHN0X3ByZXNzdXJlX2NvcmUub1xcbmRyaXZlcnMvaWlvL3ByZXNzdXJlL01ha2VmaWxlOjQxOnN0X3ByZXNzdXJlLSQoQ09ORklHX0lJT19CVUZGRVIpICs9IHN0X3ByZXNzdXJlX2J1ZmZlci5vXFxuZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGUtNDItb2JqLSQoQ09ORklHX0lJT19TVF9QUkVTU19JMkMpICs9IHN0X3ByZXNzdXJlX2kyYy5vXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlPTk9ZHZiLWNvcmUtb2JqcyA6PSBkdmJkZXYubyBkbXhkZXYubyBkdmJfZGVtdXgub1xcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlLTEwLVxcdFxcdCBkdmJfY2FfZW41MDIyMS5vIGR2Yl9mcm9udGVuZC5vXFx0XFx0XFxcXFxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGU6MTE6XFx0XFx0ICQoZHZiLW5ldC15KSBkdmJfcmluZ2J1ZmZlci5vICQoZHZiLXZiMi15KVxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGUtMTItXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTY0L01ha2VmaWxlPTI9c2FhNzE2NC1vYmpzXFx0Oj0gc2FhNzE2NC1jYXJkcy5vIHNhYTcxNjQtY29yZS5vIHNhYTcxNjQtaTJjLm8gc2FhNzE2NC1kdmIubyBcXFxcXFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzE2NC9NYWtlZmlsZS0zLVxcdFxcdFxcdHNhYTcxNjQtZncubyBzYWE3MTY0LWJ1cy5vIHNhYTcxNjQtY21kLm8gc2FhNzE2NC1hcGkubyBcXFxcXFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzE2NC9NYWtlZmlsZTo0OlxcdFxcdFxcdHNhYTcxNjQtYnVmZmVyLm8gc2FhNzE2NC1lbmNvZGVyLm8gc2FhNzE2NC12Ymkub1xcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGUtNS1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9pcmlzL01ha2VmaWxlOjE6cWNvbS1pcmlzLW9ianMgKz0gaXJpc19idWZmZXIubyBcXFxcXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2lyaXMvTWFrZWZpbGUtMi0gICAgICAgICAgICAgaXJpc19jb21tb24ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZS0yOC0gICAgICAgICAgICAgaXJpc192cHU0eC5vIFxcXFxcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZToyOTogICAgICAgICAgICAgaXJpc192cHVfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9pcmlzL01ha2VmaWxlLTMwLSAgICAgICAgICAgICBpcmlzX3ZwdV9jb21tb24ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9Mzk9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfRU5fUlhORkMpICAgICs9IGVuX2ZzX2V0aHRvb2wub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0MDptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DT1JFX0VOX0RDQikgKz0gZW5fZGNibmwubyBlbi9wb3J0X2J1ZmZlci5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTQxLW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgKz0gZW4vaHZfdmhjYV9zdGF0cy5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYz01Mjk9dHhnYmVfZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQwLVxcdGJ1ZmZlci5sZW5ndGggPSBjcHVfdG9fYmUzMihwYWdlX2RhdGEtXFx1MDAzZWxlbmd0aCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6NTQxOlxcdGJ1ZmZlci5vZmZzZXQgPSBjcHVfdG9fYmUzMihwYWdlX2RhdGEtXFx1MDAzZW9mZnNldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQyLVxcdGJ1ZmZlci5wYWdlID0gcGFnZV9kYXRhLVxcdTAwM2VwYWdlO1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTUyNz1zdGF0aWMgaW50IGRlbGxfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQwLVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjU0MTpcXHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy01NDItXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQ2LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjU0NzpcXHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU0OC1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz01ODM9c3RhdGljIHZvaWQgZGVsbF9yZmtpbGxfcXVlcnkoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU5Mi1cXHRyZXQgPSBkZWxsX3NlbmRfcmVxdWVzdChcXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NTkzOlxcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU5NC1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy02MDAtXFx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXFx1MDAyNmJ1ZmZlciwgQ0xBU1NfSU5GTywgU0VMRUNUX1JGS0lMTCk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYwMTpcXHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYwMi1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz02MTY9c3RhdGljIGludCBkZWxsX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjI3LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYyODpcXHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy02MjktXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjMzLVxcdFxcdHJldHVybiBod3N3aXRjaF9yZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYzNDpcXHRod3N3aXRjaF9zdGF0ZSA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYzNS1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz03MDE9c3RhdGljIHZvaWQgZGVsbF91cGRhdGVfcmZraWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MDktXFx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXFx1MDAyNmJ1ZmZlciwgQ0xBU1NfSU5GTywgU0VMRUNUX1JGS0lMTCk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjcxMDpcXHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MTEtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzE4LVxcdGlmIChyZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiAoc3RhdHVzIFxcdTAwMjYgQklUKDApKSlcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NzE5OlxcdFxcdGh3c3dpdGNoID0gYnVmZmVyLm91dHB1dFsxXTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzIwLVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTc3NT1zdGF0aWMgaW50IF9faW5pdCBkZWxsX3NldHVwX3Jma2lsbCh2b2lkKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTc5NC1cXHRyZXQgPSBkZWxsX3NlbmRfcmVxdWVzdChcXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6Nzk1OlxcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTc5Ni1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz05NTc9c3RhdGljIGludCBkZWxsX2dldF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTk2Ny1cXHRpZiAocmV0ID09IDApXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjk2ODpcXHRcXHRyZXQgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy05NjktXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MTIzMj1zdGF0aWMgaW50IGtiZF9nZXRfaW5mbyhzdHJ1Y3Qga2JkX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTI0My1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0NDpcXHRpbmZvLVxcdTAwM2Vtb2RlcyA9IGJ1ZmZlci5vdXRwdXRbMV0gXFx1MDAyNiAweEZGRkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDU6XFx0aW5mby1cXHUwMDNldHlwZSA9IChidWZmZXIub3V0cHV0WzFdIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDY6XFx0aW5mby1cXHUwMDNldHJpZ2dlcnMgPSBidWZmZXIub3V0cHV0WzJdIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0NzpcXHR1bml0cyA9IChidWZmZXIub3V0cHV0WzJdIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0ODpcXHRpbmZvLVxcdTAwM2VsZXZlbHMgPSAoYnVmZmVyLm91dHB1dFsyXSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweEZGO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjQ5LVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTMtXFx0aWYgKHVuaXRzIFxcdTAwMjYgQklUKDApKVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU0OlxcdFxcdGluZm8tXFx1MDAzZXNlY29uZHMgPSAoYnVmZmVyLm91dHB1dFszXSBcXHUwMDNlXFx1MDAzZSAwKSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTUtXFx0aWYgKHVuaXRzIFxcdTAwMjYgQklUKDEpKVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU2OlxcdFxcdGluZm8tXFx1MDAzZW1pbnV0ZXMgPSAoYnVmZmVyLm91dHB1dFszXSBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTctXFx0aWYgKHVuaXRzIFxcdTAwMjYgQklUKDIpKVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU4OlxcdFxcdGluZm8tXFx1MDAzZWhvdXJzID0gKGJ1ZmZlci5vdXRwdXRbM10gXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTI1OS1cXHRpZiAodW5pdHMgXFx1MDAyNiBCSVQoMykpXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNjA6XFx0XFx0aW5mby1cXHUwMDNlZGF5cyA9IChidWZmZXIub3V0cHV0WzNdIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNjEtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MTMxOD1zdGF0aWMgaW50IGtiZF9nZXRfc3RhdGUoc3RydWN0IGtiZF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTMyOC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMyOTpcXHRzdGF0ZS1cXHUwMDNlbW9kZV9iaXQgPSBmZnMoYnVmZmVyLm91dHB1dFsxXSBcXHUwMDI2IDB4RkZGRik7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzMzAtXFx0aWYgKHN0YXRlLVxcdTAwM2Vtb2RlX2JpdCAhPSAwKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzMzItXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzM6XFx0c3RhdGUtXFx1MDAzZXRyaWdnZXJzID0gKGJ1ZmZlci5vdXRwdXRbMV0gXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNDpcXHRzdGF0ZS1cXHUwMDNldGltZW91dF92YWx1ZSA9IChidWZmZXIub3V0cHV0WzFdIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4M0Y7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzU6XFx0c3RhdGUtXFx1MDAzZXRpbWVvdXRfdW5pdCA9IChidWZmZXIub3V0cHV0WzFdIFxcdTAwM2VcXHUwMDNlIDMwKSBcXHUwMDI2IDB4MztcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNjpcXHRzdGF0ZS1cXHUwMDNlYWxzX3NldHRpbmcgPSBidWZmZXIub3V0cHV0WzJdIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNzpcXHRzdGF0ZS1cXHUwMDNlYWxzX3ZhbHVlID0gKGJ1ZmZlci5vdXRwdXRbMl0gXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweEZGO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzM4OlxcdHN0YXRlLVxcdTAwM2VsZXZlbCA9IChidWZmZXIub3V0cHV0WzJdIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzk6XFx0c3RhdGUtXFx1MDAzZXRpbWVvdXRfdmFsdWVfYWMgPSAoYnVmZmVyLm91dHB1dFsyXSBcXHUwMDNlXFx1MDAzZSAyNCkgXFx1MDAyNiAweDNGO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzQwOlxcdHN0YXRlLVxcdTAwM2V0aW1lb3V0X3VuaXRfYWMgPSAoYnVmZmVyLm91dHB1dFsyXSBcXHUwMDNlXFx1MDAzZSAzMCkgXFx1MDAyNiAweDM7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzNDEtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MTM5Nz1zdGF0aWMgaW50IGtiZF9nZXRfdG9rZW5fYml0KHU4IGJpdClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xNDE1LVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxNDE2OlxcdHZhbCA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTE0MTctXFx0cmV0dXJuICh2YWwgPT0gdG9rZW4tXFx1MDAzZXZhbHVlKTtcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz0yMTk1PXN0YXRpYyBpbnQgZGVsbF9iYXR0ZXJ5X3JlYWQoY29uc3QgdTE2IHRva2VuaWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMjIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MjIwNTpcXHRpZiAoYnVmZmVyLm91dHB1dFsxXSBcXHUwMDNlIElOVF9NQVgpXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTIyMDYtXFx0XFx0cmV0dXJuIC1FSU87XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTIyMDctXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjIyMDg6XFx0cmV0dXJuIGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTIyMDktfVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTI0NTg9c3RhdGljIGludCBfX2luaXQgZGVsbF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMjUyNC1cXHRpZiAocmV0ID09IDApXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjI1MjU6XFx0XFx0bWF4X2ludGVuc2l0eSA9IGJ1ZmZlci5vdXRwdXRbM107XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTI1MjYtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYz0xMjA9c3RhdGljIGludCB0aGVybWFsX2dldF9tb2RlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xMjktXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxMzA6XFx0c3RhdGUgPSBidWZmZXIub3V0cHV0WzJdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jLTEzMS1cXHRpZiAoc3RhdGUgXFx1MDAyNiBERUxMX0JBTEFOQ0VEKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM9MTQzPXN0YXRpYyBpbnQgdGhlcm1hbF9nZXRfc3VwcG9ydGVkX21vZGVzKGludCAqc3VwcG9ydGVkX2JpdHMpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xNTEtXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxNTI6XFx0KnN1cHBvcnRlZF9iaXRzID0gRklFTERfR0VUKERFTExfVEhFUk1BTF9TVVBQT1JURUQsIGJ1ZmZlci5vdXRwdXRbMV0pO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jLTE1My1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jPTE1Nj1zdGF0aWMgaW50IHRoZXJtYWxfZ2V0X2FjY19tb2RlKGludCAqYWNjX21vZGUpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xNjQtXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxNjU6XFx0KmFjY19tb2RlID0gRklFTERfR0VUKERFTExfQUNDX0dFVF9GSUVMRCwgYnVmZmVyLm91dHB1dFszXSk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmMtMTY2LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy90dHkvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfVFRZKVxcdFxcdCs9IHR0eV9pby5vIG5fdHR5Lm8gdHR5X2lvY3RsLm8gdHR5X2xkaXNjLm8gXFxcXFxcbmRyaXZlcnMvdHR5L01ha2VmaWxlOjM6XFx0XFx0XFx0XFx0ICAgdHR5X2J1ZmZlci5vIHR0eV9wb3J0Lm8gdHR5X211dGV4Lm8gXFxcXFxcbmRyaXZlcnMvdHR5L01ha2VmaWxlLTQtXFx0XFx0XFx0XFx0ICAgdHR5X2xkc2VtLm8gdHR5X2JhdWRyYXRlLm8gdHR5X2pvYmN0cmwubyBcXFxcXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlPTk9dXNiY29yZS15IDo9IHVzYi5vIGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIub1xcbmRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU6MTA6dXNiY29yZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTExLXVzYmNvcmUteSArPSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cXG4tLVxcbmZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0yMC1cXG5mcy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfQlVGRkVSX0hFQUQpXFx0Kz0gYnVmZmVyLm8gbXBhZ2Uub1xcbmZzL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdCs9IHByb2NfbmFtZXNwYWNlLm9cXG4tLVxcbmZzL2hwZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFBGU19GUykgKz0gaHBmcy5vXFxuZnMvaHBmcy9NYWtlZmlsZS03LVxcbmZzL2hwZnMvTWFrZWZpbGU6ODpocGZzLW9ianMgOj0gYWxsb2MubyBhbm9kZS5vIGJ1ZmZlci5vIGRlbnRyeS5vIGRpci5vIGRub2RlLm8gZWEubyBmaWxlLm8gXFxcXFxcbmZzL2hwZnMvTWFrZWZpbGUtOS1cXHQgICAgIGlub2RlLm8gbWFwLm8gbmFtZS5vIG5hbWVpLm8gc3VwZXIub1xcbi0tXFxuZnMvbmV0ZnMvTWFrZWZpbGU9Mz1uZXRmcy15IDo9IFxcXFxcXG4tLVxcbmZzL25ldGZzL01ha2VmaWxlLTE2LVxcdHJlYWRfc2luZ2xlLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlOjE3OlxcdHJvbGxpbmdfYnVmZmVyLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlLTE4LVxcdHdyaXRlX2NvbGxlY3QubyBcXFxcXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaD00Nz1zdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oLTYyLVxcdCAqIHN0b3JlZCBpbiBzdHJ1Y3QgXFx1MDAyNmRybV9mcmFtZWJ1ZmZlciwgaW5jbHVkaW5nIGFsbCByZWxldmFudCBtZXRhZGF0YVxcbmluY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oOjYzOlxcdCAqIGxpa2UgXFx1MDAyNmRybV9mcmFtZWJ1ZmZlci5waXRjaGVzIGFuZCBcXHUwMDI2ZHJtX2ZyYW1lYnVmZmVyLm9mZnNldHMgaWYgdGhlXFxuaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgtNjQtXFx0ICogbW9kaWZpZXIgZW5hYmxlcyBhZGRpdGlvbmFsIHBsYW5lcyBiZXlvbmQgdGhlIGZvdXJjYyBwaXhlbCBmb3JtYXRcXG4tLVxcbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxua2VybmVsL2V2ZW50cy9NYWtlZmlsZToyOm9iai15IDo9IGNvcmUubyByaW5nX2J1ZmZlci5vIGNhbGxjaGFpbi5vXFxua2VybmVsL2V2ZW50cy9NYWtlZmlsZS0zLVxcbi0tXFxua2VybmVsL3ByaW50ay9NYWtlZmlsZT03PW9iai0kKENPTkZJR19QUklOVEspICAgICAgICAgICAgICAgICArPSBwcmludGtfc3VwcG9ydC5vXFxua2VybmVsL3ByaW50ay9NYWtlZmlsZTo4OnByaW50a19zdXBwb3J0LXlcXHQgICAgICAgICAgICAgOj0gcHJpbnRrX3JpbmdidWZmZXIub1xcbmtlcm5lbC9wcmludGsvTWFrZWZpbGUtOS1wcmludGtfc3VwcG9ydC0kKENPTkZJR19TWVNDVEwpXFx0ICAgICArPSBzeXNjdGwub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IGxpYmZ0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSArPSByaW5nX2J1ZmZlcl9iZW5jaG1hcmsub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSArPSB0cmFjZV9yZW1vdGUub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgKz0gcmVtb3RlX3Rlc3Qub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTE2MT0kKG9iaikvJS5vLmNoZWNrZWQ6ICQob2JqKS8lLm8gJChvYmopL3VuZGVmc3ltc19iYXNlLm8gRk9SQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjE2NDphbHdheXMtJChDT05GSUdfU0lNUExFX1JJTkdfQlVGRkVSKSArPSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTE2NS1cXG4tLVxcbm5ldC9jZXBoL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0NFUEhfTElCKSArPSBsaWJjZXBoLm9cXG5uZXQvY2VwaC9NYWtlZmlsZS02LVxcbm5ldC9jZXBoL01ha2VmaWxlOjc6bGliY2VwaC15IDo9IGNlcGhfY29tbW9uLm8gbWVzc2VuZ2VyLm8gbXNncG9vbC5vIGJ1ZmZlci5vIHBhZ2VsaXN0Lm8gXFxcXFxcbm5ldC9jZXBoL01ha2VmaWxlLTgtXFx0bW9uX2NsaWVudC5vIGRlY29kZS5vIFxcXFxcXG4tLVxcbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlPTM9Q0ZMQUdTX2FtZHRwLXN0cmVhbS5vXFx0Oj0gLUkkKHNyYylcXG5zb3VuZC9maXJld2lyZS9NYWtlZmlsZS00LVxcbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlOjU6c25kLWZpcmV3aXJlLWxpYi15IDo9IGxpYi5vIGlzby1yZXNvdXJjZXMubyBwYWNrZXRzLWJ1ZmZlci5vIFxcXFxcXG5zb3VuZC9maXJld2lyZS9NYWtlZmlsZS02LVxcdFxcdFxcdCBmY3AubyBjbXAubyBhbWR0cC1zdHJlYW0ubyBhbWR0cC1hbTgyNC5vXFxuLS1cXG50b29scy9paW8vQnVpbGQ9Mz1paW9fZXZlbnRfbW9uaXRvci15ICs9IGlpb19ldmVudF9tb25pdG9yLm8gaWlvX3V0aWxzLm9cXG50b29scy9paW8vQnVpbGQ6NDppaW9fZ2VuZXJpY19idWZmZXIteSArPSBpaW9fZ2VuZXJpY19idWZmZXIubyBpaW9fdXRpbHMub1xcbi0tXFxudG9vbHMvcGVyZi90ZXN0cy9CdWlsZD00NT1wZXJmLXRlc3QteSArPSBleHByLm9cXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkOjQ2OnBlcmYtdGVzdC15ICs9IGJhY2t3YXJkLXJpbmctYnVmZmVyLm9cXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkLTQ3LXBlcmYtdGVzdC15ICs9IHNkdC5vXFxuLS1cXG50b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL01ha2VmaWxlPTIwPVRPT0xfT0JKUyA9IFxcXFxcXG4tLVxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGUtMjktXFx0dXRhc2NpaS5vXFxcXFxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGU6MzA6XFx0dXRidWZmZXIub1xcXFxcXG50b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL01ha2VmaWxlLTMxLVxcdHV0Y2tzdW0ub1xcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MDAuMDcyOTkyNzMzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTI3NDgyOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJsb2NrIExheWVyIENoYW5nZXMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gc2V0IHVwIG15IGZ1enppbmcgZW52aXJvbm1lbnQgdG8gdGFyZ2V0IHRoaXMgbmV3IGJsb2NrIGxheWVyIGluZnJhc3RydWN0dXJlIGZvciBkZWZlcnJlZCBiaW8gY29tcGxldGlvbnMuICBJdCBzZWVtcyB0aGUgY3JpdGljYWwgY29tcG9uZW50LCBgQ09ORklHX0JVRkZFUl9IRUFEYCwgaXMgaW5kZWVkIHJlcXVpcmVkIGZvciBgZnMvYnVmZmVyLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDogYEJMT0NLYCwgYEJVRkZFUl9IRUFEYCwgYEZTX0lPTUFQYCwgYFhGU19GU2AsIGBFUk9GU19GU2AsIGFuZCBgRVJPRlNfRlNfWklQYC4gR29vZCwgdGhlIGJhc2UgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfQlVGRkVSX0hFQURgIGlzIHNlbGVjdGVkIGJ5IHNldmVyYWwgZmlsZXN5c3RlbXMgbGlrZSBgRVhUNF9GU2AsIGFuZCBgWEZTX0ZTYC4gU2ltaWxhcmx5IGBDT05GSUdfRlNfSU9NQVBgIGlzIHNlbGVjdGVkIGJ5IGZpbGVzeXN0ZW1zIGxpa2UgYFhGU19GU2AsIGFuZCBgRVhUNF9GU2AsIG1lYW5pbmcgbXkgY29uZmlnIGxpc3QgaXMgZ29vZCB0byBnby5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0LiBJIHNlZSB0aGF0IGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgYGlvbWFwX2FkZF90b19pb2VuZGAgYXJlIHRoZSB0d28gYmVzdCBjYW5kaWRhdGVzLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgaW5kZWVkIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBUaGUgY29kZSBzaG93czpcblxuYGBgY1xuc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcblx0XHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbilcbmBgYFxuXG5BbmQgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIGFsc28gZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIGxpa2UgdGhpczpcblxuYGBgY1xudm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcbmBgYFxuXG5JIGFsc28gbG9va2VkIGF0IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gYGJoX3N1Ym1pdGAgaXMgbm90IG1vZGlmaWVkLCBidXQgYF9fYmhfc3VibWl0YCBpcy4gQnV0IGBfX2JoX3N1Ym1pdGAgaXMgc3RhdGljLiBJbiBgZnMveGZzL3hmc19hb3BzLmNgLCBgeGZzX2lvZW5kX25lZWRzX3dxX2NvbXBsZXRpb25gIGlzIG1vZGlmaWVkIGJ1dCBpdCBpcyBzdGF0aWMuIEluIGBmcy9lcm9mcy96ZGF0YS5jYCwgYHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmYCBpcyBtb2RpZmllZCwgYnV0IGl0J3Mgc3RhdGljLlxuXG5gYmlvX2VuZGlvYCBpcyBtb2RpZmllZCwgYnV0IHRoYXQncyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGgsIHNvIGxldCdzIGF2b2lkIGl0LiBgYmlvc2V0X2luaXRgIGlzIHVudG91Y2hlZCwgYW5kIGBpbml0X2Jpb2AgaXMgYF9faW5pdGAuXG5cblNvIHRoZSBjZW50cmFsIGlkZWEgaXMgdGhpczogdGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgaW5mcmFzdHJ1Y3R1cmUgdG8gZGVmZXIgYmlvIGNvbXBsZXRpb25zIHVzaW5nIGEgcGVyLUNQVSB3b3JrcXVldWUgaW4gdGhlIGJsb2NrIGxheWVyLiBJdCdzIHRyaWdnZXJlZCBieSB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnLCBzZXQgaW4gYGZzL2J1ZmZlci5jYCBhbmQgYGZzL2lvbWFwL2lvZW5kLmNgIHdoZW4gYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIHRydWUsIGxpa2Ugd2l0aCBgUldGX0RPTlRDQUNIRWAgd3JpdGVzLiBUaGUgY29yZSBsb2dpYyByZXNpZGVzIGluIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgaXMgaW50ZWdyYXRlZCBpbnRvIGBiaW9fZW5kaW9gLiBUaGlzIG1lYW5zIGl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjay4gSXQncyByaXBlIGZvciBmdXp6aW5nIVxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgUldGX0RPTlRDQUNIRWAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm8sIGl0J3MgYSBmbGFnIGZvciBgcHdyaXRldjJgLlxuXG5JbiBzdW1tYXJ5LCBJIG5lZWQgdGhlIGZvbGxvd2luZyBjb25maWdzOiBgQkxPQ0tgLCBgQlVGRkVSX0hFQURgLCBgRlNfSU9NQVBgLCBgWEZTX0ZTYCwgYEVST0ZTX0ZTYCwgYW5kIGBFUk9GU19GU19aSVBgIHRvIHRhcmdldCB0aGVzZSBhcmVhcy4gT2theSwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGBFUk9GU19GU19aSVBgIGlzIGEgYm9vbCBvciB0cmlzdGF0ZS4gSSB3aWxsIGNoZWNrIHRoZSBgZnMvZXJvZnMvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTY4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjEyLjIwMDQ3ODY1NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDkwNDQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVJPRlNfRlNfWklQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL0tjb25maWc9OTg9Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiRVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiRVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfREVGTEFURVxcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVST0ZTIERFRkxBVEUgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE0NC1cXG5mcy9lcm9mcy9LY29uZmlnOjE0NTpjb25maWcgRVJPRlNfRlNfWklQX1pTVERcXG5mcy9lcm9mcy9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCJFUk9GUyBac3RhbmRhcmQgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE1NS1cXG5mcy9lcm9mcy9LY29uZmlnOjE1Njpjb25maWcgRVJPRlNfRlNfWklQX0FDQ0VMXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiRVJPRlMgaGFyZHdhcmUgZGVjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxMy42MzUzODc2MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MzAzNzIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEVST0ZTIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgRVJPRlNfRlNfWklQYC4uLiB5ZXAsIHRoYXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFuLCBubyBzdXJwcmlzZXMgdGhlcmUuIE5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHF1aWNrbHkgY29uZmlybSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZsYWdzLiBMZXQncyBzZWUuLi4gdGhlIG5leHQgbG9naWNhbCBjaGVjayBpcyBnb2luZyB0byBiZSBgRlNfSU9NQVBgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSByZW1lbWJlcmluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGNvbXByZXNzZWQgSS9PIGFuZCBkaXJlY3QgYWNjZXNzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBjb2RlYmFzZSBvciBkb2N1bWVudGF0aW9uIHRvIGF2b2lkIG1pc3NpbmcgYW4gaW1wb3J0YW50IGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk5NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjE2LjY4ODQyNzUzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTQ1ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjE4LjE3Mzg5MjEzNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI0NjAzMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIEludGVybmFscyoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgRlNfSU9NQVBgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCBxdWlja2x5LCBidXQgSSdtIG9wZXJhdGluZyBvbiB0aGF0IGFzc3VtcHRpb24gZm9yIHRoZSBtb21lbnQuIE5vdywgd2hlcmUgd2FzIHRoYXQgcmVsYXRlZCB0byBgQlVGRkVSX0hFQURgPyBMZXQgbWUgc2VlIHdoYXQgdGhhdCBkYXRhIHN0cnVjdHVyZSBob2xkcyB3aXRoaW4gaXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGludGVybmFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToyMS40OTg0OTc3MjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDE0NTUzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJVRkZFUl9IRUFEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjI9Y29uZmlnIEZTX1NUQUNLXFxuLS1cXG5mcy9LY29uZmlnLTI0LVxcbmZzL0tjb25maWc6MjU6Y29uZmlnIEJVRkZFUl9IRUFEXFxuZnMvS2NvbmZpZy0yNi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjIyLjk5OTk1NzE0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg3MTU3ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKlJlZmxlY3Rpbmcgb24gRGF0YSBTdHJ1Y3R1cmVzIGluIEtlcm5lbCBNZW1vcnkqKlxuXG5SaWdodCwgc28gYEJVRkZFUl9IRUFEYC4gQWJzb2x1dGVseSwgaXQncyBhIEJvb2xlYW4gdHlwZS4gU2ltcGxlIGVub3VnaCwgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBiYXNpY3MgYXJlIHBlcmZlY3RseSB1bmRlcnN0b29kLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHJlbGF0ZWQgbWVtb3J5IGxheW91dC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB3aGF0IGBCTE9DS2AgaXMgZGVmaW5lZCBhcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWluZCBvbiB3aGF0IHRoYXQgc3RydWN0dXJlIGhvbGRzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYEJVRkZFUl9IRUFEYC4gSXQncyBhIGZ1bmRhbWVudGFsIGVsZW1lbnQgb2YgdGhlIEkvTyBzeXN0ZW0sIHNvIGEgcXVpY2sgbWVudGFsIHJldmlldyB3aWxsIGJlIHdvcnRod2hpbGUuIFdlIG5lZWQgdG8gYmUgb24gdG9wIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ1LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MjYuMTg3MTE3NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjY5NjAwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWctNC0jXFxuYmxvY2svS2NvbmZpZzo1Om1lbnVjb25maWcgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXFxcIkVuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xcbmJsb2NrL0tjb25maWctMjgtXFxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuYmxvY2svS2NvbmZpZy0zMC1cXHRib29sIFxcXCJMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cXG4tLVxcbmJsb2NrL0tjb25maWctMjE3LSMgZG8gbm90IHVzZSBpbiBuZXcgY29kZVxcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxcbmJsb2NrL0tjb25maWctMjE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MjcuNjE0MDg0MzQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjAyNzA3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyB0aGUgTG9naWNhbCBGbG93KipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgc3RhdGUgaW5kaWNhdGVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGJvb2xlYW4gdmFsdWUgbmFtZWQgYEJMT0NLYC4gU2ltcGxlIGVub3VnaC4gQnV0IEkgbmVlZCB0byBjb25maXJtIGl0cyByZWxhdGlvbiB0byB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCBgWEZTX0ZTYCBpcyBsaWtlbHkgdGhlIGtleS4gSSBuZWVkIHRvIG5vdyBjaGVjayB0aGUgc3RhdHVzIG9mIGBYRlNfRlNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgaW4gY29tYmluYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCB1dGlsaXNlIHRoZW0gdG8gY2hlY2sgZm9yIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI4MDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MTozMC40NzQzNTgxNTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjA2NjA2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy94ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xcbmZzL3hmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlhGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjMxLjk5NTAyNTU5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU0MzAzNDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEZpbGVzeXN0ZW0gVHJpLVN0YXRlcyoqXG5cblJpZ2h0LCBzbyBgWEZTX0ZTYCBpcyBjb25maXJtZWQgYXMgYSB0cmlzdGF0ZSDigJMgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQncyBtYWtlIHN1cmUgaXQgaXMgaW4gZmFjdCB0cmlzdGF0ZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYEVST0ZTX0ZTYCBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAzNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjQ3LjUzODA2MzUyNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDE5MTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVJPRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvS2NvbmZpZy0yLVxcbmZzL2Vyb2ZzL0tjb25maWc6Mzpjb25maWcgRVJPRlNfRlNcXG5mcy9lcm9mcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNDktXFxuZnMvZXJvZnMvS2NvbmZpZzo1MDpjb25maWcgRVJPRlNfRlNfREVCVUdcXG5mcy9lcm9mcy9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIkVST0ZTIGRlYnVnZ2luZyBmZWF0dXJlXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy01OS1cXG5mcy9lcm9mcy9LY29uZmlnOjYwOmNvbmZpZyBFUk9GU19GU19YQVRUUlxcbmZzL2Vyb2ZzL0tjb25maWctNjEtXFx0Ym9vbCBcXFwiRVJPRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNzAtXFxuZnMvZXJvZnMvS2NvbmZpZzo3MTpjb25maWcgRVJPRlNfRlNfUE9TSVhfQUNMXFxuZnMvZXJvZnMvS2NvbmZpZy03Mi1cXHRib29sIFxcXCJFUk9GUyBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctODQtXFxuZnMvZXJvZnMvS2NvbmZpZzo4NTpjb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcXG5mcy9lcm9mcy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIkVST0ZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctOTctXFxuZnMvZXJvZnMvS2NvbmZpZzo5ODpjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcXG5mcy9lcm9mcy9LY29uZmlnLTk5LVxcdGJvb2wgXFxcIkZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTExLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTEyOmNvbmZpZyBFUk9GU19GU19aSVBcXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cXHRib29sIFxcXCJFUk9GUyBEYXRhIENvbXByZXNzaW9uIFN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTEyMS1cXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcXG5mcy9lcm9mcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMzQ6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTQ0LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTQ1OmNvbmZpZyBFUk9GU19GU19aSVBfWlNURFxcbmZzL2Vyb2ZzL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVST0ZTIFpzdGFuZGFyZCBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTU1LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTU2OmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE2OS1cXG5mcy9lcm9mcy9LY29uZmlnOjE3MDpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXFxuZnMvZXJvZnMvS2NvbmZpZy0xNzEtXFx0Ym9vbCBcXFwiRVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTc4LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTc5OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURfSElQUklcXG5mcy9lcm9mcy9LY29uZmlnLTE4MC1cXHRib29sIFxcXCJFUk9GUyBoaWdoIHByaW9yaXR5IHBlci1DUFUga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xODgtXFxuZnMvZXJvZnMvS2NvbmZpZzoxODk6Y29uZmlnIEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVcXG5mcy9lcm9mcy9LY29uZmlnLTE5MC1cXHRib29sIFxcXCJFUk9GUyBwYWdlIGNhY2hlIHNoYXJlIHN1cHBvcnQgKGV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjQ5LjEwMjI2MTExMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTExOTI4OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBMYXllciBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgRVJPRlNfRlNgIGlzIGluZGVlZCBhIHRyaXN0YXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kIHdoZW4gbG9va2luZyBhdCB0aGUgYnJvYWRlciBwaWN0dXJlIGhlcmUuIEkgc2VlIGEgZmV3IGtleSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZDogYEJMT0NLYCwgYEJVRkZFUl9IRUFEYCwgYEZTX0lPTUFQYCwgYFhGU19GU2AsIGBFUk9GU19GU2AsIGFuZCBgRVJPRlNfRlNfWklQYC4gVGhlc2UgYXJlIGxpa2VseSBhbGwgcmVsZXZhbnQgdG8gdGhlIHNjb3BlIG9mIHRoaXMgd29yay5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGEgZmV3IGNyaXRpY2FsIHN5bWJvbHMsIHNwZWNpZmljYWxseSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgLiBUaGUgbWFpbiB0aHJ1c3Qgb2YgdGhpcyBwYXRjaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0J3MgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdGhyb3VnaCBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIGFjdGl2YXRlZCBieSB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnLiBJIHNlZSB0aGF0IGZsYWcgaXMgc2V0IGluIGBmcy9idWZmZXIuY2AgYW5kIGBmcy9pb21hcC9pb2VuZC5jYCB3aGVuIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pYCBpcyB0cnVlLiBUaGF0IHN1Z2dlc3RzIHRoZXNlIGNoYW5nZXMgYXJlIHRpZWQgdG8gb3BlcmF0aW9ucyBsaWtlIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuXG5cblRoaXMgc3RyaWtlcyBtZSBhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjayBwYXRocy4gVGhhdCdzIGEgcmVkIGZsYWcgZm9yIGZ1enppbmcsIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCB0aGVzZSBjb21wb25lbnRzIGFyZS4gVGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgd2lkZS1yZWFjaGluZyBpbXBhY3QsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1enogdGFyZ2V0cy5cblxuSSBuZWVkIHRvIG1ha2UgYSBub3RlIGhlcmU7IHRoaXMgaXMgc29tZXRoaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMTYsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjU1LjYxNDE5Mjc5MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODI2Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiQlVGRkVSX0hFQURcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU19aSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Jpb19jb21wbGV0ZV9pbl90YXNrXCIsXG4gICAgXCJpb21hcF9hZGRfdG9faW9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGluZnJhc3RydWN0dXJlIGluIHRoZSBibG9jayBsYXllciBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdmlhIGEgcGVyLUNQVSB3b3JrcXVldWUuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBmbGFnLCB3aGljaCBpcyBzZXQgaW4gZnMvYnVmZmVyLmMgYW5kIGZzL2lvbWFwL2lvZW5kLmMgd2hlbiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pIGlzIHRydWUgKGUuZy4sIHZpYSBSV0ZfRE9OVENBQ0hFIHdyaXRlcykuIFRoZSBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2sgYW5kIGludGVncmF0ZWQgaW50byBiaW9fZW5kaW8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aHMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJVRkZFUl9IRUFEXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfWklQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19iaW9fY29tcGxldGVfaW5fdGFza1wiLFxuICAgIFwiaW9tYXBfYWRkX3RvX2lvZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflows28gd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 16:38:10 +0000 UTC FinishedAt: 2026-07-31 16:41:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BUFFER_HEAD", "FS_IOMAP", "XFS_FS", "EROFS_FS", "EROFS_FS_ZIP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BUFFER_HEAD", "FS_IOMAP", "XFS_FS", "EROFS_FS", "EROFS_FS_ZIP" ], "series_id": "d4b1d569-1c4c-4be3-95e2-281d21d22d14" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__bio_complete_in_task", "iomap_add_to_ioend" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19aSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jpb19jb21wbGV0ZV9pbl90YXNrJiMzNDssCiAgICAmIzM0O2lvbWFwX2FkZF90b19pb2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGluZnJhc3RydWN0dXJlIGluIHRoZSBibG9jayBsYXllciBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdmlhIGEgcGVyLUNQVSB3b3JrcXVldWUuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBmbGFnLCB3aGljaCBpcyBzZXQgaW4gZnMvYnVmZmVyLmMgYW5kIGZzL2lvbWFwL2lvZW5kLmMgd2hlbiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pIGlzIHRydWUgKGUuZy4sIHZpYSBSV0ZfRE9OVENBQ0hFIHdyaXRlcykuIFRoZSBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2sgYW5kIGludGVncmF0ZWQgaW50byBiaW9fZW5kaW8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aHMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTY6Mzk6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggNmEyZjZmYzM0MTNlOC4uYTk2MTA5NTAzMjViMCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTE3NDEsNiAmIzQzOzE3NDEsNjEgQEAgdm9pZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZiaW9fZGlydHlfd29yayk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBJbmZyYXN0cnVjdHVyZSBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrLWNvbnRleHQgdmlhIGEgcGVyLUNQVVxuJiM0MzsgKiB3b3JrcXVldWUuIFRyaWdnZXJlZCBlaXRoZXIgYnkgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIGJpbyBmbGFnIChzdGF0aWNcbiYjNDM7ICogZGVjaXNpb24gYXQgc3VibWl0IHRpbWUpIG9yIGJ5IGNhbGxpbmcgYmlvX2NvbXBsZXRlX2luX3Rhc2soKSBmcm9tXG4mIzQzOyAqIGJpX2VuZF9pbygpIChkeW5hbWljIGRlY2lzaW9uIGF0IGNvbXBsZXRpb24gdGltZSkuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCB7XG4mIzQzO1x0c3RydWN0IGJpb19saXN0IGxpc3Q7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCBiaW9fY29tcGxldGVfYmF0Y2gpO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJpb19jb21wbGV0ZV93cTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJpb19jb21wbGV0ZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCB3b3JrKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xuJiM0MztcdFx0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcbiYjNDM7XHRcdGxvY2FsX2lycV9kaXNhYmxlKCk7XG4mIzQzO1x0XHRsaXN0ID0gYmF0Y2gtXHUwMDNlbGlzdDtcbiYjNDM7XHRcdGJpb19saXN0X2luaXQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJpb19saXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZsaXN0KSkpXG4mIzQzO1x0XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8oYmlvKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgd2FzX2VtcHR5O1xuJiM0MztcbiYjNDM7XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0YmF0Y2ggPSB0aGlzX2NwdV9wdHIoXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoKTtcbiYjNDM7XHR3YXNfZW1wdHkgPSBiaW9fbGlzdF9lbXB0eShcdTAwMjZiYXRjaC1cdTAwM2VsaXN0KTtcbiYjNDM7XHRiaW9fbGlzdF9hZGQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCwgYmlvKTtcbiYjNDM7XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3YXNfZW1wdHkpXG4mIzQzO1x0XHRxdWV1ZV93b3JrX29uKGJhdGNoLVx1MDAzZWNwdSwgYmlvX2NvbXBsZXRlX3dxLCBcdTAwMjZiYXRjaC1cdTAwM2V3b3JrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19jb21wbGV0ZV9pbl90YXNrKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGJpb19yZW1haW5pbmdfZG9uZShzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0LypcbkBAIC0xODE1LDcgJiM0MzsxODcwLDkgQEAgdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0fVxuICNlbmRpZlxuIFxuLVx0aWYgKGJpby1cdTAwM2ViaV9lbmRfaW8pXG4mIzQzO1x0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spIFx1MDAyNlx1MDAyNiBiaW9faW5fYXRvbWljKCkpXG4mIzQzO1x0XHRfX2Jpb19jb21wbGV0ZV9pbl90YXNrKGJpbyk7XG4mIzQzO1x0ZWxzZSBpZiAoYmlvLVx1MDAzZWJpX2VuZF9pbylcbiBcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyhiaW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGJpb19lbmRpbyk7XG5AQCAtMjAwMSw2ICYjNDM7MjA1OCw1NSBAQCBpbnQgYmlvc2V0X2luaXQoc3RydWN0IGJpb19zZXQgKmJzLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGJpb3NldF9pbml0KTtcbiBcbiYjNDM7c3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2ggPSBcdTAwMjZwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcbiYjNDM7XG4mIzQzO1x0ZW5hYmxlX3dvcmsoXHUwMDI2YmF0Y2gtXHUwMDNld29yayk7XG4mIzQzO1x0aWYgKCFiaW9fbGlzdF9lbXB0eShcdTAwMjZiYXRjaC1cdTAwM2VsaXN0KSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmtfb24oY3B1LCBiaW9fY29tcGxldGVfd3EsIFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEaXNhYmxlIHRoaXMgQ1BVJiMzOTtzIHdvcmsgaXRlbSBzbyB0aGF0IGl0IGNhbm5vdCBydW4gb24gYW4gdW5ib3VuZCB3b3JrZXJcbiYjNDM7ICogYWZ0ZXIgdGhlIENQVSBpcyBvZmZsaW5lZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kb3duX3ByZXAodW5zaWduZWQgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoYmlvX2NvbXBsZXRlX2JhdGNoLCBjcHUpLndvcmspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBhIGRlYWQgQ1BVJiMzOTtzIGRlZmVycmVkIGJpbyBjb21wbGV0aW9ucy4gVGhlIENQVSBpcyBkZWFkIGFuZCB0aGUgd29ya2VyXG4mIzQzOyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cbiYjNDM7XHRcdHBlcl9jcHVfcHRyKFx1MDAyNmJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW87XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QpKSlcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8oYmlvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBiaW9fY29tcGxldGVfYmF0Y2hfaW5pdChpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2ggPVxuJiM0MztcdFx0cGVyX2NwdV9wdHIoXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRiaW9fbGlzdF9pbml0KFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZiYXRjaC1cdTAwM2V3b3JrLCBiaW9fY29tcGxldGVfd29ya19mbik7XG4mIzQzO1x0YmF0Y2gtXHUwMDNlY3B1ID0gY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIWNwdV9vbmxpbmUoY3B1KSlcbiYjNDM7XHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYmlvKHZvaWQpXG4ge1xuIFx0aW50IGk7XG5AQCAtMjAxNSw2ICYjNDM7MjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxuIFx0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQywgTlVMTCk7XG4gXHR9XG4gXG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXG4mIzQzO1x0XHRiaW9fY29tcGxldGVfYmF0Y2hfaW5pdChpKTtcbiYjNDM7XG4mIzQzO1x0YmlvX2NvbXBsZXRlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O2Jpb19jb21wbGV0ZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwKTtcbiYjNDM7XHRpZiAoIWJpb19jb21wbGV0ZV93cSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O2JpbzogY2FuJiMzOTt0IGFsbG9jYXRlIGJpb19jb21wbGV0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJpbyB0YXNrLWNvbnRleHQgY29tcGxldGlvbiBkcmFpbmluZyBvbiBob3QtdW5wbHVnZ2VkIENQVXM6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiAgIDEuIFN0b3AgdGhlIHBlci1DUFUgd29yayBpdGVtIHdoaWxlIHRoZSBDUFUgaXMgc3RpbGwgb25saW5lLCBzb1xuJiM0MztcdCAqICAgICAgdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyIGxhdGVyLlxuJiM0MztcdCAqICAgMi4gRHJhaW4gbGVmdG92ZXIgYmlvcyBhZGRlZCBiZXR3ZWVuIHdvcmtlciBkaXNhYmxpbmcgYW5kIENQVVxuJiM0MztcdCAqICAgICAgb2ZmbGluaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfT05MSU5FX0RZTixcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O2Jsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSxcbiYjNDM7XHRcdFx0XHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKTtcbiYjNDM7XHRjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQX0JQX1BSRVBBUkVfRFlOLFxuJiM0MztcdFx0XHRcdCAgXCYjMzQ7YmxvY2svYmlvOmNvbXBsZXRlOmRlYWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBOVUxMLCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWQpO1xuJiM0MztcbiBcdGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0JJT19ERUFELCBcJiMzNDtibG9jay9iaW86ZGVhZFwmIzM0OywgTlVMTCxcbiBcdFx0XHRcdFx0YmlvX2NwdV9kZWFkKTtcbiBcbmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmNcbmluZGV4IDE1NzgzYTYxODBkZWMuLjhiMzljNTNiNjM5MzQgMTAwNjQ0XG4tLS0gYS9ibG9jay9mb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2ZvcHMuY1xuQEAgLTk0MSw3ICYjNDM7OTQxLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7XG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQuZmFsbG9jYXRlXHQ9IGJsa2Rldl9mYWxsb2NhdGUsXG4gXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG4tXHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DLFxuJiM0MztcdC5mb3BfZmxhZ3NcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxuIH07XG4gXG4gc3RhdGljIF9faW5pdCBpbnQgYmxrZGV2X2luaXQodm9pZClcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCA5YWY1ZjA2MWExZjg1Li42ZjA5OTg0NzI0MGUwIDEwMDY0NFxuLS0tIGEvZnMvYnVmZmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J1ZmZlci5jXG5AQCAtMTIwMyw2ICYjNDM7MTIwMyw5IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXG4gXHRiaW8gPSBiaW9fYWxsb2MoYmgtXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcbiBcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuJiM0MztcdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcbiBcdFx0YnVmZmVyX3NldF9jcnlwdG9fY3R4KGJpbywgYmgsIEdGUF9OT0lPKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy96ZGF0YS5jIGIvZnMvZXJvZnMvemRhdGEuY1xuaW5kZXggNzQ1MjBlOTEwMjU5Ni4uZjc5NmJiM2VmNTNiOSAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3pkYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3pkYXRhLmNcbkBAIC0xNDI3LDE1ICYjNDM7MTQyNyw2IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlX2t0aHJlYWRfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuIH1cbiAjZW5kaWZcbiBcbi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgel9lcm9mc19pbl9hdG9taWModm9pZClcbi17XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gIXByZWVtcHRpYmxlKCk7XG4tfVxuIFxuIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXG4gXHRcdFx0XHQgICAgICAgaW50IGJpb3MpXG5AQCAtMTQ1Miw3ICYjNDM7MTQ0Myw3IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXG4gXG4gXHRpZiAoYXRvbWljX2FkZF9yZXR1cm4oYmlvcywgXHUwMDI2aW8tXHUwMDNlcGVuZGluZ19iaW9zKSlcbiBcdFx0cmV0dXJuO1xuLVx0aWYgKHpfZXJvZnNfaW5fYXRvbWljKCkpIHtcbiYjNDM7XHRpZiAoYmlvX2luX2F0b21pYygpKSB7XG4gXHRcdC8qIFNlZSBgc3luY19kZWNvbXByZXNzYCBpbiBzeXNmcy1mcy1lcm9mcyBmb3IgbW9yZSBkZXRhaWxzICovXG4gXHRcdGlmIChzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID09IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPKVxuIFx0XHRcdHNiaS1cdTAwM2VzeW5jX2RlY29tcHJlc3MgPSBFUk9GU19TWU5DX0RFQ09NUFJFU1NfRk9SQ0VfT047XG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcbmluZGV4IDMwNDY4ZDUxYjVhZDcuLjFhZThhOGZiODUwMzggMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9pb2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9pb2VuZC5jXG5AQCAtMjM4LDggJiM0MzsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0aWYgKHdwYy1cdTAwM2Vpb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9TSEFSRUQpXG4gXHRcdGlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX1NIQVJFRDtcbi1cdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuLVx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9ET05UQ0FDSEU7XG4gXHRpZiAocG9zID09IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgXHUwMDI2XHUwMDI2ICh3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgXHUwMDI2IElPTUFQX0ZfQk9VTkRBUlkpKVxuIFx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9CT1VOREFSWTtcbiBcbkBAIC0yNTYsNiAmIzQzOzI1NCw5IEBAIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRpZiAoIWJpb19hZGRfZm9saW8oXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvLCBmb2xpbywgbWFwX2xlbiwgcG9mZikpXG4gXHRcdGdvdG8gbmV3X2lvZW5kO1xuIFxuJiM0MztcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuJiM0MztcdFx0YmlvX3NldF9mbGFnKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBDbGFtcCBpb19vZmZzZXQgYW5kIGlvX3NpemUgdG8gdGhlIGluY29yZSBFT0Ygc28gdGhhdCBvbmRpc2tcbiBcdCAqIGZpbGUgc2l6ZSB1cGRhdGVzIGluIHRoZSBpb2VuZCBjb21wbGV0aW9uIGFyZSBieXRlLWFjY3VyYXRlLlxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmNcbmluZGV4IDUxMjkzYjZmMzMxZjAuLmNkOGRlOGM4MmQ3OGMgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC01MjIsMTAgJiM0Mzs1MjIsNiBAQCB4ZnNfaW9lbmRfbmVlZHNfd3FfY29tcGxldGlvbihcbiBcdGlmIChpb2VuZC1cdTAwM2Vpb19mbGFncyBcdTAwMjYgKElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX1NIQVJFRCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0LyogUGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gY2Fubm90IGJlIGRvbmUgaW4gaXJxIGNvbnRleHQuICovXG4tXHRpZiAoaW9lbmQtXHUwMDNlaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0lPRU5EX0RPTlRDQUNIRSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oXG5pbmRleCA4ZjMzZjcxN2IxNGY1Li5hODA5MWEzZTlkODcyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW8uaFxuQEAgLTM2OCw2ICYjNDM7MzY4LDQ1IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqYmlvX2FsbG9jKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXG4gdm9pZCBzdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBiaW9faW5fYXRvbWljIC0gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyB1bnNhZmUgZm9yIGJpbyBjb21wbGV0aW9uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogJXRydWUgaW4gYXRvbWljIGNvbnRleHRzIChlLmcuIGhhcmQvc29mdCBJUlEsIHByZWVtcHQtZGlzYWJsZWQpO1xuJiM0MzsgKiAlZmFsc2Ugd2hlbiBhIGJpbyBjYW4gYmUgc2FmZWx5IGNvbXBsZXRlZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpb19pbl9hdG9taWModm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gIXByZWVtcHRpYmxlKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJpb19jb21wbGV0ZV9pbl90YXNrIC0gZW5zdXJlIGEgYmlvIGlzIGNvbXBsZXRlZCBpbiBwcmVlbXB0aWJsZSB0YXNrIGNvbnRleHRcbiYjNDM7ICogQGJpbzogYmlvIHRvIGNvbXBsZXRlXG4mIzQzOyAqXG4mIzQzOyAqIElmIGNhbGxlZCBmcm9tIG5vbi10YXNrIGNvbnRleHQsIG9mZmxvYWQgdGhlIGJpbyBjb21wbGV0aW9uIHRvIGEgd29ya2VyXG4mIzQzOyAqIHRocmVhZCBhbmQgcmV0dXJuICV0cnVlLiBFbHNlIHJldHVybiAlZmFsc2UgYW5kIGRvIG5vdGhpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgQklPX0NPTVBMRVRFX0lOX1RBU0sgYXMgYSBzZW50aW5lbDogaWYgc2V0LCB0aGUgYmlvIHdhcyBhbHJlYWR5XG4mIzQzOyAqIGRlZmVycmVkIGFuZCB3ZSBhcmUgcnVubmluZyBpbiB0aGUgd29ya2VyIOKAlCByZXR1cm4gJWZhbHNlIHNvIHRoZVxuJiM0MzsgKiBjYWxsYmFjayBwcm9jZWVkcyBpbnN0ZWFkIG9mIHJlLWRlZmVycmluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFiaW9faW5fYXRvbWljKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBleHRlcm4gdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggODgwOGVlNzZlNzNjMC4uZDQ5ZDk3YTA1MGQwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC0zMjIsNiAmIzQzOzMyMiw3IEBAIGVudW0ge1xuIFx0QklPX1JFTUFQUEVELFxuIFx0QklPX1pPTkVfV1JJVEVfUExVR0dJTkcsIC8qIGJpbyBoYW5kbGVkIHRocm91Z2ggem9uZSB3cml0ZSBwbHVnZ2luZyAqL1xuIFx0QklPX0VNVUxBVEVTX1pPTkVfQVBQRU5ELCAvKiBiaW8gZW11bGF0ZXMgYSB6b25lIGFwcGVuZCBvcGVyYXRpb24gKi9cbiYjNDM7XHRCSU9fQ09NUExFVEVfSU5fVEFTSywgLyogY29tcGxldGUgYmlfZW5kX2lvKCkgaW4gdGFzayBjb250ZXh0ICovXG4gXHRCSU9fRkxBR19MQVNUXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IDU2YjQzZDU5NGU2ZTIuLjY4YWY0OTM1YTEwN2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuQEAgLTQwNCwxNiAmIzQzOzQwNCwxMyBAQCBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gI2RlZmluZSBJT01BUF9JT0VORF9CT1VOREFSWVx0XHQoMVUgXHUwMDNjXHUwMDNjIDIpXG4gLyogaXMgZGlyZWN0IEkvTyAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUXHRcdCgxVSBcdTAwM2NcdTAwM2MgMylcbi0vKiBpcyBET05UQ0FDSEUgSS9PICovXG4tI2RlZmluZSBJT01BUF9JT0VORF9ET05UQ0FDSEVcdFx0KDFVIFx1MDAzY1x1MDAzYyA0KVxuIFxuIC8qXG4gICogRmxhZ3MgdGhhdCBpZiBzZXQgb24gZWl0aGVyIGlvZW5kIHByZXZlbnQgdGhlIG1lcmdlIG9mIHR3byBpb2VuZHMuXG4gICogKElPTUFQX0lPRU5EX0JPVU5EQVJZIGFsc28gcHJldmVudHMgbWVyZ2VzLCBidXQgb25seSBvbmUtd2F5KVxuICAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfTk9NRVJHRV9GTEFHUyBcXFxuLVx0KElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVCB8IFxcXG4tXHQgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKVxuJiM0MztcdChJT01BUF9JT0VORF9TSEFSRUQgfCBJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9ESVJFQ1QpXG4gXG4gLypcbiAgKiBTdHJ1Y3R1cmUgZm9yIHdyaXRlYmFjayBJL08gY29tcGxldGlvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JVRkZFUl9IRUFEJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19aSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jpb19jb21wbGV0ZV9pbl90YXNrJiMzNDssCiAgICAmIzM0O2lvbWFwX2FkZF90b19pb2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGluZnJhc3RydWN0dXJlIGluIHRoZSBibG9jayBsYXllciBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdmlhIGEgcGVyLUNQVSB3b3JrcXVldWUuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBmbGFnLCB3aGljaCBpcyBzZXQgaW4gZnMvYnVmZmVyLmMgYW5kIGZzL2lvbWFwL2lvZW5kLmMgd2hlbiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pIGlzIHRydWUgKGUuZy4sIHZpYSBSV0ZfRE9OVENBQ0hFIHdyaXRlcykuIFRoZSBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2sgYW5kIGludGVncmF0ZWQgaW50byBiaW9fZW5kaW8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aHMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTY6Mzk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jCmluZGV4IDZhMmY2ZmMzNDEzZTguLmE5NjEwOTUwMzI1YjAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC0xNzQxLDYgJiM0MzsxNzQxLDYxIEBAIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbykKIAlzY2hlZHVsZV93b3JrKCZhbXA7YmlvX2RpcnR5X3dvcmspOwogfQogCiYjNDM7LyoKJiM0MzsgKiBJbmZyYXN0cnVjdHVyZSBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrLWNvbnRleHQgdmlhIGEgcGVyLUNQVQomIzQzOyAqIHdvcmtxdWV1ZS4gVHJpZ2dlcmVkIGVpdGhlciBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgYmlvIGZsYWcgKHN0YXRpYwomIzQzOyAqIGRlY2lzaW9uIGF0IHN1Ym1pdCB0aW1lKSBvciBieSBjYWxsaW5nIGJpb19jb21wbGV0ZV9pbl90YXNrKCkgZnJvbQomIzQzOyAqIGJpX2VuZF9pbygpIChkeW5hbWljIGRlY2lzaW9uIGF0IGNvbXBsZXRpb24gdGltZSkuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCB7CiYjNDM7CXN0cnVjdCBiaW9fbGlzdCBsaXN0OwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJaW50IGNwdTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCBiaW9fY29tcGxldGVfYmF0Y2gpOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmlvX2NvbXBsZXRlX3dxOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJpb19jb21wbGV0ZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCB3b3JrKTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXN0cnVjdCBiaW9fbGlzdCBsaXN0OwomIzQzOwkJc3RydWN0IGJpbyAqYmlvOwomIzQzOwomIzQzOwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKJiM0MzsJCWxpc3QgPSBiYXRjaC0mZ3Q7bGlzdDsKJiM0MzsJCWJpb19saXN0X2luaXQoJmFtcDtiYXRjaC0mZ3Q7bGlzdCk7CiYjNDM7CQlsb2NhbF9pcnFfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CQlpZiAoYmlvX2xpc3RfZW1wdHkoJmFtcDtsaXN0KSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZhbXA7bGlzdCkpKQomIzQzOwkJCWJpby0mZ3Q7YmlfZW5kX2lvKGJpbyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlib29sIHdhc19lbXB0eTsKJiM0MzsKJiM0MzsJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwliYXRjaCA9IHRoaXNfY3B1X3B0cigmYW1wO2Jpb19jb21wbGV0ZV9iYXRjaCk7CiYjNDM7CXdhc19lbXB0eSA9IGJpb19saXN0X2VtcHR5KCZhbXA7YmF0Y2gtJmd0O2xpc3QpOwomIzQzOwliaW9fbGlzdF9hZGQoJmFtcDtiYXRjaC0mZ3Q7bGlzdCwgYmlvKTsKJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAod2FzX2VtcHR5KQomIzQzOwkJcXVldWVfd29ya19vbihiYXRjaC0mZ3Q7Y3B1LCBiaW9fY29tcGxldGVfd3EsICZhbXA7YmF0Y2gtJmd0O3dvcmspOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19jb21wbGV0ZV9pbl90YXNrKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fcmVtYWluaW5nX2RvbmUoc3RydWN0IGJpbyAqYmlvKQogewogCS8qCkBAIC0xODE1LDcgJiM0MzsxODcwLDkgQEAgdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKQogCX0KICNlbmRpZgogCi0JaWYgKGJpby0mZ3Q7YmlfZW5kX2lvKQomIzQzOwlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykgJmFtcDsmYW1wOyBiaW9faW5fYXRvbWljKCkpCiYjNDM7CQlfX2Jpb19jb21wbGV0ZV9pbl90YXNrKGJpbyk7CiYjNDM7CWVsc2UgaWYgKGJpby0mZ3Q7YmlfZW5kX2lvKQogCQliaW8tJmd0O2JpX2VuZF9pbyhiaW8pOwogfQogRVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pOwpAQCAtMjAwMSw2ICYjNDM7MjA1OCw1NSBAQCBpbnQgYmlvc2V0X2luaXQoc3RydWN0IGJpb19zZXQgKmJzLAogfQogRVhQT1JUX1NZTUJPTChiaW9zZXRfaW5pdCk7CiAKJiM0MztzdGF0aWMgaW50IGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9ICZhbXA7cGVyX2NwdShiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7CiYjNDM7CiYjNDM7CWVuYWJsZV93b3JrKCZhbXA7YmF0Y2gtJmd0O3dvcmspOwomIzQzOwlpZiAoIWJpb19saXN0X2VtcHR5KCZhbXA7YmF0Y2gtJmd0O2xpc3QpKQomIzQzOwkJcXVldWVfd29ya19vbihjcHUsIGJpb19jb21wbGV0ZV93cSwgJmFtcDtiYXRjaC0mZ3Q7d29yayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERpc2FibGUgdGhpcyBDUFUmIzM5O3Mgd29yayBpdGVtIHNvIHRoYXQgaXQgY2Fubm90IHJ1biBvbiBhbiB1bmJvdW5kIHdvcmtlcgomIzQzOyAqIGFmdGVyIHRoZSBDUFUgaXMgb2ZmbGluZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2Rvd25fcHJlcCh1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJZGlzYWJsZV93b3JrX3N5bmMoJmFtcDtwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KS53b3JrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRHJhaW4gYSBkZWFkIENQVSYjMzk7cyBkZWZlcnJlZCBiaW8gY29tcGxldGlvbnMuIFRoZSBDUFUgaXMgZGVhZCBhbmQgdGhlIHdvcmtlcgomIzQzOyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9CiYjNDM7CQlwZXJfY3B1X3B0cigmYW1wO2Jpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTsKJiM0MzsJc3RydWN0IGJpbyAqYmlvOwomIzQzOwomIzQzOwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYW1wO2JhdGNoLSZndDtsaXN0KSkpCiYjNDM7CQliaW8tJmd0O2JpX2VuZF9pbyhiaW8pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGJpb19jb21wbGV0ZV9iYXRjaF9pbml0KGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9CiYjNDM7CQlwZXJfY3B1X3B0cigmYW1wO2Jpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTsKJiM0MzsKJiM0MzsJYmlvX2xpc3RfaW5pdCgmYW1wO2JhdGNoLSZndDtsaXN0KTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7YmF0Y2gtJmd0O3dvcmssIGJpb19jb21wbGV0ZV93b3JrX2ZuKTsKJiM0MzsJYmF0Y2gtJmd0O2NwdSA9IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFjcHVfb25saW5lKGNwdSkpCiYjNDM7CQlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2JhdGNoLSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKQogewogCWludCBpOwpAQCAtMjAxNSw2ICYjNDM7MjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKQogCQkJCVNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMsIE5VTEwpOwogCX0KIAomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKJiM0MzsJCWJpb19jb21wbGV0ZV9iYXRjaF9pbml0KGkpOwomIzQzOwomIzQzOwliaW9fY29tcGxldGVfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtiaW9fY29tcGxldGUmIzM0OywKJiM0MzsJCQkJCSAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwKTsKJiM0MzsJaWYgKCFiaW9fY29tcGxldGVfd3EpCiYjNDM7CQlwYW5pYygmIzM0O2JpbzogY2FuJiMzOTt0IGFsbG9jYXRlIGJpb19jb21wbGV0ZSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogYmlvIHRhc2stY29udGV4dCBjb21wbGV0aW9uIGRyYWluaW5nIG9uIGhvdC11bnBsdWdnZWQgQ1BVczoKJiM0MzsJICoKJiM0MzsJICogICAxLiBTdG9wIHRoZSBwZXItQ1BVIHdvcmsgaXRlbSB3aGlsZSB0aGUgQ1BVIGlzIHN0aWxsIG9ubGluZSwgc28KJiM0MzsJICogICAgICB0aGF0IGl0IGNhbm5vdCBydW4gb24gYW4gdW5ib3VuZCB3b3JrZXIgbGF0ZXIuCiYjNDM7CSAqICAgMi4gRHJhaW4gbGVmdG92ZXIgYmlvcyBhZGRlZCBiZXR3ZWVuIHdvcmtlciBkaXNhYmxpbmcgYW5kIENQVQomIzQzOwkgKiAgICAgIG9mZmxpbmluZy4KJiM0MzsJICovCiYjNDM7CWNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfT05MSU5FX0RZTiwKJiM0MzsJCQkJICAmIzM0O2Jsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmUmIzM0OywKJiM0MzsJCQkJICBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSwKJiM0MzsJCQkJICBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2Rvd25fcHJlcCk7CiYjNDM7CWNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQlBfUFJFUEFSRV9EWU4sCiYjNDM7CQkJCSAgJiMzNDtibG9jay9iaW86Y29tcGxldGU6ZGVhZCYjMzQ7LAomIzQzOwkJCQkgIE5VTEwsIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZGVhZCk7CiYjNDM7CiAJY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQklPX0RFQUQsICYjMzQ7YmxvY2svYmlvOmRlYWQmIzM0OywgTlVMTCwKIAkJCQkJYmlvX2NwdV9kZWFkKTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jCmluZGV4IDE1NzgzYTYxODBkZWMuLjhiMzljNTNiNjM5MzQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2ZvcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9mb3BzLmMKQEAgLTk0MSw3ICYjNDM7OTQxLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7CiAJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiAJLmZhbGxvY2F0ZQk9IGJsa2Rldl9mYWxsb2NhdGUsCiAJLnVyaW5nX2NtZAk9IGJsa2Rldl91cmluZ19jbWQsCi0JLmZvcF9mbGFncwk9IEZPUF9CVUZGRVJfUkFTWU5DLAomIzQzOwkuZm9wX2ZsYWdzCT0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgYmxrZGV2X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggOWFmNWYwNjFhMWY4NS4uNmYwOTk4NDcyNDBlMCAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTEyMDMsNiAmIzQzOzEyMDMsOSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLAogCiAJYmlvID0gYmlvX2FsbG9jKGJoLSZndDtiX2JkZXYsIDEsIG9wZiwgR0ZQX05PSU8pOwogCiYjNDM7CWlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtJmd0O2JfZm9saW8pICZhbXA7JmFtcDsgb3BfaXNfd3JpdGUob3BmKSkKJiM0MzsJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKJiM0MzsKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpCiAJCWJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3pkYXRhLmMgYi9mcy9lcm9mcy96ZGF0YS5jCmluZGV4IDc0NTIwZTkxMDI1OTYuLmY3OTZiYjNlZjUzYjkgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL3pkYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvemRhdGEuYwpAQCAtMTQyNywxNSAmIzQzOzE0MjcsNiBAQCBzdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZV9rdGhyZWFkX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIH0KICNlbmRpZgogCi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCB6X2Vyb2ZzX2luX2F0b21pYyh2b2lkKQotewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKCkpCi0JCXJldHVybiB0cnVlOwotCWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiAhcHJlZW1wdGlibGUoKTsKLX0KIAogc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbywKIAkJCQkgICAgICAgaW50IGJpb3MpCkBAIC0xNDUyLDcgJiM0MzsxNDQzLDcgQEAgc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbywKIAogCWlmIChhdG9taWNfYWRkX3JldHVybihiaW9zLCAmYW1wO2lvLSZndDtwZW5kaW5nX2Jpb3MpKQogCQlyZXR1cm47Ci0JaWYgKHpfZXJvZnNfaW5fYXRvbWljKCkpIHsKJiM0MzsJaWYgKGJpb19pbl9hdG9taWMoKSkgewogCQkvKiBTZWUgYHN5bmNfZGVjb21wcmVzc2AgaW4gc3lzZnMtZnMtZXJvZnMgZm9yIG1vcmUgZGV0YWlscyAqLwogCQlpZiAoc2JpLSZndDtzeW5jX2RlY29tcHJlc3MgPT0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE8pCiAJCQlzYmktJmd0O3N5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19GT1JDRV9PTjsKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jCmluZGV4IDMwNDY4ZDUxYjVhZDcuLjFhZThhOGZiODUwMzggMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2lvZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvaW9lbmQuYwpAQCAtMjM4LDggJiM0MzsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJaWYgKHdwYy0mZ3Q7aW9tYXAuZmxhZ3MgJmFtcDsgSU9NQVBfRl9TSEFSRUQpCiAJCWlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX1NIQVJFRDsKLQlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKLQkJaW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfRE9OVENBQ0hFOwogCWlmIChwb3MgPT0gd3BjLSZndDtpb21hcC5vZmZzZXQgJmFtcDsmYW1wOyAod3BjLSZndDtpb21hcC5mbGFncyAmYW1wOyBJT01BUF9GX0JPVU5EQVJZKSkKIAkJaW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfQk9VTkRBUlk7CiAKQEAgLTI1Niw2ICYjNDM7MjU0LDkgQEAgc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlpZiAoIWJpb19hZGRfZm9saW8oJmFtcDtpb2VuZC0mZ3Q7aW9fYmlvLCBmb2xpbywgbWFwX2xlbiwgcG9mZikpCiAJCWdvdG8gbmV3X2lvZW5kOwogCiYjNDM7CWlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKQomIzQzOwkJYmlvX3NldF9mbGFnKCZhbXA7aW9lbmQtJmd0O2lvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwomIzQzOwogCS8qCiAJICogQ2xhbXAgaW9fb2Zmc2V0IGFuZCBpb19zaXplIHRvIHRoZSBpbmNvcmUgRU9GIHNvIHRoYXQgb25kaXNrCiAJICogZmlsZSBzaXplIHVwZGF0ZXMgaW4gdGhlIGlvZW5kIGNvbXBsZXRpb24gYXJlIGJ5dGUtYWNjdXJhdGUuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jCmluZGV4IDUxMjkzYjZmMzMxZjAuLmNkOGRlOGM4MmQ3OGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYW9wcy5jCkBAIC01MjIsMTAgJiM0Mzs1MjIsNiBAQCB4ZnNfaW9lbmRfbmVlZHNfd3FfY29tcGxldGlvbigKIAlpZiAoaW9lbmQtJmd0O2lvX2ZsYWdzICZhbXA7IChJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9TSEFSRUQpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCS8qIFBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGNhbm5vdCBiZSBkb25lIGluIGlycSBjb250ZXh0LiAqLwotCWlmIChpb2VuZC0mZ3Q7aW9fZmxhZ3MgJmFtcDsgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKQotCQlyZXR1cm4gdHJ1ZTsKLQogCXJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggOGYzM2Y3MTdiMTRmNS4uYTgwOTFhM2U5ZDg3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC0zNjgsNiAmIzQzOzM2OCw0NSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCiB2b2lkIHN1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKTsKIAomIzQzOy8qKgomIzQzOyAqIGJpb19pbl9hdG9taWMgLSBjaGVjayBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHVuc2FmZSBmb3IgYmlvIGNvbXBsZXRpb24KJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaW4gYXRvbWljIGNvbnRleHRzIChlLmcuIGhhcmQvc29mdCBJUlEsIHByZWVtcHQtZGlzYWJsZWQpOwomIzQzOyAqICVmYWxzZSB3aGVuIGEgYmlvIGNhbiBiZSBzYWZlbHkgY29tcGxldGVkIGluIHRoZSBjdXJyZW50IGNvbnRleHQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpb19pbl9hdG9taWModm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gIXByZWVtcHRpYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJpb19jb21wbGV0ZV9pbl90YXNrIC0gZW5zdXJlIGEgYmlvIGlzIGNvbXBsZXRlZCBpbiBwcmVlbXB0aWJsZSB0YXNrIGNvbnRleHQKJiM0MzsgKiBAYmlvOiBiaW8gdG8gY29tcGxldGUKJiM0MzsgKgomIzQzOyAqIElmIGNhbGxlZCBmcm9tIG5vbi10YXNrIGNvbnRleHQsIG9mZmxvYWQgdGhlIGJpbyBjb21wbGV0aW9uIHRvIGEgd29ya2VyCiYjNDM7ICogdGhyZWFkIGFuZCByZXR1cm4gJXRydWUuIEVsc2UgcmV0dXJuICVmYWxzZSBhbmQgZG8gbm90aGluZy4KJiM0MzsgKgomIzQzOyAqIFVzZXMgQklPX0NPTVBMRVRFX0lOX1RBU0sgYXMgYSBzZW50aW5lbDogaWYgc2V0LCB0aGUgYmlvIHdhcyBhbHJlYWR5CiYjNDM7ICogZGVmZXJyZWQgYW5kIHdlIGFyZSBydW5uaW5nIGluIHRoZSB3b3JrZXIg4oCUIHJldHVybiAlZmFsc2Ugc28gdGhlCiYjNDM7ICogY2FsbGJhY2sgcHJvY2VlZHMgaW5zdGVhZCBvZiByZS1kZWZlcnJpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbykKJiM0Mzt7CiYjNDM7CWlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFiaW9faW5fYXRvbWljKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKJiM0MzsJX19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBleHRlcm4gdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqKTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAppbmRleCA4ODA4ZWU3NmU3M2MwLi5kNDlkOTdhMDUwZDBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKQEAgLTMyMiw2ICYjNDM7MzIyLDcgQEAgZW51bSB7CiAJQklPX1JFTUFQUEVELAogCUJJT19aT05FX1dSSVRFX1BMVUdHSU5HLCAvKiBiaW8gaGFuZGxlZCB0aHJvdWdoIHpvbmUgd3JpdGUgcGx1Z2dpbmcgKi8KIAlCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQsIC8qIGJpbyBlbXVsYXRlcyBhIHpvbmUgYXBwZW5kIG9wZXJhdGlvbiAqLwomIzQzOwlCSU9fQ09NUExFVEVfSU5fVEFTSywgLyogY29tcGxldGUgYmlfZW5kX2lvKCkgaW4gdGFzayBjb250ZXh0ICovCiAJQklPX0ZMQUdfTEFTVAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTIuLjY4YWY0OTM1YTEwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTQwNCwxNiAmIzQzOzQwNCwxMyBAQCBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sCiAjZGVmaW5lIElPTUFQX0lPRU5EX0JPVU5EQVJZCQkoMVUgJmx0OyZsdDsgMikKIC8qIGlzIGRpcmVjdCBJL08gKi8KICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUCQkoMVUgJmx0OyZsdDsgMykKLS8qIGlzIERPTlRDQUNIRSBJL08gKi8KLSNkZWZpbmUgSU9NQVBfSU9FTkRfRE9OVENBQ0hFCQkoMVUgJmx0OyZsdDsgNCkKIAogLyoKICAqIEZsYWdzIHRoYXQgaWYgc2V0IG9uIGVpdGhlciBpb2VuZCBwcmV2ZW50IHRoZSBtZXJnZSBvZiB0d28gaW9lbmRzLgogICogKElPTUFQX0lPRU5EX0JPVU5EQVJZIGFsc28gcHJldmVudHMgbWVyZ2VzLCBidXQgb25seSBvbmUtd2F5KQogICovCiAjZGVmaW5lIElPTUFQX0lPRU5EX05PTUVSR0VfRkxBR1MgXAotCShJT01BUF9JT0VORF9TSEFSRUQgfCBJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9ESVJFQ1QgfCBcCi0JIElPTUFQX0lPRU5EX0RPTlRDQUNIRSkKJiM0MzsJKElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVCkKIAogLyoKICAqIFN0cnVjdHVyZSBmb3Igd3JpdGViYWNrIEkvTyBjb21wbGV0aW9ucy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBMYXllciBQYXRjaCBmb3IgRGVmZXJyZWQgQmlvIENvbXBsZXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgZGVmZXJzIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdXNpbmcgYSBwZXItQ1BVIHdvcmtxdWV1ZS4gTG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBhIGxvdCBvZiBjb3JlIGZpbGVzOiBgYmxvY2svYmlvLmNgLCBgYmxvY2svZm9wcy5jYCwgYGZzL2J1ZmZlci5jYCwgc29tZSBvZiB0aGUgZmlsZSBzeXN0ZW1zLCBhbmQgYSBmZXcgaW5jbHVkZSBmaWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuCgpCYXNlZCBvbiB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGltcGxlbWVudGF0aW9uLiBJdCBhZGRzIHRoZSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBiaW9fY29tcGxldGVfaW5fdGFza2AgZnVuY3Rpb25zLCBhbmQgc2V0cyB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnIGluIGBmcy9idWZmZXIuY2AgYW5kIGBmcy9pb21hcC9pb2VuZC5jYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zIHJlbGF0ZWQgdG8gYGZvbGlvX3Rlc3RfZHJvcGJlaGluZGAuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGBiaW9fZW5kaW9gIHRvIGNoZWNrIGZvciB0aGlzIG5ldyBmbGFnIGFuZCBhdG9taWMgY29udGV4dCwgY2FsbGluZyBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaWYgbmVlZGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBtb3JlIGluLWRlcHRoIGFuYWx5c2lzLiBUaGUgY29yZSBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCwgYGJpb19jb21wbGV0ZV93b3JrX2ZuYCwgYGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lYCwgYGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwYCwgYW5kIGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWRgLiBBaCwgd2FpdC4uLiBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaXMgZXhwb3J0ZWQhIFRoaXMgbWFrZXMgaXQgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZWdyYXRpb24gb3IgaW50ZXJhY3Rpb24uCgpMb29raW5nIGZ1cnRoZXIsIGBiaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBiaW9faW5fYXRvbWljYCBhcmUgaW5saW5lZC4gR29pbmcgYmFjayB0byBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGBfX2JoX3N1Ym1pdGAgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUuLi4gYF9fYmhfc3VibWl0YCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZXhwb3N1cmUuIEhvd2V2ZXIsIGBpb21hcF9hZGRfdG9faW9lbmRgIGlzbiYjMzk7dCBzdGF0aWMsIGFuZCBJIHRoaW5rIGl0JiMzOTtzIGV4cG9ydGVkLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBiZSBhIGtleSBpbnRlZ3JhdGlvbiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9hZGRfdG9faW9lbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svZm9wcy5jPTUyMj1zdGF0aWMgc3NpemVfdCBibGtkZXZfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuYmxvY2svZm9wcy5jLTUzOS1cbmJsb2NrL2ZvcHMuYzo1NDA6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmJsb2NrL2ZvcHMuYy01NDEtfVxuLS1cbmZzL2V4ZmF0L2lvbWFwLmM9MjAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuLS1cbmZzL2V4ZmF0L2lvbWFwLmMtMjEyLVxuZnMvZXhmYXQvaW9tYXAuYzoyMTM6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL2V4ZmF0L2lvbWFwLmMtMjE0LX1cbi0tXG5mcy9nZnMyL2JtYXAuYz0yNTA2PXN0YXRpYyBzc2l6ZV90IGdmczJfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvZ2ZzMi9ibWFwLmMtMjUyMS1cbmZzL2dmczIvYm1hcC5jOjI1MjI6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL2dmczIvYm1hcC5jLTI1MjMtfVxuLS1cbmZzL2lvbWFwL2lvZW5kLmM9MTczPXN0YXRpYyBib29sIGlvbWFwX2Nhbl9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgbG9mZl90IHBvcyxcbi0tXG5mcy9pb21hcC9pb2VuZC5jLTIxMS0gKi9cbmZzL2lvbWFwL2lvZW5kLmM6MjEyOnNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9pb21hcC9pb2VuZC5jLTIxMy1cdFx0bG9mZl90IHBvcywgbG9mZl90IGVuZF9wb3MsIHVuc2lnbmVkIGludCBkaXJ0eV9sZW4pXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy0yMjEtXG5mcy9pb21hcC9pb2VuZC5jOjIyMjpcdHRyYWNlX2lvbWFwX2FkZF90b19pb2VuZCh3cGMtXHUwMDNlaW5vZGUsIHBvcywgZGlydHlfbGVuLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXApO1xuZnMvaW9tYXAvaW9lbmQuYy0yMjMtXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy0zMTEtfVxuZnMvaW9tYXAvaW9lbmQuYzozMTI6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfYWRkX3RvX2lvZW5kKTtcbmZzL2lvbWFwL2lvZW5kLmMtMzEzLVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9MTc0PURFRklORV9JT01BUF9FVkVOVChpb21hcF9pdGVyX3NyY21hcCk7XG5mcy9pb21hcC90cmFjZS5oLTE3NS1cbmZzL2lvbWFwL3RyYWNlLmg6MTc2OlRSQUNFX0VWRU5UKGlvbWFwX2FkZF90b19pb2VuZCxcbmZzL2lvbWFwL3RyYWNlLmgtMTc3LVx0VFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHBvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbixcbi0tXG5mcy9udGZzL2lvbWFwLmM9Nzk4PXN0YXRpYyBzc2l6ZV90IG50ZnNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTgxMi1cbmZzL250ZnMvaW9tYXAuYzo4MTM6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL250ZnMvaW9tYXAuYy04MTQtfVxuLS1cbmZzL250ZnMzL2lub2RlLmM9OTU0PXN0YXRpYyBzc2l6ZV90IG50ZnNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy05ODEtXG5mcy9udGZzMy9pbm9kZS5jOjk4MjpcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuZnMvbnRmczMvaW5vZGUuYy05ODMtfVxuLS1cbmZzL3hmcy94ZnNfYW9wcy5jPTQ5Nj14ZnNfd3JpdGViYWNrX3JhbmdlKFxuLS1cbmZzL3hmcy94ZnNfYW9wcy5jLTUwNi1cdGlmICghcmV0KVxuZnMveGZzL3hmc19hb3BzLmM6NTA3Olx0XHRyZXQgPSBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuZnMveGZzL3hmc19hb3BzLmMtNTA4LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy94ZnMveGZzX2FvcHMuYz02NDI9eGZzX3pvbmVkX3dyaXRlYmFja19yYW5nZShcbi0tXG5mcy94ZnMveGZzX2FvcHMuYy02NTItXHRpZiAoIXJldClcbmZzL3hmcy94ZnNfYW9wcy5jOjY1MzpcdFx0cmV0ID0gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL3hmcy94ZnNfYW9wcy5jLTY1NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvem9uZWZzL2ZpbGUuYz0xMjg9c3RhdGljIHNzaXplX3Qgem9uZWZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuLS1cbmZzL3pvbmVmcy9maWxlLmMtMTQ5LVxuZnMvem9uZWZzL2ZpbGUuYzoxNTA6XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcbmZzL3pvbmVmcy9maWxlLmMtMTUxLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9NDg4PXZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCk7XG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6NDg5OnNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtNDkwLVx0XHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgSU8gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIGdvb2QgZW50cnkgcG9pbnRzIHRvIGFuYWx5emUgdGhlIElPIHBhdGguIGBpb21hcF9hZGRfdG9faW9lbmRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGFjcm9zcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBJIGNhbiBzaW5rIG15IHRlZXRoIGludG8uCgpUaGVuIHRoZXJlJiMzOTtzIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYC4gQW5vdGhlciBnb29kIG9uZSwgZXhwb3J0ZWQsIG9mZmVyaW5nIHNpbWlsYXIgcG90ZW50aWFsLiBJ4oCZbGwgbWFrZSBhIG5vdGUgb2YgdGhpcyB0byBnZXQgYSBiaWdnZXItcGljdHVyZSBzZW5zZSBvZiB0aGUgZnVsbCBlY29zeXN0ZW0uCgpOb3csIHdoYXQgYWJvdXQgYGJpb19lbmRpb2A/IFRlbXB0aW5nLCBiZWNhdXNlIGl0JiMzOTtzIG1vZGlmaWVkLCBidXQgZ2l2ZW4gaG93IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHRoaXMgaXMsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBnZXR0aW5nIGluIHRoZSB3YXkgb24gdGhhdCAmIzM0O2hvdCBwYXRoLiYjMzQ7IEkgc2hvdWxkIHByb2JhYmx5IGF2b2lkIHRoYXQgb25lLCBhcyBpdCB3b3VsZCBiZSB0b28gbXVjaCBkaXNydXB0aW9uIGFuZCBtYWtlIG1lYXN1cmVtZW50cyBsZXNzIHJlbGlhYmxlLgoKSG1tLCB3aGF0IGFib3V0IGBfX2JoX3N1Ym1pdGA/IEl04oCZcyBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgYSBub24tc3RhcnRlci4gQnV0IHRoYXQgbWFrZXMgbWUgd29uZGVyLi4uIFdoYXQgYWN0dWFsbHkgKmNhbGxzKiB0aGF0IGZ1bmN0aW9uPyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjaGFpbiB1cCBmcm9tIHRoZXJlIGlmIEkgY2FuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmhfc3VibWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9idWZmZXIuYy0xMTgwLVxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuZnMvYnVmZmVyLmMtMTE4Mi1cdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2J1ZmZlci5jPTEyNDA9dm9pZCBiaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwgYmlvX2VuZF9pb190IGVuZF9pbylcbmZzL2J1ZmZlci5jLTEyNDEte1xuZnMvYnVmZmVyLmM6MTI0MjpcdF9fYmhfc3VibWl0KGJoLCBvcGYsIFdSSVRFX0xJRkVfTk9UX1NFVCwgTlVMTCwgZW5kX2lvKTtcbmZzL2J1ZmZlci5jLTEyNDMtfVxuLS1cbmZzL2J1ZmZlci5jPTE4MTc9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2J1ZmZlci5jLTE5MTItXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9idWZmZXIuYzoxOTEzOlx0XHRcdF9fYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncyxcbmZzL2J1ZmZlci5jLTE5MTQtXHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxuLS1cbmZzL2J1ZmZlci5jLTE5NjctXHRcdFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbmZzL2J1ZmZlci5jOjE5Njg6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTk2OS1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkNvbnNpZGVyaW5nIEJsb2NrIERldmljZSBTdWJtaXNzaW9uIENhbmRpZGF0ZXMqKgoKSG1tLCBzbyBgYmhfc3VibWl0YCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgZXhwb3J0ZWQsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBzZWVuIGluIHRoZSBoZWFkZXIgZmlsZXMuIEJ1dCwgbm93IHRoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdCwgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2AgYWxzbyBsb29rcyBsaWtlIGEgc29saWQgY29udGVuZGVyIGZvciB0aGlzLiBJdCYjMzk7cyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgeWVzLCBidXQgaXQgaGFuZGxlcyB0aGUgYWN0dWFsIHdyaXRlIG9wZXJhdGlvbiBhdCB0aGUgZm9saW8gbGV2ZWwsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGZvciB0aGUgY3VycmVudCB0YXNrLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IHN0aWNrIHdpdGggYGJoX3N1Ym1pdGAgYXMgaXQgaXMgZXhwb3J0ZWQsIGFuZCB3ZWxsIGRvY3VtZW50ZWQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIHRoZSByaWdodCBjaG9pY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ymhfc3VibWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0xNTc4PWZ1bmN0aW9uLXRyYWNlLCB3ZSBnZXQgYSBtdWNoIGxhcmdlciBvdXRwdXQ6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xNjMwLSAgID1cdTAwM2Ugc3VibWl0X2Jpb1xuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE2MzE6ICAgPVx1MDAzZSBiaF9zdWJtaXRcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xNjMyLSAgID1cdTAwM2UgX19leHQzX2dldF9pbm9kZV9sb2Ncbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q9MTg3MT10cmFjZXJzLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xOTE1LSAgID1cdTAwM2Ugc3VibWl0X2Jpb1xuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjE5MTY6ICAgPVx1MDAzZSBiaF9zdWJtaXRcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xOTE3LSAgID1cdTAwM2UgZXh0M19icmVhZFxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9NTE3PXN0YXRpYyB2b2lkIHdyaXRlX2ZpbGVfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgd2FpdClcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUyNC1cdFx0c2V0X2J1ZmZlcl9tYXBwZWQoYmgpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo1MjU6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMsIGVuZF9iaXRtYXBfd3JpdGUpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MjYtXHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01NTg9c3RhdGljIGludCByZWFkX2ZpbGVfcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYwMC1cdFx0XHRzZXRfYnVmZmVyX21hcHBlZChiaCk7XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjYwMTpcdFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBlbmRfYml0bWFwX3dyaXRlKTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAyLVx0XHR9XG4tLVxuZnMvYnVmZmVyLmM9MTIyPXN0YXRpYyB2b2lkIGJ1ZmZlcl9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICptc2cpXG4tLVxuZnMvYnVmZmVyLmMtMTM1LSAqIENhbGwgdGhpcyBpbiB5b3VyIGJpb19lbmRfaW8gaGFuZGxlciB0byByZXRyaWV2ZSB0aGUgYnVmZmVyX2hlYWRcbmZzL2J1ZmZlci5jOjEzNjogKiBzdWJtaXR0ZWQgaW4gYmhfc3VibWl0KCkuICBJZiB5b3UgZGlkIG5vdCBjYWxsIGJoX3N1Ym1pdCgpLCBkbyBub3RcbmZzL2J1ZmZlci5jLTEzNy0gKiBjYWxsIHRoaXMgZnVuY3Rpb247IGl0IHdpbGwgcmV0dXJuIGdhcmJhZ2UuXG4tLVxuZnMvYnVmZmVyLmM9MTU2PUVYUE9SVF9TWU1CT0woYmlvX2VuZGlvX2JoKTtcbi0tXG5mcy9idWZmZXIuYy0xNjItICpcbmZzL2J1ZmZlci5jOjE2MzogKiBJZiBhIGJ1ZmZlciBpcyByZWFkIHRocm91Z2ggYSBtZWNoYW5pc20gdGhhdCBpc24mIzM5O3QgYmhfc3VibWl0KCksIHlvdVxuZnMvYnVmZmVyLmMtMTY0LSAqIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmluaXNoIHRoZSByZWFkLlxuLS1cbmZzL2J1ZmZlci5jPTE3Nj1FWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfcmVhZF9zeW5jKTtcbi0tXG5mcy9idWZmZXIuYy0xODEtICpcbmZzL2J1ZmZlci5jOjE4MjogKiBQYXNzIHRoaXMgZnVuY3Rpb24gdG8gYmhfc3VibWl0KCkgaWYgeW91JiMzOTtyZSByZWFkaW5nIGludG8gdGhlIGJ1ZmZlcixcbmZzL2J1ZmZlci5jLTE4My0gKiB1bmxlc3MgeW91IG5lZWQgeW91ciBvd24gc3BlY2lhbCBJL08gZW5kIGhhbmRsZXIuXG4tLVxuZnMvYnVmZmVyLmM9MTkxPUVYUE9SVF9TWU1CT0woYmhfZW5kX3JlYWQpO1xuLS1cbmZzL2J1ZmZlci5jLTE5Ni0gKlxuZnMvYnVmZmVyLmM6MTk3OiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UmIzM5O3JlIHdyaXRpbmcgZnJvbSB0aGUgYnVmZmVyLFxuZnMvYnVmZmVyLmMtMTk4LSAqIHVubGVzcyB5b3UgbmVlZCB5b3VyIG93biBzcGVjaWFsIEkvTyBlbmQgaGFuZGxlci5cbi0tXG5mcy9idWZmZXIuYz0zODU9c3RhdGljIHZvaWQgYmhfZW5kX2FzeW5jX3JlYWQoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2J1ZmZlci5jLTQyMS0gKlxuZnMvYnVmZmVyLmM6NDIyOiAqIFBhc3MgdGhpcyBmdW5jdGlvbiB0byBiaF9zdWJtaXQoKSBpZiB5b3UmIzM5O3JlIGRvaW5nIHRoZSBlcXVpdmFsZW50IG9mXG5mcy9idWZmZXIuYy00MjMtICogYmxvY2tfd3JpdGVfZnVsbF9mb2xpbygpLiAgVGhhdCBpcywgdGhlIGZvbGlvIGlzIHVubG9ja2VkLCBhbmQgd2lsbFxuLS1cbmZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9idWZmZXIuYy0xMTgwLVxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuZnMvYnVmZmVyLmMtMTE4Mi1cdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2J1ZmZlci5jLTEyMzEtLyoqXG5mcy9idWZmZXIuYzoxMjMyOiAqIGJoX3N1Ym1pdCAtIFN0YXJ0IEkvTyBhZ2FpbnN0IGEgYnVmZmVyIGhlYWRcbmZzL2J1ZmZlci5jLTEyMzMtICogQGJoOiBUaGUgYnVmZmVyIGhlYWQgdG8gcGVyZm9ybSBJL08gb24uXG4tLVxuZnMvYnVmZmVyLmMtMTIzOS0gKi9cbmZzL2J1ZmZlci5jOjEyNDA6dm9pZCBiaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwgYmlvX2VuZF9pb190IGVuZF9pbylcbmZzL2J1ZmZlci5jLTEyNDEte1xuZnMvYnVmZmVyLmM6MTI0MjpcdF9fYmhfc3VibWl0KGJoLCBvcGYsIFdSSVRFX0xJRkVfTk9UX1NFVCwgTlVMTCwgZW5kX2lvKTtcbmZzL2J1ZmZlci5jLTEyNDMtfVxuZnMvYnVmZmVyLmM6MTI0NDpFWFBPUlRfU1lNQk9MKGJoX3N1Ym1pdCk7XG5mcy9idWZmZXIuYy0xMjQ1LVxuZnMvYnVmZmVyLmM9MTI0Nj1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2JyZWFkX3Nsb3coc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9idWZmZXIuYy0xMjUyLVx0fSBlbHNlIHtcbmZzL2J1ZmZlci5jOjEyNTM6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL2J1ZmZlci5jLTEyNTQtXHRcdHdhaXRfb25fYnVmZmVyKGJoKTtcbi0tXG5mcy9idWZmZXIuYz0xNzczPXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2NyZWF0ZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtMTgwOS0gKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgb25seSBjYW4gaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cbmZzL2J1ZmZlci5jOjE4MTA6ICogdGhlIGJ1ZmZlciBkaXJlY3RseSwgd2l0aCBiaF9zdWJtaXQoKS4gIEF0IHRoZSBhZGRyZXNzX3NwYWNlIGxldmVsXG5mcy9idWZmZXIuYy0xODExLSAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXG4tLVxuZnMvYnVmZmVyLmM9MTgxNz1pbnQgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtMTkxMi1cdFx0aWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHtcbmZzL2J1ZmZlci5jOjE5MTM6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTkxNC1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4tLVxuZnMvYnVmZmVyLmMtMTkyNy1cdFx0ICogY2xlYW4uICBTb21lb25lIHdyb3RlIHRoZW0gYmFjayBieSBoYW5kIHdpdGhcbmZzL2J1ZmZlci5jOjE5Mjg6XHRcdCAqIHdyaXRlX2RpcnR5X2J1ZmZlci9iaF9zdWJtaXQuICBBIHJhcmUgY2FzZS5cbmZzL2J1ZmZlci5jLTE5MjktXHRcdCAqL1xuLS1cbmZzL2J1ZmZlci5jLTE5NjctXHRcdFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbmZzL2J1ZmZlci5jOjE5Njg6XHRcdFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvYnVmZmVyLmMtMTk2OS1cdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXG4tLVxuZnMvYnVmZmVyLmM9MjM3MD1pbnQgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdldF9ibG9ja190ICpnZXRfYmxvY2spXG4tLVxuZnMvYnVmZmVyLmMtMjQ1MS1cdFx0aWYgKHByZXYpXG5mcy9idWZmZXIuYzoyNDUyOlx0XHRcdGJoX3N1Ym1pdChwcmV2LCBSRVFfT1BfUkVBRCwgYmhfZW5kX2FzeW5jX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjQ1My1cdFx0cHJldiA9IGJoO1xuLS1cbmZzL2J1ZmZlci5jLTI0NjUtXHRpZiAocHJldilcbmZzL2J1ZmZlci5jOjI0NjY6XHRcdGJoX3N1Ym1pdChwcmV2LCBSRVFfT1BfUkVBRCwgYmhfZW5kX2FzeW5jX3JlYWQpO1xuZnMvYnVmZmVyLmMtMjQ2Ny1cdGVsc2Vcbi0tXG5mcy9idWZmZXIuYz0yNzc0PXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbi0tXG5mcy9idWZmZXIuYy0yNzgwLVx0fVxuZnMvYnVmZmVyLmM6Mjc4MTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgb3BfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XG5mcy9idWZmZXIuYy0yNzgyLX1cbi0tXG5mcy9idWZmZXIuYz0yNzkwPWludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbi0tXG5mcy9idWZmZXIuYy0yODAzLVxuZnMvYnVmZmVyLmM6MjgwNDpcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcbmZzL2J1ZmZlci5jLTI4MDUtXHRcdHdhaXRfb25fYnVmZmVyKGJoKTtcbi0tXG5mcy9idWZmZXIuYz0zMDMwPWludCBfX2JoX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXG4tLVxuZnMvYnVmZmVyLmMtMzAzNS1cbmZzL2J1ZmZlci5jOjMwMzY6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcbmZzL2J1ZmZlci5jLTMwMzctXHRpZiAod2FpdCkge1xuLS1cbmZzL2J1ZmZlci5jPTMwNTY9dm9pZCBfX2JoX3JlYWRfYmF0Y2goaW50IG5yLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdLFxuLS1cbmZzL2J1ZmZlci5jLTMwNzctXG5mcy9idWZmZXIuYzozMDc4Olx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcbmZzL2J1ZmZlci5jLTMwNzktXHR9XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTY4Mz1zdGF0aWMgdm9pZCBleHQ0X2ZjX3N1Ym1pdF9iaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIGlzX3RhaWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTY5My1cdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjY5NDpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy02OTUtXHRFWFQ0X1NCKHNiKS1cdTAwM2VzX2ZjX2JoID0gTlVMTDtcbi0tXG5mcy9leHQ0L21tcC5jPTQyPXN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbW1wLmMtNDgtXHRsb2NrX2J1ZmZlcihiaCk7XG5mcy9leHQ0L21tcC5jOjQ5Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9NRVRBIHwgUkVRX1BSSU8sXG5mcy9leHQ0L21tcC5jLTUwLVx0XHRcdGJoX2VuZF93cml0ZSk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xODAtXHRcdGVuZF9pbyA9IGJoX2VuZF9yZWFkO1xuZnMvZXh0NC9zdXBlci5jOjE4MTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBvcF9mbGFncywgZW5kX2lvKTtcbmZzL2V4dDQvc3VwZXIuYy0xODItfVxuLS1cbmZzL2V4dDQvc3VwZXIuYz02Mjk4PXN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjMyOS1cdGNsZWFyX2J1ZmZlcl9kaXJ0eShzYmgpO1xuZnMvZXh0NC9zdXBlci5jOjYzMzA6XHRiaF9zdWJtaXQoc2JoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8XG5mcy9leHQ0L3N1cGVyLmMtNjMzMS1cdFx0ICAodGVzdF9vcHQoc2IsIEJBUlJJRVIpID8gUkVRX0ZVQSA6IDApLCBiaF9lbmRfd3JpdGUpO1xuLS1cbmZzL2dmczIvYm1hcC5jPTI5ND1zdGF0aWMgdm9pZCBnZnMyX21ldGFwYXRoX3JhKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgX19iZTY0ICpzdGFydCwgX19iZTY0ICplbmQpXG4tLVxuZnMvZ2ZzMi9ibWFwLmMtMzA2LVx0XHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKHJhYmgpKSB7XG5mcy9nZnMyL2JtYXAuYzozMDc6XHRcdFx0XHRiaF9zdWJtaXQocmFiaCxcbmZzL2dmczIvYm1hcC5jLTMwOC1cdFx0XHRcdFx0UkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHwgUkVRX01FVEEgfFxuLS1cbmZzL2dmczIvZGlyLmM9MTQ4MD1zdGF0aWMgdm9pZCBnZnMyX2Rpcl9yZWFkYWhlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaHNpemUsIHUzMiBpbmRleCxcbi0tXG5mcy9nZnMyL2Rpci5jLTE1MDgtXHRcdFx0fSBlbHNlIHtcbmZzL2dmczIvZGlyLmM6MTUwOTpcdFx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHxcbmZzL2dmczIvZGlyLmMtMTUxMC1cdFx0XHRcdFx0XHRSRVFfTUVUQSB8IFJFUV9QUklPLFxuLS1cbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzctXHRcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XG5mcy9nZnMyL21ldGFfaW8uYzo3ODpcdFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzktXHRcdFx0XHRcdGJoX2VuZF9hc3luY193cml0ZSk7XG4tLVxuZnMvZ2ZzMi9tZXRhX2lvLmM9MjAyPXN0YXRpYyB2b2lkIGdmczJfbWV0YV9yZWFkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9nZnMyL21ldGFfaW8uYy0yMjQtICogU3VibWl0IHNldmVyYWwgY29uc2VjdXRpdmUgYnVmZmVyIGhlYWQgSS9PIHJlcXVlc3RzIGFzIGEgc2luZ2xlIGJpbyBJL09cbmZzL2dmczIvbWV0YV9pby5jOjIyNTogKiByZXF1ZXN0LiAgKFNlZSBiaF9zdWJtaXQuKVxuZnMvZ2ZzMi9tZXRhX2lvLmMtMjI2LSAqL1xuLS1cbmZzL2piZDIvY29tbWl0LmM9MTE0PXN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfY29tbWl0X3JlY29yZChqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9jb21taXQuYy0xNTQtXG5mcy9qYmQyL2NvbW1pdC5jOjE1NTpcdGJoX3N1Ym1pdChiaCwgd3JpdGVfZmxhZ3MsIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKTtcbmZzL2piZDIvY29tbWl0LmMtMTU2LVx0KmNiaCA9IGJoO1xuLS1cbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvamJkMi9jb21taXQuYy03NTAtXHRcdFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbmZzL2piZDIvY29tbWl0LmM6NzUxOlx0XHRcdFx0Ymhfc3VibWl0KGJoLFxuZnMvamJkMi9jb21taXQuYy03NTItXHRcdFx0XHRcdFJFUV9PUF9XUklURSB8IEpCRDJfSk9VUk5BTF9SRVFfRkxBR1MsXG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MTc4Mj1zdGF0aWMgaW50IGpiZDJfd3JpdGVfc3VwZXJibG9jayhqb3VybmFsX3QgKmpvdXJuYWwsIGJsa19vcGZfdCB3cml0ZV9mbGFncylcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0xODIwLVx0XHRzYi1cdTAwM2VzX2NoZWNrc3VtID0gamJkMl9zdXBlcmJsb2NrX2NzdW0oc2IpO1xuZnMvamJkMi9qb3VybmFsLmM6MTgyMTpcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGJoX2VuZF93cml0ZSk7XG5mcy9qYmQyL2pvdXJuYWwuYy0xODIyLVx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLS1cbmZzL25pbGZzMi9idG5vZGUuYz04Nz1pbnQgbmlsZnNfYnRub2RlX3N1Ym1pdF9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywgX191NjQgYmxvY2tucixcbi0tXG5mcy9uaWxmczIvYnRub2RlLmMtMTM2LVx0YmgtXHUwMDNlYl9ibG9ja25yID0gcGJsb2NrbnI7IC8qIHNldCBibG9jayBhZGRyZXNzIGZvciByZWFkICovXG5mcy9uaWxmczIvYnRub2RlLmM6MTM3Olx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcbmZzL25pbGZzMi9idG5vZGUuYy0xMzgtXHRiaC1cdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yOyAvKiBzZXQgYmFjayB0byB0aGUgZ2l2ZW4gYmxvY2sgYWRkcmVzcyAqL1xuLS1cbmZzL25pbGZzMi9nY2lub2RlLmM9NTU9aW50IG5pbGZzX2djY2FjaGVfc3VibWl0X3JlYWRfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibGtvZmYsXG4tLVxuZnMvbmlsZnMyL2djaW5vZGUuYy04NS1cdGJoLVx1MDAzZWJfYmxvY2tuciA9IHBibjtcbmZzL25pbGZzMi9nY2lub2RlLmM6ODY6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XG5mcy9uaWxmczIvZ2Npbm9kZS5jLTg3LVx0aWYgKHZibilcbi0tXG5mcy9uaWxmczIvbWR0LmM9MTE2PW5pbGZzX21kdF9zdWJtaXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibGtvZmYsIGJsa19vcGZfdCBvcGYsXG4tLVxuZnMvbmlsZnMyL21kdC5jLTE1MC1cbmZzL25pbGZzMi9tZHQuYzoxNTE6XHRiaF9zdWJtaXQoYmgsIG9wZiwgYmhfZW5kX3JlYWQpO1xuZnMvbmlsZnMyL21kdC5jLTE1Mi1cdHJldCA9IDA7XG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zOD1pbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy02NC1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NjU6XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSwgYmhfZW5kX3dyaXRlKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjYtXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz04Nz1pbnQgb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLFxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ1LVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzoxNDY6XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ3LVx0fVxuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9MTg5PWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0zMjMtXHRcdFx0XHRzZXRfYnVmZmVyX25lZWRzX3ZhbGlkYXRlKGJoKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6MzI0Olx0XHRcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzI1LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDIzPWludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDQtXHRvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi1cdTAwM2VzYiwgYmgtXHUwMDNlYl9kYXRhLCBcdTAwMjZkaS1cdTAwM2VpX2NoZWNrKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NDQ1Olx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUsIGJoX2VuZF93cml0ZSk7XG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQ0Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9NDg9c3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU2LSAqIGEgZm9saW8gKHZpYSBhIGZvbGlvX21hcHBpbmcpIGFuZCBmb3Igd3JhcHBpbmcgYmlvIHN1Ym1pc3Npb25cbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDo1NzogKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIChlLmcuIGJoX3N1Ym1pdCkuXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtNTgtICovXG4tLVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTIwND1ib29sIGJpb19lbmRpb19iaChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjA1LVxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjIwNjovKiBDb21wbGV0aW9uIHJvdXRpbmVzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGJoX3N1Ym1pdCgpICovXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjA3LXZvaWQgYmhfZW5kX3JlYWQoc3RydWN0IGJpbyAqYmlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9MjQzPXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6MjQ0OnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqLCBibGtfb3BmX3QsIGJpb19lbmRfaW9fdCk7XG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjQ1LXZvaWQgd3JpdGVfYm91bmRhcnlfYmxvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNDQ4LVx0XHQgKiBUaGlzIGhhcHBlbnMgaWYgdGhlIGJ1ZmZlcnMgd2VyZSB3cml0dGVuIG91dCBkaXJlY3RseSxcbm1tL3Ztc2Nhbi5jOjE0NDk6XHRcdCAqIHdpdGggYmhfc3VibWl0KCkuIGV4dDMgd2lsbCBkbyB0aGlzLCBhcyB3ZWxsIGFzXG5tbS92bXNjYW4uYy0xNDUwLVx0XHQgKiB0aGUgYmxvY2tkZXYgbWFwcGluZy4gIGZpbGVtYXBfcmVsZWFzZV9mb2xpbygpIHdpbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkxNQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIExvZ2ljKioKCk9rYXksIHNvIGBiaF9zdWJtaXRgIGdldHMgY2FsbGVkIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbmRpdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hlbiBhIEJJTyBpcyBtYXJrZWQgdG8gYmUgY29tcGxldGVkIHdpdGhpbiB0aGUgdGFzay4gQWhhISBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaXMgY2FsbGVkICppZiogYGJpb19mbGFnZ2VkKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spYCByZXR1cm5zIHRydWUuIFRoYXQmIzM5O3MgdGhlIGtleS4KClRoaXMgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnIGlzIHNldCBpbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBzcG90czogYGZzL2J1ZmZlci5jYCBhbmQgYGZzL2lvbWFwL2lvZW5kLmNgLiBMZXQmIzM5O3MgbG9vayBhdCB0aG9zZS4gSW4gYGZzL2J1ZmZlci5jYCwgdGhlIGNvbmRpdGlvbiBpczoKCmBgYGMKaWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC0mZ3Q7Yl9mb2xpbykgJmFtcDsmYW1wOyBvcF9pc193cml0ZShvcGYpKQogICAgYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwpgYGAKCkFuZCBzaW1pbGFybHkgaW4gYGZzL2lvbWFwL2lvZW5kLmNgOgoKYGBgYwppZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKICAgIGJpb19zZXRfZmxhZygmYW1wO2lvZW5kLSZndDtpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKYGBgCgpTbyBpdCBsb29rcyBsaWtlIHRoZSBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgZnVuY3Rpb24gaXMgdGhlIGNydWNpYWwgcGFydCB0aGF0IHNldHMgdGhlIGZsYWcuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgdHJpZ2dlciBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWA/IExldCYjMzk7cyB0cmFjZSB0aGF0LgoKSXQgbG9va3MgbGlrZSB0aGUgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIGNvbnRyb2xsZWQgYnkgYEZPUF9ET05UQ0FDSEVgIGluIGBmb3BfZmxhZ3NgLiBPa2F5LCBob3cgaXMgdGhhdCBzZXQ/IENoZWNraW5nIGBibG9jay9mb3BzLmNgOgoKYGBgYwpjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHsKLi4uCiAgICAuZm9wX2ZsYWdzICAgICAgPSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsCn07CmBgYAoKU28sIHRoZSBkZWZhdWx0IGJsb2NrIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgZGVmaW5lIGBGT1BfRE9OVENBQ0hFYC4gQnV0LCBkb2VzIHRoYXQgbWVhbiBhbGwgYmxvY2sgZGV2aWNlIHdyaXRlcyBnZXQgYEZPUF9ET05UQ0FDSEVgPyBObywgd2FpdCwgYEZPUF9ET05UQ0FDSEVgIGlzIGEgKmZpbGUgb3BlcmF0aW9uIGZsYWcqLiBJdCYjMzk7cyBub3QgYSBnbG9iYWwgc2V0dGluZy4gSXQgc3VwcG9ydHMgYFJXRl9ET05UQ0FDSEVgIG9yIGl0IHNldHMgZHJvcGJlaGluZC4gT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgRk9QX0RPTlRDQUNIRWAgKm1lYW5zKiBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZPUF9ET05UQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjUtICBSV0ZfRE9OVENBQ0hFXCYjMzQ7KVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjY6LSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFwmIzM0O3hmczogZmxhZyBhcyBzdXBwb3J0aW5nIEZPUF9ET05UQ0FDSEVcJiMzNDspXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ny1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTY4PU5GU0RfSU9fRE9OVENBQ0hFIHdpbGwgZmFsbCBiYWNrIHRvIE5GU0RfSU9fQlVGRkVSRUQgaWYgdGhlIHVuZGVybHlpbmdcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjY5OmZpbGVzeXN0ZW0gZG9lc24mIzM5O3QgaW5kaWNhdGUgc3VwcG9ydCBieSBzZXR0aW5nIEZPUF9ET05UQ0FDSEUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC03MC1cbi0tXG5ibG9jay9mb3BzLmM9OTI3PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuLS1cbmJsb2NrL2ZvcHMuYy05NDMtXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG5ibG9jay9mb3BzLmM6OTQ0Olx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsXG5ibG9jay9mb3BzLmMtOTQ1LX07XG4tLVxuZnMvZXh0NC9maWxlLmM9OTc0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0NF9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZXh0NC9maWxlLmMtOTkyLVx0XHRcdCAgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XG5mcy9leHQ0L2ZpbGUuYzo5OTM6XHRcdFx0ICBGT1BfRE9OVENBQ0hFLFxuZnMvZXh0NC9maWxlLmMtOTk0LVx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4tLVxuZnMvbmZzL2ZpbGUuYz05NjY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL25mcy9maWxlLmMtOTc5LVx0LmNoZWNrX2ZsYWdzXHQ9IG5mc19jaGVja19mbGFncyxcbmZzL25mcy9maWxlLmM6OTgwOlx0LmZvcF9mbGFnc1x0PSBGT1BfRE9OVENBQ0hFLFxuZnMvbmZzL2ZpbGUuYy05ODEtfTtcbi0tXG5mcy9uZnMvbmZzNGZpbGUuYz00MzY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnM0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9uZnMvbmZzNGZpbGUuYy00NTctI2VuZGlmXG5mcy9uZnMvbmZzNGZpbGUuYzo0NTg6XHQuZm9wX2ZsYWdzXHQ9IEZPUF9ET05UQ0FDSEUsXG5mcy9uZnMvbmZzNGZpbGUuYy00NTktfTtcbi0tXG5mcy9uZnNkL3Zmcy5jPTExOTI9X19iZTMyIG5mc2RfaXRlcl9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTEyMTQtXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxuZnMvbmZzZC92ZnMuYzoxMjE1Olx0XHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSlcbmZzL25mc2QvdmZzLmMtMTIxNi1cdFx0XHRraW9jYi5raV9mbGFncyA9IElPQ0JfRE9OVENBQ0hFO1xuLS1cbmZzL25mc2QvdmZzLmM9MTM2OT1uZnNkX2RpcmVjdF93cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMzkzLVx0XHRcdCAqL1xuZnMvbmZzZC92ZnMuYzoxMzk0Olx0XHRcdGlmIChuZi1cdTAwM2VuZl9maWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxuZnMvbmZzZC92ZnMuYy0xMzk1LVx0XHRcdFx0a2lvY2ItXHUwMDNla2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XG4tLVxuZnMvbmZzZC92ZnMuYz0xNDI2PW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTE0OTctXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxuZnMvbmZzZC92ZnMuYzoxNDk4Olx0XHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSlcbmZzL25mc2QvdmZzLmMtMTQ5OS1cdFx0XHRraW9jYi5raV9mbGFncyB8PSBJT0NCX0RPTlRDQUNIRTtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz0yMDg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0yMTA0LVx0XHRcdCAgRk9QX0JVRkZFUl9XQVNZTkMgfCBGT1BfRElPX1BBUkFMTEVMX1dSSVRFIHxcbmZzL3hmcy94ZnNfZmlsZS5jOjIxMDU6XHRcdFx0ICBGT1BfRE9OVENBQ0hFLFxuZnMveGZzL3hmc19maWxlLmMtMjEwNi1cdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0xOTIxPXN0cnVjdCBmaWxlX29wZXJhdGlvbnMge1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0xOTgxLS8qIEZpbGUgc3lzdGVtIHN1cHBvcnRzIHVuY2FjaGVkIHJlYWQvd3JpdGUgYnVmZmVyZWQgSU8gKi9cbmluY2x1ZGUvbGludXgvZnMuaDoxOTgyOiNkZWZpbmUgRk9QX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZm9wX2ZsYWdzX3QpKDEgXHUwMDNjXHUwMDNjIDcpKVxuaW5jbHVkZS9saW51eC9mcy5oLTE5ODMtXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTM0Mjc9c3RhdGljIGlubGluZSBpbnQga2lvY2Jfc2V0X3J3X2ZsYWdzKHN0cnVjdCBraW9jYiAqa2ksIHJ3Zl90IGZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0zNDUzLVx0XHQvKiBmaWxlIHN5c3RlbSBtdXN0IHN1cHBvcnQgaXQgKi9cbmluY2x1ZGUvbGludXgvZnMuaDozNDU0Olx0XHRpZiAoIShraS1cdTAwM2VraV9maWxwLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfRE9OVENBQ0hFKSlcbmluY2x1ZGUvbGludXgvZnMuaC0zNDU1LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgRk9QX0RPTlRDQUNIRWAgRmxhZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGBGT1BfRE9OVENBQ0hFYCBhY3RzIGFzIGFuIGluZGljYXRvciB0aGF0IHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtIHN1cHBvcnRzIGBSV0ZfRE9OVENBQ0hFYCBvciBpdHMgZXF1aXZhbGVudCwgYElPQ0JfRE9OVENBQ0hFYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBsaW5rLiBUaGUgcHJlc2VuY2Ugb2YgYElPQ0JfRE9OVENBQ0hFYCB0aGVuIHRyaWdnZXJzIHBvdGVudGlhbCB1c2Ugb2YgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgLiBUaGlzIGlzIGNsZWFybHkgcmVhY2hhYmxlIHRocm91Z2ggYHB3cml0ZXYyYCBpZiB0aGUgYFJXRl9ET05UQ0FDSEVgIGZsYWcgaXMgc2V0LCBlc3BlY2lhbGx5IG9uIGJsb2NrIGRldmljZXMgb3IgZmlsZXN5c3RlbXMgbGlrZSBleHQ0IG9yIHhmcy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgYGlvbWFwX2FkZF90b19pb2VuZGAgYXJlIHRoZSBtYWpvciBwbGF5ZXJzLiBXYWl0IGEgbWludXRl4oCmIGBpb21hcF9hZGRfdG9faW9lbmRgIGhhc24mIzM5O3QgYmVlbiByZXBsYWNlZCB3aXRoIGEgbmV3IGZ1bmN0aW9uOyBpdCBqdXN0IGhhcyBhIG5ldyBjb25kaXRpb25hbCBjaGVjayBhZGRlZD8gSW50ZXJlc3RpbmcuCgpJcyB0aGF0ICppdCogdGhvdWdoPyBBcmUgdGhlcmUgYW55ICpvdGhlciogbmV3IGZ1bmN0aW9ucz8gT2theSwgYGJpb19jb21wbGV0ZV9pbl90YXNrYCBpcyBpbmxpbmVkLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgY3JpdGljYWwgcGllY2UuIFRoYXQgbGVhdmVzIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhcyB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBjaGVjayBmb3Igb3RoZXIgbmV3IGZ1bmN0aW9uIGRlZmluaXRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmlvX2NvbXBsZXRlX2luX3Rhc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTc2MD1zdGF0aWMgdm9pZCBiaW9fY29tcGxldGVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuYmxvY2svYmlvLmMtMTc4MS1cbmJsb2NrL2Jpby5jOjE3ODI6dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jpby5jLTE3ODMte1xuLS1cbmJsb2NrL2Jpby5jLTE3OTYtfVxuYmxvY2svYmlvLmM6MTc5NzpFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19jb21wbGV0ZV9pbl90YXNrKTtcbmJsb2NrL2Jpby5jLTE3OTgtXG4tLVxuYmxvY2svYmlvLmM9MTgzMT12b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmlvLmMtMTg3My1cdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSBcdTAwMjZcdTAwMjYgYmlvX2luX2F0b21pYygpKVxuYmxvY2svYmlvLmM6MTg3NDpcdFx0X19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pO1xuYmxvY2svYmlvLmMtMTg3NS1cdGVsc2UgaWYgKGJpby1cdTAwM2ViaV9lbmRfaW8pXG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD0zNzc9c3RhdGljIGlubGluZSBib29sIGJpb19pbl9hdG9taWModm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTM4NS1cbmluY2x1ZGUvbGludXgvYmlvLmg6Mzg2OnZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pO1xuaW5jbHVkZS9saW51eC9iaW8uaC0zODctXG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD0zOTk9c3RhdGljIGlubGluZSBib29sIGJpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQwNS1cdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbmluY2x1ZGUvbGludXgvYmlvLmg6NDA2Olx0X19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pO1xuaW5jbHVkZS9saW51eC9iaW8uaC00MDctXHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gYWRkZWQgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuJiMzNDsgQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIHdoYXQgYWJvdXQgYGJpb19jb21wbGV0ZV93b3JrX2ZuYD8gSXQgKmlzKiBzdGF0aWMsIGJ1dCB0aGF0JiMzOTtzIHRoZSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIHByb2JhYmx5IGltcG9ydGFudCB0b28uIEFuZCB3aGF0IGFib3V0IGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZWAsIGFsc28gc3RhdGljPyBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGBmcy9idWZmZXIuY2AuIEhtbSwgYF9fYmhfc3VibWl0YCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdGhlcmUuIEFoLCByaWdodCwgYGJoX3N1Ym1pdGAgKmNhbGxzKiBgX19iaF9zdWJtaXRgLCBhbmQsIGltcG9ydGFudGx5LCBgYmhfc3VibWl0YCBpcyBleHBvcnRlZC4gT2theSwgKmlzKiBgYmhfc3VibWl0YCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBPbiB0aGUgb25lIGhhbmQsIGl0JiMzOTtzIGEgZ2VuZXJpYyBmdW5jdGlvbiBzbyBpdCAqY291bGQqIGJlIGNhbGxlZCB0b28gZnJlcXVlbnRseS4gSG93ZXZlciwgaXQmIzM5O3Mgbm90IGEgaG90IHBhdGggZnVuY3Rpb24gbGlrZSwgc2F5LCBgYmlvX2VuZGlvYC4gQWN0dWFsbHksIGBiaF9zdWJtaXRgIGlzIGNhbGxlZCBmb3IgYnVmZmVyIGhlYWQgSU8sIHdoaWNoIGlzIHF1aXRlIGNvbW1vbiwgc28gdGhhdCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuCgpNb3Zpbmcgb24sIEkgbmVlZCB0byBjaGVjayBgZnMvaW9tYXAvaW9lbmQuY2AuIEFoYSwgYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgbW9kaWZpZWQgdGhlcmUuIElzICp0aGF0KiBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBXZWxsLCBpdCYjMzk7cyBjYWxsZWQgZm9yIGlvbWFwIHdyaXRlYmFjaywgYW5kIHRoYXQmIzM5O3MgYWxzbyBxdWl0ZSBjb21tb24sIHNvIHRoYXQgb25lIGlzIGRlZmluaXRlbHkgd29ydGggY29uc2lkZXJpbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBhdCBgZnMvZXJvZnMvemRhdGEuY2AuIE9rYXksIGB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgbW9kaWZpZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3pkYXRhLmM9MTQyND1zdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZV9rdGhyZWFkX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbi0tXG5mcy9lcm9mcy96ZGF0YS5jLTE0MzAtXG5mcy9lcm9mcy96ZGF0YS5jOjE0MzE6c3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbyxcbmZzL2Vyb2ZzL3pkYXRhLmMtMTQzMi1cdFx0XHRcdCAgICAgICBpbnQgYmlvcylcbi0tXG5mcy9lcm9mcy96ZGF0YS5jPTE2MjM9c3RhdGljIHZvaWQgel9lcm9mc19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvZXJvZnMvemRhdGEuYy0xNjQyLVx0XHRxLVx1MDAzZWVpbyA9IHRydWU7XG5mcy9lcm9mcy96ZGF0YS5jOjE2NDM6XHR6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZihxLCAtMSk7XG5mcy9lcm9mcy96ZGF0YS5jLTE2NDQtXHRpZiAoYmlvLVx1MDAzZWJpX2JkZXYpXG4tLVxuZnMvZXJvZnMvemRhdGEuYz0xNjQ4PXN0YXRpYyB2b2lkIHpfZXJvZnNfc3VibWl0X3F1ZXVlKHN0cnVjdCB6X2Vyb2ZzX2Zyb250ZW5kICpmLFxuLS1cbmZzL2Vyb2ZzL3pkYXRhLmMtMTc3My1cdH1cbmZzL2Vyb2ZzL3pkYXRhLmM6MTc3NDpcdHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHFbSlFfU1VCTUlUXSwgbnJfYmlvcyk7XG5mcy9lcm9mcy96ZGF0YS5jLTE3NzUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZW50cnkgcG9pbnQgZm9yIHN5emthbGxlci4gVGhlIGB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZmAgZnVuY3Rpb24gaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJvYWRibG9jay4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIHN5bWJvbCBgX19iaW9fY29tcGxldGVfaW5fdGFza2AuIElzIHRoZXJlIGFueSBvdGhlciB1c2VmdWwgZnVuY3Rpb24gaGVyZT8gYGJpb19jb21wbGV0ZV93b3JrX2ZuYCBpcyBhbHNvIHN0YXRpYywgbWFraW5nIGl0IHRyaWNreSBhcyBhIGRpcmVjdCB0YXJnZXQsIGV2ZW4gdGhvdWdoIHN5emthbGxlciBjYW4gc29tZXRpbWVzIHN1cnByaXNlIHVzIHdpdGggaXRzIGFiaWxpdHkgdG8gZmluZCB0aGVzZS4gVGhlIGd1aWRlbGluZXMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBzbyB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bSBhaW1pbmcgZm9yLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBgYmxvY2svYmlvLmNgLCBgYmxvY2svZm9wcy5jYCwgYGZzL2J1ZmZlci5jYCwgYGZzL2Vyb2ZzL3pkYXRhLmNgLCBgZnMvaW9tYXAvaW9lbmQuY2AsIGFuZCBgZnMveGZzL3hmc19hb3BzLmNgLiBUaGVzZSBhcmUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSBjb21wb25lbnRzLCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBkZXBlbmRlbmNpZXMuCgpPYnZpb3VzbHksIGBDT05GSUdfQkxPQ0tgIGlzIGEgZ2l2ZW47IGl0JiMzOTtzIHByYWN0aWNhbGx5IGVzc2VudGlhbCwgYnV0IHRoYW5rZnVsbHkgaXQmIzM5O3Mgb24gYnkgZGVmYXVsdC4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX0ZTX0lPTUFQYCBmb3IgdGhlIGBmcy9pb21hcC9pb2VuZC5jYCBjaGFuZ2VzLCBgQ09ORklHX1hGU19GU2AgZm9yIHRoZSBgZnMveGZzL3hmc19hb3BzLmNgIG1vZGlmaWNhdGlvbnMsIGFuZCwgY3JpdGljYWxseSwgYENPTkZJR19FUk9GU19GU2AgZm9yIHRoZSBgZnMvZXJvZnMvemRhdGEuY2AgYml0cy4gR2l2ZW4gdGhhdCBpdCBtZW50aW9ucyBjb21wcmVzc2VkIGVyb2ZzIChgemRhdGFgKSwgSSYjMzk7bGwgYWxzbyBuZWVkIGBDT05GSUdfRVJPRlNfRlNfWklQYC4gVGltZSB0byBjaGVjayBgZnMvZXJvZnMvemRhdGEuY2AgZGlyZWN0bHkgaW4gS2NvbmZpZyB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pkYXRhXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9NYWtlZmlsZT01PWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSAmIzQzOz0geGF0dHIub1xuZnMvZXJvZnMvTWFrZWZpbGU6Njplcm9mcy0kKENPTkZJR19FUk9GU19GU19aSVApICYjNDM7PSBkZWNvbXByZXNzb3IubyB6bWFwLm8gemRhdGEubyB6dXRpbC5vXG5mcy9lcm9mcy9NYWtlZmlsZS03LWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1pJUF9MWk1BKSAmIzQzOz0gZGVjb21wcmVzc29yX2x6bWEub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEVST0ZTIFN1cHBvcnQgZm9yIHpkYXRhLmMqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBpbnRvIGBFUk9GU19GU19aSVBgIGZvciBgemRhdGEuY2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBpdHMgY29uZmlndXJhdGlvbi4gV2hlcmUgc2hvdWxkIEkgc3RhcnQ/IEFoLCByaWdodCwgdGhlIEtjb25maWcgZm9yIGBmcy9pb21hcC9pb2VuZC5jYCBpcyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cywgYW5kIHBvc3NpYmx5IHdoYXQgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBgRVJPRlNfRlNfWklQYCBoYXMgbW9yZSBicm9hZGx5IHdpdGhpbiB0aGUgaW9tYXAgZnJhbWV3b3JrLiBHb3R0YSBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsaW5rZWQgYW5kIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2VuZFxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvTWFrZWZpbGU9MTQ9aW9tYXAtJChDT05GSUdfQkxPQ0spXHRcdCYjNDM7PSBkaXJlY3QtaW8ubyBcXFxuZnMvaW9tYXAvTWFrZWZpbGU6MTU6XHRcdFx0XHQgICBpb2VuZC5vIFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNi1cdFx0XHRcdCAgIGZpZW1hcC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDg5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipUcmFjaW5nIERlcGVuZGVuY2llcyBmb3IgYGlvZW5kLm9gKioKCkFscmlnaHQsIEkmIzM5O20gZW5jb3VudGVyaW5nIGEgc2l0dWF0aW9uIHdoZXJlIGBpb2VuZC5vYCBuZWVkcyBgQ09ORklHX0JMT0NLYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGVyZSB0aGlzIGRlcGVuZGVuY3kgaXMgZGVmaW5lZCBhbmQgaWYgaXQmIzM5O3MgY29ycmVjdC4mIzM0OyBUaGlzIHVzdWFsbHkgbWVhbnMgbmF2aWdhdGluZyB0aGUgYnVpbGQgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGVyZSBgQ09ORklHX0JMT0NLYCBpcyB1c2VkIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBTaW5jZSB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBmaWxlIHN5c3RlbSByZWxhdGVkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gZmlsZXMgYW5kIHRoZWlyIEtjb25maWcgZmlsZXMuIFRoZSBtZW50aW9uIG9mIGB4ZnNfYW9wcy5jYCBzcGFya3MgYSBtZW1vcnkuIGBmcy94ZnMvYCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgYHhmc19hb3BzLmNgIHNvdW5kcyBsaWtlIGl0IHdvdWxkIGJlIGluIHRoZXJlLiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdGhlcmUsIGFzIGl0IHdpbGwgc3BlY2lmeSB3aGF0IGRlcGVuZGVuY2llcyBhbmQgY29uZmlnIG9wdGlvbnMgYXJlIG5lZWRlZC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIGxvb2sgaXMgYGZzL3hmcy9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZzX2FvcHNcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hmcy9NYWtlZmlsZT02ND14ZnMtJChDT05GSUdfWEZTX1JUKVx0XHQmIzQzOz0gJChhZGRwcmVmaXggbGlieGZzLywgXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGUtNzAtIyBoaWdobGV2ZWwgY29kZVxuZnMveGZzL01ha2VmaWxlOjcxOnhmcy15XHRcdFx0XHQmIzQzOz0geGZzX2FvcHMubyBcXFxuZnMveGZzL01ha2VmaWxlLTcyLVx0XHRcdFx0ICAgeGZzX2F0dHJfaW5hY3RpdmUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg5NgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFhGUyBhbmQgQnVmZmVyIENhY2hlIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1hGU19GU2AgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBidWlsZGluZyBgeGZzX2FvcHMub2AuIE5vdCB1bmV4cGVjdGVkLCBvYnZpb3VzbHksIGJ1dCBnb29kIHRvIGhhdmUgdGhhdCBjb25maXJtZWQuIFRoZSBhcmNoaXRlY3R1cmUgaGVyZSByZWxpZXMgb24gWEZTIHN1cHBvcnQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBjYXBhYmlsaXRpZXMuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXM/IGBmcy9idWZmZXIuY2Agc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3BvdCBmb3IgdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIGJ1ZmZlciBjYWNoZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVmZmVyIGNhY2hlIGludGVyYWN0cyB3aXRoIFhGUywgYW5kIHNwZWNpZmljYWxseSBob3cgdGhhdCBgeGZzX2FvcHMub2AgbW9kdWxlIHRpZXMgaW50byB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGJ1ZmZlciBjYWNoZSYjMzk7cyBLY29uZmlnIGVudHJpZXMgdGhlcmUuIE1heWJlIHRoZXJlJiMzOTtzIGEgbW9yZSBleHBsaWNpdCBsaW5rIG9yIGRlcGVuZGVuY3kgbGlzdGVkIHRoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWZmZXJcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9ODI9a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSAmIzQzOz0gXFxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTkwLVx0Ym9vazNzX2h2X25lc3RlZHYyLm8gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6OTE6XHRndWVzdC1zdGF0ZS1idWZmZXIubyBcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS05Mi1cdCQoa3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMteSkgXFxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTk0LVxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfR1VFU1RfU1RBVEVfQlVGRkVSX1RFU1QpICYjNDM7PSB0ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5vXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTk2LWVuZGlmXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9NYWtlZmlsZT05PUhMX0NPTU1PTl9GSUxFUyA6PSBjb21tb24vaGFiYW5hbGFic19kcnYubyBjb21tb24vZGV2aWNlLm8gY29tbW9uL2NvbnRleHQubyBcXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9NYWtlZmlsZS0xMC1cdFx0Y29tbW9uL2FzaWQubyBjb21tb24vaGFiYW5hbGFic19pb2N0bC5vIFxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL01ha2VmaWxlOjExOlx0XHRjb21tb24vY29tbWFuZF9idWZmZXIubyBjb21tb24vaHdfcXVldWUubyBjb21tb24vaXJxLm8gXFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vTWFrZWZpbGUtMTItXHRcdGNvbW1vbi9zeXNmcy5vIGNvbW1vbi9od21vbi5vIGNvbW1vbi9tZW1vcnkubyBcXFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGU9MTU0PWFjcGkteSAmIzQzOz1cdFx0XFxcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlLTE1Ny1cdHV0YXNjaWkub1x0XFxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGU6MTU4Olx0dXRidWZmZXIub1x0XFxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUtMTU5LVx0dXRja3N1bS5vXHRcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0zNT1kcm0teSA6PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS01My1cdGRybV9mb3VyY2MubyBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjU0Olx0ZHJtX2ZyYW1lYnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS01NS1cdGRybV9nZW0ubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGU9Nz1rb21lZGEteSA6PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGUtMTMtXHRrb21lZGFfcGlwZWxpbmVfc3RhdGUubyBcXFxuZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9NYWtlZmlsZToxNDpcdGtvbWVkYV9mcmFtZWJ1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL01ha2VmaWxlLTE1LVx0a29tZWRhX2ttcy5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvTWFrZWZpbGU9Mj1ldG5hdml2LXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L01ha2VmaWxlOjM6XHRldG5hdml2X2J1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9NYWtlZmlsZS00LVx0ZXRuYXZpdl9jbWRfcGFyc2VyLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL01ha2VmaWxlPTY9Z21hNTAwX2dmeC15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUtMTMtXHQgIGNkdl9pbnRlbF9sdmRzLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGU6MTQ6XHQgIGZyYW1lYnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUtMTUtXHQgIGdlbS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9Nzg9aTkxNS15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTgxLVx0aTkxNV9kcHQubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6ODI6XHRpOTE1X2RzYl9idWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtODMtXHRpOTE1X2ZiX3Bpbi5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9MTU2PWdlbS15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTE2Mi1cdGdlbS9pOTE1X2dlbV9kb21haW4ubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6MTYzOlx0Z2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY0LVx0Z2VtL2k5MTVfZ2VtX2ludGVybmFsLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0xNjctXHRnZW0vaTkxNV9nZW1fb2JqZWN0Lm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlOjE2ODpcdGdlbS9pOTE1X2dlbV9vYmplY3RfZnJvbnRidWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY5LVx0Z2VtL2k5MTVfZ2VtX3BhZ2VzLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZT0yMzU9aTkxNS15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTI4Ny1cdGRpc3BsYXkvaW50ZWxfZmxpcHEubyBcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6Mjg4Olx0ZGlzcGxheS9pbnRlbF9mcm9udGJ1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0yODktXHRkaXNwbGF5L2ludGVsX2dsb2JhbF9zdGF0ZS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZT0xMTI9bXNtLXkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZS0xMjYtXHRtc21fcmQubyBcXFxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZToxMjc6XHRtc21fcmluZ2J1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlLTEyOC1cdG1zbV9zdWJtaXRxdWV1ZS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlPTU9c3VuNGktZHJtLXlcdFx0XHQmIzQzOz0gc3VuNGlfZHJ2Lm9cbmRyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZTo2OnN1bjRpLWRybS15XHRcdFx0JiM0Mzs9IHN1bjRpX2ZyYW1lYnVmZmVyLm9cbmRyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGU9Mj12bXdnZngteSA6PSB2bXdnZnhfZXhlY2J1Zi5vIHZtd2dmeF9nbXIubyB2bXdnZnhfa21zLm8gdm13Z2Z4X2Rydi5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlOjM6XHQgICAgdm13Z2Z4X2lvY3RsLm8gdm13Z2Z4X3Jlc291cmNlLm8gdm13Z2Z4X3R0bV9idWZmZXIubyBcXFxuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZS00LVx0ICAgIHZtd2dmeF9jbWQubyB2bXdnZnhfaXJxLm8gdm13Z2Z4X2xkdS5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIxOD14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyMy1cdGRpc3BsYXkveGVfZGlzcGxheV93YS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MjI0Olx0ZGlzcGxheS94ZV9kc2JfYnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0yMjUtXHRkaXNwbGF5L3hlX2ZiX3Bpbi5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MjI2Olx0ZGlzcGxheS94ZV9mcm9udGJ1ZmZlci5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMjI3LVx0ZGlzcGxheS94ZV9oZGNwX2dzYy5vIFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIzND14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTI5OC1cdGk5MTUtZGlzcGxheS9pbnRlbF9mbGlwcS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6Mjk5Olx0aTkxNS1kaXNwbGF5L2ludGVsX2Zyb250YnVmZmVyLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS0zMDAtXHRpOTE1LWRpc3BsYXkvaW50ZWxfZ2xvYmFsX3N0YXRlLm8gXFxcbi0tXG5kcml2ZXJzL2h2L01ha2VmaWxlPTExPWh2X3ZtYnVzLXkgOj0gdm1idXNfZHJ2Lm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTItXHRcdCBodi5vIGNvbm5lY3Rpb24ubyBjaGFubmVsLm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTM6XHRcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTQtaHZfdm1idXMtJChDT05GSUdfSFlQRVJWX1RFU1RJTkcpXHQmIzQzOz0gaHZfZGVidWdmcy5vXG4tLVxuZHJpdmVycy9paW8vTWFrZWZpbGU9Nz1pbmR1c3RyaWFsaW8teSA6PSBpbmR1c3RyaWFsaW8tY29yZS5vIGluZHVzdHJpYWxpby1ldmVudC5vIGlua2Vybi5vXG5kcml2ZXJzL2lpby9NYWtlZmlsZTo4OmluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fQlVGRkVSKSAmIzQzOz0gaW5kdXN0cmlhbGlvLWJ1ZmZlci5vXG5kcml2ZXJzL2lpby9NYWtlZmlsZS05LWluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fVFJJR0dFUikgJiM0Mzs9IGluZHVzdHJpYWxpby10cmlnZ2VyLm9cbi0tXG5kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZT04Nj1zdF9hY2NlbC15IDo9IHN0X2FjY2VsX2NvcmUub1xuZHJpdmVycy9paW8vYWNjZWwvTWFrZWZpbGU6ODc6c3RfYWNjZWwtJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IHN0X2FjY2VsX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZS04OC1cbi0tXG5kcml2ZXJzL2lpby9idWZmZXIvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0lJT19CVUZGRVJfSFdfQ09OU1VNRVIpICYjNDM7PSBpbmR1c3RyaWFsaW8taHctY29uc3VtZXIub1xuZHJpdmVycy9paW8vYnVmZmVyL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19JSU9fVFJJR0dFUkVEX0JVRkZFUikgJiM0Mzs9IGluZHVzdHJpYWxpby10cmlnZ2VyZWQtYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2J1ZmZlci9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfSUlPX0tGSUZPX0JVRikgJiM0Mzs9IGtmaWZvX2J1Zi5vXG4tLVxuZHJpdmVycy9paW8vY29tbW9uL3N0X3NlbnNvcnMvTWFrZWZpbGU9OT1zdF9zZW5zb3JzLXkgOj0gc3Rfc2Vuc29yc19jb3JlLm9cbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlOjEwOnN0X3NlbnNvcnMtJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IHN0X3NlbnNvcnNfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlLTExLXN0X3NlbnNvcnMtJChDT05GSUdfSUlPX1RSSUdHRVIpICYjNDM7PSBzdF9zZW5zb3JzX3RyaWdnZXIub1xuLS1cbmRyaXZlcnMvaWlvL2R1bW15L01ha2VmaWxlPTg9aWlvX2R1bW15LSQoQ09ORklHX0lJT19TSU1QTEVfRFVNTVlfRVZFTlRTKSAmIzQzOz0gaWlvX3NpbXBsZV9kdW1teV9ldmVudHMub1xuZHJpdmVycy9paW8vZHVtbXkvTWFrZWZpbGU6OTppaW9fZHVtbXktJChDT05GSUdfSUlPX1NJTVBMRV9EVU1NWV9CVUZGRVIpICYjNDM7PSBpaW9fc2ltcGxlX2R1bW15X2J1ZmZlci5vXG5kcml2ZXJzL2lpby9kdW1teS9NYWtlZmlsZS0xMC1cbi0tXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlPTI3PWl0ZzMyMDAteSAgICAgICAgICAgICAgIDo9IGl0ZzMyMDBfY29yZS5vXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlOjI4Oml0ZzMyMDAtJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IGl0ZzMyMDBfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGUtMjktb2JqLSQoQ09ORklHX0lURzMyMDApICAgJiM0Mzs9IGl0ZzMyMDAub1xuLS1cbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGU9MzQ9c3RfZ3lyby15IDo9IHN0X2d5cm9fY29yZS5vXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlOjM1OnN0X2d5cm8tJChDT05GSUdfSUlPX0JVRkZFUikgJiM0Mzs9IHN0X2d5cm9fYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGUtMzYtXG4tLVxuZHJpdmVycy9paW8vaHVtaWRpdHkvTWFrZWZpbGU9MTQ9aHRzMjIxLXkgOj0gaHRzMjIxX2NvcmUubyBcXFxuZHJpdmVycy9paW8vaHVtaWRpdHkvTWFrZWZpbGU6MTU6XHQgICAgaHRzMjIxX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9odW1pZGl0eS9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfSFRTMjIxKSAmIzQzOz0gaHRzMjIxLm9cbi0tXG5kcml2ZXJzL2lpby9pbXUvTWFrZWZpbGU9MTQ9YWRpc19saWItJChDT05GSUdfSUlPX0FESVNfTElCX0JVRkZFUikgJiM0Mzs9IGFkaXNfdHJpZ2dlci5vXG5kcml2ZXJzL2lpby9pbXUvTWFrZWZpbGU6MTU6YWRpc19saWItJChDT05GSUdfSUlPX0FESVNfTElCX0JVRkZFUikgJiM0Mzs9IGFkaXNfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfSUlPX0FESVNfTElCKSAmIzQzOz0gYWRpc19saWIub1xuLS1cbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGU9Nz1pbnYtaWNtNDI2MDAteSAmIzQzOz0gaW52X2ljbTQyNjAwX3RlbXAub1xuZHJpdmVycy9paW8vaW11L2ludl9pY200MjYwMC9NYWtlZmlsZTo4Omludi1pY200MjYwMC15ICYjNDM7PSBpbnZfaWNtNDI2MDBfYnVmZmVyLm9cbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL2lpby9pbXUvaW52X2ljbTQ1NjAwL01ha2VmaWxlPTQ9aW52LWljbTQ1NjAwLXkgJiM0Mzs9IGludl9pY200NTYwMF9jb3JlLm9cbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDU2MDAvTWFrZWZpbGU6NTppbnYtaWNtNDU2MDAteSAmIzQzOz0gaW52X2ljbTQ1NjAwX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9pbXUvaW52X2ljbTQ1NjAwL01ha2VmaWxlLTYtaW52LWljbTQ1NjAwLXkgJiM0Mzs9IGludl9pY200NTYwMF9neXJvLm9cbi0tXG5kcml2ZXJzL2lpby9pbXUvc3RfbHNtNmRzeC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9paW8vaW11L3N0X2xzbTZkc3gvTWFrZWZpbGU6MjpzdF9sc202ZHN4LXkgOj0gc3RfbHNtNmRzeF9jb3JlLm8gc3RfbHNtNmRzeF9idWZmZXIubyBcXFxuZHJpdmVycy9paW8vaW11L3N0X2xzbTZkc3gvTWFrZWZpbGUtMy1cdFx0c3RfbHNtNmRzeF9zaHViLm8gc3RfbHNtNmRzeF9mdXNpb24ub1xuLS1cbmRyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZT0yMj1zdF9tYWduLXkgOj0gc3RfbWFnbl9jb3JlLm9cbmRyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZToyMzpzdF9tYWduLSQoQ09ORklHX0lJT19CVUZGRVIpICYjNDM7PSBzdF9tYWduX2J1ZmZlci5vXG5kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUtMjQtXG4tLVxuZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGU9NDA9c3RfcHJlc3N1cmUteSA6PSBzdF9wcmVzc3VyZV9jb3JlLm9cbmRyaXZlcnMvaWlvL3ByZXNzdXJlL01ha2VmaWxlOjQxOnN0X3ByZXNzdXJlLSQoQ09ORklHX0lJT19CVUZGRVIpICYjNDM7PSBzdF9wcmVzc3VyZV9idWZmZXIub1xuZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGUtNDItb2JqLSQoQ09ORklHX0lJT19TVF9QUkVTU19JMkMpICYjNDM7PSBzdF9wcmVzc3VyZV9pMmMub1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGU9OT1kdmItY29yZS1vYmpzIDo9IGR2YmRldi5vIGRteGRldi5vIGR2Yl9kZW11eC5vXHRcdFx0XFxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGUtMTAtXHRcdCBkdmJfY2FfZW41MDIyMS5vIGR2Yl9mcm9udGVuZC5vXHRcdFxcXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlOjExOlx0XHQgJChkdmItbmV0LXkpIGR2Yl9yaW5nYnVmZmVyLm8gJChkdmItdmIyLXkpXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlLTEyLVxuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGU9Mj1zYWE3MTY0LW9ianNcdDo9IHNhYTcxNjQtY2FyZHMubyBzYWE3MTY0LWNvcmUubyBzYWE3MTY0LWkyYy5vIHNhYTcxNjQtZHZiLm8gXFxcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGUtMy1cdFx0XHRzYWE3MTY0LWZ3Lm8gc2FhNzE2NC1idXMubyBzYWE3MTY0LWNtZC5vIHNhYTcxNjQtYXBpLm8gXFxcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGU6NDpcdFx0XHRzYWE3MTY0LWJ1ZmZlci5vIHNhYTcxNjQtZW5jb2Rlci5vIHNhYTcxNjQtdmJpLm9cbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGUtNS1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZToxOnFjb20taXJpcy1vYmpzICYjNDM7PSBpcmlzX2J1ZmZlci5vIFxcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZS0yLSAgICAgICAgICAgICBpcmlzX2NvbW1vbi5vIFxcXG4tLVxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2lyaXMvTWFrZWZpbGUtMjgtICAgICAgICAgICAgIGlyaXNfdnB1NHgubyBcXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2lyaXMvTWFrZWZpbGU6Mjk6ICAgICAgICAgICAgIGlyaXNfdnB1X2J1ZmZlci5vIFxcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZS0zMC0gICAgICAgICAgICAgaXJpc192cHVfY29tbW9uLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9Mzk9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfRU5fUlhORkMpICAgICYjNDM7PSBlbl9mc19ldGh0b29sLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0MDptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DT1JFX0VOX0RDQikgJiM0Mzs9IGVuX2RjYm5sLm8gZW4vcG9ydF9idWZmZXIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTQxLW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgJiM0Mzs9IGVuL2h2X3ZoY2Ffc3RhdHMub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jPTUyOT10eGdiZV9nZXRfbW9kdWxlX2VlcHJvbV9ieV9wYWdlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQwLVx0YnVmZmVyLmxlbmd0aCA9IGNwdV90b19iZTMyKHBhZ2VfZGF0YS1cdTAwM2VsZW5ndGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6NTQxOlx0YnVmZmVyLm9mZnNldCA9IGNwdV90b19iZTMyKHBhZ2VfZGF0YS1cdTAwM2VvZmZzZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQyLVx0YnVmZmVyLnBhZ2UgPSBwYWdlX2RhdGEtXHUwMDNlcGFnZTtcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9NTI3PXN0YXRpYyBpbnQgZGVsbF9yZmtpbGxfc2V0KHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQwLVx0XHRyZXR1cm4gcmV0O1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjU0MTpcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQyLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy01NDYtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NTQ3Olx0aHdzd2l0Y2ggPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU0OC1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9NTgzPXN0YXRpYyB2b2lkIGRlbGxfcmZraWxsX3F1ZXJ5KHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTkyLVx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo1OTM6XHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU5NC1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjAwLVx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo2MDE6XHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjAyLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz02MTY9c3RhdGljIGludCBkZWxsX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYyNy1cdFx0cmV0dXJuIHJldDtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo2Mjg6XHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYyOS1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjMzLVx0XHRyZXR1cm4gaHdzd2l0Y2hfcmV0O1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYzNDpcdGh3c3dpdGNoX3N0YXRlID0gYnVmZmVyLm91dHB1dFsxXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy02MzUtXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTcwMT1zdGF0aWMgdm9pZCBkZWxsX3VwZGF0ZV9yZmtpbGwoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MDktXHRyZXQgPSBkZWxsX3NlbmRfcmVxdWVzdChcdTAwMjZidWZmZXIsIENMQVNTX0lORk8sIFNFTEVDVF9SRktJTEwpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjcxMDpcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzExLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MTgtXHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IChzdGF0dXMgXHUwMDI2IEJJVCgwKSkpXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NzE5Olx0XHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzIwLVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz03NzU9c3RhdGljIGludCBfX2luaXQgZGVsbF9zZXR1cF9yZmtpbGwodm9pZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzk0LVx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzo3OTU6XHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTc5Ni1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9OTU3PXN0YXRpYyBpbnQgZGVsbF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtOTY3LVx0aWYgKHJldCA9PSAwKVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjk2ODpcdFx0cmV0ID0gYnVmZmVyLm91dHB1dFsxXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy05NjktXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTEyMzI9c3RhdGljIGludCBrYmRfZ2V0X2luZm8oc3RydWN0IGtiZF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjQzLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDQ6XHRpbmZvLVx1MDAzZW1vZGVzID0gYnVmZmVyLm91dHB1dFsxXSBcdTAwMjYgMHhGRkZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDU6XHRpbmZvLVx1MDAzZXR5cGUgPSAoYnVmZmVyLm91dHB1dFsxXSBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDY6XHRpbmZvLVx1MDAzZXRyaWdnZXJzID0gYnVmZmVyLm91dHB1dFsyXSBcdTAwMjYgMHhGRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjQ3Olx0dW5pdHMgPSAoYnVmZmVyLm91dHB1dFsyXSBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4RkY7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0ODpcdGluZm8tXHUwMDNlbGV2ZWxzID0gKGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhGRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjQ5LVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjUzLVx0aWYgKHVuaXRzIFx1MDAyNiBCSVQoMCkpXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI1NDpcdFx0aW5mby1cdTAwM2VzZWNvbmRzID0gKGJ1ZmZlci5vdXRwdXRbM10gXHUwMDNlXHUwMDNlIDApIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTUtXHRpZiAodW5pdHMgXHUwMDI2IEJJVCgxKSlcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU2Olx0XHRpbmZvLVx1MDAzZW1pbnV0ZXMgPSAoYnVmZmVyLm91dHB1dFszXSBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4RkY7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTI1Ny1cdGlmICh1bml0cyBcdTAwMjYgQklUKDIpKVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNTg6XHRcdGluZm8tXHUwMDNlaG91cnMgPSAoYnVmZmVyLm91dHB1dFszXSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTktXHRpZiAodW5pdHMgXHUwMDI2IEJJVCgzKSlcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjYwOlx0XHRpbmZvLVx1MDAzZWRheXMgPSAoYnVmZmVyLm91dHB1dFszXSBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNjEtXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTEzMTg9c3RhdGljIGludCBrYmRfZ2V0X3N0YXRlKHN0cnVjdCBrYmRfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMzI4LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMjk6XHRzdGF0ZS1cdTAwM2Vtb2RlX2JpdCA9IGZmcyhidWZmZXIub3V0cHV0WzFdIFx1MDAyNiAweEZGRkYpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzMzAtXHRpZiAoc3RhdGUtXHUwMDNlbW9kZV9iaXQgIT0gMClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTMzMi1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzMzOlx0c3RhdGUtXHUwMDNldHJpZ2dlcnMgPSAoYnVmZmVyLm91dHB1dFsxXSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzQ6XHRzdGF0ZS1cdTAwM2V0aW1lb3V0X3ZhbHVlID0gKGJ1ZmZlci5vdXRwdXRbMV0gXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgMHgzRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzM1Olx0c3RhdGUtXHUwMDNldGltZW91dF91bml0ID0gKGJ1ZmZlci5vdXRwdXRbMV0gXHUwMDNlXHUwMDNlIDMwKSBcdTAwMjYgMHgzO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzY6XHRzdGF0ZS1cdTAwM2VhbHNfc2V0dGluZyA9IGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDI2IDB4RkY7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNzpcdHN0YXRlLVx1MDAzZWFsc192YWx1ZSA9IChidWZmZXIub3V0cHV0WzJdIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhGRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzM4Olx0c3RhdGUtXHUwMDNlbGV2ZWwgPSAoYnVmZmVyLm91dHB1dFsyXSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEZGO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzk6XHRzdGF0ZS1cdTAwM2V0aW1lb3V0X3ZhbHVlX2FjID0gKGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgMHgzRjtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzQwOlx0c3RhdGUtXHUwMDNldGltZW91dF91bml0X2FjID0gKGJ1ZmZlci5vdXRwdXRbMl0gXHUwMDNlXHUwMDNlIDMwKSBcdTAwMjYgMHgzO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzNDEtXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTEzOTc9c3RhdGljIGludCBrYmRfZ2V0X3Rva2VuX2JpdCh1OCBiaXQpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTE0MTUtXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTQxNjpcdHZhbCA9IGJ1ZmZlci5vdXRwdXRbMV07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTQxNy1cdHJldHVybiAodmFsID09IHRva2VuLVx1MDAzZXZhbHVlKTtcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MjE5NT1zdGF0aWMgaW50IGRlbGxfYmF0dGVyeV9yZWFkKGNvbnN0IHUxNiB0b2tlbmlkKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA0LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjIyMDU6XHRpZiAoYnVmZmVyLm91dHB1dFsxXSBcdTAwM2UgSU5UX01BWClcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA2LVx0XHRyZXR1cm4gLUVJTztcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA3LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjIyMDg6XHRyZXR1cm4gYnVmZmVyLm91dHB1dFsxXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yMjA5LX1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MjQ1OD1zdGF0aWMgaW50IF9faW5pdCBkZWxsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMjUyNC1cdGlmIChyZXQgPT0gMClcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoyNTI1Olx0XHRtYXhfaW50ZW5zaXR5ID0gYnVmZmVyLm91dHB1dFszXTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0yNTI2LVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jPTEyMD1zdGF0aWMgaW50IHRoZXJtYWxfZ2V0X21vZGUodm9pZClcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xMjktXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxMzA6XHRzdGF0ZSA9IGJ1ZmZlci5vdXRwdXRbMl07XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xMzEtXHRpZiAoc3RhdGUgXHUwMDI2IERFTExfQkFMQU5DRUQpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM9MTQzPXN0YXRpYyBpbnQgdGhlcm1hbF9nZXRfc3VwcG9ydGVkX21vZGVzKGludCAqc3VwcG9ydGVkX2JpdHMpXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmMtMTUxLVx0XHRyZXR1cm4gcmV0O1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM6MTUyOlx0KnN1cHBvcnRlZF9iaXRzID0gRklFTERfR0VUKERFTExfVEhFUk1BTF9TVVBQT1JURUQsIGJ1ZmZlci5vdXRwdXRbMV0pO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmMtMTUzLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM9MTU2PXN0YXRpYyBpbnQgdGhlcm1hbF9nZXRfYWNjX21vZGUoaW50ICphY2NfbW9kZSlcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xNjQtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxNjU6XHQqYWNjX21vZGUgPSBGSUVMRF9HRVQoREVMTF9BQ0NfR0VUX0ZJRUxELCBidWZmZXIub3V0cHV0WzNdKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jLTE2Ni1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdHR5L01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX1RUWSlcdFx0JiM0Mzs9IHR0eV9pby5vIG5fdHR5Lm8gdHR5X2lvY3RsLm8gdHR5X2xkaXNjLm8gXFxcbmRyaXZlcnMvdHR5L01ha2VmaWxlOjM6XHRcdFx0XHQgICB0dHlfYnVmZmVyLm8gdHR5X3BvcnQubyB0dHlfbXV0ZXgubyBcXFxuZHJpdmVycy90dHkvTWFrZWZpbGUtNC1cdFx0XHRcdCAgIHR0eV9sZHNlbS5vIHR0eV9iYXVkcmF0ZS5vIHR0eV9qb2JjdHJsLm8gXFxcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlPTk9dXNiY29yZS15IDo9IHVzYi5vIGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIub1xuZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZToxMDp1c2Jjb3JlLXkgJiM0Mzs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cbmRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUtMTEtdXNiY29yZS15ICYjNDM7PSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cbi0tXG5mcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTIwLVxuZnMvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0JVRkZFUl9IRUFEKVx0JiM0Mzs9IGJ1ZmZlci5vIG1wYWdlLm9cbmZzL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QUk9DX0ZTKVx0XHQmIzQzOz0gcHJvY19uYW1lc3BhY2Uub1xuLS1cbmZzL2hwZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFBGU19GUykgJiM0Mzs9IGhwZnMub1xuZnMvaHBmcy9NYWtlZmlsZS03LVxuZnMvaHBmcy9NYWtlZmlsZTo4OmhwZnMtb2JqcyA6PSBhbGxvYy5vIGFub2RlLm8gYnVmZmVyLm8gZGVudHJ5Lm8gZGlyLm8gZG5vZGUubyBlYS5vIGZpbGUubyBcXFxuZnMvaHBmcy9NYWtlZmlsZS05LVx0ICAgICBpbm9kZS5vIG1hcC5vIG5hbWUubyBuYW1laS5vIHN1cGVyLm9cbi0tXG5mcy9uZXRmcy9NYWtlZmlsZT0zPW5ldGZzLXkgOj0gXFxcbi0tXG5mcy9uZXRmcy9NYWtlZmlsZS0xNi1cdHJlYWRfc2luZ2xlLm8gXFxcbmZzL25ldGZzL01ha2VmaWxlOjE3Olx0cm9sbGluZ19idWZmZXIubyBcXFxuZnMvbmV0ZnMvTWFrZWZpbGUtMTgtXHR3cml0ZV9jb2xsZWN0Lm8gXFxcbi0tXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaD00Nz1zdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHtcbi0tXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaC02Mi1cdCAqIHN0b3JlZCBpbiBzdHJ1Y3QgXHUwMDI2ZHJtX2ZyYW1lYnVmZmVyLCBpbmNsdWRpbmcgYWxsIHJlbGV2YW50IG1ldGFkYXRhXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaDo2MzpcdCAqIGxpa2UgXHUwMDI2ZHJtX2ZyYW1lYnVmZmVyLnBpdGNoZXMgYW5kIFx1MDAyNmRybV9mcmFtZWJ1ZmZlci5vZmZzZXRzIGlmIHRoZVxuaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgtNjQtXHQgKiBtb2RpZmllciBlbmFibGVzIGFkZGl0aW9uYWwgcGxhbmVzIGJleW9uZCB0aGUgZm91cmNjIHBpeGVsIGZvcm1hdFxuLS1cbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vIHJpbmdfYnVmZmVyLm8gY2FsbGNoYWluLm9cbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMy1cbi0tXG5rZXJuZWwvcHJpbnRrL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1BSSU5USykgICAgICAgICAgICAgICAgICYjNDM7PSBwcmludGtfc3VwcG9ydC5vXG5rZXJuZWwvcHJpbnRrL01ha2VmaWxlOjg6cHJpbnRrX3N1cHBvcnQteVx0ICAgICAgICAgICAgIDo9IHByaW50a19yaW5nYnVmZmVyLm9cbmtlcm5lbC9wcmludGsvTWFrZWZpbGUtOS1wcmludGtfc3VwcG9ydC0kKENPTkZJR19TWVNDVEwpXHQgICAgICYjNDM7PSBzeXNjdGwub1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSAmIzQzOz0gbGliZnRyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfUklOR19CVUZGRVIpICYjNDM7PSByaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSykgJiM0Mzs9IHJpbmdfYnVmZmVyX2JlbmNobWFyay5vXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSAmIzQzOz0gdHJhY2VfcmVtb3RlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgJiM0Mzs9IHJlbW90ZV90ZXN0Lm9cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTYxPSQob2JqKS8lLm8uY2hlY2tlZDogJChvYmopLyUubyAkKG9iaikvdW5kZWZzeW1zX2Jhc2UubyBGT1JDRVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTY0OmFsd2F5cy0kKENPTkZJR19TSU1QTEVfUklOR19CVUZGRVIpICYjNDM7PSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTY1LVxuLS1cbm5ldC9jZXBoL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0NFUEhfTElCKSAmIzQzOz0gbGliY2VwaC5vXG5uZXQvY2VwaC9NYWtlZmlsZS02LVxubmV0L2NlcGgvTWFrZWZpbGU6NzpsaWJjZXBoLXkgOj0gY2VwaF9jb21tb24ubyBtZXNzZW5nZXIubyBtc2dwb29sLm8gYnVmZmVyLm8gcGFnZWxpc3QubyBcXFxubmV0L2NlcGgvTWFrZWZpbGUtOC1cdG1vbl9jbGllbnQubyBkZWNvZGUubyBcXFxuLS1cbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlPTM9Q0ZMQUdTX2FtZHRwLXN0cmVhbS5vXHQ6PSAtSSQoc3JjKVxuc291bmQvZmlyZXdpcmUvTWFrZWZpbGUtNC1cbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlOjU6c25kLWZpcmV3aXJlLWxpYi15IDo9IGxpYi5vIGlzby1yZXNvdXJjZXMubyBwYWNrZXRzLWJ1ZmZlci5vIFxcXG5zb3VuZC9maXJld2lyZS9NYWtlZmlsZS02LVx0XHRcdCBmY3AubyBjbXAubyBhbWR0cC1zdHJlYW0ubyBhbWR0cC1hbTgyNC5vXG4tLVxudG9vbHMvaWlvL0J1aWxkPTM9aWlvX2V2ZW50X21vbml0b3IteSAmIzQzOz0gaWlvX2V2ZW50X21vbml0b3IubyBpaW9fdXRpbHMub1xudG9vbHMvaWlvL0J1aWxkOjQ6aWlvX2dlbmVyaWNfYnVmZmVyLXkgJiM0Mzs9IGlpb19nZW5lcmljX2J1ZmZlci5vIGlpb191dGlscy5vXG4tLVxudG9vbHMvcGVyZi90ZXN0cy9CdWlsZD00NT1wZXJmLXRlc3QteSAmIzQzOz0gZXhwci5vXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkOjQ2OnBlcmYtdGVzdC15ICYjNDM7PSBiYWNrd2FyZC1yaW5nLWJ1ZmZlci5vXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkLTQ3LXBlcmYtdGVzdC15ICYjNDM7PSBzZHQub1xuLS1cbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGU9MjA9VE9PTF9PQkpTID0gXFxcbi0tXG50b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL01ha2VmaWxlLTI5LVx0dXRhc2NpaS5vXFxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGU6MzA6XHR1dGJ1ZmZlci5vXFxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGUtMzEtXHR1dGNrc3VtLm9cXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk2OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDg3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCbG9jayBMYXllciBDaGFuZ2VzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBzZXQgdXAgbXkgZnV6emluZyBlbnZpcm9ubWVudCB0byB0YXJnZXQgdGhpcyBuZXcgYmxvY2sgbGF5ZXIgaW5mcmFzdHJ1Y3R1cmUgZm9yIGRlZmVycmVkIGJpbyBjb21wbGV0aW9ucy4gIEl0IHNlZW1zIHRoZSBjcml0aWNhbCBjb21wb25lbnQsIGBDT05GSUdfQlVGRkVSX0hFQURgLCBpcyBpbmRlZWQgcmVxdWlyZWQgZm9yIGBmcy9idWZmZXIuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBlbmFibGVkOiBgQkxPQ0tgLCBgQlVGRkVSX0hFQURgLCBgRlNfSU9NQVBgLCBgWEZTX0ZTYCwgYEVST0ZTX0ZTYCwgYW5kIGBFUk9GU19GU19aSVBgLiBHb29kLCB0aGUgYmFzZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIEkgaGF2ZSB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gYENPTkZJR19CVUZGRVJfSEVBRGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBmaWxlc3lzdGVtcyBsaWtlIGBFWFQ0X0ZTYCwgYW5kIGBYRlNfRlNgLiBTaW1pbGFybHkgYENPTkZJR19GU19JT01BUGAgaXMgc2VsZWN0ZWQgYnkgZmlsZXN5c3RlbXMgbGlrZSBgWEZTX0ZTYCwgYW5kIGBFWFQ0X0ZTYCwgbWVhbmluZyBteSBjb25maWcgbGlzdCBpcyBnb29kIHRvIGdvLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC4gSSBzZWUgdGhhdCBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgIGFyZSB0aGUgdHdvIGJlc3QgY2FuZGlkYXRlcy4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgaW9tYXBfYWRkX3RvX2lvZW5kYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMuIFRoZSBjb2RlIHNob3dzOgoKYGBgYwpzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAoJCWxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKQpgYGAKCkFuZCBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaXMgYWxzbyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgbGlrZSB0aGlzOgoKYGBgYwp2b2lkIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKQpgYGAKCkkgYWxzbyBsb29rZWQgYXQgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBgYmhfc3VibWl0YCBpcyBub3QgbW9kaWZpZWQsIGJ1dCBgX19iaF9zdWJtaXRgIGlzLiBCdXQgYF9fYmhfc3VibWl0YCBpcyBzdGF0aWMuIEluIGBmcy94ZnMveGZzX2FvcHMuY2AsIGB4ZnNfaW9lbmRfbmVlZHNfd3FfY29tcGxldGlvbmAgaXMgbW9kaWZpZWQgYnV0IGl0IGlzIHN0YXRpYy4gSW4gYGZzL2Vyb2ZzL3pkYXRhLmNgLCBgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmZgIGlzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgc3RhdGljLgoKYGJpb19lbmRpb2AgaXMgbW9kaWZpZWQsIGJ1dCB0aGF0JiMzOTtzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aCwgc28gbGV0JiMzOTtzIGF2b2lkIGl0LiBgYmlvc2V0X2luaXRgIGlzIHVudG91Y2hlZCwgYW5kIGBpbml0X2Jpb2AgaXMgYF9faW5pdGAuCgpTbyB0aGUgY2VudHJhbCBpZGVhIGlzIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGluZnJhc3RydWN0dXJlIHRvIGRlZmVyIGJpbyBjb21wbGV0aW9ucyB1c2luZyBhIHBlci1DUFUgd29ya3F1ZXVlIGluIHRoZSBibG9jayBsYXllci4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcsIHNldCBpbiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Agd2hlbiBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgaXMgdHJ1ZSwgbGlrZSB3aXRoIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuIFRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGFuZCBpcyBpbnRlZ3JhdGVkIGludG8gYGJpb19lbmRpb2AuIFRoaXMgbWVhbnMgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjay4gSXQmIzM5O3MgcmlwZSBmb3IgZnV6emluZyEKCkkgbmVlZCB0byBjb25maXJtIGlmIGBSV0ZfRE9OVENBQ0hFYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBObywgaXQmIzM5O3MgYSBmbGFnIGZvciBgcHdyaXRldjJgLgoKSW4gc3VtbWFyeSwgSSBuZWVkIHRoZSBmb2xsb3dpbmcgY29uZmlnczogYEJMT0NLYCwgYEJVRkZFUl9IRUFEYCwgYEZTX0lPTUFQYCwgYFhGU19GU2AsIGBFUk9GU19GU2AsIGFuZCBgRVJPRlNfRlNfWklQYCB0byB0YXJnZXQgdGhlc2UgYXJlYXMuIE9rYXksIGxldCBtZSBtYWtlIHN1cmUgdGhhdCBgRVJPRlNfRlNfWklQYCBpcyBhIGJvb2wgb3IgdHJpc3RhdGUuIEkgd2lsbCBjaGVjayB0aGUgYGZzL2Vyb2ZzL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVJPRlNfRlNfWklQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWc9OTg9Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNDQtXG5mcy9lcm9mcy9LY29uZmlnOjE0NTpjb25maWcgRVJPRlNfRlNfWklQX1pTVERcbmZzL2Vyb2ZzL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFUk9GUyBac3RhbmRhcmQgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE1NS1cbmZzL2Vyb2ZzL0tjb25maWc6MTU2OmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRVJPRlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgRVJPRlNfRlNfWklQYC4uLiB5ZXAsIHRoYXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgYm9vbGVhbiwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCBxdWlja2x5IGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBmbGFncy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbmV4dCBsb2dpY2FsIGNoZWNrIGlzIGdvaW5nIHRvIGJlIGBGU19JT01BUGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSByZW1lbWJlcmluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGNvbXByZXNzZWQgSS9PIGFuZCBkaXJlY3QgYWNjZXNzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCB0aGUgY29kZWJhc2Ugb3IgZG9jdW1lbnRhdGlvbiB0byBhdm9pZCBtaXNzaW5nIGFuIGltcG9ydGFudCBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIEludGVybmFscyoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBGU19JT01BUGAgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4uIE5lZWQgdG8gY29uZmlybSB0aGF0IHF1aWNrbHksIGJ1dCBJJiMzOTttIG9wZXJhdGluZyBvbiB0aGF0IGFzc3VtcHRpb24gZm9yIHRoZSBtb21lbnQuIE5vdywgd2hlcmUgd2FzIHRoYXQgcmVsYXRlZCB0byBgQlVGRkVSX0hFQURgPyBMZXQgbWUgc2VlIHdoYXQgdGhhdCBkYXRhIHN0cnVjdHVyZSBob2xkcyB3aXRoaW4gaXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGludGVybmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJVRkZFUl9IRUFEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjI9Y29uZmlnIEZTX1NUQUNLXG4tLVxuZnMvS2NvbmZpZy0yNC1cbmZzL0tjb25maWc6MjU6Y29uZmlnIEJVRkZFUl9IRUFEXG5mcy9LY29uZmlnLTI2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqUmVmbGVjdGluZyBvbiBEYXRhIFN0cnVjdHVyZXMgaW4gS2VybmVsIE1lbW9yeSoqCgpSaWdodCwgc28gYEJVRkZFUl9IRUFEYC4gQWJzb2x1dGVseSwgaXQmIzM5O3MgYSBCb29sZWFuIHR5cGUuIFNpbXBsZSBlbm91Z2gsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYmFzaWNzIGFyZSBwZXJmZWN0bHkgdW5kZXJzdG9vZC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHJlbGF0ZWQgbWVtb3J5IGxheW91dC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2Ygd2hhdCBgQkxPQ0tgIGlzIGRlZmluZWQgYXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgb24gd2hhdCB0aGF0IHN0cnVjdHVyZSBob2xkcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBCVUZGRVJfSEVBRGAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBvZiB0aGUgSS9PIHN5c3RlbSwgc28gYSBxdWljayBtZW50YWwgcmV2aWV3IHdpbGwgYmUgd29ydGh3aGlsZS4gV2UgbmVlZCB0byBiZSBvbiB0b3Agb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWctNC0jXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xuYmxvY2svS2NvbmZpZy02LSAgICAgICBib29sIFwmIzM0O0VuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcJiMzNDsgaWYgRVhQRVJUXG4tLVxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xuYmxvY2svS2NvbmZpZy0yOC1cbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxuYmxvY2svS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXG4tLVxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbmJsb2NrL0tjb25maWctMjE5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjgwNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyB0aGUgTG9naWNhbCBGbG93KioKCk9rYXksIHNvIHRoZSBjdXJyZW50IHN0YXRlIGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBuYW1lZCBgQkxPQ0tgLiBTaW1wbGUgZW5vdWdoLiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJlbGF0aW9uIHRvIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIGBYRlNfRlNgIGlzIGxpa2VseSB0aGUga2V5LiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBzdGF0dXMgb2YgYFhGU19GU2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgaW4gY29tYmluYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdXRpbGlzZSB0aGVtIHRvIGNoZWNrIGZvciBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xuZnMveGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1hGUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRmlsZXN5c3RlbSBUcmktU3RhdGVzKioKClJpZ2h0LCBzbyBgWEZTX0ZTYCBpcyBjb25maXJtZWQgYXMgYSB0cmlzdGF0ZSDigJMgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzIGluIGZhY3QgdHJpc3RhdGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBFUk9GU19GU2AgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFUk9GU19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9LY29uZmlnLTItXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXG5mcy9lcm9mcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxuZnMvZXJvZnMvS2NvbmZpZzo1MDpjb25maWcgRVJPRlNfRlNfREVCVUdcbmZzL2Vyb2ZzL0tjb25maWctNTEtXHRib29sIFwmIzM0O0VST0ZTIGRlYnVnZ2luZyBmZWF0dXJlXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy01OS1cbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXG5mcy9lcm9mcy9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy03MC1cbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxuZnMvZXJvZnMvS2NvbmZpZy03Mi1cdGJvb2wgXCYjMzQ7RVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxuZnMvZXJvZnMvS2NvbmZpZzo4NTpjb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcbmZzL2Vyb2ZzL0tjb25maWctODYtXHRib29sIFwmIzM0O0VST0ZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOTctXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxuZnMvZXJvZnMvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNDQtXG5mcy9lcm9mcy9LY29uZmlnOjE0NTpjb25maWcgRVJPRlNfRlNfWklQX1pTVERcbmZzL2Vyb2ZzL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFUk9GUyBac3RhbmRhcmQgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE1NS1cbmZzL2Vyb2ZzL0tjb25maWc6MTU2OmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTE2OS1cbmZzL2Vyb2ZzL0tjb25maWc6MTcwOmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURcbmZzL2Vyb2ZzL0tjb25maWctMTcxLVx0Ym9vbCBcJiMzNDtFUk9GUyBwZXItY3B1IGRlY29tcHJlc3Npb24ga3RocmVhZCB3b3JrZXJzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNzgtXG5mcy9lcm9mcy9LY29uZmlnOjE3OTpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEX0hJUFJJXG5mcy9lcm9mcy9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7RVJPRlMgaGlnaCBwcmlvcml0eSBwZXItQ1BVIGt0aHJlYWQgd29ya2Vyc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTg4LVxuZnMvZXJvZnMvS2NvbmZpZzoxODk6Y29uZmlnIEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVcbmZzL2Vyb2ZzL0tjb25maWctMTkwLVx0Ym9vbCBcJiMzNDtFUk9GUyBwYWdlIGNhY2hlIHNoYXJlIHN1cHBvcnQgKGV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMTYKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBMYXllciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBFUk9GU19GU2AgaXMgaW5kZWVkIGEgdHJpc3RhdGUgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQgd2hlbiBsb29raW5nIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUgaGVyZS4gSSBzZWUgYSBmZXcga2V5IGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkOiBgQkxPQ0tgLCBgQlVGRkVSX0hFQURgLCBgRlNfSU9NQVBgLCBgWEZTX0ZTYCwgYEVST0ZTX0ZTYCwgYW5kIGBFUk9GU19GU19aSVBgLiBUaGVzZSBhcmUgbGlrZWx5IGFsbCByZWxldmFudCB0byB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGEgZmV3IGNyaXRpY2FsIHN5bWJvbHMsIHNwZWNpZmljYWxseSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgLiBUaGUgbWFpbiB0aHJ1c3Qgb2YgdGhpcyBwYXRjaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0JiMzOTtzIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHRocm91Z2ggYSBwZXItQ1BVIHdvcmtxdWV1ZS4gVGhpcyBpcyBhY3RpdmF0ZWQgYnkgdGhlIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZy4gSSBzZWUgdGhhdCBmbGFnIGlzIHNldCBpbiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Agd2hlbiBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgaXMgdHJ1ZS4gVGhhdCBzdWdnZXN0cyB0aGVzZSBjaGFuZ2VzIGFyZSB0aWVkIHRvIG9wZXJhdGlvbnMgbGlrZSBgUldGX0RPTlRDQUNIRWAgd3JpdGVzLgoKVGhpcyBzdHJpa2VzIG1lIGFzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgZm9yIGZ1enppbmcsIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCB0aGVzZSBjb21wb25lbnRzIGFyZS4gVGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgd2lkZS1yZWFjaGluZyBpbXBhY3QsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1enogdGFyZ2V0cy4KCkkgbmVlZCB0byBtYWtlIGEgbm90ZSBoZXJlOyB0aGlzIGlzIHNvbWV0aGluZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtCVUZGRVJfSEVBRCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfWklQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19iaW9fY29tcGxldGVfaW5fdGFzayYjMzQ7LAogICAgJiMzNDtpb21hcF9hZGRfdG9faW9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtCVUZGRVJfSEVBRCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfWklQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19iaW9fY29tcGxldGVfaW5fdGFzayYjMzQ7LAogICAgJiMzNDtpb21hcF9hZGRfdG9faW9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6Mzk6NDQuODA1NzMyNzMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODgyMjk3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJCVUZGRVJfSEVBRFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX1pJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYmlvX2NvbXBsZXRlX2luX3Rhc2tcIixcbiAgICBcImlvbWFwX2FkZF90b19pb2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW5mcmFzdHJ1Y3R1cmUgaW4gdGhlIGJsb2NrIGxheWVyIGZvciBkZWZlcnJpbmcgYmlvIGNvbXBsZXRpb25zIHRvIHRhc2sgY29udGV4dCB2aWEgYSBwZXItQ1BVIHdvcmtxdWV1ZS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIGZsYWcsIHdoaWNoIGlzIHNldCBpbiBmcy9idWZmZXIuYyBhbmQgZnMvaW9tYXAvaW9lbmQuYyB3aGVuIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykgaXMgdHJ1ZSAoZS5nLiwgdmlhIFJXRl9ET05UQ0FDSEUgd3JpdGVzKS4gVGhlIGNvcmUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gX19iaW9fY29tcGxldGVfaW5fdGFzayBhbmQgaW50ZWdyYXRlZCBpbnRvIGJpb19lbmRpby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjayBwYXRocywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6Mzk6NDQuODA1NzQwMDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzExNzQ4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDE2OjM5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcXG5pbmRleCA2YTJmNmZjMzQxM2U4Li5hOTYxMDk1MDMyNWIwIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jpby5jXFxuKysrIGIvYmxvY2svYmlvLmNcXG5AQCAtMTc0MSw2ICsxNzQxLDYxIEBAIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2YmlvX2RpcnR5X3dvcmspO1xcbiB9XFxuIFxcbisvKlxcbisgKiBJbmZyYXN0cnVjdHVyZSBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrLWNvbnRleHQgdmlhIGEgcGVyLUNQVVxcbisgKiB3b3JrcXVldWUuIFRyaWdnZXJlZCBlaXRoZXIgYnkgdGhlIEJJT19DT01QTEVURV9JTl9UQVNLIGJpbyBmbGFnIChzdGF0aWNcXG4rICogZGVjaXNpb24gYXQgc3VibWl0IHRpbWUpIG9yIGJ5IGNhbGxpbmcgYmlvX2NvbXBsZXRlX2luX3Rhc2soKSBmcm9tXFxuKyAqIGJpX2VuZF9pbygpIChkeW5hbWljIGRlY2lzaW9uIGF0IGNvbXBsZXRpb24gdGltZSkuXFxuKyAqL1xcbitcXG4rc3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCB7XFxuK1xcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0aW50IGNwdTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCBiaW9fY29tcGxldGVfYmF0Y2gpO1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJpb19jb21wbGV0ZV93cTtcXG4rXFxuK3N0YXRpYyB2b2lkIGJpb19jb21wbGV0ZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4re1xcbitcXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoLCB3b3JrKTtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xcbitcXHRcXHRzdHJ1Y3QgYmlvICpiaW87XFxuK1xcbitcXHRcXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xcbitcXHRcXHRsaXN0ID0gYmF0Y2gtXFx1MDAzZWxpc3Q7XFxuK1xcdFxcdGJpb19saXN0X2luaXQoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0bG9jYWxfaXJxX2VuYWJsZSgpO1xcbitcXG4rXFx0XFx0aWYgKGJpb19saXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcXHUwMDI2bGlzdCkpKVxcbitcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyhiaW8pO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgX19iaW9fY29tcGxldGVfaW5fdGFzayhzdHJ1Y3QgYmlvICpiaW8pXFxuK3tcXG4rXFx0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2g7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGJvb2wgd2FzX2VtcHR5O1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHRiYXRjaCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoKTtcXG4rXFx0d2FzX2VtcHR5ID0gYmlvX2xpc3RfZW1wdHkoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KTtcXG4rXFx0YmlvX2xpc3RfYWRkKFxcdTAwMjZiYXRjaC1cXHUwMDNlbGlzdCwgYmlvKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHdhc19lbXB0eSlcXG4rXFx0XFx0cXVldWVfd29ya19vbihiYXRjaC1cXHUwMDNlY3B1LCBiaW9fY29tcGxldGVfd3EsIFxcdTAwMjZiYXRjaC1cXHUwMDNld29yayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoX19iaW9fY29tcGxldGVfaW5fdGFzayk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3JlbWFpbmluZ19kb25lKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHQvKlxcbkBAIC0xODE1LDcgKzE4NzAsOSBAQCB2b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdH1cXG4gI2VuZGlmXFxuIFxcbi1cXHRpZiAoYmlvLVxcdTAwM2ViaV9lbmRfaW8pXFxuK1xcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSBcXHUwMDI2XFx1MDAyNiBiaW9faW5fYXRvbWljKCkpXFxuK1xcdFxcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcXG4rXFx0ZWxzZSBpZiAoYmlvLVxcdTAwM2ViaV9lbmRfaW8pXFxuIFxcdFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvKGJpbyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pO1xcbkBAIC0yMDAxLDYgKzIwNTgsNTUgQEAgaW50IGJpb3NldF9pbml0KHN0cnVjdCBiaW9fc2V0ICpicyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGJpb3NldF9pbml0KTtcXG4gXFxuK3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9IFxcdTAwMjZwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcXG4rXFxuK1xcdGVuYWJsZV93b3JrKFxcdTAwMjZiYXRjaC1cXHUwMDNld29yayk7XFxuK1xcdGlmICghYmlvX2xpc3RfZW1wdHkoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KSlcXG4rXFx0XFx0cXVldWVfd29ya19vbihjcHUsIGJpb19jb21wbGV0ZV93cSwgXFx1MDAyNmJhdGNoLVxcdTAwM2V3b3JrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERpc2FibGUgdGhpcyBDUFUncyB3b3JrIGl0ZW0gc28gdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyXFxuKyAqIGFmdGVyIHRoZSBDUFUgaXMgb2ZmbGluZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKHVuc2lnbmVkIGludCBjcHUpXFxuK3tcXG4rXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNnBlcl9jcHUoYmlvX2NvbXBsZXRlX2JhdGNoLCBjcHUpLndvcmspO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogRHJhaW4gYSBkZWFkIENQVSdzIGRlZmVycmVkIGJpbyBjb21wbGV0aW9ucy4gVGhlIENQVSBpcyBkZWFkIGFuZCB0aGUgd29ya2VyXFxuKyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLlxcbisgKi9cXG4rc3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9XFxuK1xcdFxcdHBlcl9jcHVfcHRyKFxcdTAwMjZiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbztcXG4rXFxuK1xcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZiYXRjaC1cXHUwMDNlbGlzdCkpKVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyhiaW8pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBiaW9fY29tcGxldGVfYmF0Y2hfaW5pdChpbnQgY3B1KVxcbit7XFxuK1xcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cXG4rXFx0XFx0cGVyX2NwdV9wdHIoXFx1MDAyNmJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcXG4rXFxuK1xcdGJpb19saXN0X2luaXQoXFx1MDAyNmJhdGNoLVxcdTAwM2VsaXN0KTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZiYXRjaC1cXHUwMDNld29yaywgYmlvX2NvbXBsZXRlX3dvcmtfZm4pO1xcbitcXHRiYXRjaC1cXHUwMDNlY3B1ID0gY3B1O1xcbitcXG4rXFx0aWYgKCFjcHVfb25saW5lKGNwdSkpXFxuK1xcdFxcdGRpc2FibGVfd29ya19zeW5jKFxcdTAwMjZiYXRjaC1cXHUwMDNld29yayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYmlvKHZvaWQpXFxuIHtcXG4gXFx0aW50IGk7XFxuQEAgLTIwMTUsNiArMjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxcbiBcXHRcXHRcXHRcXHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDLCBOVUxMKTtcXG4gXFx0fVxcbiBcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpXFxuK1xcdFxcdGJpb19jb21wbGV0ZV9iYXRjaF9pbml0KGkpO1xcbitcXG4rXFx0YmlvX2NvbXBsZXRlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJiaW9fY29tcGxldGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7XFxuK1xcdGlmICghYmlvX2NvbXBsZXRlX3dxKVxcbitcXHRcXHRwYW5pYyhcXFwiYmlvOiBjYW4ndCBhbGxvY2F0ZSBiaW9fY29tcGxldGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGJpbyB0YXNrLWNvbnRleHQgY29tcGxldGlvbiBkcmFpbmluZyBvbiBob3QtdW5wbHVnZ2VkIENQVXM6XFxuK1xcdCAqXFxuK1xcdCAqICAgMS4gU3RvcCB0aGUgcGVyLUNQVSB3b3JrIGl0ZW0gd2hpbGUgdGhlIENQVSBpcyBzdGlsbCBvbmxpbmUsIHNvXFxuK1xcdCAqICAgICAgdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyIGxhdGVyLlxcbitcXHQgKiAgIDIuIERyYWluIGxlZnRvdmVyIGJpb3MgYWRkZWQgYmV0d2VlbiB3b3JrZXIgZGlzYWJsaW5nIGFuZCBDUFVcXG4rXFx0ICogICAgICBvZmZsaW5pbmcuXFxuK1xcdCAqL1xcbitcXHRjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQX0FQX09OTElORV9EWU4sXFxuK1xcdFxcdFxcdFxcdCAgXFxcImJsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmVcXFwiLFxcbitcXHRcXHRcXHRcXHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lLFxcbitcXHRcXHRcXHRcXHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKTtcXG4rXFx0Y3B1aHBfc2V0dXBfc3RhdGVfbm9jYWxscyhDUFVIUF9CUF9QUkVQQVJFX0RZTixcXG4rXFx0XFx0XFx0XFx0ICBcXFwiYmxvY2svYmlvOmNvbXBsZXRlOmRlYWRcXFwiLFxcbitcXHRcXHRcXHRcXHQgIE5VTEwsIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZGVhZCk7XFxuK1xcbiBcXHRjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9CSU9fREVBRCwgXFxcImJsb2NrL2JpbzpkZWFkXFxcIiwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0YmlvX2NwdV9kZWFkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xcbmluZGV4IDE1NzgzYTYxODBkZWMuLjhiMzljNTNiNjM5MzQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svZm9wcy5jXFxuKysrIGIvYmxvY2svZm9wcy5jXFxuQEAgLTk0MSw3ICs5NDEsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4gXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gXFx0LmZhbGxvY2F0ZVxcdD0gYmxrZGV2X2ZhbGxvY2F0ZSxcXG4gXFx0LnVyaW5nX2NtZFxcdD0gYmxrZGV2X3VyaW5nX2NtZCxcXG4tXFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMsXFxuK1xcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBfX2luaXQgaW50IGJsa2Rldl9pbml0KHZvaWQpXFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcXG5pbmRleCA5YWY1ZjA2MWExZjg1Li42ZjA5OTg0NzI0MGUwIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtMTIwMyw2ICsxMjAzLDkgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFxuIFxcdGJpbyA9IGJpb19hbGxvYyhiaC1cXHUwMDNlYl9iZGV2LCAxLCBvcGYsIEdGUF9OT0lPKTtcXG4gXFxuK1xcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXFx1MDAzZWJfZm9saW8pIFxcdTAwMjZcXHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXFxuK1xcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4rXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19FTkNSWVBUSU9OKSlcXG4gXFx0XFx0YnVmZmVyX3NldF9jcnlwdG9fY3R4KGJpbywgYmgsIEdGUF9OT0lPKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3pkYXRhLmMgYi9mcy9lcm9mcy96ZGF0YS5jXFxuaW5kZXggNzQ1MjBlOTEwMjU5Ni4uZjc5NmJiM2VmNTNiOSAxMDA2NDRcXG4tLS0gYS9mcy9lcm9mcy96ZGF0YS5jXFxuKysrIGIvZnMvZXJvZnMvemRhdGEuY1xcbkBAIC0xNDI3LDE1ICsxNDI3LDYgQEAgc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzcXVldWVfa3RocmVhZF93b3JrKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuIH1cXG4gI2VuZGlmXFxuIFxcbi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi9cXG4tc3RhdGljIGlubGluZSBib29sIHpfZXJvZnNfaW5fYXRvbWljKHZvaWQpXFxuLXtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRJT04pIFxcdTAwMjZcXHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xcbi19XFxuIFxcbiBzdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZihzdHJ1Y3Qgel9lcm9mc19kZWNvbXByZXNzcXVldWUgKmlvLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW50IGJpb3MpXFxuQEAgLTE0NTIsNyArMTQ0Myw3IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXFxuIFxcbiBcXHRpZiAoYXRvbWljX2FkZF9yZXR1cm4oYmlvcywgXFx1MDAyNmlvLVxcdTAwM2VwZW5kaW5nX2Jpb3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdGlmICh6X2Vyb2ZzX2luX2F0b21pYygpKSB7XFxuK1xcdGlmIChiaW9faW5fYXRvbWljKCkpIHtcXG4gXFx0XFx0LyogU2VlIGBzeW5jX2RlY29tcHJlc3NgIGluIHN5c2ZzLWZzLWVyb2ZzIGZvciBtb3JlIGRldGFpbHMgKi9cXG4gXFx0XFx0aWYgKHNiaS1cXHUwMDNlc3luY19kZWNvbXByZXNzID09IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPKVxcbiBcXHRcXHRcXHRzYmktXFx1MDAzZXN5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19GT1JDRV9PTjtcXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcXG5pbmRleCAzMDQ2OGQ1MWI1YWQ3Li4xYWU4YThmYjg1MDM4IDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2lvZW5kLmNcXG4rKysgYi9mcy9pb21hcC9pb2VuZC5jXFxuQEAgLTIzOCw4ICsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0aWYgKHdwYy1cXHUwMDNlaW9tYXAuZmxhZ3MgXFx1MDAyNiBJT01BUF9GX1NIQVJFRClcXG4gXFx0XFx0aW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfU0hBUkVEO1xcbi1cXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4tXFx0XFx0aW9lbmRfZmxhZ3MgfD0gSU9NQVBfSU9FTkRfRE9OVENBQ0hFO1xcbiBcXHRpZiAocG9zID09IHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IFxcdTAwMjZcXHUwMDI2ICh3cGMtXFx1MDAzZWlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9CT1VOREFSWSkpXFxuIFxcdFxcdGlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX0JPVU5EQVJZO1xcbiBcXG5AQCAtMjU2LDYgKzI1NCw5IEBAIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGlmICghYmlvX2FkZF9mb2xpbyhcXHUwMDI2aW9lbmQtXFx1MDAzZWlvX2JpbywgZm9saW8sIG1hcF9sZW4sIHBvZmYpKVxcbiBcXHRcXHRnb3RvIG5ld19pb2VuZDtcXG4gXFxuK1xcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbitcXHRcXHRiaW9fc2V0X2ZsYWcoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENsYW1wIGlvX29mZnNldCBhbmQgaW9fc2l6ZSB0byB0aGUgaW5jb3JlIEVPRiBzbyB0aGF0IG9uZGlza1xcbiBcXHQgKiBmaWxlIHNpemUgdXBkYXRlcyBpbiB0aGUgaW9lbmQgY29tcGxldGlvbiBhcmUgYnl0ZS1hY2N1cmF0ZS5cXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xcbmluZGV4IDUxMjkzYjZmMzMxZjAuLmNkOGRlOGM4MmQ3OGMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19hb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xcbkBAIC01MjIsMTAgKzUyMiw2IEBAIHhmc19pb2VuZF9uZWVkc193cV9jb21wbGV0aW9uKFxcbiBcXHRpZiAoaW9lbmQtXFx1MDAzZWlvX2ZsYWdzIFxcdTAwMjYgKElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX1NIQVJFRCkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0LyogUGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gY2Fubm90IGJlIGRvbmUgaW4gaXJxIGNvbnRleHQuICovXFxuLVxcdGlmIChpb2VuZC1cXHUwMDNlaW9fZmxhZ3MgXFx1MDAyNiBJT01BUF9JT0VORF9ET05UQ0FDSEUpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxcbmluZGV4IDhmMzNmNzE3YjE0ZjUuLmE4MDkxYTNlOWQ4NzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcXG5AQCAtMzY4LDYgKzM2OCw0NSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiBcXG4gdm9pZCBzdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XFxuIFxcbisvKipcXG4rICogYmlvX2luX2F0b21pYyAtIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdW5zYWZlIGZvciBiaW8gY29tcGxldGlvblxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGluIGF0b21pYyBjb250ZXh0cyAoZS5nLiBoYXJkL3NvZnQgSVJRLCBwcmVlbXB0LWRpc2FibGVkKTtcXG4rICogJWZhbHNlIHdoZW4gYSBiaW8gY2FuIGJlIHNhZmVseSBjb21wbGV0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW5fYXRvbWljKHZvaWQpXFxuK3tcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRJT04pIFxcdTAwMjZcXHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xcbit9XFxuK1xcbit2b2lkIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKTtcXG4rXFxuKy8qKlxcbisgKiBiaW9fY29tcGxldGVfaW5fdGFzayAtIGVuc3VyZSBhIGJpbyBpcyBjb21wbGV0ZWQgaW4gcHJlZW1wdGlibGUgdGFzayBjb250ZXh0XFxuKyAqIEBiaW86IGJpbyB0byBjb21wbGV0ZVxcbisgKlxcbisgKiBJZiBjYWxsZWQgZnJvbSBub24tdGFzayBjb250ZXh0LCBvZmZsb2FkIHRoZSBiaW8gY29tcGxldGlvbiB0byBhIHdvcmtlclxcbisgKiB0aHJlYWQgYW5kIHJldHVybiAldHJ1ZS4gRWxzZSByZXR1cm4gJWZhbHNlIGFuZCBkbyBub3RoaW5nLlxcbisgKlxcbisgKiBVc2VzIEJJT19DT01QTEVURV9JTl9UQVNLIGFzIGEgc2VudGluZWw6IGlmIHNldCwgdGhlIGJpbyB3YXMgYWxyZWFkeVxcbisgKiBkZWZlcnJlZCBhbmQgd2UgYXJlIHJ1bm5pbmcgaW4gdGhlIHdvcmtlciDigJQgcmV0dXJuICVmYWxzZSBzbyB0aGVcXG4rICogY2FsbGJhY2sgcHJvY2VlZHMgaW5zdGVhZCBvZiByZS1kZWZlcnJpbmcuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxcbit7XFxuK1xcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoIWJpb19pbl9hdG9taWMoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XFxuK1xcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIGV4dGVybiB2b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICopO1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuaW5kZXggODgwOGVlNzZlNzNjMC4uZDQ5ZDk3YTA1MGQwZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbkBAIC0zMjIsNiArMzIyLDcgQEAgZW51bSB7XFxuIFxcdEJJT19SRU1BUFBFRCxcXG4gXFx0QklPX1pPTkVfV1JJVEVfUExVR0dJTkcsIC8qIGJpbyBoYW5kbGVkIHRocm91Z2ggem9uZSB3cml0ZSBwbHVnZ2luZyAqL1xcbiBcXHRCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQsIC8qIGJpbyBlbXVsYXRlcyBhIHpvbmUgYXBwZW5kIG9wZXJhdGlvbiAqL1xcbitcXHRCSU9fQ09NUExFVEVfSU5fVEFTSywgLyogY29tcGxldGUgYmlfZW5kX2lvKCkgaW4gdGFzayBjb250ZXh0ICovXFxuIFxcdEJJT19GTEFHX0xBU1RcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbmluZGV4IDU2YjQzZDU5NGU2ZTIuLjY4YWY0OTM1YTEwN2QgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuQEAgLTQwNCwxNiArNDA0LDEzIEBAIHNlY3Rvcl90IGlvbWFwX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJubyxcXG4gI2RlZmluZSBJT01BUF9JT0VORF9CT1VOREFSWVxcdFxcdCgxVSBcXHUwMDNjXFx1MDAzYyAyKVxcbiAvKiBpcyBkaXJlY3QgSS9PICovXFxuICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUXFx0XFx0KDFVIFxcdTAwM2NcXHUwMDNjIDMpXFxuLS8qIGlzIERPTlRDQUNIRSBJL08gKi9cXG4tI2RlZmluZSBJT01BUF9JT0VORF9ET05UQ0FDSEVcXHRcXHQoMVUgXFx1MDAzY1xcdTAwM2MgNClcXG4gXFxuIC8qXFxuICAqIEZsYWdzIHRoYXQgaWYgc2V0IG9uIGVpdGhlciBpb2VuZCBwcmV2ZW50IHRoZSBtZXJnZSBvZiB0d28gaW9lbmRzLlxcbiAgKiAoSU9NQVBfSU9FTkRfQk9VTkRBUlkgYWxzbyBwcmV2ZW50cyBtZXJnZXMsIGJ1dCBvbmx5IG9uZS13YXkpXFxuICAqL1xcbiAjZGVmaW5lIElPTUFQX0lPRU5EX05PTUVSR0VfRkxBR1MgXFxcXFxcbi1cXHQoSU9NQVBfSU9FTkRfU0hBUkVEIHwgSU9NQVBfSU9FTkRfVU5XUklUVEVOIHwgSU9NQVBfSU9FTkRfRElSRUNUIHwgXFxcXFxcbi1cXHQgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKVxcbitcXHQoSU9NQVBfSU9FTkRfU0hBUkVEIHwgSU9NQVBfSU9FTkRfVU5XUklUVEVOIHwgSU9NQVBfSU9FTkRfRElSRUNUKVxcbiBcXG4gLypcXG4gICogU3RydWN0dXJlIGZvciB3cml0ZWJhY2sgSS9PIGNvbXBsZXRpb25zLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjozOTo0NS4yMzc1NDQxOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA0NTA0NzgxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJVRkZFUl9IRUFEXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfWklQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19iaW9fY29tcGxldGVfaW5fdGFza1wiLFxuICAgIFwiaW9tYXBfYWRkX3RvX2lvZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmE0MGRmNDFjMzdlYjZlZjkzNjIyYzAyYTEyNTU2ZWRmYTU5YWY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTY6Mzk6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCA2YTJmNmZjMzQxM2U4Li5hOTYxMDk1MDMyNWIwIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtMTc0MSw2ICsxNzQxLDYxIEBAIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbylcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2YmlvX2RpcnR5X3dvcmspO1xuIH1cbiBcbisvKlxuKyAqIEluZnJhc3RydWN0dXJlIGZvciBkZWZlcnJpbmcgYmlvIGNvbXBsZXRpb25zIHRvIHRhc2stY29udGV4dCB2aWEgYSBwZXItQ1BVXG4rICogd29ya3F1ZXVlLiBUcmlnZ2VyZWQgZWl0aGVyIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBiaW8gZmxhZyAoc3RhdGljXG4rICogZGVjaXNpb24gYXQgc3VibWl0IHRpbWUpIG9yIGJ5IGNhbGxpbmcgYmlvX2NvbXBsZXRlX2luX3Rhc2soKSBmcm9tXG4rICogYmlfZW5kX2lvKCkgKGR5bmFtaWMgZGVjaXNpb24gYXQgY29tcGxldGlvbiB0aW1lKS5cbisgKi9cbitcbitzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoIHtcbitcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRpbnQgY3B1O1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2gsIGJpb19jb21wbGV0ZV9iYXRjaCk7XG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpiaW9fY29tcGxldGVfd3E7XG4rXG4rc3RhdGljIHZvaWQgYmlvX2NvbXBsZXRlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuK3tcbitcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID1cbitcdFx0Y29udGFpbmVyX29mKHcsIHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2gsIHdvcmspO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0c3RydWN0IGJpb19saXN0IGxpc3Q7XG4rXHRcdHN0cnVjdCBiaW8gKmJpbztcbitcbitcdFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbitcdFx0bGlzdCA9IGJhdGNoLVx1MDAzZWxpc3Q7XG4rXHRcdGJpb19saXN0X2luaXQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCk7XG4rXHRcdGxvY2FsX2lycV9lbmFibGUoKTtcbitcbitcdFx0aWYgKGJpb19saXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZsaXN0KSkpXG4rXHRcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyhiaW8pO1xuK1x0fVxuK31cbitcbit2b2lkIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgd2FzX2VtcHR5O1xuK1xuK1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0YmF0Y2ggPSB0aGlzX2NwdV9wdHIoXHUwMDI2YmlvX2NvbXBsZXRlX2JhdGNoKTtcbitcdHdhc19lbXB0eSA9IGJpb19saXN0X2VtcHR5KFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QpO1xuK1x0YmlvX2xpc3RfYWRkKFx1MDAyNmJhdGNoLVx1MDAzZWxpc3QsIGJpbyk7XG4rXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRpZiAod2FzX2VtcHR5KVxuK1x0XHRxdWV1ZV93b3JrX29uKGJhdGNoLVx1MDAzZWNwdSwgYmlvX2NvbXBsZXRlX3dxLCBcdTAwMjZiYXRjaC1cdTAwM2V3b3JrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoX19iaW9fY29tcGxldGVfaW5fdGFzayk7XG4rXG4gc3RhdGljIGlubGluZSBib29sIGJpb19yZW1haW5pbmdfZG9uZShzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0LypcbkBAIC0xODE1LDcgKzE4NzAsOSBAQCB2b2lkIGJpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHR9XG4gI2VuZGlmXG4gXG4tXHRpZiAoYmlvLVx1MDAzZWJpX2VuZF9pbylcbitcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSBcdTAwMjZcdTAwMjYgYmlvX2luX2F0b21pYygpKVxuK1x0XHRfX2Jpb19jb21wbGV0ZV9pbl90YXNrKGJpbyk7XG4rXHRlbHNlIGlmIChiaW8tXHUwMDNlYmlfZW5kX2lvKVxuIFx0XHRiaW8tXHUwMDNlYmlfZW5kX2lvKGJpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woYmlvX2VuZGlvKTtcbkBAIC0yMDAxLDYgKzIwNTgsNTUgQEAgaW50IGJpb3NldF9pbml0KHN0cnVjdCBiaW9fc2V0ICpicyxcbiB9XG4gRVhQT1JUX1NZTUJPTChiaW9zZXRfaW5pdCk7XG4gXG4rc3RhdGljIGludCBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBiaW9fY29tcGxldGVfYmF0Y2ggKmJhdGNoID0gXHUwMDI2cGVyX2NwdShiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7XG4rXG4rXHRlbmFibGVfd29yayhcdTAwMjZiYXRjaC1cdTAwM2V3b3JrKTtcbitcdGlmICghYmlvX2xpc3RfZW1wdHkoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCkpXG4rXHRcdHF1ZXVlX3dvcmtfb24oY3B1LCBiaW9fY29tcGxldGVfd3EsIFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogRGlzYWJsZSB0aGlzIENQVSdzIHdvcmsgaXRlbSBzbyB0aGF0IGl0IGNhbm5vdCBydW4gb24gYW4gdW5ib3VuZCB3b3JrZXJcbisgKiBhZnRlciB0aGUgQ1BVIGlzIG9mZmxpbmVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kb3duX3ByZXAodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZwZXJfY3B1KGJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KS53b3JrKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERyYWluIGEgZGVhZCBDUFUncyBkZWZlcnJlZCBiaW8gY29tcGxldGlvbnMuIFRoZSBDUFUgaXMgZGVhZCBhbmQgdGhlIHdvcmtlclxuKyAqIGlzIGNhbmNlbGVkIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpXG4re1xuK1x0c3RydWN0IGJpb19jb21wbGV0ZV9iYXRjaCAqYmF0Y2ggPVxuK1x0XHRwZXJfY3B1X3B0cihcdTAwMjZiaW9fY29tcGxldGVfYmF0Y2gsIGNwdSk7XG4rXHRzdHJ1Y3QgYmlvICpiaW87XG4rXG4rXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZiYXRjaC1cdTAwM2VsaXN0KSkpXG4rXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8oYmlvKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXQgYmlvX2NvbXBsZXRlX2JhdGNoX2luaXQoaW50IGNwdSlcbit7XG4rXHRzdHJ1Y3QgYmlvX2NvbXBsZXRlX2JhdGNoICpiYXRjaCA9XG4rXHRcdHBlcl9jcHVfcHRyKFx1MDAyNmJpb19jb21wbGV0ZV9iYXRjaCwgY3B1KTtcbitcbitcdGJpb19saXN0X2luaXQoXHUwMDI2YmF0Y2gtXHUwMDNlbGlzdCk7XG4rXHRJTklUX1dPUksoXHUwMDI2YmF0Y2gtXHUwMDNld29yaywgYmlvX2NvbXBsZXRlX3dvcmtfZm4pO1xuK1x0YmF0Y2gtXHUwMDNlY3B1ID0gY3B1O1xuK1xuK1x0aWYgKCFjcHVfb25saW5lKGNwdSkpXG4rXHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmJhdGNoLVx1MDAzZXdvcmspO1xuK31cbitcbiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxuIHtcbiBcdGludCBpO1xuQEAgLTIwMTUsNiArMjEyMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKVxuIFx0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQywgTlVMTCk7XG4gXHR9XG4gXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSlcbitcdFx0YmlvX2NvbXBsZXRlX2JhdGNoX2luaXQoaSk7XG4rXG4rXHRiaW9fY29tcGxldGVfd3EgPSBhbGxvY193b3JrcXVldWUoXCJiaW9fY29tcGxldGVcIixcbitcdFx0XHRcdFx0ICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDApO1xuK1x0aWYgKCFiaW9fY29tcGxldGVfd3EpXG4rXHRcdHBhbmljKFwiYmlvOiBjYW4ndCBhbGxvY2F0ZSBiaW9fY29tcGxldGUgd29ya3F1ZXVlXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIGJpbyB0YXNrLWNvbnRleHQgY29tcGxldGlvbiBkcmFpbmluZyBvbiBob3QtdW5wbHVnZ2VkIENQVXM6XG4rXHQgKlxuK1x0ICogICAxLiBTdG9wIHRoZSBwZXItQ1BVIHdvcmsgaXRlbSB3aGlsZSB0aGUgQ1BVIGlzIHN0aWxsIG9ubGluZSwgc29cbitcdCAqICAgICAgdGhhdCBpdCBjYW5ub3QgcnVuIG9uIGFuIHVuYm91bmQgd29ya2VyIGxhdGVyLlxuK1x0ICogICAyLiBEcmFpbiBsZWZ0b3ZlciBiaW9zIGFkZGVkIGJldHdlZW4gd29ya2VyIGRpc2FibGluZyBhbmQgQ1BVXG4rXHQgKiAgICAgIG9mZmxpbmluZy5cbitcdCAqL1xuK1x0Y3B1aHBfc2V0dXBfc3RhdGVfbm9jYWxscyhDUFVIUF9BUF9PTkxJTkVfRFlOLFxuK1x0XHRcdFx0ICBcImJsb2NrL2Jpbzpjb21wbGV0ZTpvbmxpbmVcIixcbitcdFx0XHRcdCAgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9vbmxpbmUsXG4rXHRcdFx0XHQgIGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfZG93bl9wcmVwKTtcbitcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQlBfUFJFUEFSRV9EWU4sXG4rXHRcdFx0XHQgIFwiYmxvY2svYmlvOmNvbXBsZXRlOmRlYWRcIixcbitcdFx0XHRcdCAgTlVMTCwgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkKTtcbitcbiBcdGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0JJT19ERUFELCBcImJsb2NrL2JpbzpkZWFkXCIsIE5VTEwsXG4gXHRcdFx0XHRcdGJpb19jcHVfZGVhZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXG5pbmRleCAxNTc4M2E2MTgwZGVjLi44YjM5YzUzYjYzOTM0IDEwMDY0NFxuLS0tIGEvYmxvY2svZm9wcy5jXG4rKysgYi9ibG9jay9mb3BzLmNcbkBAIC05NDEsNyArOTQxLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7XG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQuZmFsbG9jYXRlXHQ9IGJsa2Rldl9mYWxsb2NhdGUsXG4gXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG4tXHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DLFxuK1x0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsXG4gfTtcbiBcbiBzdGF0aWMgX19pbml0IGludCBibGtkZXZfaW5pdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDlhZjVmMDYxYTFmODUuLjZmMDk5ODQ3MjQwZTAgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuKysrIGIvZnMvYnVmZmVyLmNcbkBAIC0xMjAzLDYgKzEyMDMsOSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFxuIFx0YmlvID0gYmlvX2FsbG9jKGJoLVx1MDAzZWJfYmRldiwgMSwgb3BmLCBHRlBfTk9JTyk7XG4gXG4rXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4rXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfRU5DUllQVElPTikpXG4gXHRcdGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChiaW8sIGJoLCBHRlBfTk9JTyk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvemRhdGEuYyBiL2ZzL2Vyb2ZzL3pkYXRhLmNcbmluZGV4IDc0NTIwZTkxMDI1OTYuLmY3OTZiYjNlZjUzYjkgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy96ZGF0YS5jXG4rKysgYi9mcy9lcm9mcy96ZGF0YS5jXG5AQCAtMTQyNywxNSArMTQyNyw2IEBAIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlX2t0aHJlYWRfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuIH1cbiAjZW5kaWZcbiBcbi0vKiBVc2UgKGt0aHJlYWRfKXdvcmsgaW4gYXRvbWljIGNvbnRleHRzIHRvIG1pbmltaXplIHNjaGVkdWxpbmcgb3ZlcmhlYWQgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgel9lcm9mc19pbl9hdG9taWModm9pZClcbi17XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gIXByZWVtcHRpYmxlKCk7XG4tfVxuIFxuIHN0YXRpYyB2b2lkIHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHN0cnVjdCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZSAqaW8sXG4gXHRcdFx0XHQgICAgICAgaW50IGJpb3MpXG5AQCAtMTQ1Miw3ICsxNDQzLDcgQEAgc3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbyxcbiBcbiBcdGlmIChhdG9taWNfYWRkX3JldHVybihiaW9zLCBcdTAwMjZpby1cdTAwM2VwZW5kaW5nX2Jpb3MpKVxuIFx0XHRyZXR1cm47XG4tXHRpZiAoel9lcm9mc19pbl9hdG9taWMoKSkge1xuK1x0aWYgKGJpb19pbl9hdG9taWMoKSkge1xuIFx0XHQvKiBTZWUgYHN5bmNfZGVjb21wcmVzc2AgaW4gc3lzZnMtZnMtZXJvZnMgZm9yIG1vcmUgZGV0YWlscyAqL1xuIFx0XHRpZiAoc2JpLVx1MDAzZXN5bmNfZGVjb21wcmVzcyA9PSBFUk9GU19TWU5DX0RFQ09NUFJFU1NfQVVUTylcbiBcdFx0XHRzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXG5pbmRleCAzMDQ2OGQ1MWI1YWQ3Li4xYWU4YThmYjg1MDM4IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvaW9lbmQuY1xuKysrIGIvZnMvaW9tYXAvaW9lbmQuY1xuQEAgLTIzOCw4ICsyMzgsNiBAQCBzc2l6ZV90IGlvbWFwX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0aWYgKHdwYy1cdTAwM2Vpb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9TSEFSRUQpXG4gXHRcdGlvZW5kX2ZsYWdzIHw9IElPTUFQX0lPRU5EX1NIQVJFRDtcbi1cdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuLVx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9ET05UQ0FDSEU7XG4gXHRpZiAocG9zID09IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgXHUwMDI2XHUwMDI2ICh3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgXHUwMDI2IElPTUFQX0ZfQk9VTkRBUlkpKVxuIFx0XHRpb2VuZF9mbGFncyB8PSBJT01BUF9JT0VORF9CT1VOREFSWTtcbiBcbkBAIC0yNTYsNiArMjU0LDkgQEAgc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGlmICghYmlvX2FkZF9mb2xpbyhcdTAwMjZpb2VuZC1cdTAwM2Vpb19iaW8sIGZvbGlvLCBtYXBfbGVuLCBwb2ZmKSlcbiBcdFx0Z290byBuZXdfaW9lbmQ7XG4gXG4rXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbitcdFx0YmlvX3NldF9mbGFnKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuK1xuIFx0LypcbiBcdCAqIENsYW1wIGlvX29mZnNldCBhbmQgaW9fc2l6ZSB0byB0aGUgaW5jb3JlIEVPRiBzbyB0aGF0IG9uZGlza1xuIFx0ICogZmlsZSBzaXplIHVwZGF0ZXMgaW4gdGhlIGlvZW5kIGNvbXBsZXRpb24gYXJlIGJ5dGUtYWNjdXJhdGUuXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xuaW5kZXggNTEyOTNiNmYzMzFmMC4uY2Q4ZGU4YzgyZDc4YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTUyMiwxMCArNTIyLDYgQEAgeGZzX2lvZW5kX25lZWRzX3dxX2NvbXBsZXRpb24oXG4gXHRpZiAoaW9lbmQtXHUwMDNlaW9fZmxhZ3MgXHUwMDI2IChJT01BUF9JT0VORF9VTldSSVRURU4gfCBJT01BUF9JT0VORF9TSEFSRUQpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdC8qIFBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGNhbm5vdCBiZSBkb25lIGluIGlycSBjb250ZXh0LiAqL1xuLVx0aWYgKGlvZW5kLVx1MDAzZWlvX2ZsYWdzIFx1MDAyNiBJT01BUF9JT0VORF9ET05UQ0FDSEUpXG4tXHRcdHJldHVybiB0cnVlO1xuLVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNS4uYTgwOTFhM2U5ZDg3MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC0zNjgsNiArMzY4LDQ1IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqYmlvX2FsbG9jKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXG4gdm9pZCBzdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4rLyoqXG4rICogYmlvX2luX2F0b21pYyAtIGNoZWNrIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdW5zYWZlIGZvciBiaW8gY29tcGxldGlvblxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpbiBhdG9taWMgY29udGV4dHMgKGUuZy4gaGFyZC9zb2Z0IElSUSwgcHJlZW1wdC1kaXNhYmxlZCk7XG4rICogJWZhbHNlIHdoZW4gYSBiaW8gY2FuIGJlIHNhZmVseSBjb21wbGV0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2luX2F0b21pYyh2b2lkKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcbit9XG4rXG4rdm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbyk7XG4rXG4rLyoqXG4rICogYmlvX2NvbXBsZXRlX2luX3Rhc2sgLSBlbnN1cmUgYSBiaW8gaXMgY29tcGxldGVkIGluIHByZWVtcHRpYmxlIHRhc2sgY29udGV4dFxuKyAqIEBiaW86IGJpbyB0byBjb21wbGV0ZVxuKyAqXG4rICogSWYgY2FsbGVkIGZyb20gbm9uLXRhc2sgY29udGV4dCwgb2ZmbG9hZCB0aGUgYmlvIGNvbXBsZXRpb24gdG8gYSB3b3JrZXJcbisgKiB0aHJlYWQgYW5kIHJldHVybiAldHJ1ZS4gRWxzZSByZXR1cm4gJWZhbHNlIGFuZCBkbyBub3RoaW5nLlxuKyAqXG4rICogVXNlcyBCSU9fQ09NUExFVEVfSU5fVEFTSyBhcyBhIHNlbnRpbmVsOiBpZiBzZXQsIHRoZSBiaW8gd2FzIGFscmVhZHlcbisgKiBkZWZlcnJlZCBhbmQgd2UgYXJlIHJ1bm5pbmcgaW4gdGhlIHdvcmtlciDigJQgcmV0dXJuICVmYWxzZSBzbyB0aGVcbisgKiBjYWxsYmFjayBwcm9jZWVkcyBpbnN0ZWFkIG9mIHJlLWRlZmVycmluZy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFiaW9faW5fYXRvbWljKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbitcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBleHRlcm4gdm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggODgwOGVlNzZlNzNjMC4uZDQ5ZDk3YTA1MGQwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC0zMjIsNiArMzIyLDcgQEAgZW51bSB7XG4gXHRCSU9fUkVNQVBQRUQsXG4gXHRCSU9fWk9ORV9XUklURV9QTFVHR0lORywgLyogYmlvIGhhbmRsZWQgdGhyb3VnaCB6b25lIHdyaXRlIHBsdWdnaW5nICovXG4gXHRCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQsIC8qIGJpbyBlbXVsYXRlcyBhIHpvbmUgYXBwZW5kIG9wZXJhdGlvbiAqL1xuK1x0QklPX0NPTVBMRVRFX0lOX1RBU0ssIC8qIGNvbXBsZXRlIGJpX2VuZF9pbygpIGluIHRhc2sgY29udGV4dCAqL1xuIFx0QklPX0ZMQUdfTEFTVFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCA1NmI0M2Q1OTRlNmUyLi42OGFmNDkzNWExMDdkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC00MDQsMTYgKzQwNCwxMyBAQCBzZWN0b3JfdCBpb21hcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibm8sXG4gI2RlZmluZSBJT01BUF9JT0VORF9CT1VOREFSWVx0XHQoMVUgXHUwMDNjXHUwMDNjIDIpXG4gLyogaXMgZGlyZWN0IEkvTyAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfRElSRUNUXHRcdCgxVSBcdTAwM2NcdTAwM2MgMylcbi0vKiBpcyBET05UQ0FDSEUgSS9PICovXG4tI2RlZmluZSBJT01BUF9JT0VORF9ET05UQ0FDSEVcdFx0KDFVIFx1MDAzY1x1MDAzYyA0KVxuIFxuIC8qXG4gICogRmxhZ3MgdGhhdCBpZiBzZXQgb24gZWl0aGVyIGlvZW5kIHByZXZlbnQgdGhlIG1lcmdlIG9mIHR3byBpb2VuZHMuXG4gICogKElPTUFQX0lPRU5EX0JPVU5EQVJZIGFsc28gcHJldmVudHMgbWVyZ2VzLCBidXQgb25seSBvbmUtd2F5KVxuICAqL1xuICNkZWZpbmUgSU9NQVBfSU9FTkRfTk9NRVJHRV9GTEFHUyBcXFxuLVx0KElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVCB8IFxcXG4tXHQgSU9NQVBfSU9FTkRfRE9OVENBQ0hFKVxuK1x0KElPTUFQX0lPRU5EX1NIQVJFRCB8IElPTUFQX0lPRU5EX1VOV1JJVFRFTiB8IElPTUFQX0lPRU5EX0RJUkVDVClcbiBcbiAvKlxuICAqIFN0cnVjdHVyZSBmb3Igd3JpdGViYWNrIEkvTyBjb21wbGV0aW9ucy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjM5OjQ1LjIzNzU0NTQ2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjI1OTA2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgTGF5ZXIgUGF0Y2ggZm9yIERlZmVycmVkIEJpbyBDb21wbGV0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBibG9jayBsYXllciB0aGF0IGRlZmVycyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHVzaW5nIGEgcGVyLUNQVSB3b3JrcXVldWUuIExvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBhIGxvdCBvZiBjb3JlIGZpbGVzOiBgYmxvY2svYmlvLmNgLCBgYmxvY2svZm9wcy5jYCwgYGZzL2J1ZmZlci5jYCwgc29tZSBvZiB0aGUgZmlsZSBzeXN0ZW1zLCBhbmQgYSBmZXcgaW5jbHVkZSBmaWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cbkJhc2VkIG9uIHRoZSBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXBsZW1lbnRhdGlvbi4gSXQgYWRkcyB0aGUgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGFuZCBgYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGZ1bmN0aW9ucywgYW5kIHNldHMgdGhlIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyBpbiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucyByZWxhdGVkIHRvIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLiBJdCdzIGFsc28gbW9kaWZ5aW5nIGBiaW9fZW5kaW9gIHRvIGNoZWNrIGZvciB0aGlzIG5ldyBmbGFnIGFuZCBhdG9taWMgY29udGV4dCwgY2FsbGluZyBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgaWYgbmVlZGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBmb3IgbW9yZSBpbi1kZXB0aCBhbmFseXNpcy4gVGhlIGNvcmUgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AsIGBiaW9fY29tcGxldGVfd29ya19mbmAsIGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X29ubGluZWAsIGBiaW9fY29tcGxldGVfYmF0Y2hfY3B1X2Rvd25fcHJlcGAsIGFuZCBgYmlvX2NvbXBsZXRlX2JhdGNoX2NwdV9kZWFkYC4gQWgsIHdhaXQuLi4gYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIGV4cG9ydGVkISBUaGlzIG1ha2VzIGl0IGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVncmF0aW9uIG9yIGludGVyYWN0aW9uLlxuXG5Mb29raW5nIGZ1cnRoZXIsIGBiaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBiaW9faW5fYXRvbWljYCBhcmUgaW5saW5lZC4gR29pbmcgYmFjayB0byBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGBfX2JoX3N1Ym1pdGAgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIExldCdzIHNlZS4uLiBgX19iaF9zdWJtaXRgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBleHBvc3VyZS4gSG93ZXZlciwgYGlvbWFwX2FkZF90b19pb2VuZGAgaXNuJ3Qgc3RhdGljLCBhbmQgSSB0aGluayBpdCdzIGV4cG9ydGVkLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBiZSBhIGtleSBpbnRlZ3JhdGlvbiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjM5OjUzLjQ2MDEzOTkxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2MzUwMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2FkZF90b19pb2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9NTIyPXN0YXRpYyBzc2l6ZV90IGJsa2Rldl93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmJsb2NrL2ZvcHMuYy01MzktXFxuYmxvY2svZm9wcy5jOjU0MDpcXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcXG5ibG9jay9mb3BzLmMtNTQxLX1cXG4tLVxcbmZzL2V4ZmF0L2lvbWFwLmM9MjAwPXN0YXRpYyBzc2l6ZV90IGV4ZmF0X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvZXhmYXQvaW9tYXAuYy0yMTItXFxuZnMvZXhmYXQvaW9tYXAuYzoyMTM6XFx0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XFxuZnMvZXhmYXQvaW9tYXAuYy0yMTQtfVxcbi0tXFxuZnMvZ2ZzMi9ibWFwLmM9MjUwNj1zdGF0aWMgc3NpemVfdCBnZnMyX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvZ2ZzMi9ibWFwLmMtMjUyMS1cXG5mcy9nZnMyL2JtYXAuYzoyNTIyOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL2dmczIvYm1hcC5jLTI1MjMtfVxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYz0xNzM9c3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy0yMTEtICovXFxuZnMvaW9tYXAvaW9lbmQuYzoyMTI6c3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9pb21hcC9pb2VuZC5jLTIxMy1cXHRcXHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbilcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmMtMjIxLVxcbmZzL2lvbWFwL2lvZW5kLmM6MjIyOlxcdHRyYWNlX2lvbWFwX2FkZF90b19pb2VuZCh3cGMtXFx1MDAzZWlub2RlLCBwb3MsIGRpcnR5X2xlbiwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXApO1xcbmZzL2lvbWFwL2lvZW5kLmMtMjIzLVxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy0zMTEtfVxcbmZzL2lvbWFwL2lvZW5kLmM6MzEyOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2FkZF90b19pb2VuZCk7XFxuZnMvaW9tYXAvaW9lbmQuYy0zMTMtXFxuLS1cXG5mcy9pb21hcC90cmFjZS5oPTE3ND1ERUZJTkVfSU9NQVBfRVZFTlQoaW9tYXBfaXRlcl9zcmNtYXApO1xcbmZzL2lvbWFwL3RyYWNlLmgtMTc1LVxcbmZzL2lvbWFwL3RyYWNlLmg6MTc2OlRSQUNFX0VWRU5UKGlvbWFwX2FkZF90b19pb2VuZCxcXG5mcy9pb21hcC90cmFjZS5oLTE3Ny1cXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jPTc5OD1zdGF0aWMgc3NpemVfdCBudGZzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTgxMi1cXG5mcy9udGZzL2lvbWFwLmM6ODEzOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL250ZnMvaW9tYXAuYy04MTQtfVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz05NTQ9c3RhdGljIHNzaXplX3QgbnRmc193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtOTgxLVxcbmZzL250ZnMzL2lub2RlLmM6OTgyOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL250ZnMzL2lub2RlLmMtOTgzLX1cXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTQ5Nj14ZnNfd3JpdGViYWNrX3JhbmdlKFxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmMtNTA2LVxcdGlmICghcmV0KVxcbmZzL3hmcy94ZnNfYW9wcy5jOjUwNzpcXHRcXHRyZXQgPSBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL3hmcy94ZnNfYW9wcy5jLTUwOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTY0Mj14ZnNfem9uZWRfd3JpdGViYWNrX3JhbmdlKFxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmMtNjUyLVxcdGlmICghcmV0KVxcbmZzL3hmcy94ZnNfYW9wcy5jOjY1MzpcXHRcXHRyZXQgPSBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL3hmcy94ZnNfYW9wcy5jLTY1NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmM9MTI4PXN0YXRpYyBzc2l6ZV90IHpvbmVmc193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4tLVxcbmZzL3pvbmVmcy9maWxlLmMtMTQ5LVxcbmZzL3pvbmVmcy9maWxlLmM6MTUwOlxcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xcbmZzL3pvbmVmcy9maWxlLmMtMTUxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW9tYXAuaD00ODg9dm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6NDg5OnNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTQ5MC1cXHRcXHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjM5OjU1Ljc2NjQ5NTIyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDIwMTkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IElPIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3IgZ29vZCBlbnRyeSBwb2ludHMgdG8gYW5hbHl6ZSB0aGUgSU8gcGF0aC4gYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXN5c3RlbXMgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cy4gSXQncyBhIGtleSBmdW5jdGlvbiBJIGNhbiBzaW5rIG15IHRlZXRoIGludG8uXG5cblRoZW4gdGhlcmUncyBgX19iaW9fY29tcGxldGVfaW5fdGFza2AuIEFub3RoZXIgZ29vZCBvbmUsIGV4cG9ydGVkLCBvZmZlcmluZyBzaW1pbGFyIHBvdGVudGlhbC4gSeKAmWxsIG1ha2UgYSBub3RlIG9mIHRoaXMgdG8gZ2V0IGEgYmlnZ2VyLXBpY3R1cmUgc2Vuc2Ugb2YgdGhlIGZ1bGwgZWNvc3lzdGVtLlxuXG5Ob3csIHdoYXQgYWJvdXQgYGJpb19lbmRpb2A/IFRlbXB0aW5nLCBiZWNhdXNlIGl0J3MgbW9kaWZpZWQsIGJ1dCBnaXZlbiBob3cgcGVyZm9ybWFuY2UtY3JpdGljYWwgdGhpcyBpcywgSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IGdldHRpbmcgaW4gdGhlIHdheSBvbiB0aGF0IFwiaG90IHBhdGguXCIgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgdGhhdCBvbmUsIGFzIGl0IHdvdWxkIGJlIHRvbyBtdWNoIGRpc3J1cHRpb24gYW5kIG1ha2UgbWVhc3VyZW1lbnRzIGxlc3MgcmVsaWFibGUuXG5cbkhtbSwgd2hhdCBhYm91dCBgX19iaF9zdWJtaXRgPyBJdOKAmXMgc3RhdGljLCBzbyB0aGF0J3MgYSBub24tc3RhcnRlci4gQnV0IHRoYXQgbWFrZXMgbWUgd29uZGVyLi4uIFdoYXQgYWN0dWFsbHkgKmNhbGxzKiB0aGF0IGZ1bmN0aW9uPyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjaGFpbiB1cCBmcm9tIHRoZXJlIGlmIEkgY2FuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODA2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjAwLjE2ODUxNzAxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA0MDc2NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmhfc3VibWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2J1ZmZlci5jLTExODAtXFxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxcbmZzL2J1ZmZlci5jLTExODItXFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmM9MTI0MD12b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLCBiaW9fZW5kX2lvX3QgZW5kX2lvKVxcbmZzL2J1ZmZlci5jLTEyNDEte1xcbmZzL2J1ZmZlci5jOjEyNDI6XFx0X19iaF9zdWJtaXQoYmgsIG9wZiwgV1JJVEVfTElGRV9OT1RfU0VULCBOVUxMLCBlbmRfaW8pO1xcbmZzL2J1ZmZlci5jLTEyNDMtfVxcbi0tXFxuZnMvYnVmZmVyLmM9MTgxNz1pbnQgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9idWZmZXIuYy0xOTEyLVxcdFxcdGlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7XFxuZnMvYnVmZmVyLmM6MTkxMzpcXHRcXHRcXHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvYnVmZmVyLmMtMTkxNC1cXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXFxuLS1cXG5mcy9idWZmZXIuYy0xOTY3LVxcdFxcdFxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XFxuZnMvYnVmZmVyLmM6MTk2ODpcXHRcXHRcXHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvYnVmZmVyLmMtMTk2OS1cXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjAyLjQ3MjYwMDE5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDMzMTI0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgQmxvY2sgRGV2aWNlIFN1Ym1pc3Npb24gQ2FuZGlkYXRlcyoqXG5cbkhtbSwgc28gYGJoX3N1Ym1pdGAgaXMgdGhlIG9uZSB0aGF0J3MgZXhwb3J0ZWQsIHRoYXQncyB3aGF0IEkndmUgc2VlbiBpbiB0aGUgaGVhZGVyIGZpbGVzLiBCdXQsIG5vdyB0aGF0IEknbSB0aGlua2luZyBhYm91dCBpdCwgYF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpb2AgYWxzbyBsb29rcyBsaWtlIGEgc29saWQgY29udGVuZGVyIGZvciB0aGlzLiBJdCdzIGFuIGludGVybmFsIGZ1bmN0aW9uLCB5ZXMsIGJ1dCBpdCBoYW5kbGVzIHRoZSBhY3R1YWwgd3JpdGUgb3BlcmF0aW9uIGF0IHRoZSBmb2xpbyBsZXZlbCwgd2hpY2ggaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBmb3IgdGhlIGN1cnJlbnQgdGFzay4gSSBzaG91bGQgcHJvYmFibHkganVzdCBzdGljayB3aXRoIGBiaF9zdWJtaXRgIGFzIGl0IGlzIGV4cG9ydGVkLCBhbmQgd2VsbCBkb2N1bWVudGVkLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgbWFrZSBzdXJlIGl0J3MgdGhlIHJpZ2h0IGNob2ljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5NSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjA1LjkxNTkxNDcwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU1NTU5Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJoX3N1Ym1pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q9MTU3OD1mdW5jdGlvbi10cmFjZSwgd2UgZ2V0IGEgbXVjaCBsYXJnZXIgb3V0cHV0OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xNjMwLSAgID1cXHUwMDNlIHN1Ym1pdF9iaW9cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTYzMTogICA9XFx1MDAzZSBiaF9zdWJtaXRcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTYzMi0gICA9XFx1MDAzZSBfX2V4dDNfZ2V0X2lub2RlX2xvY1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTE4NzE9dHJhY2Vycy5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xOTE1LSAgID1cXHUwMDNlIHN1Ym1pdF9iaW9cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTkxNjogICA9XFx1MDAzZSBiaF9zdWJtaXRcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTkxNy0gICA9XFx1MDAzZSBleHQzX2JyZWFkXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTUxNz1zdGF0aWMgdm9pZCB3cml0ZV9maWxlX3BhZ2Uoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHdhaXQpXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUyNC1cXHRcXHRzZXRfYnVmZmVyX21hcHBlZChiaCk7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo1MjU6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQywgZW5kX2JpdG1hcF93cml0ZSk7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MjYtXFx0XFx0YmggPSBiaC1cXHUwMDNlYl90aGlzX3BhZ2U7XFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTU1OD1zdGF0aWMgaW50IHJlYWRfZmlsZV9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MDAtXFx0XFx0XFx0c2V0X2J1ZmZlcl9tYXBwZWQoYmgpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjAxOlxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGVuZF9iaXRtYXBfd3JpdGUpO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjAyLVxcdFxcdH1cXG4tLVxcbmZzL2J1ZmZlci5jPTEyMj1zdGF0aWMgdm9pZCBidWZmZXJfaW9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqbXNnKVxcbi0tXFxuZnMvYnVmZmVyLmMtMTM1LSAqIENhbGwgdGhpcyBpbiB5b3VyIGJpb19lbmRfaW8gaGFuZGxlciB0byByZXRyaWV2ZSB0aGUgYnVmZmVyX2hlYWRcXG5mcy9idWZmZXIuYzoxMzY6ICogc3VibWl0dGVkIGluIGJoX3N1Ym1pdCgpLiAgSWYgeW91IGRpZCBub3QgY2FsbCBiaF9zdWJtaXQoKSwgZG8gbm90XFxuZnMvYnVmZmVyLmMtMTM3LSAqIGNhbGwgdGhpcyBmdW5jdGlvbjsgaXQgd2lsbCByZXR1cm4gZ2FyYmFnZS5cXG4tLVxcbmZzL2J1ZmZlci5jPTE1Nj1FWFBPUlRfU1lNQk9MKGJpb19lbmRpb19iaCk7XFxuLS1cXG5mcy9idWZmZXIuYy0xNjItICpcXG5mcy9idWZmZXIuYzoxNjM6ICogSWYgYSBidWZmZXIgaXMgcmVhZCB0aHJvdWdoIGEgbWVjaGFuaXNtIHRoYXQgaXNuJ3QgYmhfc3VibWl0KCksIHlvdVxcbmZzL2J1ZmZlci5jLTE2NC0gKiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGZpbmlzaCB0aGUgcmVhZC5cXG4tLVxcbmZzL2J1ZmZlci5jPTE3Nj1FWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfcmVhZF9zeW5jKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTE4MS0gKlxcbmZzL2J1ZmZlci5jOjE4MjogKiBQYXNzIHRoaXMgZnVuY3Rpb24gdG8gYmhfc3VibWl0KCkgaWYgeW91J3JlIHJlYWRpbmcgaW50byB0aGUgYnVmZmVyLFxcbmZzL2J1ZmZlci5jLTE4My0gKiB1bmxlc3MgeW91IG5lZWQgeW91ciBvd24gc3BlY2lhbCBJL08gZW5kIGhhbmRsZXIuXFxuLS1cXG5mcy9idWZmZXIuYz0xOTE9RVhQT1JUX1NZTUJPTChiaF9lbmRfcmVhZCk7XFxuLS1cXG5mcy9idWZmZXIuYy0xOTYtICpcXG5mcy9idWZmZXIuYzoxOTc6ICogUGFzcyB0aGlzIGZ1bmN0aW9uIHRvIGJoX3N1Ym1pdCgpIGlmIHlvdSdyZSB3cml0aW5nIGZyb20gdGhlIGJ1ZmZlcixcXG5mcy9idWZmZXIuYy0xOTgtICogdW5sZXNzIHlvdSBuZWVkIHlvdXIgb3duIHNwZWNpYWwgSS9PIGVuZCBoYW5kbGVyLlxcbi0tXFxuZnMvYnVmZmVyLmM9Mzg1PXN0YXRpYyB2b2lkIGJoX2VuZF9hc3luY19yZWFkKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2J1ZmZlci5jLTQyMS0gKlxcbmZzL2J1ZmZlci5jOjQyMjogKiBQYXNzIHRoaXMgZnVuY3Rpb24gdG8gYmhfc3VibWl0KCkgaWYgeW91J3JlIGRvaW5nIHRoZSBlcXVpdmFsZW50IG9mXFxuZnMvYnVmZmVyLmMtNDIzLSAqIGJsb2NrX3dyaXRlX2Z1bGxfZm9saW8oKS4gIFRoYXQgaXMsIHRoZSBmb2xpbyBpcyB1bmxvY2tlZCwgYW5kIHdpbGxcXG4tLVxcbmZzL2J1ZmZlci5jPTExNjY9c3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2J1ZmZlci5jLTExODAtXFxuZnMvYnVmZmVyLmM6MTE4MTpzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxcbmZzL2J1ZmZlci5jLTExODItXFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTIzMS0vKipcXG5mcy9idWZmZXIuYzoxMjMyOiAqIGJoX3N1Ym1pdCAtIFN0YXJ0IEkvTyBhZ2FpbnN0IGEgYnVmZmVyIGhlYWRcXG5mcy9idWZmZXIuYy0xMjMzLSAqIEBiaDogVGhlIGJ1ZmZlciBoZWFkIHRvIHBlcmZvcm0gSS9PIG9uLlxcbi0tXFxuZnMvYnVmZmVyLmMtMTIzOS0gKi9cXG5mcy9idWZmZXIuYzoxMjQwOnZvaWQgYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsIGJpb19lbmRfaW9fdCBlbmRfaW8pXFxuZnMvYnVmZmVyLmMtMTI0MS17XFxuZnMvYnVmZmVyLmM6MTI0MjpcXHRfX2JoX3N1Ym1pdChiaCwgb3BmLCBXUklURV9MSUZFX05PVF9TRVQsIE5VTEwsIGVuZF9pbyk7XFxuZnMvYnVmZmVyLmMtMTI0My19XFxuZnMvYnVmZmVyLmM6MTI0NDpFWFBPUlRfU1lNQk9MKGJoX3N1Ym1pdCk7XFxuZnMvYnVmZmVyLmMtMTI0NS1cXG5mcy9idWZmZXIuYz0xMjQ2PXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fYnJlYWRfc2xvdyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvYnVmZmVyLmMtMTI1Mi1cXHR9IGVsc2Uge1xcbmZzL2J1ZmZlci5jOjEyNTM6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xcbmZzL2J1ZmZlci5jLTEyNTQtXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbi0tXFxuZnMvYnVmZmVyLmM9MTc3Mz1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpmb2xpb19jcmVhdGVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTgwOS0gKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgb25seSBjYW4gaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cXG5mcy9idWZmZXIuYzoxODEwOiAqIHRoZSBidWZmZXIgZGlyZWN0bHksIHdpdGggYmhfc3VibWl0KCkuICBBdCB0aGUgYWRkcmVzc19zcGFjZSBsZXZlbFxcbmZzL2J1ZmZlci5jLTE4MTEtICogdGhlIGZvbGlvIHdyaXRlYmFjayBmbGFnIHByZXZlbnRzIHRoaXMgY29udGVudGlvbiBmcm9tIG9jY3VycmluZy5cXG4tLVxcbmZzL2J1ZmZlci5jPTE4MTc9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTkxMi1cXHRcXHRpZiAoYnVmZmVyX2FzeW5jX3dyaXRlKGJoKSkge1xcbmZzL2J1ZmZlci5jOjE5MTM6XFx0XFx0XFx0X19iaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IHdyaXRlX2ZsYWdzLFxcbmZzL2J1ZmZlci5jLTE5MTQtXFx0XFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfd3JpdGVfaGludCwgd2JjLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTkyNy1cXHRcXHQgKiBjbGVhbi4gIFNvbWVvbmUgd3JvdGUgdGhlbSBiYWNrIGJ5IGhhbmQgd2l0aFxcbmZzL2J1ZmZlci5jOjE5Mjg6XFx0XFx0ICogd3JpdGVfZGlydHlfYnVmZmVyL2JoX3N1Ym1pdC4gIEEgcmFyZSBjYXNlLlxcbmZzL2J1ZmZlci5jLTE5MjktXFx0XFx0ICovXFxuLS1cXG5mcy9idWZmZXIuYy0xOTY3LVxcdFxcdFxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XFxuZnMvYnVmZmVyLmM6MTk2ODpcXHRcXHRcXHRfX2JoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvYnVmZmVyLmMtMTk2OS1cXHRcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV93cml0ZV9oaW50LCB3YmMsXFxuLS1cXG5mcy9idWZmZXIuYz0yMzcwPWludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaylcXG4tLVxcbmZzL2J1ZmZlci5jLTI0NTEtXFx0XFx0aWYgKHByZXYpXFxuZnMvYnVmZmVyLmM6MjQ1MjpcXHRcXHRcXHRiaF9zdWJtaXQocHJldiwgUkVRX09QX1JFQUQsIGJoX2VuZF9hc3luY19yZWFkKTtcXG5mcy9idWZmZXIuYy0yNDUzLVxcdFxcdHByZXYgPSBiaDtcXG4tLVxcbmZzL2J1ZmZlci5jLTI0NjUtXFx0aWYgKHByZXYpXFxuZnMvYnVmZmVyLmM6MjQ2NjpcXHRcXHRiaF9zdWJtaXQocHJldiwgUkVRX09QX1JFQUQsIGJoX2VuZF9hc3luY19yZWFkKTtcXG5mcy9idWZmZXIuYy0yNDY3LVxcdGVsc2VcXG4tLVxcbmZzL2J1ZmZlci5jPTI3NzQ9dm9pZCB3cml0ZV9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxcbi0tXFxuZnMvYnVmZmVyLmMtMjc4MC1cXHR9XFxuZnMvYnVmZmVyLmM6Mjc4MTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbmZzL2J1ZmZlci5jLTI3ODItfVxcbi0tXFxuZnMvYnVmZmVyLmM9Mjc5MD1pbnQgX19zeW5jX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MpXFxuLS1cXG5mcy9idWZmZXIuYy0yODAzLVxcbmZzL2J1ZmZlci5jOjI4MDQ6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcXG5mcy9idWZmZXIuYy0yODA1LVxcdFxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTMwMzA9aW50IF9fYmhfcmVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsIGJvb2wgd2FpdClcXG4tLVxcbmZzL2J1ZmZlci5jLTMwMzUtXFxuZnMvYnVmZmVyLmM6MzAzNjpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcXG5mcy9idWZmZXIuYy0zMDM3LVxcdGlmICh3YWl0KSB7XFxuLS1cXG5mcy9idWZmZXIuYz0zMDU2PXZvaWQgX19iaF9yZWFkX2JhdGNoKGludCBuciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbXSxcXG4tLVxcbmZzL2J1ZmZlci5jLTMwNzctXFxuZnMvYnVmZmVyLmM6MzA3ODpcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGJoX2VuZF9yZWFkKTtcXG5mcy9idWZmZXIuYy0zMDc5LVxcdH1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz02ODM9c3RhdGljIHZvaWQgZXh0NF9mY19zdWJtaXRfYmgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBpc190YWlsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTY5My1cXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6Njk0OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjk1LVxcdEVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZjX2JoID0gTlVMTDtcXG4tLVxcbmZzL2V4dDQvbW1wLmM9NDI9c3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21tcC5jLTQ4LVxcdGxvY2tfYnVmZmVyKGJoKTtcXG5mcy9leHQ0L21tcC5jOjQ5OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLFxcbmZzL2V4dDQvbW1wLmMtNTAtXFx0XFx0XFx0YmhfZW5kX3dyaXRlKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjM9c3RhdGljIGlubGluZSB2b2lkIF9fZXh0NF9yZWFkX2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xODAtXFx0XFx0ZW5kX2lvID0gYmhfZW5kX3JlYWQ7XFxuZnMvZXh0NC9zdXBlci5jOjE4MTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFEIHwgb3BfZmxhZ3MsIGVuZF9pbyk7XFxuZnMvZXh0NC9zdXBlci5jLTE4Mi19XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjI5OD1zdGF0aWMgaW50IGV4dDRfY29tbWl0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjMyOS1cXHRjbGVhcl9idWZmZXJfZGlydHkoc2JoKTtcXG5mcy9leHQ0L3N1cGVyLmM6NjMzMDpcXHRiaF9zdWJtaXQoc2JoLCBSRVFfT1BfV1JJVEUgfCBSRVFfU1lOQyB8XFxuZnMvZXh0NC9zdXBlci5jLTYzMzEtXFx0XFx0ICAodGVzdF9vcHQoc2IsIEJBUlJJRVIpID8gUkVRX0ZVQSA6IDApLCBiaF9lbmRfd3JpdGUpO1xcbi0tXFxuZnMvZ2ZzMi9ibWFwLmM9Mjk0PXN0YXRpYyB2b2lkIGdmczJfbWV0YXBhdGhfcmEoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBfX2JlNjQgKnN0YXJ0LCBfX2JlNjQgKmVuZClcXG4tLVxcbmZzL2dmczIvYm1hcC5jLTMwNi1cXHRcXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShyYWJoKSkge1xcbmZzL2dmczIvYm1hcC5jOjMwNzpcXHRcXHRcXHRcXHRiaF9zdWJtaXQocmFiaCxcXG5mcy9nZnMyL2JtYXAuYy0zMDgtXFx0XFx0XFx0XFx0XFx0UkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHwgUkVRX01FVEEgfFxcbi0tXFxuZnMvZ2ZzMi9kaXIuYz0xNDgwPXN0YXRpYyB2b2lkIGdmczJfZGlyX3JlYWRhaGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBoc2l6ZSwgdTMyIGluZGV4LFxcbi0tXFxuZnMvZ2ZzMi9kaXIuYy0xNTA4LVxcdFxcdFxcdH0gZWxzZSB7XFxuZnMvZ2ZzMi9kaXIuYzoxNTA5OlxcdFxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQgfCBSRVFfUkFIRUFEIHxcXG5mcy9nZnMyL2Rpci5jLTE1MTAtXFx0XFx0XFx0XFx0XFx0XFx0UkVRX01FVEEgfCBSRVFfUFJJTyxcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9nZnMyL21ldGFfaW8uYy03Ny1cXHRcXHRpZiAoYnVmZmVyX2FzeW5jX3dyaXRlKGJoKSkge1xcbmZzL2dmczIvbWV0YV9pby5jOjc4OlxcdFxcdFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgd3JpdGVfZmxhZ3MsXFxuZnMvZ2ZzMi9tZXRhX2lvLmMtNzktXFx0XFx0XFx0XFx0XFx0YmhfZW5kX2FzeW5jX3dyaXRlKTtcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jPTIwMj1zdGF0aWMgdm9pZCBnZnMyX21ldGFfcmVhZF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9nZnMyL21ldGFfaW8uYy0yMjQtICogU3VibWl0IHNldmVyYWwgY29uc2VjdXRpdmUgYnVmZmVyIGhlYWQgSS9PIHJlcXVlc3RzIGFzIGEgc2luZ2xlIGJpbyBJL09cXG5mcy9nZnMyL21ldGFfaW8uYzoyMjU6ICogcmVxdWVzdC4gIChTZWUgYmhfc3VibWl0LilcXG5mcy9nZnMyL21ldGFfaW8uYy0yMjYtICovXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jPTExND1zdGF0aWMgaW50IGpvdXJuYWxfc3VibWl0X2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLFxcbi0tXFxuZnMvamJkMi9jb21taXQuYy0xNTQtXFxuZnMvamJkMi9jb21taXQuYzoxNTU6XFx0Ymhfc3VibWl0KGJoLCB3cml0ZV9mbGFncywgam91cm5hbF9lbmRfYnVmZmVyX2lvX3N5bmMpO1xcbmZzL2piZDIvY29tbWl0LmMtMTU2LVxcdCpjYmggPSBiaDtcXG4tLVxcbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTc1MC1cXHRcXHRcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG5mcy9qYmQyL2NvbW1pdC5jOjc1MTpcXHRcXHRcXHRcXHRiaF9zdWJtaXQoYmgsXFxuZnMvamJkMi9jb21taXQuYy03NTItXFx0XFx0XFx0XFx0XFx0UkVRX09QX1dSSVRFIHwgSkJEMl9KT1VSTkFMX1JFUV9GTEFHUyxcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jPTE3ODI9c3RhdGljIGludCBqYmQyX3dyaXRlX3N1cGVyYmxvY2soam91cm5hbF90ICpqb3VybmFsLCBibGtfb3BmX3Qgd3JpdGVfZmxhZ3MpXFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy0xODIwLVxcdFxcdHNiLVxcdTAwM2VzX2NoZWNrc3VtID0gamJkMl9zdXBlcmJsb2NrX2NzdW0oc2IpO1xcbmZzL2piZDIvam91cm5hbC5jOjE4MjE6XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCB3cml0ZV9mbGFncywgYmhfZW5kX3dyaXRlKTtcXG5mcy9qYmQyL2pvdXJuYWwuYy0xODIyLVxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4tLVxcbmZzL25pbGZzMi9idG5vZGUuYz04Nz1pbnQgbmlsZnNfYnRub2RlX3N1Ym1pdF9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywgX191NjQgYmxvY2tucixcXG4tLVxcbmZzL25pbGZzMi9idG5vZGUuYy0xMzYtXFx0YmgtXFx1MDAzZWJfYmxvY2tuciA9IHBibG9ja25yOyAvKiBzZXQgYmxvY2sgYWRkcmVzcyBmb3IgcmVhZCAqL1xcbmZzL25pbGZzMi9idG5vZGUuYzoxMzc6XFx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcXG5mcy9uaWxmczIvYnRub2RlLmMtMTM4LVxcdGJoLVxcdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yOyAvKiBzZXQgYmFjayB0byB0aGUgZ2l2ZW4gYmxvY2sgYWRkcmVzcyAqL1xcbi0tXFxuZnMvbmlsZnMyL2djaW5vZGUuYz01NT1pbnQgbmlsZnNfZ2NjYWNoZV9zdWJtaXRfcmVhZF9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsa29mZixcXG4tLVxcbmZzL25pbGZzMi9nY2lub2RlLmMtODUtXFx0YmgtXFx1MDAzZWJfYmxvY2tuciA9IHBibjtcXG5mcy9uaWxmczIvZ2Npbm9kZS5jOjg2OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1JFQUQsIGJoX2VuZF9yZWFkKTtcXG5mcy9uaWxmczIvZ2Npbm9kZS5jLTg3LVxcdGlmICh2Ym4pXFxuLS1cXG5mcy9uaWxmczIvbWR0LmM9MTE2PW5pbGZzX21kdF9zdWJtaXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibGtvZmYsIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5mcy9uaWxmczIvbWR0LmMtMTUwLVxcbmZzL25pbGZzMi9tZHQuYzoxNTE6XFx0Ymhfc3VibWl0KGJoLCBvcGYsIGJoX2VuZF9yZWFkKTtcXG5mcy9uaWxmczIvbWR0LmMtMTUyLVxcdHJldCA9IDA7XFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jPTM4PWludCBvY2ZzMl93cml0ZV9ibG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNjQtXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzo2NTpcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSwgYmhfZW5kX3dyaXRlKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTY2LVxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz04Nz1pbnQgb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0xNDUtXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzoxNDY6XFx0XFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfUkVBRCwgYmhfZW5kX3JlYWQpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMTQ3LVxcdH1cXG4tLVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9MTg5PWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsXFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTMyMy1cXHRcXHRcXHRcXHRzZXRfYnVmZmVyX25lZWRzX3ZhbGlkYXRlKGJoKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjMyNDpcXHRcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9SRUFELCBiaF9lbmRfcmVhZCk7XFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy0zMjUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jPTQyMz1pbnQgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00NDQtXFx0b2NmczJfY29tcHV0ZV9tZXRhX2VjYyhvc2ItXFx1MDAzZXNiLCBiaC1cXHUwMDNlYl9kYXRhLCBcXHUwMDI2ZGktXFx1MDAzZWlfY2hlY2spO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6NDQ1OlxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFLCBiaF9lbmRfd3JpdGUpO1xcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtNDQ2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oPTQ4PXN0cnVjdCBhZGRyZXNzX3NwYWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTU2LSAqIGEgZm9saW8gKHZpYSBhIGZvbGlvX21hcHBpbmcpIGFuZCBmb3Igd3JhcHBpbmcgYmlvIHN1Ym1pc3Npb25cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg6NTc6ICogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyAoZS5nLiBiaF9zdWJtaXQpLlxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC01OC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yMDQ9Ym9vbCBiaW9fZW5kaW9fYmgoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApO1xcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yMDUtXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjIwNjovKiBDb21wbGV0aW9uIHJvdXRpbmVzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGJoX3N1Ym1pdCgpICovXFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oLTIwNy12b2lkIGJoX2VuZF9yZWFkKHN0cnVjdCBiaW8gKmJpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmg9MjQzPXZvaWQgd3JpdGVfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oOjI0NDp2b2lkIGJoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgYmxrX29wZl90LCBiaW9fZW5kX2lvX3QpO1xcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yNDUtdm9pZCB3cml0ZV9ib3VuZGFyeV9ibG9jayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xNDQ4LVxcdFxcdCAqIFRoaXMgaGFwcGVucyBpZiB0aGUgYnVmZmVycyB3ZXJlIHdyaXR0ZW4gb3V0IGRpcmVjdGx5LFxcbm1tL3Ztc2Nhbi5jOjE0NDk6XFx0XFx0ICogd2l0aCBiaF9zdWJtaXQoKS4gZXh0MyB3aWxsIGRvIHRoaXMsIGFzIHdlbGwgYXNcXG5tbS92bXNjYW4uYy0xNDUwLVxcdFxcdCAqIHRoZSBibG9ja2RldiBtYXBwaW5nLiAgZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKCkgd2lsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDowOC4wNzE0OTEyMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg5Mjc3MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgTG9naWMqKlxuXG5Pa2F5LCBzbyBgYmhfc3VibWl0YCBnZXRzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb25kaXRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZW4gYSBCSU8gaXMgbWFya2VkIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIHRhc2suIEFoYSEgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIGNhbGxlZCAqaWYqIGBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKWAgcmV0dXJucyB0cnVlLiBUaGF0J3MgdGhlIGtleS5cblxuVGhpcyBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcgaXMgc2V0IGluIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHNwb3RzOiBgZnMvYnVmZmVyLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AuIExldCdzIGxvb2sgYXQgdGhvc2UuIEluIGBmcy9idWZmZXIuY2AsIHRoZSBjb25kaXRpb24gaXM6XG5cbmBgYGNcbmlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoYmgtXHUwMDNlYl9mb2xpbykgXHUwMDI2XHUwMDI2IG9wX2lzX3dyaXRlKG9wZikpXG4gICAgYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuYGBgXG5cbkFuZCBzaW1pbGFybHkgaW4gYGZzL2lvbWFwL2lvZW5kLmNgOlxuXG5gYGBjXG5pZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbiAgICBiaW9fc2V0X2ZsYWcoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG5gYGBcblxuU28gaXQgbG9va3MgbGlrZSB0aGUgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGZ1bmN0aW9uIGlzIHRoZSBjcnVjaWFsIHBhcnQgdGhhdCBzZXRzIHRoZSBmbGFnLiBUaGUgbmV4dCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHRyaWdnZXIgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgPyBMZXQncyB0cmFjZSB0aGF0LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKWAgaXMgY29udHJvbGxlZCBieSBgRk9QX0RPTlRDQUNIRWAgaW4gYGZvcF9mbGFnc2AuIE9rYXksIGhvdyBpcyB0aGF0IHNldD8gQ2hlY2tpbmcgYGJsb2NrL2ZvcHMuY2A6XG5cbmBgYGNcbmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuLi4uXG4gICAgLmZvcF9mbGFncyAgICAgID0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxufTtcbmBgYFxuXG5TbywgdGhlIGRlZmF1bHQgYmxvY2sgZGV2aWNlIGZpbGUgb3BlcmF0aW9ucyBkZWZpbmUgYEZPUF9ET05UQ0FDSEVgLiBCdXQsIGRvZXMgdGhhdCBtZWFuIGFsbCBibG9jayBkZXZpY2Ugd3JpdGVzIGdldCBgRk9QX0RPTlRDQUNIRWA/IE5vLCB3YWl0LCBgRk9QX0RPTlRDQUNIRWAgaXMgYSAqZmlsZSBvcGVyYXRpb24gZmxhZyouIEl0J3Mgbm90IGEgZ2xvYmFsIHNldHRpbmcuIEl0IHN1cHBvcnRzIGBSV0ZfRE9OVENBQ0hFYCBvciBpdCBzZXRzIGRyb3BiZWhpbmQuIE9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgRk9QX0RPTlRDQUNIRWAgKm1lYW5zKiBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTE1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjE1LjA2MDc3MDY2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzExOTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGT1BfRE9OVENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTYwPUZvciBtb3JlIGNvbnRleHQgb24gRE9OVENBQ0hFLCBwbGVhc2Ugc2VlIHRoZXNlIExpbnV4IGNvbW1pdCBoZWFkZXJzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjUtICBSV0ZfRE9OVENBQ0hFXFxcIilcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo2NjotIGZvciBXUklURTogOTc0YzVlNjEzOWRiMyAoXFxcInhmczogZmxhZyBhcyBzdXBwb3J0aW5nIEZPUF9ET05UQ0FDSEVcXFwiKVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTY3LVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTY4PU5GU0RfSU9fRE9OVENBQ0hFIHdpbGwgZmFsbCBiYWNrIHRvIE5GU0RfSU9fQlVGRkVSRUQgaWYgdGhlIHVuZGVybHlpbmdcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo2OTpmaWxlc3lzdGVtIGRvZXNuJ3QgaW5kaWNhdGUgc3VwcG9ydCBieSBzZXR0aW5nIEZPUF9ET05UQ0FDSEUuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNzAtXFxuLS1cXG5ibG9jay9mb3BzLmM9OTI3PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xcbi0tXFxuYmxvY2svZm9wcy5jLTk0My1cXHQudXJpbmdfY21kXFx0PSBibGtkZXZfdXJpbmdfY21kLFxcbmJsb2NrL2ZvcHMuYzo5NDQ6XFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxcbmJsb2NrL2ZvcHMuYy05NDUtfTtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTk3ND1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtOTkyLVxcdFxcdFxcdCAgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XFxuZnMvZXh0NC9maWxlLmM6OTkzOlxcdFxcdFxcdCAgRk9QX0RPTlRDQUNIRSxcXG5mcy9leHQ0L2ZpbGUuYy05OTQtXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbi0tXFxuZnMvbmZzL2ZpbGUuYz05NjY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvbmZzL2ZpbGUuYy05NzktXFx0LmNoZWNrX2ZsYWdzXFx0PSBuZnNfY2hlY2tfZmxhZ3MsXFxuZnMvbmZzL2ZpbGUuYzo5ODA6XFx0LmZvcF9mbGFnc1xcdD0gRk9QX0RPTlRDQUNIRSxcXG5mcy9uZnMvZmlsZS5jLTk4MS19O1xcbi0tXFxuZnMvbmZzL25mczRmaWxlLmM9NDM2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzNF9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9uZnMvbmZzNGZpbGUuYy00NTctI2VuZGlmXFxuZnMvbmZzL25mczRmaWxlLmM6NDU4OlxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9ET05UQ0FDSEUsXFxuZnMvbmZzL25mczRmaWxlLmMtNDU5LX07XFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTExOTI9X19iZTMyIG5mc2RfaXRlcl9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTIxNC1cXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxcbmZzL25mc2QvdmZzLmM6MTIxNTpcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSlcXG5mcy9uZnNkL3Zmcy5jLTEyMTYtXFx0XFx0XFx0a2lvY2Iua2lfZmxhZ3MgPSBJT0NCX0RPTlRDQUNIRTtcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTM2OT1uZnNkX2RpcmVjdF93cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTEzOTMtXFx0XFx0XFx0ICovXFxuZnMvbmZzZC92ZnMuYzoxMzk0OlxcdFxcdFxcdGlmIChuZi1cXHUwMDNlbmZfZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSlcXG5mcy9uZnNkL3Zmcy5jLTEzOTUtXFx0XFx0XFx0XFx0a2lvY2ItXFx1MDAzZWtpX2ZsYWdzIHw9IElPQ0JfRE9OVENBQ0hFO1xcbi0tXFxuZnMvbmZzZC92ZnMuYz0xNDI2PW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTQ5Ny1cXHRjYXNlIE5GU0RfSU9fRE9OVENBQ0hFOlxcbmZzL25mc2QvdmZzLmM6MTQ5ODpcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSlcXG5mcy9uZnNkL3Zmcy5jLTE0OTktXFx0XFx0XFx0a2lvY2Iua2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz0yMDg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jLTIxMDQtXFx0XFx0XFx0ICBGT1BfQlVGRkVSX1dBU1lOQyB8IEZPUF9ESU9fUEFSQUxMRUxfV1JJVEUgfFxcbmZzL3hmcy94ZnNfZmlsZS5jOjIxMDU6XFx0XFx0XFx0ICBGT1BfRE9OVENBQ0hFLFxcbmZzL3hmcy94ZnNfZmlsZS5jLTIxMDYtXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTE5MjE9c3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTk4MS0vKiBGaWxlIHN5c3RlbSBzdXBwb3J0cyB1bmNhY2hlZCByZWFkL3dyaXRlIGJ1ZmZlcmVkIElPICovXFxuaW5jbHVkZS9saW51eC9mcy5oOjE5ODI6I2RlZmluZSBGT1BfRE9OVENBQ0hFXFx0XFx0KChfX2ZvcmNlIGZvcF9mbGFnc190KSgxIFxcdTAwM2NcXHUwMDNjIDcpKVxcbmluY2x1ZGUvbGludXgvZnMuaC0xOTgzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTM0Mjc9c3RhdGljIGlubGluZSBpbnQga2lvY2Jfc2V0X3J3X2ZsYWdzKHN0cnVjdCBraW9jYiAqa2ksIHJ3Zl90IGZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NTMtXFx0XFx0LyogZmlsZSBzeXN0ZW0gbXVzdCBzdXBwb3J0IGl0ICovXFxuaW5jbHVkZS9saW51eC9mcy5oOjM0NTQ6XFx0XFx0aWYgKCEoa2ktXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfb3AtXFx1MDAzZWZvcF9mbGFncyBcXHUwMDI2IEZPUF9ET05UQ0FDSEUpKVxcbmluY2x1ZGUvbGludXgvZnMuaC0zNDU1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MTYuNTc3OTAzMjI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODM5ODEyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgRk9QX0RPTlRDQUNIRWAgRmxhZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIGlmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgYEZPUF9ET05UQ0FDSEVgIGFjdHMgYXMgYW4gaW5kaWNhdG9yIHRoYXQgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0gc3VwcG9ydHMgYFJXRl9ET05UQ0FDSEVgIG9yIGl0cyBlcXVpdmFsZW50LCBgSU9DQl9ET05UQ0FDSEVgLiBUaGF0J3MgdGhlIGNydWNpYWwgbGluay4gVGhlIHByZXNlbmNlIG9mIGBJT0NCX0RPTlRDQUNIRWAgdGhlbiB0cmlnZ2VycyBwb3RlbnRpYWwgdXNlIG9mIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pYC4gVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSB0aHJvdWdoIGBwd3JpdGV2MmAgaWYgdGhlIGBSV0ZfRE9OVENBQ0hFYCBmbGFnIGlzIHNldCwgZXNwZWNpYWxseSBvbiBibG9jayBkZXZpY2VzIG9yIGZpbGVzeXN0ZW1zIGxpa2UgZXh0NCBvciB4ZnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGV4YW1pbmluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgYGlvbWFwX2FkZF90b19pb2VuZGAgYXJlIHRoZSBtYWpvciBwbGF5ZXJzLiBXYWl0IGEgbWludXRl4oCmIGBpb21hcF9hZGRfdG9faW9lbmRgIGhhc24ndCBiZWVuIHJlcGxhY2VkIHdpdGggYSBuZXcgZnVuY3Rpb247IGl0IGp1c3QgaGFzIGEgbmV3IGNvbmRpdGlvbmFsIGNoZWNrIGFkZGVkPyBJbnRlcmVzdGluZy5cblxuSXMgdGhhdCAqaXQqIHRob3VnaD8gQXJlIHRoZXJlIGFueSAqb3RoZXIqIG5ldyBmdW5jdGlvbnM/IE9rYXksIGBiaW9fY29tcGxldGVfaW5fdGFza2AgaXMgaW5saW5lZCwgc28gdGhhdCdzIG5vdCB0aGUgY3JpdGljYWwgcGllY2UuIFRoYXQgbGVhdmVzIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhcyB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0IG1lIGNoZWNrIGZvciBvdGhlciBuZXcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MjIuMTYxODg3NjE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNTA4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmlvX2NvbXBsZXRlX2luX3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTc2MD1zdGF0aWMgdm9pZCBiaW9fY29tcGxldGVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5ibG9jay9iaW8uYy0xNzgxLVxcbmJsb2NrL2Jpby5jOjE3ODI6dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9iaW8uYy0xNzgzLXtcXG4tLVxcbmJsb2NrL2Jpby5jLTE3OTYtfVxcbmJsb2NrL2Jpby5jOjE3OTc6RVhQT1JUX1NZTUJPTF9HUEwoX19iaW9fY29tcGxldGVfaW5fdGFzayk7XFxuYmxvY2svYmlvLmMtMTc5OC1cXG4tLVxcbmJsb2NrL2Jpby5jPTE4MzE9dm9pZCBiaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmlvLmMtMTg3My1cXHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykgXFx1MDAyNlxcdTAwMjYgYmlvX2luX2F0b21pYygpKVxcbmJsb2NrL2Jpby5jOjE4NzQ6XFx0XFx0X19iaW9fY29tcGxldGVfaW5fdGFzayhiaW8pO1xcbmJsb2NrL2Jpby5jLTE4NzUtXFx0ZWxzZSBpZiAoYmlvLVxcdTAwM2ViaV9lbmRfaW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTM3Nz1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2luX2F0b21pYyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaC0zODUtXFxuaW5jbHVkZS9saW51eC9iaW8uaDozODY6dm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbyk7XFxuaW5jbHVkZS9saW51eC9iaW8uaC0zODctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTM5OT1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2NvbXBsZXRlX2luX3Rhc2soc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaC00MDUtXFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xcbmluY2x1ZGUvbGludXgvYmlvLmg6NDA2OlxcdF9fYmlvX2NvbXBsZXRlX2luX3Rhc2soYmlvKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTQwNy1cXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MjMuNzczNDAxNDAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDAzOTYyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtb2RpZmljYXRpb25zLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldhaXQsIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBpcyB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9uIGFkZGVkIGhlcmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlwiIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCB3aGF0IGFib3V0IGBiaW9fY29tcGxldGVfd29ya19mbmA/IEl0ICppcyogc3RhdGljLCBidXQgdGhhdCdzIHRoZSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIGl0J3MgcHJvYmFibHkgaW1wb3J0YW50IHRvby4gQW5kIHdoYXQgYWJvdXQgYGJpb19jb21wbGV0ZV9iYXRjaF9jcHVfb25saW5lYCwgYWxzbyBzdGF0aWM/IEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGBmcy9idWZmZXIuY2AuIEhtbSwgYF9fYmhfc3VibWl0YCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdGhlcmUuIEFoLCByaWdodCwgYGJoX3N1Ym1pdGAgKmNhbGxzKiBgX19iaF9zdWJtaXRgLCBhbmQsIGltcG9ydGFudGx5LCBgYmhfc3VibWl0YCBpcyBleHBvcnRlZC4gT2theSwgKmlzKiBgYmhfc3VibWl0YCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBPbiB0aGUgb25lIGhhbmQsIGl0J3MgYSBnZW5lcmljIGZ1bmN0aW9uIHNvIGl0ICpjb3VsZCogYmUgY2FsbGVkIHRvbyBmcmVxdWVudGx5LiBIb3dldmVyLCBpdCdzIG5vdCBhIGhvdCBwYXRoIGZ1bmN0aW9uIGxpa2UsIHNheSwgYGJpb19lbmRpb2AuIEFjdHVhbGx5LCBgYmhfc3VibWl0YCBpcyBjYWxsZWQgZm9yIGJ1ZmZlciBoZWFkIElPLCB3aGljaCBpcyBxdWl0ZSBjb21tb24sIHNvIHRoYXQgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLlxuXG5Nb3Zpbmcgb24sIEkgbmVlZCB0byBjaGVjayBgZnMvaW9tYXAvaW9lbmQuY2AuIEFoYSwgYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgbW9kaWZpZWQgdGhlcmUuIElzICp0aGF0KiBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBXZWxsLCBpdCdzIGNhbGxlZCBmb3IgaW9tYXAgd3JpdGViYWNrLCBhbmQgdGhhdCdzIGFsc28gcXVpdGUgY29tbW9uLCBzbyB0aGF0IG9uZSBpcyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBhdCBgZnMvZXJvZnMvemRhdGEuY2AuIE9rYXksIGB6X2Vyb2ZzX2RlY29tcHJlc3Nfa2lja29mZmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBtb2RpZmllZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MzAuMDEzNzk5NjE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2NDI3NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL3pkYXRhLmM9MTQyND1zdGF0aWMgdm9pZCB6X2Vyb2ZzX2RlY29tcHJlc3NxdWV1ZV9rdGhyZWFkX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmMtMTQzMC1cXG5mcy9lcm9mcy96ZGF0YS5jOjE0MzE6c3RhdGljIHZvaWQgel9lcm9mc19kZWNvbXByZXNzX2tpY2tvZmYoc3RydWN0IHpfZXJvZnNfZGVjb21wcmVzc3F1ZXVlICppbyxcXG5mcy9lcm9mcy96ZGF0YS5jLTE0MzItXFx0XFx0XFx0XFx0ICAgICAgIGludCBiaW9zKVxcbi0tXFxuZnMvZXJvZnMvemRhdGEuYz0xNjIzPXN0YXRpYyB2b2lkIHpfZXJvZnNfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuZnMvZXJvZnMvemRhdGEuYy0xNjQyLVxcdFxcdHEtXFx1MDAzZWVpbyA9IHRydWU7XFxuZnMvZXJvZnMvemRhdGEuYzoxNjQzOlxcdHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHEsIC0xKTtcXG5mcy9lcm9mcy96ZGF0YS5jLTE2NDQtXFx0aWYgKGJpby1cXHUwMDNlYmlfYmRldilcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmM9MTY0OD1zdGF0aWMgdm9pZCB6X2Vyb2ZzX3N1Ym1pdF9xdWV1ZShzdHJ1Y3Qgel9lcm9mc19mcm9udGVuZCAqZixcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmMtMTc3My1cXHR9XFxuZnMvZXJvZnMvemRhdGEuYzoxNzc0OlxcdHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmKHFbSlFfU1VCTUlUXSwgbnJfYmlvcyk7XFxuZnMvZXJvZnMvemRhdGEuYy0xNzc1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MzEuNDIwMjMzNjM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzEzMjUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb25zdHJ1Y3RpbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludCBmb3Igc3l6a2FsbGVyLiBUaGUgYHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmYCBmdW5jdGlvbiBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgc3ltYm9sIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYC4gSXMgdGhlcmUgYW55IG90aGVyIHVzZWZ1bCBmdW5jdGlvbiBoZXJlPyBgYmlvX2NvbXBsZXRlX3dvcmtfZm5gIGlzIGFsc28gc3RhdGljLCBtYWtpbmcgaXQgdHJpY2t5IGFzIGEgZGlyZWN0IHRhcmdldCwgZXZlbiB0aG91Z2ggc3l6a2FsbGVyIGNhbiBzb21ldGltZXMgc3VycHJpc2UgdXMgd2l0aCBpdHMgYWJpbGl0eSB0byBmaW5kIHRoZXNlLiBUaGUgZ3VpZGVsaW5lcyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHNvIHRoYXQncyB3aGF0IEknbSBhaW1pbmcgZm9yLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGJsb2NrL2Jpby5jYCwgYGJsb2NrL2ZvcHMuY2AsIGBmcy9idWZmZXIuY2AsIGBmcy9lcm9mcy96ZGF0YS5jYCwgYGZzL2lvbWFwL2lvZW5kLmNgLCBhbmQgYGZzL3hmcy94ZnNfYW9wcy5jYC4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cywgc28gd2UncmUgbG9va2luZyBhdCBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBkZXBlbmRlbmNpZXMuXG5cbk9idmlvdXNseSwgYENPTkZJR19CTE9DS2AgaXMgYSBnaXZlbjsgaXQncyBwcmFjdGljYWxseSBlc3NlbnRpYWwsIGJ1dCB0aGFua2Z1bGx5IGl0J3Mgb24gYnkgZGVmYXVsdC4gSSdsbCBuZWVkIGBDT05GSUdfRlNfSU9NQVBgIGZvciB0aGUgYGZzL2lvbWFwL2lvZW5kLmNgIGNoYW5nZXMsIGBDT05GSUdfWEZTX0ZTYCBmb3IgdGhlIGBmcy94ZnMveGZzX2FvcHMuY2AgbW9kaWZpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCBgQ09ORklHX0VST0ZTX0ZTYCBmb3IgdGhlIGBmcy9lcm9mcy96ZGF0YS5jYCBiaXRzLiBHaXZlbiB0aGF0IGl0IG1lbnRpb25zIGNvbXByZXNzZWQgZXJvZnMgKGB6ZGF0YWApLCBJJ2xsIGFsc28gbmVlZCBgQ09ORklHX0VST0ZTX0ZTX1pJUGAuIFRpbWUgdG8gY2hlY2sgYGZzL2Vyb2ZzL3pkYXRhLmNgIGRpcmVjdGx5IGluIEtjb25maWcgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzAwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjM3Ljc5MTU2MjE4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjI2OTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZGF0YVxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9NYWtlZmlsZT01PWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSArPSB4YXR0ci5vXFxuZnMvZXJvZnMvTWFrZWZpbGU6Njplcm9mcy0kKENPTkZJR19FUk9GU19GU19aSVApICs9IGRlY29tcHJlc3Nvci5vIHptYXAubyB6ZGF0YS5vIHp1dGlsLm9cXG5mcy9lcm9mcy9NYWtlZmlsZS03LWVyb2ZzLSQoQ09ORklHX0VST0ZTX0ZTX1pJUF9MWk1BKSArPSBkZWNvbXByZXNzb3JfbHptYS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjM5LjQ3MzgzNzA5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTU0Nzk4MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFUk9GUyBTdXBwb3J0IGZvciB6ZGF0YS5jKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbG9vayBpbnRvIGBFUk9GU19GU19aSVBgIGZvciBgemRhdGEuY2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEknbGwgZG91YmxlLWNoZWNrIGl0cyBjb25maWd1cmF0aW9uLiBXaGVyZSBzaG91bGQgSSBzdGFydD8gQWgsIHJpZ2h0LCB0aGUgS2NvbmZpZyBmb3IgYGZzL2lvbWFwL2lvZW5kLmNgIGlzIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMsIGFuZCBwb3NzaWJseSB3aGF0IGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgYEVST0ZTX0ZTX1pJUGAgaGFzIG1vcmUgYnJvYWRseSB3aXRoaW4gdGhlIGlvbWFwIGZyYW1ld29yay4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgbGlua2VkIGFuZCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo0Ni40Mjg2MzgyMDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzA5NTY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9lbmRcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9MTQ9aW9tYXAtJChDT05GSUdfQkxPQ0spXFx0XFx0Kz0gZGlyZWN0LWlvLm8gXFxcXFxcbmZzL2lvbWFwL01ha2VmaWxlOjE1OlxcdFxcdFxcdFxcdCAgIGlvZW5kLm8gXFxcXFxcbmZzL2lvbWFwL01ha2VmaWxlLTE2LVxcdFxcdFxcdFxcdCAgIGZpZW1hcC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6NDguNTk5NjAxNTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NDgxNjI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaG93IEknZCBhcHByb2FjaCB0aGlzIHByb2JsZW06XG5cbioqVHJhY2luZyBEZXBlbmRlbmNpZXMgZm9yIGBpb2VuZC5vYCoqXG5cbkFscmlnaHQsIEknbSBlbmNvdW50ZXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgYGlvZW5kLm9gIG5lZWRzIGBDT05GSUdfQkxPQ0tgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIFwiT2theSwgbGV0J3MgZmlndXJlIG91dCB3aGVyZSB0aGlzIGRlcGVuZGVuY3kgaXMgZGVmaW5lZCBhbmQgaWYgaXQncyBjb3JyZWN0LlwiIFRoaXMgdXN1YWxseSBtZWFucyBuYXZpZ2F0aW5nIHRoZSBidWlsZCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgYENPTkZJR19CTE9DS2AgaXMgdXNlZCBpbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlcy4gU2luY2UgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgZmlsZSBzeXN0ZW0gcmVsYXRlZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGZpbGVzIGFuZCB0aGVpciBLY29uZmlnIGZpbGVzLiBUaGUgbWVudGlvbiBvZiBgeGZzX2FvcHMuY2Agc3BhcmtzIGEgbWVtb3J5LiBgZnMveGZzL2Agc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGB4ZnNfYW9wcy5jYCBzb3VuZHMgbGlrZSBpdCB3b3VsZCBiZSBpbiB0aGVyZS4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIHRoZXJlLCBhcyBpdCB3aWxsIHNwZWNpZnkgd2hhdCBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQuIFRoZSBmaXJzdCBwbGFjZSBJJ2xsIGxvb2sgaXMgYGZzL3hmcy9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo1My4wODQ0MjAzNTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzgxNTE2ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2FvcHNcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL01ha2VmaWxlPTY0PXhmcy0kKENPTkZJR19YRlNfUlQpXFx0XFx0Kz0gJChhZGRwcmVmaXggbGlieGZzLywgXFxcXFxcbi0tXFxuZnMveGZzL01ha2VmaWxlLTcwLSMgaGlnaGxldmVsIGNvZGVcXG5mcy94ZnMvTWFrZWZpbGU6NzE6eGZzLXlcXHRcXHRcXHRcXHQrPSB4ZnNfYW9wcy5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGUtNzItXFx0XFx0XFx0XFx0ICAgeGZzX2F0dHJfaW5hY3RpdmUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjU0LjkyMjU3ODA2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyNTQ2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFhGUyBhbmQgQnVmZmVyIENhY2hlIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfWEZTX0ZTYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGJ1aWxkaW5nIGB4ZnNfYW9wcy5vYC4gTm90IHVuZXhwZWN0ZWQsIG9idmlvdXNseSwgYnV0IGdvb2QgdG8gaGF2ZSB0aGF0IGNvbmZpcm1lZC4gVGhlIGFyY2hpdGVjdHVyZSBoZXJlIHJlbGllcyBvbiBYRlMgc3VwcG9ydCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGZpbGUgc3lzdGVtJ3MgY2FwYWJpbGl0aWVzLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcz8gYGZzL2J1ZmZlci5jYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzcG90IGZvciB0aGUgS2NvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gYnVmZmVyIGNhY2hlIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBidWZmZXIgY2FjaGUgaW50ZXJhY3RzIHdpdGggWEZTLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGF0IGB4ZnNfYW9wcy5vYCBtb2R1bGUgdGllcyBpbnRvIHRoaW5ncy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBidWZmZXIgY2FjaGUncyBLY29uZmlnIGVudHJpZXMgdGhlcmUuIE1heWJlIHRoZXJlJ3MgYSBtb3JlIGV4cGxpY2l0IGxpbmsgb3IgZGVwZW5kZW5jeSBsaXN0ZWQgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODk2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6NTguMjE1MTI3MTEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3ODU5ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1ZmZlclxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTgyPWt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgKz0gXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS05MC1cXHRib29rM3NfaHZfbmVzdGVkdjIubyBcXFxcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo5MTpcXHRndWVzdC1zdGF0ZS1idWZmZXIubyBcXFxcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS05Mi1cXHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLXkpIFxcXFxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtOTQtXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfR1VFU1RfU1RBVEVfQlVGRkVSX1RFU1QpICs9IHRlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLm9cXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTk2LWVuZGlmXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL01ha2VmaWxlPTk9SExfQ09NTU9OX0ZJTEVTIDo9IGNvbW1vbi9oYWJhbmFsYWJzX2Rydi5vIGNvbW1vbi9kZXZpY2UubyBjb21tb24vY29udGV4dC5vIFxcXFxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL01ha2VmaWxlLTEwLVxcdFxcdGNvbW1vbi9hc2lkLm8gY29tbW9uL2hhYmFuYWxhYnNfaW9jdGwubyBcXFxcXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9NYWtlZmlsZToxMTpcXHRcXHRjb21tb24vY29tbWFuZF9idWZmZXIubyBjb21tb24vaHdfcXVldWUubyBjb21tb24vaXJxLm8gXFxcXFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vTWFrZWZpbGUtMTItXFx0XFx0Y29tbW9uL3N5c2ZzLm8gY29tbW9uL2h3bW9uLm8gY29tbW9uL21lbW9yeS5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGU9MTU0PWFjcGkteSArPVxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUtMTU3LVxcdHV0YXNjaWkub1xcdFxcXFxcXG5kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlOjE1ODpcXHR1dGJ1ZmZlci5vXFx0XFxcXFxcbmRyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUtMTU5LVxcdHV0Y2tzdW0ub1xcdFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0zNT1kcm0teSA6PSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtNTMtXFx0ZHJtX2ZvdXJjYy5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6NTQ6XFx0ZHJtX2ZyYW1lYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS01NS1cXHRkcm1fZ2VtLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9NYWtlZmlsZT03PWtvbWVkYS15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGUtMTMtXFx0a29tZWRhX3BpcGVsaW5lX3N0YXRlLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGU6MTQ6XFx0a29tZWRhX2ZyYW1lYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGUtMTUtXFx0a29tZWRhX2ttcy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L01ha2VmaWxlPTI9ZXRuYXZpdi15IDo9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9NYWtlZmlsZTozOlxcdGV0bmF2aXZfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L01ha2VmaWxlLTQtXFx0ZXRuYXZpdl9jbWRfcGFyc2VyLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZT02PWdtYTUwMF9nZngteSArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL01ha2VmaWxlLTEzLVxcdCAgY2R2X2ludGVsX2x2ZHMubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9NYWtlZmlsZToxNDpcXHQgIGZyYW1lYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUtMTUtXFx0ICBnZW0ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZT03OD1pOTE1LXkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtODEtXFx0aTkxNV9kcHQubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6ODI6XFx0aTkxNV9kc2JfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTgzLVxcdGk5MTVfZmJfcGluLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9MTU2PWdlbS15ICs9IFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTE2Mi1cXHRnZW0vaTkxNV9nZW1fZG9tYWluLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlOjE2MzpcXHRnZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0xNjQtXFx0Z2VtL2k5MTVfZ2VtX2ludGVybmFsLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY3LVxcdGdlbS9pOTE1X2dlbV9vYmplY3QubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6MTY4OlxcdGdlbS9pOTE1X2dlbV9vYmplY3RfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMTY5LVxcdGdlbS9pOTE1X2dlbV9wYWdlcy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlPTIzNT1pOTE1LXkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMjg3LVxcdGRpc3BsYXkvaW50ZWxfZmxpcHEubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU6Mjg4OlxcdGRpc3BsYXkvaW50ZWxfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUtMjg5LVxcdGRpc3BsYXkvaW50ZWxfZ2xvYmFsX3N0YXRlLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZT0xMTI9bXNtLXkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZS0xMjYtXFx0bXNtX3JkLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGU6MTI3OlxcdG1zbV9yaW5nYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUtMTI4LVxcdG1zbV9zdWJtaXRxdWV1ZS5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZT01PXN1bjRpLWRybS15XFx0XFx0XFx0Kz0gc3VuNGlfZHJ2Lm9cXG5kcml2ZXJzL2dwdS9kcm0vc3VuNGkvTWFrZWZpbGU6NjpzdW40aS1kcm0teVxcdFxcdFxcdCs9IHN1bjRpX2ZyYW1lYnVmZmVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vc3VuNGkvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGU9Mj12bXdnZngteSA6PSB2bXdnZnhfZXhlY2J1Zi5vIHZtd2dmeF9nbXIubyB2bXdnZnhfa21zLm8gdm13Z2Z4X2Rydi5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlOjM6XFx0ICAgIHZtd2dmeF9pb2N0bC5vIHZtd2dmeF9yZXNvdXJjZS5vIHZtd2dmeF90dG1fYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUtNC1cXHQgICAgdm13Z2Z4X2NtZC5vIHZtd2dmeF9pcnEubyB2bXdnZnhfbGR1Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIxOD14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyMy1cXHRkaXNwbGF5L3hlX2Rpc3BsYXlfd2EubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjIyNDpcXHRkaXNwbGF5L3hlX2RzYl9idWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyNS1cXHRkaXNwbGF5L3hlX2ZiX3Bpbi5vIFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6MjI2OlxcdGRpc3BsYXkveGVfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTIyNy1cXHRkaXNwbGF5L3hlX2hkY3BfZ3NjLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTIzND14ZS0kKENPTkZJR19EUk1fWEVfRElTUExBWSkgKz0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTI5OC1cXHRpOTE1LWRpc3BsYXkvaW50ZWxfZmxpcHEubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjI5OTpcXHRpOTE1LWRpc3BsYXkvaW50ZWxfZnJvbnRidWZmZXIubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTMwMC1cXHRpOTE1LWRpc3BsYXkvaW50ZWxfZ2xvYmFsX3N0YXRlLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9odi9NYWtlZmlsZT0xMT1odl92bWJ1cy15IDo9IHZtYnVzX2Rydi5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEyLVxcdFxcdCBodi5vIGNvbm5lY3Rpb24ubyBjaGFubmVsLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTM6XFx0XFx0IGNoYW5uZWxfbWdtdC5vIHJpbmdfYnVmZmVyLm8gaHZfdHJhY2Uub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTQtaHZfdm1idXMtJChDT05GSUdfSFlQRVJWX1RFU1RJTkcpXFx0Kz0gaHZfZGVidWdmcy5vXFxuLS1cXG5kcml2ZXJzL2lpby9NYWtlZmlsZT03PWluZHVzdHJpYWxpby15IDo9IGluZHVzdHJpYWxpby1jb3JlLm8gaW5kdXN0cmlhbGlvLWV2ZW50Lm8gaW5rZXJuLm9cXG5kcml2ZXJzL2lpby9NYWtlZmlsZTo4OmluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fQlVGRkVSKSArPSBpbmR1c3RyaWFsaW8tYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9NYWtlZmlsZS05LWluZHVzdHJpYWxpby0kKENPTkZJR19JSU9fVFJJR0dFUikgKz0gaW5kdXN0cmlhbGlvLXRyaWdnZXIub1xcbi0tXFxuZHJpdmVycy9paW8vYWNjZWwvTWFrZWZpbGU9ODY9c3RfYWNjZWwteSA6PSBzdF9hY2NlbF9jb3JlLm9cXG5kcml2ZXJzL2lpby9hY2NlbC9NYWtlZmlsZTo4NzpzdF9hY2NlbC0kKENPTkZJR19JSU9fQlVGRkVSKSArPSBzdF9hY2NlbF9idWZmZXIub1xcbmRyaXZlcnMvaWlvL2FjY2VsL01ha2VmaWxlLTg4LVxcbi0tXFxuZHJpdmVycy9paW8vYnVmZmVyL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19JSU9fQlVGRkVSX0hXX0NPTlNVTUVSKSArPSBpbmR1c3RyaWFsaW8taHctY29uc3VtZXIub1xcbmRyaXZlcnMvaWlvL2J1ZmZlci9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfSUlPX1RSSUdHRVJFRF9CVUZGRVIpICs9IGluZHVzdHJpYWxpby10cmlnZ2VyZWQtYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9idWZmZXIvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0lJT19LRklGT19CVUYpICs9IGtmaWZvX2J1Zi5vXFxuLS1cXG5kcml2ZXJzL2lpby9jb21tb24vc3Rfc2Vuc29ycy9NYWtlZmlsZT05PXN0X3NlbnNvcnMteSA6PSBzdF9zZW5zb3JzX2NvcmUub1xcbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlOjEwOnN0X3NlbnNvcnMtJChDT05GSUdfSUlPX0JVRkZFUikgKz0gc3Rfc2Vuc29yc19idWZmZXIub1xcbmRyaXZlcnMvaWlvL2NvbW1vbi9zdF9zZW5zb3JzL01ha2VmaWxlLTExLXN0X3NlbnNvcnMtJChDT05GSUdfSUlPX1RSSUdHRVIpICs9IHN0X3NlbnNvcnNfdHJpZ2dlci5vXFxuLS1cXG5kcml2ZXJzL2lpby9kdW1teS9NYWtlZmlsZT04PWlpb19kdW1teS0kKENPTkZJR19JSU9fU0lNUExFX0RVTU1ZX0VWRU5UUykgKz0gaWlvX3NpbXBsZV9kdW1teV9ldmVudHMub1xcbmRyaXZlcnMvaWlvL2R1bW15L01ha2VmaWxlOjk6aWlvX2R1bW15LSQoQ09ORklHX0lJT19TSU1QTEVfRFVNTVlfQlVGRkVSKSArPSBpaW9fc2ltcGxlX2R1bW15X2J1ZmZlci5vXFxuZHJpdmVycy9paW8vZHVtbXkvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlPTI3PWl0ZzMyMDAteSAgICAgICAgICAgICAgIDo9IGl0ZzMyMDBfY29yZS5vXFxuZHJpdmVycy9paW8vZ3lyby9NYWtlZmlsZToyODppdGczMjAwLSQoQ09ORklHX0lJT19CVUZGRVIpICs9IGl0ZzMyMDBfYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19JVEczMjAwKSAgICs9IGl0ZzMyMDAub1xcbi0tXFxuZHJpdmVycy9paW8vZ3lyby9NYWtlZmlsZT0zND1zdF9neXJvLXkgOj0gc3RfZ3lyb19jb3JlLm9cXG5kcml2ZXJzL2lpby9neXJvL01ha2VmaWxlOjM1OnN0X2d5cm8tJChDT05GSUdfSUlPX0JVRkZFUikgKz0gc3RfZ3lyb19idWZmZXIub1xcbmRyaXZlcnMvaWlvL2d5cm8vTWFrZWZpbGUtMzYtXFxuLS1cXG5kcml2ZXJzL2lpby9odW1pZGl0eS9NYWtlZmlsZT0xND1odHMyMjEteSA6PSBodHMyMjFfY29yZS5vIFxcXFxcXG5kcml2ZXJzL2lpby9odW1pZGl0eS9NYWtlZmlsZToxNTpcXHQgICAgaHRzMjIxX2J1ZmZlci5vXFxuZHJpdmVycy9paW8vaHVtaWRpdHkvTWFrZWZpbGUtMTYtb2JqLSQoQ09ORklHX0hUUzIyMSkgKz0gaHRzMjIxLm9cXG4tLVxcbmRyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZT0xND1hZGlzX2xpYi0kKENPTkZJR19JSU9fQURJU19MSUJfQlVGRkVSKSArPSBhZGlzX3RyaWdnZXIub1xcbmRyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZToxNTphZGlzX2xpYi0kKENPTkZJR19JSU9fQURJU19MSUJfQlVGRkVSKSArPSBhZGlzX2J1ZmZlci5vXFxuZHJpdmVycy9paW8vaW11L01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19JSU9fQURJU19MSUIpICs9IGFkaXNfbGliLm9cXG4tLVxcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGU9Nz1pbnYtaWNtNDI2MDAteSArPSBpbnZfaWNtNDI2MDBfdGVtcC5vXFxuZHJpdmVycy9paW8vaW11L2ludl9pY200MjYwMC9NYWtlZmlsZTo4Omludi1pY200MjYwMC15ICs9IGludl9pY200MjYwMF9idWZmZXIub1xcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDI2MDAvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDU2MDAvTWFrZWZpbGU9ND1pbnYtaWNtNDU2MDAteSArPSBpbnZfaWNtNDU2MDBfY29yZS5vXFxuZHJpdmVycy9paW8vaW11L2ludl9pY200NTYwMC9NYWtlZmlsZTo1Omludi1pY200NTYwMC15ICs9IGludl9pY200NTYwMF9idWZmZXIub1xcbmRyaXZlcnMvaWlvL2ltdS9pbnZfaWNtNDU2MDAvTWFrZWZpbGUtNi1pbnYtaWNtNDU2MDAteSArPSBpbnZfaWNtNDU2MDBfZ3lyby5vXFxuLS1cXG5kcml2ZXJzL2lpby9pbXUvc3RfbHNtNmRzeC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaWlvL2ltdS9zdF9sc202ZHN4L01ha2VmaWxlOjI6c3RfbHNtNmRzeC15IDo9IHN0X2xzbTZkc3hfY29yZS5vIHN0X2xzbTZkc3hfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvaWlvL2ltdS9zdF9sc202ZHN4L01ha2VmaWxlLTMtXFx0XFx0c3RfbHNtNmRzeF9zaHViLm8gc3RfbHNtNmRzeF9mdXNpb24ub1xcbi0tXFxuZHJpdmVycy9paW8vbWFnbmV0b21ldGVyL01ha2VmaWxlPTIyPXN0X21hZ24teSA6PSBzdF9tYWduX2NvcmUub1xcbmRyaXZlcnMvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZToyMzpzdF9tYWduLSQoQ09ORklHX0lJT19CVUZGRVIpICs9IHN0X21hZ25fYnVmZmVyLm9cXG5kcml2ZXJzL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUtMjQtXFxuLS1cXG5kcml2ZXJzL2lpby9wcmVzc3VyZS9NYWtlZmlsZT00MD1zdF9wcmVzc3VyZS15IDo9IHN0X3ByZXNzdXJlX2NvcmUub1xcbmRyaXZlcnMvaWlvL3ByZXNzdXJlL01ha2VmaWxlOjQxOnN0X3ByZXNzdXJlLSQoQ09ORklHX0lJT19CVUZGRVIpICs9IHN0X3ByZXNzdXJlX2J1ZmZlci5vXFxuZHJpdmVycy9paW8vcHJlc3N1cmUvTWFrZWZpbGUtNDItb2JqLSQoQ09ORklHX0lJT19TVF9QUkVTU19JMkMpICs9IHN0X3ByZXNzdXJlX2kyYy5vXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlPTk9ZHZiLWNvcmUtb2JqcyA6PSBkdmJkZXYubyBkbXhkZXYubyBkdmJfZGVtdXgub1xcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL01ha2VmaWxlLTEwLVxcdFxcdCBkdmJfY2FfZW41MDIyMS5vIGR2Yl9mcm9udGVuZC5vXFx0XFx0XFxcXFxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGU6MTE6XFx0XFx0ICQoZHZiLW5ldC15KSBkdmJfcmluZ2J1ZmZlci5vICQoZHZiLXZiMi15KVxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvTWFrZWZpbGUtMTItXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTY0L01ha2VmaWxlPTI9c2FhNzE2NC1vYmpzXFx0Oj0gc2FhNzE2NC1jYXJkcy5vIHNhYTcxNjQtY29yZS5vIHNhYTcxNjQtaTJjLm8gc2FhNzE2NC1kdmIubyBcXFxcXFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzE2NC9NYWtlZmlsZS0zLVxcdFxcdFxcdHNhYTcxNjQtZncubyBzYWE3MTY0LWJ1cy5vIHNhYTcxNjQtY21kLm8gc2FhNzE2NC1hcGkubyBcXFxcXFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzE2NC9NYWtlZmlsZTo0OlxcdFxcdFxcdHNhYTcxNjQtYnVmZmVyLm8gc2FhNzE2NC1lbmNvZGVyLm8gc2FhNzE2NC12Ymkub1xcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvTWFrZWZpbGUtNS1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9pcmlzL01ha2VmaWxlOjE6cWNvbS1pcmlzLW9ianMgKz0gaXJpc19idWZmZXIubyBcXFxcXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2lyaXMvTWFrZWZpbGUtMi0gICAgICAgICAgICAgaXJpc19jb21tb24ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZS0yOC0gICAgICAgICAgICAgaXJpc192cHU0eC5vIFxcXFxcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9NYWtlZmlsZToyOTogICAgICAgICAgICAgaXJpc192cHVfYnVmZmVyLm8gXFxcXFxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9pcmlzL01ha2VmaWxlLTMwLSAgICAgICAgICAgICBpcmlzX3ZwdV9jb21tb24ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9Mzk9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfRU5fUlhORkMpICAgICs9IGVuX2ZzX2V0aHRvb2wub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0MDptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DT1JFX0VOX0RDQikgKz0gZW5fZGNibmwubyBlbi9wb3J0X2J1ZmZlci5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTQxLW1seDVfY29yZS0kKENPTkZJR19QQ0lfSFlQRVJWX0lOVEVSRkFDRSkgKz0gZW4vaHZfdmhjYV9zdGF0cy5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYz01Mjk9dHhnYmVfZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQwLVxcdGJ1ZmZlci5sZW5ndGggPSBjcHVfdG9fYmUzMihwYWdlX2RhdGEtXFx1MDAzZWxlbmd0aCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6NTQxOlxcdGJ1ZmZlci5vZmZzZXQgPSBjcHVfdG9fYmUzMihwYWdlX2RhdGEtXFx1MDAzZW9mZnNldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTQyLVxcdGJ1ZmZlci5wYWdlID0gcGFnZV9kYXRhLVxcdTAwM2VwYWdlO1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTUyNz1zdGF0aWMgaW50IGRlbGxfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQwLVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjU0MTpcXHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy01NDItXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNTQ2LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjU0NzpcXHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU0OC1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz01ODM9c3RhdGljIHZvaWQgZGVsbF9yZmtpbGxfcXVlcnkoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU5Mi1cXHRyZXQgPSBkZWxsX3NlbmRfcmVxdWVzdChcXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NTkzOlxcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTU5NC1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy02MDAtXFx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXFx1MDAyNmJ1ZmZlciwgQ0xBU1NfSU5GTywgU0VMRUNUX1JGS0lMTCk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYwMTpcXHRod3N3aXRjaCA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYwMi1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz02MTY9c3RhdGljIGludCBkZWxsX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjI3LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYyODpcXHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy02MjktXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNjMzLVxcdFxcdHJldHVybiBod3N3aXRjaF9yZXQ7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjYzNDpcXHRod3N3aXRjaF9zdGF0ZSA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTYzNS1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz03MDE9c3RhdGljIHZvaWQgZGVsbF91cGRhdGVfcmZraWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MDktXFx0cmV0ID0gZGVsbF9zZW5kX3JlcXVlc3QoXFx1MDAyNmJ1ZmZlciwgQ0xBU1NfSU5GTywgU0VMRUNUX1JGS0lMTCk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjcxMDpcXHRzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy03MTEtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzE4LVxcdGlmIChyZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiAoc3RhdHVzIFxcdTAwMjYgQklUKDApKSlcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6NzE5OlxcdFxcdGh3c3dpdGNoID0gYnVmZmVyLm91dHB1dFsxXTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtNzIwLVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTc3NT1zdGF0aWMgaW50IF9faW5pdCBkZWxsX3NldHVwX3Jma2lsbCh2b2lkKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTc5NC1cXHRyZXQgPSBkZWxsX3NlbmRfcmVxdWVzdChcXHUwMDI2YnVmZmVyLCBDTEFTU19JTkZPLCBTRUxFQ1RfUkZLSUxMKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6Nzk1OlxcdHN0YXR1cyA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTc5Ni1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz05NTc9c3RhdGljIGludCBkZWxsX2dldF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTk2Ny1cXHRpZiAocmV0ID09IDApXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjk2ODpcXHRcXHRyZXQgPSBidWZmZXIub3V0cHV0WzFdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy05NjktXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MTIzMj1zdGF0aWMgaW50IGtiZF9nZXRfaW5mbyhzdHJ1Y3Qga2JkX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTI0My1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0NDpcXHRpbmZvLVxcdTAwM2Vtb2RlcyA9IGJ1ZmZlci5vdXRwdXRbMV0gXFx1MDAyNiAweEZGRkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDU6XFx0aW5mby1cXHUwMDNldHlwZSA9IChidWZmZXIub3V0cHV0WzFdIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNDY6XFx0aW5mby1cXHUwMDNldHJpZ2dlcnMgPSBidWZmZXIub3V0cHV0WzJdIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0NzpcXHR1bml0cyA9IChidWZmZXIub3V0cHV0WzJdIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTI0ODpcXHRpbmZvLVxcdTAwM2VsZXZlbHMgPSAoYnVmZmVyLm91dHB1dFsyXSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweEZGO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xMjQ5LVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTMtXFx0aWYgKHVuaXRzIFxcdTAwMjYgQklUKDApKVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU0OlxcdFxcdGluZm8tXFx1MDAzZXNlY29uZHMgPSAoYnVmZmVyLm91dHB1dFszXSBcXHUwMDNlXFx1MDAzZSAwKSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTUtXFx0aWYgKHVuaXRzIFxcdTAwMjYgQklUKDEpKVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU2OlxcdFxcdGluZm8tXFx1MDAzZW1pbnV0ZXMgPSAoYnVmZmVyLm91dHB1dFszXSBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNTctXFx0aWYgKHVuaXRzIFxcdTAwMjYgQklUKDIpKVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMjU4OlxcdFxcdGluZm8tXFx1MDAzZWhvdXJzID0gKGJ1ZmZlci5vdXRwdXRbM10gXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTI1OS1cXHRpZiAodW5pdHMgXFx1MDAyNiBCSVQoMykpXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEyNjA6XFx0XFx0aW5mby1cXHUwMDNlZGF5cyA9IChidWZmZXIub3V0cHV0WzNdIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEyNjEtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MTMxOD1zdGF0aWMgaW50IGtiZF9nZXRfc3RhdGUoc3RydWN0IGtiZF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMTMyOC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMyOTpcXHRzdGF0ZS1cXHUwMDNlbW9kZV9iaXQgPSBmZnMoYnVmZmVyLm91dHB1dFsxXSBcXHUwMDI2IDB4RkZGRik7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzMzAtXFx0aWYgKHN0YXRlLVxcdTAwM2Vtb2RlX2JpdCAhPSAwKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzMzItXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzM6XFx0c3RhdGUtXFx1MDAzZXRyaWdnZXJzID0gKGJ1ZmZlci5vdXRwdXRbMV0gXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNDpcXHRzdGF0ZS1cXHUwMDNldGltZW91dF92YWx1ZSA9IChidWZmZXIub3V0cHV0WzFdIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4M0Y7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzU6XFx0c3RhdGUtXFx1MDAzZXRpbWVvdXRfdW5pdCA9IChidWZmZXIub3V0cHV0WzFdIFxcdTAwM2VcXHUwMDNlIDMwKSBcXHUwMDI2IDB4MztcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNjpcXHRzdGF0ZS1cXHUwMDNlYWxzX3NldHRpbmcgPSBidWZmZXIub3V0cHV0WzJdIFxcdTAwMjYgMHhGRjtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MTMzNzpcXHRzdGF0ZS1cXHUwMDNlYWxzX3ZhbHVlID0gKGJ1ZmZlci5vdXRwdXRbMl0gXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweEZGO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzM4OlxcdHN0YXRlLVxcdTAwM2VsZXZlbCA9IChidWZmZXIub3V0cHV0WzJdIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4RkY7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjEzMzk6XFx0c3RhdGUtXFx1MDAzZXRpbWVvdXRfdmFsdWVfYWMgPSAoYnVmZmVyLm91dHB1dFsyXSBcXHUwMDNlXFx1MDAzZSAyNCkgXFx1MDAyNiAweDNGO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxMzQwOlxcdHN0YXRlLVxcdTAwM2V0aW1lb3V0X3VuaXRfYWMgPSAoYnVmZmVyLm91dHB1dFsyXSBcXHUwMDNlXFx1MDAzZSAzMCkgXFx1MDAyNiAweDM7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTEzNDEtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM9MTM5Nz1zdGF0aWMgaW50IGtiZF9nZXRfdG9rZW5fYml0KHU4IGJpdClcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYy0xNDE1LVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYzoxNDE2OlxcdHZhbCA9IGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTE0MTctXFx0cmV0dXJuICh2YWwgPT0gdG9rZW4tXFx1MDAzZXZhbHVlKTtcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1sYXB0b3AuYz0yMTk1PXN0YXRpYyBpbnQgZGVsbF9iYXR0ZXJ5X3JlYWQoY29uc3QgdTE2IHRva2VuaWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMjIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmM6MjIwNTpcXHRpZiAoYnVmZmVyLm91dHB1dFsxXSBcXHUwMDNlIElOVF9NQVgpXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTIyMDYtXFx0XFx0cmV0dXJuIC1FSU87XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTIyMDctXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjIyMDg6XFx0cmV0dXJuIGJ1ZmZlci5vdXRwdXRbMV07XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTIyMDktfVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jPTI0NTg9c3RhdGljIGludCBfX2luaXQgZGVsbF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9wLmMtMjUyNC1cXHRpZiAocmV0ID09IDApXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jOjI1MjU6XFx0XFx0bWF4X2ludGVuc2l0eSA9IGJ1ZmZlci5vdXRwdXRbM107XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jLTI1MjYtXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYz0xMjA9c3RhdGljIGludCB0aGVybWFsX2dldF9tb2RlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xMjktXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxMzA6XFx0c3RhdGUgPSBidWZmZXIub3V0cHV0WzJdO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jLTEzMS1cXHRpZiAoc3RhdGUgXFx1MDAyNiBERUxMX0JBTEFOQ0VEKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmM9MTQzPXN0YXRpYyBpbnQgdGhlcm1hbF9nZXRfc3VwcG9ydGVkX21vZGVzKGludCAqc3VwcG9ydGVkX2JpdHMpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xNTEtXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxNTI6XFx0KnN1cHBvcnRlZF9iaXRzID0gRklFTERfR0VUKERFTExfVEhFUk1BTF9TVVBQT1JURUQsIGJ1ZmZlci5vdXRwdXRbMV0pO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jLTE1My1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wYy5jPTE1Nj1zdGF0aWMgaW50IHRoZXJtYWxfZ2V0X2FjY19tb2RlKGludCAqYWNjX21vZGUpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYy0xNjQtXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtcGMuYzoxNjU6XFx0KmFjY19tb2RlID0gRklFTERfR0VUKERFTExfQUNDX0dFVF9GSUVMRCwgYnVmZmVyLm91dHB1dFszXSk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBjLmMtMTY2LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy90dHkvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfVFRZKVxcdFxcdCs9IHR0eV9pby5vIG5fdHR5Lm8gdHR5X2lvY3RsLm8gdHR5X2xkaXNjLm8gXFxcXFxcbmRyaXZlcnMvdHR5L01ha2VmaWxlOjM6XFx0XFx0XFx0XFx0ICAgdHR5X2J1ZmZlci5vIHR0eV9wb3J0Lm8gdHR5X211dGV4Lm8gXFxcXFxcbmRyaXZlcnMvdHR5L01ha2VmaWxlLTQtXFx0XFx0XFx0XFx0ICAgdHR5X2xkc2VtLm8gdHR5X2JhdWRyYXRlLm8gdHR5X2pvYmN0cmwubyBcXFxcXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlPTk9dXNiY29yZS15IDo9IHVzYi5vIGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIub1xcbmRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU6MTA6dXNiY29yZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTExLXVzYmNvcmUteSArPSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cXG4tLVxcbmZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0yMC1cXG5mcy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfQlVGRkVSX0hFQUQpXFx0Kz0gYnVmZmVyLm8gbXBhZ2Uub1xcbmZzL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdCs9IHByb2NfbmFtZXNwYWNlLm9cXG4tLVxcbmZzL2hwZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFBGU19GUykgKz0gaHBmcy5vXFxuZnMvaHBmcy9NYWtlZmlsZS03LVxcbmZzL2hwZnMvTWFrZWZpbGU6ODpocGZzLW9ianMgOj0gYWxsb2MubyBhbm9kZS5vIGJ1ZmZlci5vIGRlbnRyeS5vIGRpci5vIGRub2RlLm8gZWEubyBmaWxlLm8gXFxcXFxcbmZzL2hwZnMvTWFrZWZpbGUtOS1cXHQgICAgIGlub2RlLm8gbWFwLm8gbmFtZS5vIG5hbWVpLm8gc3VwZXIub1xcbi0tXFxuZnMvbmV0ZnMvTWFrZWZpbGU9Mz1uZXRmcy15IDo9IFxcXFxcXG4tLVxcbmZzL25ldGZzL01ha2VmaWxlLTE2LVxcdHJlYWRfc2luZ2xlLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlOjE3OlxcdHJvbGxpbmdfYnVmZmVyLm8gXFxcXFxcbmZzL25ldGZzL01ha2VmaWxlLTE4LVxcdHdyaXRlX2NvbGxlY3QubyBcXFxcXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaD00Nz1zdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oLTYyLVxcdCAqIHN0b3JlZCBpbiBzdHJ1Y3QgXFx1MDAyNmRybV9mcmFtZWJ1ZmZlciwgaW5jbHVkaW5nIGFsbCByZWxldmFudCBtZXRhZGF0YVxcbmluY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oOjYzOlxcdCAqIGxpa2UgXFx1MDAyNmRybV9mcmFtZWJ1ZmZlci5waXRjaGVzIGFuZCBcXHUwMDI2ZHJtX2ZyYW1lYnVmZmVyLm9mZnNldHMgaWYgdGhlXFxuaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgtNjQtXFx0ICogbW9kaWZpZXIgZW5hYmxlcyBhZGRpdGlvbmFsIHBsYW5lcyBiZXlvbmQgdGhlIGZvdXJjYyBwaXhlbCBmb3JtYXRcXG4tLVxcbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxua2VybmVsL2V2ZW50cy9NYWtlZmlsZToyOm9iai15IDo9IGNvcmUubyByaW5nX2J1ZmZlci5vIGNhbGxjaGFpbi5vXFxua2VybmVsL2V2ZW50cy9NYWtlZmlsZS0zLVxcbi0tXFxua2VybmVsL3ByaW50ay9NYWtlZmlsZT03PW9iai0kKENPTkZJR19QUklOVEspICAgICAgICAgICAgICAgICArPSBwcmludGtfc3VwcG9ydC5vXFxua2VybmVsL3ByaW50ay9NYWtlZmlsZTo4OnByaW50a19zdXBwb3J0LXlcXHQgICAgICAgICAgICAgOj0gcHJpbnRrX3JpbmdidWZmZXIub1xcbmtlcm5lbC9wcmludGsvTWFrZWZpbGUtOS1wcmludGtfc3VwcG9ydC0kKENPTkZJR19TWVNDVEwpXFx0ICAgICArPSBzeXNjdGwub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IGxpYmZ0cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLKSArPSByaW5nX2J1ZmZlcl9iZW5jaG1hcmsub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSArPSB0cmFjZV9yZW1vdGUub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgKz0gcmVtb3RlX3Rlc3Qub1xcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTE2MT0kKG9iaikvJS5vLmNoZWNrZWQ6ICQob2JqKS8lLm8gJChvYmopL3VuZGVmc3ltc19iYXNlLm8gRk9SQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjE2NDphbHdheXMtJChDT05GSUdfU0lNUExFX1JJTkdfQlVGRkVSKSArPSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTE2NS1cXG4tLVxcbm5ldC9jZXBoL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0NFUEhfTElCKSArPSBsaWJjZXBoLm9cXG5uZXQvY2VwaC9NYWtlZmlsZS02LVxcbm5ldC9jZXBoL01ha2VmaWxlOjc6bGliY2VwaC15IDo9IGNlcGhfY29tbW9uLm8gbWVzc2VuZ2VyLm8gbXNncG9vbC5vIGJ1ZmZlci5vIHBhZ2VsaXN0Lm8gXFxcXFxcbm5ldC9jZXBoL01ha2VmaWxlLTgtXFx0bW9uX2NsaWVudC5vIGRlY29kZS5vIFxcXFxcXG4tLVxcbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlPTM9Q0ZMQUdTX2FtZHRwLXN0cmVhbS5vXFx0Oj0gLUkkKHNyYylcXG5zb3VuZC9maXJld2lyZS9NYWtlZmlsZS00LVxcbnNvdW5kL2ZpcmV3aXJlL01ha2VmaWxlOjU6c25kLWZpcmV3aXJlLWxpYi15IDo9IGxpYi5vIGlzby1yZXNvdXJjZXMubyBwYWNrZXRzLWJ1ZmZlci5vIFxcXFxcXG5zb3VuZC9maXJld2lyZS9NYWtlZmlsZS02LVxcdFxcdFxcdCBmY3AubyBjbXAubyBhbWR0cC1zdHJlYW0ubyBhbWR0cC1hbTgyNC5vXFxuLS1cXG50b29scy9paW8vQnVpbGQ9Mz1paW9fZXZlbnRfbW9uaXRvci15ICs9IGlpb19ldmVudF9tb25pdG9yLm8gaWlvX3V0aWxzLm9cXG50b29scy9paW8vQnVpbGQ6NDppaW9fZ2VuZXJpY19idWZmZXIteSArPSBpaW9fZ2VuZXJpY19idWZmZXIubyBpaW9fdXRpbHMub1xcbi0tXFxudG9vbHMvcGVyZi90ZXN0cy9CdWlsZD00NT1wZXJmLXRlc3QteSArPSBleHByLm9cXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkOjQ2OnBlcmYtdGVzdC15ICs9IGJhY2t3YXJkLXJpbmctYnVmZmVyLm9cXG50b29scy9wZXJmL3Rlc3RzL0J1aWxkLTQ3LXBlcmYtdGVzdC15ICs9IHNkdC5vXFxuLS1cXG50b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL01ha2VmaWxlPTIwPVRPT0xfT0JKUyA9IFxcXFxcXG4tLVxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGUtMjktXFx0dXRhc2NpaS5vXFxcXFxcbnRvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvTWFrZWZpbGU6MzA6XFx0dXRidWZmZXIub1xcXFxcXG50b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL01ha2VmaWxlLTMxLVxcdHV0Y2tzdW0ub1xcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MDAuMDcyOTkyNzMzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTI3NDgyOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJsb2NrIExheWVyIENoYW5nZXMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gc2V0IHVwIG15IGZ1enppbmcgZW52aXJvbm1lbnQgdG8gdGFyZ2V0IHRoaXMgbmV3IGJsb2NrIGxheWVyIGluZnJhc3RydWN0dXJlIGZvciBkZWZlcnJlZCBiaW8gY29tcGxldGlvbnMuICBJdCBzZWVtcyB0aGUgY3JpdGljYWwgY29tcG9uZW50LCBgQ09ORklHX0JVRkZFUl9IRUFEYCwgaXMgaW5kZWVkIHJlcXVpcmVkIGZvciBgZnMvYnVmZmVyLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDogYEJMT0NLYCwgYEJVRkZFUl9IRUFEYCwgYEZTX0lPTUFQYCwgYFhGU19GU2AsIGBFUk9GU19GU2AsIGFuZCBgRVJPRlNfRlNfWklQYC4gR29vZCwgdGhlIGJhc2UgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfQlVGRkVSX0hFQURgIGlzIHNlbGVjdGVkIGJ5IHNldmVyYWwgZmlsZXN5c3RlbXMgbGlrZSBgRVhUNF9GU2AsIGFuZCBgWEZTX0ZTYC4gU2ltaWxhcmx5IGBDT05GSUdfRlNfSU9NQVBgIGlzIHNlbGVjdGVkIGJ5IGZpbGVzeXN0ZW1zIGxpa2UgYFhGU19GU2AsIGFuZCBgRVhUNF9GU2AsIG1lYW5pbmcgbXkgY29uZmlnIGxpc3QgaXMgZ29vZCB0byBnby5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0LiBJIHNlZSB0aGF0IGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgYGlvbWFwX2FkZF90b19pb2VuZGAgYXJlIHRoZSB0d28gYmVzdCBjYW5kaWRhdGVzLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYGlvbWFwX2FkZF90b19pb2VuZGAgaXMgaW5kZWVkIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBUaGUgY29kZSBzaG93czpcblxuYGBgY1xuc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcblx0XHRsb2ZmX3QgcG9zLCBsb2ZmX3QgZW5kX3BvcywgdW5zaWduZWQgaW50IGRpcnR5X2xlbilcbmBgYFxuXG5BbmQgYF9fYmlvX2NvbXBsZXRlX2luX3Rhc2tgIGlzIGFsc28gZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIGxpa2UgdGhpczpcblxuYGBgY1xudm9pZCBfX2Jpb19jb21wbGV0ZV9pbl90YXNrKHN0cnVjdCBiaW8gKmJpbylcbmBgYFxuXG5JIGFsc28gbG9va2VkIGF0IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gYGJoX3N1Ym1pdGAgaXMgbm90IG1vZGlmaWVkLCBidXQgYF9fYmhfc3VibWl0YCBpcy4gQnV0IGBfX2JoX3N1Ym1pdGAgaXMgc3RhdGljLiBJbiBgZnMveGZzL3hmc19hb3BzLmNgLCBgeGZzX2lvZW5kX25lZWRzX3dxX2NvbXBsZXRpb25gIGlzIG1vZGlmaWVkIGJ1dCBpdCBpcyBzdGF0aWMuIEluIGBmcy9lcm9mcy96ZGF0YS5jYCwgYHpfZXJvZnNfZGVjb21wcmVzc19raWNrb2ZmYCBpcyBtb2RpZmllZCwgYnV0IGl0J3Mgc3RhdGljLlxuXG5gYmlvX2VuZGlvYCBpcyBtb2RpZmllZCwgYnV0IHRoYXQncyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGgsIHNvIGxldCdzIGF2b2lkIGl0LiBgYmlvc2V0X2luaXRgIGlzIHVudG91Y2hlZCwgYW5kIGBpbml0X2Jpb2AgaXMgYF9faW5pdGAuXG5cblNvIHRoZSBjZW50cmFsIGlkZWEgaXMgdGhpczogdGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgaW5mcmFzdHJ1Y3R1cmUgdG8gZGVmZXIgYmlvIGNvbXBsZXRpb25zIHVzaW5nIGEgcGVyLUNQVSB3b3JrcXVldWUgaW4gdGhlIGJsb2NrIGxheWVyLiBJdCdzIHRyaWdnZXJlZCBieSB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnLCBzZXQgaW4gYGZzL2J1ZmZlci5jYCBhbmQgYGZzL2lvbWFwL2lvZW5kLmNgIHdoZW4gYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIHRydWUsIGxpa2Ugd2l0aCBgUldGX0RPTlRDQUNIRWAgd3JpdGVzLiBUaGUgY29yZSBsb2dpYyByZXNpZGVzIGluIGBfX2Jpb19jb21wbGV0ZV9pbl90YXNrYCBhbmQgaXMgaW50ZWdyYXRlZCBpbnRvIGBiaW9fZW5kaW9gLiBUaGlzIG1lYW5zIGl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjay4gSXQncyByaXBlIGZvciBmdXp6aW5nIVxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgUldGX0RPTlRDQUNIRWAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm8sIGl0J3MgYSBmbGFnIGZvciBgcHdyaXRldjJgLlxuXG5JbiBzdW1tYXJ5LCBJIG5lZWQgdGhlIGZvbGxvd2luZyBjb25maWdzOiBgQkxPQ0tgLCBgQlVGRkVSX0hFQURgLCBgRlNfSU9NQVBgLCBgWEZTX0ZTYCwgYEVST0ZTX0ZTYCwgYW5kIGBFUk9GU19GU19aSVBgIHRvIHRhcmdldCB0aGVzZSBhcmVhcy4gT2theSwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGBFUk9GU19GU19aSVBgIGlzIGEgYm9vbCBvciB0cmlzdGF0ZS4gSSB3aWxsIGNoZWNrIHRoZSBgZnMvZXJvZnMvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTY4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjEyLjIwMDQ3ODY1NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDkwNDQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVJPRlNfRlNfWklQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL0tjb25maWc9OTg9Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiRVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiRVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfREVGTEFURVxcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVST0ZTIERFRkxBVEUgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE0NC1cXG5mcy9lcm9mcy9LY29uZmlnOjE0NTpjb25maWcgRVJPRlNfRlNfWklQX1pTVERcXG5mcy9lcm9mcy9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCJFUk9GUyBac3RhbmRhcmQgY29tcHJlc3NlZCBkYXRhIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE1NS1cXG5mcy9lcm9mcy9LY29uZmlnOjE1Njpjb25maWcgRVJPRlNfRlNfWklQX0FDQ0VMXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiRVJPRlMgaGFyZHdhcmUgZGVjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxMy42MzUzODc2MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MzAzNzIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEVST0ZTIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgRVJPRlNfRlNfWklQYC4uLiB5ZXAsIHRoYXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFuLCBubyBzdXJwcmlzZXMgdGhlcmUuIE5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHF1aWNrbHkgY29uZmlybSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZsYWdzLiBMZXQncyBzZWUuLi4gdGhlIG5leHQgbG9naWNhbCBjaGVjayBpcyBnb2luZyB0byBiZSBgRlNfSU9NQVBgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSByZW1lbWJlcmluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGNvbXByZXNzZWQgSS9PIGFuZCBkaXJlY3QgYWNjZXNzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBjb2RlYmFzZSBvciBkb2N1bWVudGF0aW9uIHRvIGF2b2lkIG1pc3NpbmcgYW4gaW1wb3J0YW50IGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk5NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjE2LjY4ODQyNzUzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTQ1ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjE4LjE3Mzg5MjEzNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI0NjAzMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIEludGVybmFscyoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgRlNfSU9NQVBgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCBxdWlja2x5LCBidXQgSSdtIG9wZXJhdGluZyBvbiB0aGF0IGFzc3VtcHRpb24gZm9yIHRoZSBtb21lbnQuIE5vdywgd2hlcmUgd2FzIHRoYXQgcmVsYXRlZCB0byBgQlVGRkVSX0hFQURgPyBMZXQgbWUgc2VlIHdoYXQgdGhhdCBkYXRhIHN0cnVjdHVyZSBob2xkcyB3aXRoaW4gaXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGludGVybmFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToyMS40OTg0OTc3MjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDE0NTUzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJVRkZFUl9IRUFEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjI9Y29uZmlnIEZTX1NUQUNLXFxuLS1cXG5mcy9LY29uZmlnLTI0LVxcbmZzL0tjb25maWc6MjU6Y29uZmlnIEJVRkZFUl9IRUFEXFxuZnMvS2NvbmZpZy0yNi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjIyLjk5OTk1NzE0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg3MTU3ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKlJlZmxlY3Rpbmcgb24gRGF0YSBTdHJ1Y3R1cmVzIGluIEtlcm5lbCBNZW1vcnkqKlxuXG5SaWdodCwgc28gYEJVRkZFUl9IRUFEYC4gQWJzb2x1dGVseSwgaXQncyBhIEJvb2xlYW4gdHlwZS4gU2ltcGxlIGVub3VnaCwgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBiYXNpY3MgYXJlIHBlcmZlY3RseSB1bmRlcnN0b29kLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHJlbGF0ZWQgbWVtb3J5IGxheW91dC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB3aGF0IGBCTE9DS2AgaXMgZGVmaW5lZCBhcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWluZCBvbiB3aGF0IHRoYXQgc3RydWN0dXJlIGhvbGRzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYEJVRkZFUl9IRUFEYC4gSXQncyBhIGZ1bmRhbWVudGFsIGVsZW1lbnQgb2YgdGhlIEkvTyBzeXN0ZW0sIHNvIGEgcXVpY2sgbWVudGFsIHJldmlldyB3aWxsIGJlIHdvcnRod2hpbGUuIFdlIG5lZWQgdG8gYmUgb24gdG9wIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ1LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MjYuMTg3MTE3NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjY5NjAwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWctNC0jXFxuYmxvY2svS2NvbmZpZzo1Om1lbnVjb25maWcgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXFxcIkVuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xcbmJsb2NrL0tjb25maWctMjgtXFxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXFxuYmxvY2svS2NvbmZpZy0zMC1cXHRib29sIFxcXCJMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cXG4tLVxcbmJsb2NrL0tjb25maWctMjE3LSMgZG8gbm90IHVzZSBpbiBuZXcgY29kZVxcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxcbmJsb2NrL0tjb25maWctMjE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MjcuNjE0MDg0MzQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjAyNzA3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyB0aGUgTG9naWNhbCBGbG93KipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgc3RhdGUgaW5kaWNhdGVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGJvb2xlYW4gdmFsdWUgbmFtZWQgYEJMT0NLYC4gU2ltcGxlIGVub3VnaC4gQnV0IEkgbmVlZCB0byBjb25maXJtIGl0cyByZWxhdGlvbiB0byB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCBgWEZTX0ZTYCBpcyBsaWtlbHkgdGhlIGtleS4gSSBuZWVkIHRvIG5vdyBjaGVjayB0aGUgc3RhdHVzIG9mIGBYRlNfRlNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgaW4gY29tYmluYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCB1dGlsaXNlIHRoZW0gdG8gY2hlY2sgZm9yIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI4MDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MTozMC40NzQzNTgxNTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjA2NjA2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy94ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3hmcy9LY29uZmlnOjI6Y29uZmlnIFhGU19GU1xcbmZzL3hmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlhGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjMxLjk5NTAyNTU5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU0MzAzNDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEZpbGVzeXN0ZW0gVHJpLVN0YXRlcyoqXG5cblJpZ2h0LCBzbyBgWEZTX0ZTYCBpcyBjb25maXJtZWQgYXMgYSB0cmlzdGF0ZSDigJMgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQncyBtYWtlIHN1cmUgaXQgaXMgaW4gZmFjdCB0cmlzdGF0ZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYEVST0ZTX0ZTYCBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAzNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjQ3LjUzODA2MzUyNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDE5MTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVJPRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvS2NvbmZpZy0yLVxcbmZzL2Vyb2ZzL0tjb25maWc6Mzpjb25maWcgRVJPRlNfRlNcXG5mcy9lcm9mcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNDktXFxuZnMvZXJvZnMvS2NvbmZpZzo1MDpjb25maWcgRVJPRlNfRlNfREVCVUdcXG5mcy9lcm9mcy9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIkVST0ZTIGRlYnVnZ2luZyBmZWF0dXJlXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy01OS1cXG5mcy9lcm9mcy9LY29uZmlnOjYwOmNvbmZpZyBFUk9GU19GU19YQVRUUlxcbmZzL2Vyb2ZzL0tjb25maWctNjEtXFx0Ym9vbCBcXFwiRVJPRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNzAtXFxuZnMvZXJvZnMvS2NvbmZpZzo3MTpjb25maWcgRVJPRlNfRlNfUE9TSVhfQUNMXFxuZnMvZXJvZnMvS2NvbmZpZy03Mi1cXHRib29sIFxcXCJFUk9GUyBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctODQtXFxuZnMvZXJvZnMvS2NvbmZpZzo4NTpjb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcXG5mcy9lcm9mcy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIkVST0ZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctOTctXFxuZnMvZXJvZnMvS2NvbmZpZzo5ODpjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcXG5mcy9lcm9mcy9LY29uZmlnLTk5LVxcdGJvb2wgXFxcIkZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTExLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTEyOmNvbmZpZyBFUk9GU19GU19aSVBcXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cXHRib29sIFxcXCJFUk9GUyBEYXRhIENvbXByZXNzaW9uIFN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTEyMS1cXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcXG5mcy9lcm9mcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMzQ6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTQ0LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTQ1OmNvbmZpZyBFUk9GU19GU19aSVBfWlNURFxcbmZzL2Vyb2ZzL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVST0ZTIFpzdGFuZGFyZCBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTU1LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTU2OmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE2OS1cXG5mcy9lcm9mcy9LY29uZmlnOjE3MDpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXFxuZnMvZXJvZnMvS2NvbmZpZy0xNzEtXFx0Ym9vbCBcXFwiRVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTc4LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTc5OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURfSElQUklcXG5mcy9lcm9mcy9LY29uZmlnLTE4MC1cXHRib29sIFxcXCJFUk9GUyBoaWdoIHByaW9yaXR5IHBlci1DUFUga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xODgtXFxuZnMvZXJvZnMvS2NvbmZpZzoxODk6Y29uZmlnIEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVcXG5mcy9lcm9mcy9LY29uZmlnLTE5MC1cXHRib29sIFxcXCJFUk9GUyBwYWdlIGNhY2hlIHNoYXJlIHN1cHBvcnQgKGV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjQ5LjEwMjI2MTExMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTExOTI4OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBMYXllciBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgRVJPRlNfRlNgIGlzIGluZGVlZCBhIHRyaXN0YXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kIHdoZW4gbG9va2luZyBhdCB0aGUgYnJvYWRlciBwaWN0dXJlIGhlcmUuIEkgc2VlIGEgZmV3IGtleSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZDogYEJMT0NLYCwgYEJVRkZFUl9IRUFEYCwgYEZTX0lPTUFQYCwgYFhGU19GU2AsIGBFUk9GU19GU2AsIGFuZCBgRVJPRlNfRlNfWklQYC4gVGhlc2UgYXJlIGxpa2VseSBhbGwgcmVsZXZhbnQgdG8gdGhlIHNjb3BlIG9mIHRoaXMgd29yay5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGEgZmV3IGNyaXRpY2FsIHN5bWJvbHMsIHNwZWNpZmljYWxseSBgX19iaW9fY29tcGxldGVfaW5fdGFza2AgYW5kIGBpb21hcF9hZGRfdG9faW9lbmRgLiBUaGUgbWFpbiB0aHJ1c3Qgb2YgdGhpcyBwYXRjaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0J3MgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdGhyb3VnaCBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIGFjdGl2YXRlZCBieSB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnLiBJIHNlZSB0aGF0IGZsYWcgaXMgc2V0IGluIGBmcy9idWZmZXIuY2AgYW5kIGBmcy9pb21hcC9pb2VuZC5jYCB3aGVuIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pYCBpcyB0cnVlLiBUaGF0IHN1Z2dlc3RzIHRoZXNlIGNoYW5nZXMgYXJlIHRpZWQgdG8gb3BlcmF0aW9ucyBsaWtlIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuXG5cblRoaXMgc3RyaWtlcyBtZSBhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFuZCBmaWxlc3lzdGVtIHdyaXRlYmFjayBwYXRocy4gVGhhdCdzIGEgcmVkIGZsYWcgZm9yIGZ1enppbmcsIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCB0aGVzZSBjb21wb25lbnRzIGFyZS4gVGhlc2UgY2hhbmdlcyBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgd2lkZS1yZWFjaGluZyBpbXBhY3QsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1enogdGFyZ2V0cy5cblxuSSBuZWVkIHRvIG1ha2UgYSBub3RlIGhlcmU7IHRoaXMgaXMgc29tZXRoaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMTYsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjU1LjYxNDE5Mjc5MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODI2Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiQlVGRkVSX0hFQURcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU19aSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Jpb19jb21wbGV0ZV9pbl90YXNrXCIsXG4gICAgXCJpb21hcF9hZGRfdG9faW9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGluZnJhc3RydWN0dXJlIGluIHRoZSBibG9jayBsYXllciBmb3IgZGVmZXJyaW5nIGJpbyBjb21wbGV0aW9ucyB0byB0YXNrIGNvbnRleHQgdmlhIGEgcGVyLUNQVSB3b3JrcXVldWUuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBCSU9fQ09NUExFVEVfSU5fVEFTSyBmbGFnLCB3aGljaCBpcyBzZXQgaW4gZnMvYnVmZmVyLmMgYW5kIGZzL2lvbWFwL2lvZW5kLmMgd2hlbiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pIGlzIHRydWUgKGUuZy4sIHZpYSBSV0ZfRE9OVENBQ0hFIHdyaXRlcykuIFRoZSBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIF9fYmlvX2NvbXBsZXRlX2luX3Rhc2sgYW5kIGludGVncmF0ZWQgaW50byBiaW9fZW5kaW8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciBhbmQgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aHMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJVRkZFUl9IRUFEXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfWklQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19iaW9fY29tcGxldGVfaW5fdGFza1wiLFxuICAgIFwiaW9tYXBfYWRkX3RvX2lvZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSBpbiB0aGUgYmxvY2sgbGF5ZXIgZm9yIGRlZmVycmluZyBiaW8gY29tcGxldGlvbnMgdG8gdGFzayBjb250ZXh0IHZpYSBhIHBlci1DUFUgd29ya3F1ZXVlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgQklPX0NPTVBMRVRFX0lOX1RBU0sgZmxhZywgd2hpY2ggaXMgc2V0IGluIGZzL2J1ZmZlci5jIGFuZCBmcy9pb21hcC9pb2VuZC5jIHdoZW4gZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSBpcyB0cnVlIChlLmcuLCB2aWEgUldGX0RPTlRDQUNIRSB3cml0ZXMpLiBUaGUgY29yZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBfX2Jpb19jb21wbGV0ZV9pbl90YXNrIGFuZCBpbnRlZ3JhdGVkIGludG8gYmlvX2VuZGlvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgYW5kIGZpbGVzeXN0ZW0gd3JpdGViYWNrIHBhdGhzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflows28gd[1] Phase: Succeeded StartedAt: 2026-07-31 16:42:07 +0000 UTC FinishedAt: 2026-07-31 16:42:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 16:42:07 +0000 UTC FinishedAt: 2026-07-31 16:42:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2] Phase: Succeeded StartedAt: 2026-07-31 16:42:07 +0000 UTC FinishedAt: 2026-07-31 20:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 16:42:07 +0000 UTC FinishedAt: 2026-07-31 20:29:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 16:42:07 +0000 UTC FinishedAt: 2026-07-31 16:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 16:42:07 +0000 UTC FinishedAt: 2026-07-31 16:42:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows28gd/series-workflows28gd-convert-artifact-823623365/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 16:42:17 +0000 UTC FinishedAt: 2026-07-31 17:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 16:42:17 +0000 UTC FinishedAt: 2026-07-31 17:01:28 +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:*96d87b72-eff7-49dc-a3ba-ce72a535925a,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-workflows28gd/series-workflows28gd-convert-artifact-823623365/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": "ec3f35e2-ab78-4398-b38b-20da330dc72e", "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-workflows28gd/series-workflows28gd-build-action-3625461099/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 16:42:17 +0000 UTC FinishedAt: 2026-07-31 17:01:18 +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:*96d87b72-eff7-49dc-a3ba-ce72a535925a,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-workflows28gd/series-workflows28gd-convert-artifact-823623365/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": "ec3f35e2-ab78-4398-b38b-20da330dc72e", "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-workflows28gd/series-workflows28gd-build-action-3625461099/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 17:01:28 +0000 UTC FinishedAt: 2026-07-31 17:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 17:01:28 +0000 UTC FinishedAt: 2026-07-31 17:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 17:01:28 +0000 UTC FinishedAt: 2026-07-31 17:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 17:01:28 +0000 UTC FinishedAt: 2026-07-31 17:01:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows28gd/series-workflows28gd-convert-artifact-2894653344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 17:01:38 +0000 UTC FinishedAt: 2026-07-31 17:03:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 17:01:38 +0000 UTC FinishedAt: 2026-07-31 17:03:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ec3f35e2-ab78-4398-b38b-20da330dc72e,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-workflows28gd/series-workflows28gd-build-action-3625461099/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-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 17:03:45 +0000 UTC FinishedAt: 2026-07-31 17:03:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 17:03:45 +0000 UTC FinishedAt: 2026-07-31 17:03:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 17:03:45 +0000 UTC FinishedAt: 2026-07-31 17:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 17:03:45 +0000 UTC FinishedAt: 2026-07-31 17:22:03 +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:*96d87b72-eff7-49dc-a3ba-ce72a535925a,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-workflows28gd/series-workflows28gd-convert-artifact-2894653344/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": "fce49dc4-331e-4901-b198-9257b669cc8f", "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-workflows28gd/series-workflows28gd-build-action-3567902044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 17:03:45 +0000 UTC FinishedAt: 2026-07-31 17:21:53 +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:*96d87b72-eff7-49dc-a3ba-ce72a535925a,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-workflows28gd/series-workflows28gd-convert-artifact-2894653344/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": "fce49dc4-331e-4901-b198-9257b669cc8f", "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-workflows28gd/series-workflows28gd-build-action-3567902044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 17:22:03 +0000 UTC FinishedAt: 2026-07-31 17:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 17:22:03 +0000 UTC FinishedAt: 2026-07-31 17:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 17:22:03 +0000 UTC FinishedAt: 2026-07-31 17:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 17:22:03 +0000 UTC FinishedAt: 2026-07-31 17:24:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fce49dc4-331e-4901-b198-9257b669cc8f,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-workflows28gd/series-workflows28gd-build-action-3567902044/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-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 17:24:10 +0000 UTC FinishedAt: 2026-07-31 20:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 17:24:10 +0000 UTC FinishedAt: 2026-07-31 20:29:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ec3f35e2-ab78-4398-b38b-20da330dc72e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fce49dc4-331e-4901-b198-9257b669cc8f,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-workflows28gd/series-workflows28gd-build-action-3625461099/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-workflows28gd/series-workflows28gd-build-action-3567902044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 17:24:10 +0000 UTC FinishedAt: 2026-07-31 17:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 17:24:10 +0000 UTC FinishedAt: 2026-07-31 17:24:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows28gd/series-workflows28gd-convert-artifact-2522313977/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 17:24:10 +0000 UTC FinishedAt: 2026-07-31 17:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 17:24:10 +0000 UTC FinishedAt: 2026-07-31 17:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 17:24:10 +0000 UTC FinishedAt: 2026-07-31 17:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 17:24:20 +0000 UTC FinishedAt: 2026-07-31 20:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows28gd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__bio_complete_in_task","iomap_add_to_ioend"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BUFFER_HEAD","FS_IOMAP","XFS_FS","EROFS_FS","EROFS_FS_ZIP"],"series_id":"d4b1d569-1c4c-4be3-95e2-281d21d22d14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 17:24:20 +0000 UTC FinishedAt: 2026-07-31 20:29:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ec3f35e2-ab78-4398-b38b-20da330dc72e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fce49dc4-331e-4901-b198-9257b669cc8f,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-workflows28gd/series-workflows28gd-build-action-3625461099/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-workflows28gd/series-workflows28gd-build-action-3567902044/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-workflows28gd/series-workflows28gd-convert-artifact-2522313977/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}