Name: series-workflownsp5q Phase: Succeeded StartedAt: 2026-07-10 13:46:44 +0000 UTC FinishedAt: 2026-07-10 18:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[0] Phase: Succeeded StartedAt: 2026-07-10 13:46:44 +0000 UTC FinishedAt: 2026-07-10 14:01:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 13:46:44 +0000 UTC FinishedAt: 2026-07-10 14:01:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c7bf81a726b51f1ba9f197491e1e4c8fdf317326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE", "NEED_PER_CPU_KM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c7bf81a726b51f1ba9f197491e1e4c8fdf317326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE", "NEED_PER_CPU_KM" ], "series_id": "bc9a88fa-689c-46ff-9e6e-408ee855e698" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "isolate_freepages_block", "fast_isolate_freepages", "compaction_alloc_noprof", "__split_folio_to_order", "pcpu_destroy_chunk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX0tNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDssCiAgICAmIzM0O3BjcHVfZGVzdHJveV9jaHVuayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cdTAwM2Vwcml2YXRlIGR1cmluZyBjb21wYWN0aW9uIGFuZCBhZGRzIHdhcm5pbmdzL2NoZWNrcyBmb3IgdW5leHBlY3RlZCBwYWdlLVx1MDAzZXByaXZhdGUgdmFsdWVzIGluIHRhaWwgcGFnZXMgZHVyaW5nIHNwbGl0dGluZyBhbmQgZnJlZWluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2E5ZDhlNjBmOTRmYTIwZTU0ZjE0NjQ4YjU4MDI5MWFmMTIyMjM2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE0OjAwOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggNGIyMzE4ZmFkNGViNTkuLjlmODEwNTVhMzU4ZWQxIDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC02NDUsNyAmIzQzOzY0NSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxuIFx0XHRpc29sYXRlZCA9IF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpO1xuIFx0XHRpZiAoIWlzb2xhdGVkKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcbiBcbiBcdFx0bnJfc2Nhbm5lZCAmIzQzOz0gaXNvbGF0ZWQgLSAxO1xuIFx0XHR0b3RhbF9pc29sYXRlZCAmIzQzOz0gaXNvbGF0ZWQ7XG5AQCAtMTYxOCw3ICYjNDM7MTYxNyw2IEBAIHN0YXRpYyB2b2lkIGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4gXHRcdC8qIElzb2xhdGUgdGhlIHBhZ2UgaWYgYXZhaWxhYmxlICovXG4gXHRcdGlmIChwYWdlKSB7XG4gXHRcdFx0aWYgKF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpKSB7XG4tXHRcdFx0XHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcbiBcdFx0XHRcdG5yX2lzb2xhdGVkID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHRcdFx0XHRucl9zY2FubmVkICYjNDM7PSBucl9pc29sYXRlZCAtIDE7XG4gXHRcdFx0XHR0b3RhbF9pc29sYXRlZCAmIzQzOz0gbnJfaXNvbGF0ZWQ7XG5AQCAtMTg0Nyw3ICYjNDM7MTg0NSw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhXG4gXHRcdHNpemUgXHUwMDNlXHUwMDNlPSAxO1xuIFxuIFx0XHRsaXN0X2FkZChcdTAwMjZmcmVlcGFnZVtzaXplXS5scnUsIFx1MDAyNmNjLVx1MDAzZWZyZWVwYWdlc1tzdGFydF9vcmRlcl0pO1xuLVx0XHRzZXRfcGFnZV9wcml2YXRlKFx1MDAyNmZyZWVwYWdlW3NpemVdLCBzdGFydF9vcmRlcik7XG4gXHR9XG4gXHRkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGZiMmQ3ZGQxN2RlMGNmLi5lYTA0NDVkNmMxN2YwMSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zNTkxLDYgJiM0MzszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBmb2xpby1cdTAwM2VtYXBwaW5nO1xuIFx0XHRuZXdfZm9saW8tXHUwMDNlaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCAmIzQzOyBpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIHBhZ2UtXHUwMDNlcHJpdmF0ZSBzaG91bGQgbm90IGJlIHNldCBpbiB0YWlsIHBhZ2VzLiBXYXJuIG9uY2VcbiYjNDM7XHRcdCAqIGlmIHByaXZhdGUgaXMgdW5leHBlY3RlZGx5IHNldC4gRG8gaXQgYmVmb3JlIHN3YXAudmFsIGFzc2lnbm1lbnRcbiYjNDM7XHRcdCAqIHNpbmNlIHByaXZhdGUgb3ZlcmxhcHMgd2l0aCBzd2FwLnZhbC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UobmV3X2ZvbGlvLVx1MDAzZXByaXZhdGUsIG5ld19oZWFkKTtcbiYjNDM7XG4gXHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG4gXHRcdFx0bmV3X2ZvbGlvLVx1MDAzZXN3YXAudmFsID0gZm9saW8tXHUwMDNlc3dhcC52YWwgJiM0MzsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggODQxYzI3NjExNjI3ZTAuLjM5ODc0MWE4YWIwOTIzIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTc0MSw3ICYjNDM7NzQxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbiB7XG4gXHR0YWlsLVx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XG4gXHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XG4tXHRzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRSh0YWlsLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYTYzNzMzZGFjNjU5ZTMuLmNjNDVkZmU4OWM3NmJhIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0xMzc3LDE1ICYjNDM7MTM3NywyMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gI2VuZGlmXG4gXHRcdH1cbiBcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnRhaWxfcGFnZSA9IHBhZ2UgJiM0MzsgaTtcbiYjNDM7XG4gXHRcdFx0aWYgKGNvbXBvdW5kKVxuLVx0XHRcdFx0YmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgJiM0MzsgaSk7XG4mIzQzO1x0XHRcdFx0YmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHRhaWxfcGFnZSk7XG4gXHRcdFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xuLVx0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSAmIzQzOyBpKSkge1xuJiM0MztcdFx0XHRcdGlmIChmcmVlX3BhZ2VfaXNfYmFkKHRhaWxfcGFnZSkpIHtcbiYjNDM7XHRcdFx0XHRcdGJhZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmICh0YWlsX3BhZ2UtXHUwMDNlcHJpdmF0ZSkge1xuJiM0MztcdFx0XHRcdFx0YmFkX3BhZ2UodGFpbF9wYWdlLCBcJiMzNDtub256ZXJvIHByaXZhdGVcJiMzNDspO1xuIFx0XHRcdFx0XHRiYWQmIzQzOyYjNDM7O1xuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4tXHRcdFx0KHBhZ2UgJiM0MzsgaSktXHUwMDNlZmxhZ3MuZiBcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XG4mIzQzO1x0XHRcdHRhaWxfcGFnZS1cdTAwM2VmbGFncy5mIFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcbiBcdFx0fVxuIFx0fVxuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUta20uYyBiL21tL3BlcmNwdS1rbS5jXG5pbmRleCA0ZWZhNzRhNDk1Y2I2Yi4uN2ZmZTg0YWRhZGI5ZDkgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUta20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LWttLmNcbkBAIC05NCw4ICYjNDM7OTQsMTUgQEAgc3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbiBcdHBjcHVfc3RhdHNfY2h1bmtfZGVhbGxvYygpO1xuIFx0dHJhY2VfcGVyY3B1X2Rlc3Ryb3lfY2h1bmsoY2h1bmstXHUwMDNlYmFzZV9hZGRyKTtcbiBcbi1cdGlmIChjaHVuay1cdTAwM2VkYXRhKVxuJiM0MztcdGlmIChjaHVuay1cdTAwM2VkYXRhKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZXMgPSAoc3RydWN0IHBhZ2UgKiljaHVuay1cdTAwM2VkYXRhO1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0LyogY2xlYXIgY2h1bmsgaW5mbyBmcm9tIGVhY2ggcGFnZSBiZWZvcmUgZnJlZSB0aGVtICovXG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHBjcHVfc2V0X3BhZ2VfY2h1bmsocGFnZXMgJiM0MzsgaSwgTlVMTCk7XG4gXHRcdF9fZnJlZV9wYWdlcyhjaHVuay1cdTAwM2VkYXRhLCBvcmRlcl9iYXNlXzIobnJfcGFnZXMpKTtcbiYjNDM7XHR9XG4gXHRwY3B1X2ZyZWVfY2h1bmsoY2h1bmspO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O05FRURfUEVSX0NQVV9LTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrJiMzNDssCiAgICAmIzM0O2Zhc3RfaXNvbGF0ZV9mcmVlcGFnZXMmIzM0OywKICAgICYjMzQ7Y29tcGFjdGlvbl9hbGxvY19ub3Byb2YmIzM0OywKICAgICYjMzQ7X19zcGxpdF9mb2xpb190b19vcmRlciYjMzQ7LAogICAgJiMzNDtwY3B1X2Rlc3Ryb3lfY2h1bmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGluIHBhZ2UgY29tcGFjdGlvbiwgdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGVyLWNwdSBrZXJuZWwgbWVtb3J5IGNodW5rIGRlc3RydWN0aW9uLiBJdCByZW1vdmVzIHRoZSBzZXR0aW5nIG9mIHBhZ2UtXHUwMDNlcHJpdmF0ZSBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkcyB3YXJuaW5ncy9jaGVja3MgZm9yIHVuZXhwZWN0ZWQgcGFnZS1cdTAwM2Vwcml2YXRlIHZhbHVlcyBpbiB0YWlsIHBhZ2VzIGR1cmluZyBzcGxpdHRpbmcgYW5kIGZyZWVpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E5ZDhlNjBmOTRmYTIwZTU0ZjE0NjQ4YjU4MDI5MWFmMTIyMjM2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE0OjAwOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IDRiMjMxOGZhZDRlYjU5Li45ZjgxMDU1YTM1OGVkMSAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uYwpAQCAtNjQ1LDcgJiM0Mzs2NDUsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywKIAkJaXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTsKIAkJaWYgKCFpc29sYXRlZCkKIAkJCWJyZWFrOwotCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTsKIAogCQlucl9zY2FubmVkICYjNDM7PSBpc29sYXRlZCAtIDE7CiAJCXRvdGFsX2lzb2xhdGVkICYjNDM7PSBpc29sYXRlZDsKQEAgLTE2MTgsNyAmIzQzOzE2MTcsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKQogCQkvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqLwogCQlpZiAocGFnZSkgewogCQkJaWYgKF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpKSB7Ci0JCQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7CiAJCQkJbnJfaXNvbGF0ZWQgPSAxICZsdDsmbHQ7IG9yZGVyOwogCQkJCW5yX3NjYW5uZWQgJiM0Mzs9IG5yX2lzb2xhdGVkIC0gMTsKIAkJCQl0b3RhbF9pc29sYXRlZCAmIzQzOz0gbnJfaXNvbGF0ZWQ7CkBAIC0xODQ3LDcgJiM0MzsxODQ1LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGEKIAkJc2l6ZSAmZ3Q7Jmd0Oz0gMTsKIAogCQlsaXN0X2FkZCgmYW1wO2ZyZWVwYWdlW3NpemVdLmxydSwgJmFtcDtjYy0mZ3Q7ZnJlZXBhZ2VzW3N0YXJ0X29yZGVyXSk7Ci0JCXNldF9wYWdlX3ByaXZhdGUoJmFtcDtmcmVlcGFnZVtzaXplXSwgc3RhcnRfb3JkZXIpOwogCX0KIAlkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGZiMmQ3ZGQxN2RlMGNmLi5lYTA0NDVkNmMxN2YwMSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0zNTkxLDYgJiM0MzszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlciwKIAkJbmV3X2ZvbGlvLSZndDttYXBwaW5nID0gZm9saW8tJmd0O21hcHBpbmc7CiAJCW5ld19mb2xpby0mZ3Q7aW5kZXggPSBmb2xpby0mZ3Q7aW5kZXggJiM0MzsgaTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIHBhZ2UtJmd0O3ByaXZhdGUgc2hvdWxkIG5vdCBiZSBzZXQgaW4gdGFpbCBwYWdlcy4gV2FybiBvbmNlCiYjNDM7CQkgKiBpZiBwcml2YXRlIGlzIHVuZXhwZWN0ZWRseSBzZXQuIERvIGl0IGJlZm9yZSBzd2FwLnZhbCBhc3NpZ25tZW50CiYjNDM7CQkgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuCiYjNDM7CQkgKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRV9QQUdFKG5ld19mb2xpby0mZ3Q7cHJpdmF0ZSwgbmV3X2hlYWQpOwomIzQzOwogCQlpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKQogCQkJbmV3X2ZvbGlvLSZndDtzd2FwLnZhbCA9IGZvbGlvLSZndDtzd2FwLnZhbCAmIzQzOyBpOwogCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA4NDFjMjc2MTE2MjdlMC4uMzk4NzQxYThhYjA5MjMgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtNzQxLDcgJiM0Mzs3NDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLAogewogCXRhaWwtJmd0O21hcHBpbmcgPSBUQUlMX01BUFBJTkc7CiAJc2V0X2NvbXBvdW5kX2hlYWQodGFpbCwgaGVhZCwgb3JkZXIpOwotCXNldF9wYWdlX3ByaXZhdGUodGFpbCwgMCk7CiYjNDM7CVZNX1dBUk5fT05fT05DRSh0YWlsLSZndDtwcml2YXRlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCwKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBhNjM3MzNkYWM2NTllMy4uY2M0NWRmZTg5Yzc2YmEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEzNzcsMTUgJiM0MzsxMzc3LDIzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSwKICNlbmRpZgogCQl9CiAJCWZvciAoaSA9IDE7IGkgJmx0OyAoMSAmbHQ7Jmx0OyBvcmRlcik7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnRhaWxfcGFnZSA9IHBhZ2UgJiM0MzsgaTsKJiM0MzsKIAkJCWlmIChjb21wb3VuZCkKLQkJCQliYWQgJiM0Mzs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgcGFnZSAmIzQzOyBpKTsKJiM0MzsJCQkJYmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHRhaWxfcGFnZSk7CiAJCQlpZiAoaXNfY2hlY2tfcGFnZXNfZW5hYmxlZCgpKSB7Ci0JCQkJaWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSAmIzQzOyBpKSkgewomIzQzOwkJCQlpZiAoZnJlZV9wYWdlX2lzX2JhZCh0YWlsX3BhZ2UpKSB7CiYjNDM7CQkJCQliYWQmIzQzOyYjNDM7OwomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCX0KJiM0MzsKJiM0MzsJCQkJaWYgKHRhaWxfcGFnZS0mZ3Q7cHJpdmF0ZSkgewomIzQzOwkJCQkJYmFkX3BhZ2UodGFpbF9wYWdlLCAmIzM0O25vbnplcm8gcHJpdmF0ZSYjMzQ7KTsKIAkJCQkJYmFkJiM0MzsmIzQzOzsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQotCQkJKHBhZ2UgJiM0MzsgaSktJmd0O2ZsYWdzLmYgJmFtcDs9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7CiYjNDM7CQkJdGFpbF9wYWdlLSZndDtmbGFncy5mICZhbXA7PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOwogCQl9CiAJfQogCWlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUta20uYyBiL21tL3BlcmNwdS1rbS5jCmluZGV4IDRlZmE3NGE0OTVjYjZiLi43ZmZlODRhZGFkYjlkOSAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LWttLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LWttLmMKQEAgLTk0LDggJiM0Mzs5NCwxNSBAQCBzdGF0aWMgdm9pZCBwY3B1X2Rlc3Ryb3lfY2h1bmsoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQogCXBjcHVfc3RhdHNfY2h1bmtfZGVhbGxvYygpOwogCXRyYWNlX3BlcmNwdV9kZXN0cm95X2NodW5rKGNodW5rLSZndDtiYXNlX2FkZHIpOwogCi0JaWYgKGNodW5rLSZndDtkYXRhKQomIzQzOwlpZiAoY2h1bmstJmd0O2RhdGEpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKWNodW5rLSZndDtkYXRhOwomIzQzOwkJaW50IGk7CiYjNDM7CiYjNDM7CQkvKiBjbGVhciBjaHVuayBpbmZvIGZyb20gZWFjaCBwYWdlIGJlZm9yZSBmcmVlIHRoZW0gKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJcGNwdV9zZXRfcGFnZV9jaHVuayhwYWdlcyAmIzQzOyBpLCBOVUxMKTsKIAkJX19mcmVlX3BhZ2VzKGNodW5rLSZndDtkYXRhLCBvcmRlcl9iYXNlXzIobnJfcGFnZXMpKTsKJiM0MzsJfQogCXBjcHVfZnJlZV9jaHVuayhjaHVuayk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBkaXZlcyBkZWVwIGludG8ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgc2V2ZXJhbCBjcml0aWNhbCBmaWxlczogYG1tL2NvbXBhY3Rpb24uY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIGBtbS9wZXJjcHUta20uY2AuIFJpZ2h0IGF3YXksIHRoaXMgc2lnbmFscyB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSByZW1vdmFsIG9mIGBzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKWAgaW4gYG1tL2NvbXBhY3Rpb24uY2AsIHdoaWNoIGlzIGEgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyB0aGUgdXNlIG9mIHRoZSBgcHJpdmF0ZWAgZmllbGQgb2YgYSBwYWdlIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKVGhlcmUmIzM5O3MgYWxzbyBhIGBWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tJmd0O3ByaXZhdGUsIG5ld19oZWFkKWAgYWRkZWQgaW4gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIGh1Z2UgcGFnZSBzcGxpdHRpbmcuIEZ1cnRoZXJtb3JlLCBJIHNlZSBjaGFuZ2VzIHRvIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGluIGBtbS9pbnRlcm5hbC5oYCwgd2hlcmUgYHNldF9wYWdlX3ByaXZhdGUodGFpbCwgMClgIGlzIGNoYW5nZWQgdG8gYFZNX1dBUk5fT05fT05DRSh0YWlsLSZndDtwcml2YXRlKWAuIEFuZCBhIG5ldyBjaGVjayBmb3IgYHRhaWxfcGFnZS0mZ3Q7cHJpdmF0ZWAgaXMgYWRkZWQgaW4gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBpcyBhbGwgcG9pbnRpbmcgdG8gYSBtb2RpZmllZCBsb2dpYyBhcm91bmQgY2xlYXJpbmcgb3IgdmFsaWRhdGluZyBwYWdlIHByaXZhdGUgZGF0YS4gRmluYWxseSwgdGhlIHBhdGNoIGNsZWFycyBjaHVuayBpbmZvIGZyb20gZWFjaCBwYWdlIGJlZm9yZSBmcmVlaW5nIHRoZW0gaW4gYHBjcHVfZGVzdHJveV9jaHVua2AgaW4gYG1tL3BlcmNwdS1rbS5jYC4KCkNsZWFybHksIHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgdGVzdGluZyB0aGlzIGNoYW5nZSB0aG9yb3VnaGx5LiBJIG5lZWQgdG8gYmUgZm9jdXNlZCBvbiBzcGVjaWZpYyBzeW1ib2xzIGxpa2UgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAsIGFuZCBgcGNwdV9kZXN0cm95X2NodW5rYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQuCgpXYWl0LCBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgPyBUaGF0JiMzOTtzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIHRoYXQgY2hhbmdlIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AgYW5kIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCBhcmUgYWxzbyBnb2luZyB0byBiZSBmcmVxdWVudGx5IHVzZWQgZHVyaW5nIGNvbXBhY3Rpb24uIFRoZXNlIGFyZSBoaWdoLXByaW9yaXR5IHRlc3QgcG9pbnRzLgoKTm93IEkgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBtbS9jb21wYWN0aW9uLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19DT01QQUNUSU9OYCwgd2hpY2ggSSBrbm93LCBidXQgaXQmIzM5O3Mgd29ydGggYSByZWZyZXNoZXIuIGBtbS9odWdlX21lbW9yeS5jYCBpcyBkcml2ZW4gYnkgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgbW0vcGVyY3B1LWttLmNgIGRlcGVuZHMgb24gYENPTkZJR19ORUVEX1BFUl9DUFVfS01gLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBzZXR0aW5nIHVwIHRoZSByaWdodCB0ZXN0IGVudmlyb25tZW50LiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBvZiBgbW0vcGVyY3B1LWttLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyY3B1LWttLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgTW9kdWxlIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCB3aGVyZSBgcGVyY3B1LWttLm9gIGlzIGJlaW5nIGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb2JqZWN0IGZpbGVzLiBJIGtub3cgSSYjMzk7dmUgdXN1YWxseSBmb3VuZCB0aGVzZSB0eXBlcyBvZiBtb2R1bGVzIHdpdGhpbiBhIE1ha2VmaWxlIGluIHRoZSByZWxldmFudCBzdWJkaXJlY3RvcnksIHNvIHRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbXkgc2VhcmNoLiBUaW1lIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBNYWtlZmlsZSBoYXMgdG8gc2F5Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHUta20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSW5jbHVzaW9uKioKCkhtbSwgbm93IHRoYXQgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMsIGlzIGBwZXJjcHUta20uY2AgYWN0dWFsbHkgYmVpbmcgaW1wbGljaXRseSBicm91Z2h0IGluIHRocm91Z2ggYG1tL3BlcmNwdS5jYD8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkuIElmIGl0JiMzOTtzIGluY2x1ZGVkIHdpdGhpbiB0aGF0IG1vZHVsZSwgaXQgY291bGQgY2hhbmdlIG15IGFuYWx5c2lzIGNvbXBsZXRlbHkuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbmNsdWRlIHBhdGhzIGFuZCBhbnkgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0byBiZSBjZXJ0YWluLiBBIGZhbHNlIGFzc3VtcHRpb24gaGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSB2ZXJ5IHdyb25nIHBhdGguIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHUta20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGVyY3B1LWttLmMtMi0vKlxubW0vcGVyY3B1LWttLmM6MzogKiBtbS9wZXJjcHUta20uYyAtIGtlcm5lbCBtZW1vcnkgYmFzZWQgY2h1bmsgYWxsb2NhdGlvblxubW0vcGVyY3B1LWttLmMtNC0gKlxuLS1cbm1tL3BlcmNwdS1rbS5jLTEwLSAqXG5tbS9wZXJjcHUta20uYzoxMTogKiBUbyB1c2UgcGVyY3B1LWttLFxubW0vcGVyY3B1LWttLmMtMTItICpcbi0tXG5tbS9wZXJjcHUta20uYy0yNS0gKiAgIGtlcm5lbCBtZW1vcnkgYmxvY2sgdXNpbmcgYWxsb2NfcGFnZXMoKSwgbWVtb3J5IHdpbGwgYmUgd2FzdGVkIGlmXG5tbS9wZXJjcHUta20uYzoyNjogKiAgIGNodW5rIHNpemUgaXMgbm90IGFsaWduZWQuICBwZXJjcHUta20gY29kZSB3aWxsIHdoaW5lIGFib3V0IGl0LlxubW0vcGVyY3B1LWttLmMtMjctICovXG4tLVxubW0vcGVyY3B1LmM9MTU3Nj1zdGF0aWMgaW50IF9faW5pdCBwY3B1X3ZlcmlmeV9hbGxvY19pbmZvKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcbi0tXG5tbS9wZXJjcHUuYy0xNTc4LSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNXG5tbS9wZXJjcHUuYzoxNTc5OiNpbmNsdWRlIFwmIzM0O3BlcmNwdS1rbS5jXCYjMzQ7XG5tbS9wZXJjcHUuYy0xNTgwLSNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgTWVudGFsIEF1ZGl0KioKClJpZ2h0LCBzbyBgQ09ORklHX05FRURfUEVSX0NQVV9LTWAgaGFzIGNvbWUgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3ksIG9yIGF0IGxlYXN0IGEgc3Ryb25nIGNvbnNpZGVyYXRpb24sIGluIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSB0eXBpY2FsIHBhaXJpbmdzPyBPa2F5LCBmaXJzdCB0aGluZ3MgdGhhdCBzcHJpbmcgdG8gbWluZCBhcmUgYENPTkZJR19DT01QQUNUSU9OYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBob3cgdGhvc2UgYXJlIGNvbm5lY3RlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBwZXItQ1BVIGFsbG9jYXRpb25zLiBJcyBgQ09ORklHX05FRURfUEVSX0NQVV9LTWAgcHVsbGVkIGluIGJ5IGVpdGhlciBvZiB0aG9zZSwgb3IgZG9lcyBpdCAqcmVxdWlyZSogdGhlbT8gT3IgaXMgaXQgbW9yZSBvZiBhIGNvbXBhdGliaWxpdHkgY29uY2VybiwgZW5zdXJpbmcgdGhleSBwbGF5IG5pY2VseSB0b2dldGhlcj8gSSBuZWVkIHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHRyYWRlLW9mZnMuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHdlIGxvb2tpbmcgZm9yIGluY3JlYXNlZCBtZW1vcnkgdXRpbGl6YXRpb24/IFJlZHVjZWQgZnJhZ21lbnRhdGlvbj8gU3RhYmlsaXR5PyBNeSBtZW50YWwgbW9kZWwgbmVlZHMgdG8gaW5zdGFudGx5IGNhbGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHJlbWVtYmVyIHdoYXQgZWFjaCBjb25maWd1cmF0aW9uIGZsYWcgYWZmZWN0cy4gSXQmIzM5O3MgYSBxdWljayBtZW50YWwgcmV2aWV3IHRvIGRldGVybWluZSBpZiB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBuZXcgc2V0dGluZywgb3IgaWYgdGhpcyB3aWxsIGhhdmUgc29tZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqTWFrZWZpbGUgQ29tcGFjdGlvbiBDaGVjayoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjb21wYWN0aW9uLm9gIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgY3VycmVudCBgbW1gIG1vZHVsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIG9iamVjdCBmaWxlcyB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgbWFrZWZpbGUgdG8gc2VlIGlmIGBjb21wYWN0aW9uLm9gIGlzIGV2ZW4gcHJlc2VudC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCYjMzk7cyBwdXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb24ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG5tbS9NYWtlZmlsZTo1NjpcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGUtNTctXHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIENvbXBhY3Rpb24gT2JqZWN0IENvbXBpbGF0aW9uKioKCkhtbSwgaXQgc2VlbXMgdGhhdCBgY29tcGFjdGlvbi5vYCBpcyBjb25zaXN0ZW50bHkgYmVpbmcgYnVpbHQsIHdoaWNoIGlzIHVuZXhwZWN0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgZGVwZW5kZW5jeSBvciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGV4YW1pbmUgd2hldGhlciBgQ09ORklHX0NPTVBBQ1RJT05gIHBsYXlzIGEgcm9sZS4gU2luY2UgYGNvbXBhY3Rpb24ub2AgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBtbS9jb21wYWN0aW9uLmNgIGZpbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgYCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoaXMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhlIGNvbXBpbGF0aW9uIG9mIGBjb21wYWN0aW9uLm9gIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBgQ09ORklHX0NPTVBBQ1RJT05gIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyB3aWxsIHRoZW4gY2xhcmlmeSB3aGV0aGVyIHRoZSBidWlsZCBpcyBoYXBwZW5pbmcgY29ycmVjdGx5LCBvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYy0yOS1cbm1tL2NvbXBhY3Rpb24uYzozMDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMS0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz02MD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjItXG5tbS9jb21wYWN0aW9uLmM6NjM6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTkyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTE2LVxubW0vY29tcGFjdGlvbi5jOjExNzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0xMTgtXG4tLVxubW0vY29tcGFjdGlvbi5jPTQ5MT1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vY29tcGFjdGlvbi5jLTQ5NC19XG5tbS9jb21wYWN0aW9uLmM6NDk1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xubW0vY29tcGFjdGlvbi5jLTQ5Ni1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MTMzNz1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vY29tcGFjdGlvbi5jLTEzNzItXG5tbS9jb21wYWN0aW9uLmM6MTM3MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTM3NS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzM1MT1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzM1Mi1cbm1tL2NvbXBhY3Rpb24uYzozMzUzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjUzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29tcGFjdGlvbiBhbmQgSHVnZSBQYWdlcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIGRlZmluaXRlbHkgYWN0aXZlLiBHb29kLCBnb29kLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gbm93IGlzOiBob3cgZG9lcyB0aGlzIGludGVyYWN0IHdpdGggYGh1Z2VfbWVtb3J5LmNgPyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb21wYWN0aW9uLCB3aGljaCBhaW1zIHRvIGNvbnNvbGlkYXRlIGZyZWUgbWVtb3J5IHJlZ2lvbnMsIGFuZCBodWdlIHBhZ2VzLCB3aGljaCBhcmUgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbXBhY3Rpb24gbWVjaGFuaXNtcyBhcmUgYXdhcmUgb2YsIGFuZCBhcHByb3ByaWF0ZWx5IGhhbmRsZSwgaHVnZSBwYWdlIGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zLiBBcmUgd2UgcnVubmluZyBpbnRvIGZyYWdtZW50YXRpb24gaXNzdWVzIHdpdGhpbiBodWdlIHBhZ2UgcmVnaW9ucyB0aGF0IGNvbXBhY3Rpb24gY291bGQgYWxsZXZpYXRlPyBPciwgY29udmVyc2VseSwgaXMgY29tcGFjdGlvbiBwb3RlbnRpYWxseSAqZGlzcnVwdGluZyogdGhlIGNvbnRpZ3VvdXMgbWVtb3J5IHJlcXVpcmVkIGZvciBodWdlIHBhZ2VzLCBhbmQgaWYgc28sIGhvdz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGFnZSBhbGxvY2F0b3IsIHRoZSBOVU1BIGJhbGFuY2luZywgYW5kIHRoZSBjb21wYWN0aW9uIGNvZGUgcGF0aHMgdG8gYmUgY2VydGFpbiB3ZSBhcmUgZ2V0dGluZyB0aGUgcGVyZm9ybWFuY2Ugd2Ugd2FudC4gVGltZSB0byBzdGFydCB0cmFjaW5nIHNvbWUgY2FsbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gc2VlbXMgdG8gaGF2ZSBmbGFnZ2VkIHRoZSBpbXBvcnRhbmNlIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyBnb3QgaXQuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgSSYjMzk7bSBrZWVwaW5nIGluIG1pbmQuIEJ1dCwgd2hhdCBhYm91dCBgQ09ORklHX05FRURfUEVSX0NQVV9LTWA/IEl0JiMzOTtzIGJlZW4gcmF0dGxpbmcgYXJvdW5kIGluIG15IGhlYWQsIHNpbmNlIGl04oCZcyB1c3VhbGx5IGF1dG8tc2VsZWN0ZWQgYnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgcmlnaHQ/IFRvIGNsYXJpZnkgaXRzIHJlbGV2YW5jZSBoZXJlLCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGBhcmNoL2AgZGlyZWN0b3JpZXMuIEkmIzM5O2xsIHNlYXJjaCB0aG9zZSBhbmQgZmluZCBvdXQgd2hlcmUgYE5FRURfUEVSX0NQVV9LTWAgaXMgYmVpbmcgdXNlZCBhbmQgaG93IGFyY2hpdGVjdHVyZXMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhpcyBzZXR0aW5nLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBjbGFyaXR5IGFuZCBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORUVEX1BFUl9DUFVfS00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYE5FRURfUEVSX0NQVV9LTWAgRGVwZW5kZW5jeSoqCgpPa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHJlY2FsbCBlbmNvdW50ZXJpbmcgYE5FRURfUEVSX0NQVV9LTWAgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQsIG9yIG1heWJlIGV2ZW4gY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0IG1lIGxvb2sgaW4gdGhlIGBpbml0L0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AgZmlsZXMuIFRob3NlIGFyZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2VzIHRoaXMgZGVwZW5kZW5jeSBpcyBkZWZpbmVkLCBvciBhdCBsZWFzdCB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgaXRzIGV4YWN0IGxvY2F0aW9uIG9yIGhpbnRzIGFib3V0IHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtYXkgZGVwZW5kIG9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcDsgSSBjYW4mIzM5O3QgcHJvY2VlZCBjb25maWRlbnRseSB1bnRpbCBJIGhhdmUgYSBoYW5kbGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVFRF9QRVJfQ1BVX0tNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X3ZtYWxsb2MuYz0zMTY9cGNwdV9hbGxvY190ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTMxOC1cdGludCBydiA9IDA7XG5saWIvdGVzdF92bWFsbG9jLmM6MzE5OiNpZm5kZWYgQ09ORklHX05FRURfUEVSX0NQVV9LTVxubGliL3Rlc3Rfdm1hbGxvYy5jLTMyMC1cdHZvaWQgX19wZXJjcHUgKipwY3B1O1xuLS1cbm1tL0tjb25maWc9MTA0ND1jb25maWcgQVJDSF9NT0RVTEVfTkVFRFNfV0VBS19QRVJfQ1BVXG4tLVxubW0vS2NvbmZpZy0xMDQ5LSNcbm1tL0tjb25maWc6MTA1MDpjb25maWcgTkVFRF9QRVJfQ1BVX0tNXG5tbS9LY29uZmlnLTEwNTEtXHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxuLS1cbm1tL0tjb25maWc9MTE2OT1jb25maWcgREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVFxuLS1cbm1tL0tjb25maWctMTE3MS1cdGRlcGVuZHMgb24gU1BBUlNFTUVNXG5tbS9LY29uZmlnOjExNzI6XHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cbm1tL0tjb25maWctMTE3My1cdGRlcGVuZHMgb24gNjRCSVRcbi0tXG5tbS9wZXJjcHUta20uYy0xMi0gKlxubW0vcGVyY3B1LWttLmM6MTM6ICogLSBkZWZpbmUgQ09ORklHX05FRURfUEVSX0NQVV9LTSBmcm9tIHRoZSBhcmNoIEtjb25maWcuXG5tbS9wZXJjcHUta20uYy0xNC0gKlxuLS1cbm1tL3BlcmNwdS5jPTE1NzY9c3RhdGljIGludCBfX2luaXQgcGNwdV92ZXJpZnlfYWxsb2NfaW5mbyhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSk7XG5tbS9wZXJjcHUuYy0xNTc3LVxubW0vcGVyY3B1LmM6MTU3ODojaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9LTVxubW0vcGVyY3B1LmMtMTU3OS0jaW5jbHVkZSBcJiMzNDtwZXJjcHUta20uY1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIGZvciBUYXJnZXRlZCBQcm9maWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBORUVEX1BFUl9DUFVfS01gLiBJdCByZWxpZXMgb24gYCFTTVAgfHwgIU1NVWAsIHdoaWNoIG1ha2VzIGl0IHVuc3VpdGFibGUgZm9yIHN0YW5kYXJkIHNldHVwcyBsaWtlIHg4Nl82NCB3aXRoIFNNUCBhbmQgTU1VIGVuYWJsZWQuIE5vIHBvaW50IGluIHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgb24gaXQuIFdlIGVpdGhlciB3b24mIzM5O3QgbGlzdCBpdCwgb3Igd2lsbCBub3RlIGl0JiMzOTtzIG5vdCBsaWtlbHkgdG8gYmUgZW5hYmxlZC4KCkxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgbW0vcGFnZV9hbGxvYy5jYCByZWxhdGVkIHRvIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAuIEl0JiMzOTtzIGEgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiwgYWx3YXlzIGVuYWJsZWQuIFRoZW4gaW4gYG1tL2ludGVybmFsLmhgIHRoZXJlJiMzOTtzIGBwcmVwX2NvbXBvdW5kX3RhaWxgLiBUaGF0IGFsc28gc2VlbXMgYWx3YXlzIGVuYWJsZWQuIFRoaXMgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZSBiZXN0IHBsYWNlIHRvIHByb2ZpbGUuCgpTbyB0aGUgY29uZmlncyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhpbmdzIHJlbGF0aW5nIHRvIHRoZXNlLCB0aGVuLiBUaGUgZm9jdXMgc3ltYm9scyBsb29rIGxpa2U6IGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBhbmQgYHBjcHVfZGVzdHJveV9jaHVua2AuCgpOb3csIHRoYXQgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBtb2RpZmljYXRpb24sIHdoaWxlIHByZXNlbnQsIGlzIGxpa2VseSBpbiBhIHZlcnkgaG90IHBhdGguIEkgd2FudCB0byBhdm9pZCBhZGRpbmcgdG9vIG11Y2ggb3ZlcmhlYWQgdGhlcmUuIEhvd2V2ZXIsIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AgYW5kIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCBhcmUgY29tcGFjdGlvbiBmdW5jdGlvbnMsIHdoaWNoIGFyZSBsZXNzIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHRoYW4gcGFnZSBhbGxvY2F0aW9uLCBidXQgc3RpbGwgc29tZXdoYXQgaG90LiBUaGUgb25lcyB0aGF0IGxvb2sgbW9zdCBwcm9taXNpbmcgYXJlIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBzaW5jZSBpdCBpcyBmb3IgVEhQIHNwbGl0dGluZywgd2hpY2ggaXMgYSBnb29kIHRhcmdldC4gYHBjcHVfZGVzdHJveV9jaHVua2AgZm9yIHBlcmNwdSBjaHVuayBkZXN0cnVjdGlvbiBpcyBhbHNvIGEgcG90ZW50aWFsIGdvb2QgdGFyZ2V0LgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLiBJJiMzOTtsbCBkaWcgaW50byBgbW0vY29tcGFjdGlvbi5jYCB0byBzZWUgaG93IHRob3NlIGFyZSB3b3JraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9NTUyPXN0YXRpYyBib29sIGNvbXBhY3RfdW5sb2NrX3Nob3VsZF9hYm9ydChzcGlubG9ja190ICpsb2NrLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy01NzQtICovXG5tbS9jb21wYWN0aW9uLmM6NTc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxubW0vY29tcGFjdGlvbi5jLTU3Ni1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0X3Bmbixcbi0tXG5tbS9jb21wYWN0aW9uLmM9NzEzPWlzb2xhdGVfZnJlZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy03MzAtXHRcdFx0XHRibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbm1tL2NvbXBhY3Rpb24uYzo3MzE6XHRcdC8qIFByb3RlY3QgcGZuIGZyb20gY2hhbmdpbmcgYnkgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2sgKi9cbm1tL2NvbXBhY3Rpb24uYy03MzItXHRcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9zdGFydF9wZm4gPSBwZm47XG4tLVxubW0vY29tcGFjdGlvbi5jLTc0OS1cbm1tL2NvbXBhY3Rpb24uYzo3NTA6XHRcdGlzb2xhdGVkID0gaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFx1MDAyNmlzb2xhdGVfc3RhcnRfcGZuLFxubW0vY29tcGFjdGlvbi5jLTc1MS1cdFx0XHRcdFx0YmxvY2tfZW5kX3BmbiwgY2MtXHUwMDNlZnJlZXBhZ2VzLCAwLCB0cnVlKTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtNzUzLVx0XHQvKlxubW0vY29tcGFjdGlvbi5jOjc1NDpcdFx0ICogSW4gc3RyaWN0IG1vZGUsIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKCkgcmV0dXJucyAwIGlmXG5tbS9jb21wYWN0aW9uLmMtNzU1LVx0XHQgKiB0aGVyZSBhcmUgYW55IGhvbGVzIGluIHRoZSBibG9jayAoaWUuIGludmFsaWQgUEZOcyBvclxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xNDc1PWZhc3RfaXNvbGF0ZV9hcm91bmQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xNDk1LVxubW0vY29tcGFjdGlvbi5jOjE0OTY6XHRpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhjYywgXHUwMDI2c3RhcnRfcGZuLCBlbmRfcGZuLCBjYy1cdTAwM2VmcmVlcGFnZXMsIDEsIGZhbHNlKTtcbm1tL2NvbXBhY3Rpb24uYy0xNDk3LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xNjkzPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xNzY0LVx0XHQvKiBGb3VuZCBhIGJsb2NrIHN1aXRhYmxlIGZvciBpc29sYXRpbmcgZnJlZSBwYWdlcyBmcm9tLiAqL1xubW0vY29tcGFjdGlvbi5jOjE3NjU6XHRcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFx1MDAyNmlzb2xhdGVfc3RhcnRfcGZuLFxubW0vY29tcGFjdGlvbi5jLTE3NjYtXHRcdFx0XHRcdGJsb2NrX2VuZF9wZm4sIGNjLVx1MDAzZWZyZWVwYWdlcywgc3RyaWRlLCBmYWxzZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jLTE4MDItXHQgKiBicm9rZSBmcm9tIHRoZSBsb29wIGFuZCBzZXQgaXNvbGF0ZV9zdGFydF9wZm4gYmFzZWQgb24gdGhlIGxhc3Rcbm1tL2NvbXBhY3Rpb24uYzoxODAzOlx0ICogY2FsbCB0byBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpLCBvciB3ZSBtZXQgdGhlIG1pZ3JhdGlvbiBzY2FubmVyXG5tbS9jb21wYWN0aW9uLmMtMTgwNC1cdCAqIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVkIGR1ZSB0byBpc29sYXRlX3N0YXJ0X3BmbiBcdTAwM2MgbG93X3BmblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IEhvdHNwb3RzKioKCk9rYXksIGxldCYjMzk7cyByZWZpbmUgdGhpcyBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIE15IGluaXRpYWwgdGhvdWdodHMgaWRlbnRpZmllZCBzb21lIGdvb2QgY2FuZGlkYXRlcy4gSSBsaWtlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYW5kIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBhcyBkZWZpbml0ZSBwb3NzaWJpbGl0aWVzIGZvciBob3RzcG90cyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gYHBjcHVfZGVzdHJveV9jaHVua2AgYWxzbyBjYW1lIHRvIG1pbmQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gQWgsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3BlcmNwdS1rbS5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYCBpcyBlbmFibGVkLiBUaGF0IGRlcGVuZHMgb24gYCFTTVAgfHwgIU1NVWAuIFNvIGl0JiMzOTtzICp1bmxpa2VseSogdG8gYmUgcHJlc2VudCBpbiB0eXBpY2FsIHg4Nl82NCBzZXR1cHMsIGJ1dCBpdCYjMzk7cyBzdGlsbCB3b3J0aCBub3RpbmcuIExldCYjMzk7cyBsaXN0IGl0IGFueXdheSwgYXQgdGhpcyBzdGFnZS4KCkhtbSwgYSBtb21lbnQuIExvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgaGFzIGJlZW4gbW9kaWZpZWQuIFRoYXQmIzM5O3MgYSBzdXBlciBob3QgcGF0aCEgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgbGlzdGluZyBpdCB0byByZWR1Y2Ugbm9pc2UuIEFsc28sIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYG1tL2ludGVybmFsLmhgLiBJJiMzOTtsbCBvbWl0IGl0IGFzIHdlbGwuCgpOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBBcmUgYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRoZSBvbmx5IG9uZXMgdGhhdCBoZWF2aWx5IGluZmx1ZW5jZSB0aGVzZSBtb2RpZmllZCBmaWxlcz8gWWVzLCB0aGV5IHNlZW0gdG8gY292ZXIgdGhlIG1haW4gb25lcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBmdXJ0aGVyLiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgaW5kZWVkIHRpZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBtbS9jb21wYWN0aW9uLmNgIGlzIGRyaXZlbiBieSBgQ09ORklHX0NPTVBBQ1RJT05gLCBhbmQgYG1tL3BlcmNwdS1rbS5jYCAoYXMgd2UgZGlzY3Vzc2VkKSBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYC4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZm9ybWFsaXplIG15IGZpbmRpbmdzLgoKSGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6CgoqICAgKipGb2N1c1N5bWJvbHM6KioKICAgICogICBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgCiAgICAqICAgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgCiAgICAqICAgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYAogICAgKiAgIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYAogICAgKiAgIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgCgpIZXJlIGFyZSB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnM6CgoqICAgKipFbmFibGVDb25maWdzOioqCiAgICAqICAgYENPTVBBQ1RJT05gCiAgICAqICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYAogICAgKiAgIGBORUVEX1BFUl9DUFVfS01gCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgbmFtZS4gVGhhdCYjMzk7cyBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcGFjdGlvbl9hbGxvY19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTE2OTM9c3RhdGljIHZvaWQgaXNvbGF0ZV9mcmVlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4tLVxubW0vY29tcGFjdGlvbi5jLTE4MTItICovXG5tbS9jb21wYWN0aW9uLmM6MTgxMzpzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYXRhKVxubW0vY29tcGFjdGlvbi5jLTE4MTQte1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0xODYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Moc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcbm1tL2NvbXBhY3Rpb24uYy0xODYxLXtcbm1tL2NvbXBhY3Rpb24uYzoxODYyOlx0cmV0dXJuIGFsbG9jX2hvb2tzKGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHNyYywgZGF0YSkpO1xubW0vY29tcGFjdGlvbi5jLTE4NjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCBGdW5jdGlvbiBOYW1lIGFuZCBSZWxhdGVkIENvZGUqKgoKUmlnaHQsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuLi4gdGhhdCYjMzk7cyB0aGUgbW9uaWtlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBJdCBpbW1lZGlhdGVseSBzaWduYWxzIGFuIGFsbG9jYXRpb24gcHJvY2VzcyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uIHRoYXQgKmRvZXNuJiMzOTt0KiBpbnZvbHZlIHByb2ZpbGluZy4gSSYjMzk7bSB3b25kZXJpbmcgd2h5IHRoYXQgZGlzdGluY3Rpb24gaXMgaW1wb3J0YW50IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KCk15IG5leHQgbW92ZSBpcyBkZWZpbml0ZWx5IHRvIGp1bXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0byBzY3J1dGluaXplIHRoZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24mIzM5O3MgZ29pbmcgdG8gaG9sZCB0aGUgY29yZSBsb2dpYyBmb3IgaG93IGxhcmdlIG1lbW9yeSBibG9ja3MsIG9yIGZvbGlvcyBpbiB0aGlzIGNhc2UsIGdldCBkaXZpZGVkIHVwLCB3aGljaCBkaXJlY3RseSByZWxhdGVzIHRvIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGNvbXBhY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZSBhbGxvY2F0aW9uIG9mIHBhZ2VzIGluIGNvbXBhY3Rpb24gaXMgZGlmZmVyZW50IHRoYW4gd2hlbiBwYWdlcyBhcmUgbm90IGJlaW5nIGNvbXBhY3RlZC4gU3BlY2lmaWNhbGx5LCBkb2VzIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAgZ2V0IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGF0IGZ1bmN0aW9uPyBJZiBzbywgd2hhdCBpcyB0aGUgY2FsbCBwYXRoPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM1MTY9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1MjctICovXG5tbS9odWdlX21lbW9yeS5jOjM1Mjg6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zNTI5LVx0XHRpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY2OC0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcbm1tL2h1Z2VfbWVtb3J5LmM6MzY2OTogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXG5tbS9odWdlX21lbW9yeS5jLTM2NzAtICogICAgYWxvbmcgd2l0aCBzdGF0cyB1cGRhdGUuXG5tbS9odWdlX21lbW9yeS5jLTM2NzEtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xubW0vaHVnZV9tZW1vcnkuYzozNjcyOiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTM2NzMtICogICAgdGhlIEBmb2xpbyB0byBvbmUgbG93ZXIgb3JkZXIgYXQgYSB0aW1lLiBUaGUgZm9saW8gY29udGFpbmluZyBAc3BsaXRfYXRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODU9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzMwLVx0XHRwZ2FsbG9jX3RhZ19zcGxpdChmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jOjM3MzE6XHRcdF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzMyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gTmFtZSBhbmQgUmVsYXRlZCBDb2RlKioKClllcywgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLi4udGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gbmFtZSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIE9rYXksIGxldCYjMzk7cyBzZWUsIHdoYXQmIzM5O3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBgbW0vcGVyY3B1LWttLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcG90ZW50aWFsbHkgcmVsYXRlLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggcGVyY3B1IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmb2xpbyBzcGxpdHRpbmcgY29udGV4dC4gS25vd2luZyB3aGVyZSBtZW1vcnkgY2h1bmtzIGFyZSBkZXN0cm95ZWQgY2FuIGNsYXJpZnkgYSBsb3QuIE5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBvciBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBiYXNlZCBvbiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjcHVfZGVzdHJveV9jaHVuayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BlcmNwdS1rbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BlcmNwdS1rbS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jcmVhdGVfY2h1bmsoZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3BlcmNwdS1rbS5jLTg2LVxubW0vcGVyY3B1LWttLmM6ODc6c3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbm1tL3BlcmNwdS1rbS5jLTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzgKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IENvcmUgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gc29tZSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGNvZGUgaW4gcGFnZSBjb21wYWN0aW9uLCBsaWtlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHNwbGl0dGluZyB3aXRoIGNoYW5nZXMgdG8gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBhbmQsIGNydWNpYWxseSwgdGhlIGRlc3RydWN0aW9uIG9mIHBlci1DUFUga2VybmVsIG1lbW9yeSBjaHVua3Mg4oCTIHRoYXQmIzM5O3MgYHBjcHVfZGVzdHJveV9jaHVua2AuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgYHBhZ2UtJmd0O3ByaXZhdGVgIGZpZWxkLiBJdCYjMzk7cyByZW1vdmluZyBpdHMgc2V0dGluZyBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkaW5nIGNoZWNrcyBhbmQgd2FybmluZ3MgcmVsYXRlZCB0byBpdHMgdW5leHBlY3RlZCB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBNeSBicmFpbiBpbW1lZGlhdGVseSBsaWdodHMgdXAgd2l0aCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zIGhlcmUuIFRoaXMgbGV2ZWwgb2YgY29yZSBrZXJuZWwgbG9naWMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhbmQgdGhlIHBhdGNoIGF1dGhvciBldmVuIGFncmVlcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBtYXJraW5nIHRoaXMgYXMgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUuJiMzNDsKClRvIGZvY3VzIG15IGVmZm9ydHMsIEkgbmVlZCB0byB0YXJnZXQgdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGFuZCBvZiBjb3Vyc2UsIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhcmUgdGFraW5nIHBsYWNlLCBzbyB0aGVzZSBhcmUgdGhlIGhvdHNwb3RzIHRvIHB1dCB1bmRlciB0aGUgbWljcm9zY29wZS4KCkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoZXNlIGNoYW5nZXMgZWZmZWN0aXZlbHkuIEkmIzM5O2xsIG5lZWQgYENPTVBBQ1RJT05gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5FRURfUEVSX0NQVV9LTWAgZW5hYmxlZCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNoYW5nZXMuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgcGxhbiBsb2NrZWQgaW4sIEkmIzM5O20gbm93IHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgZ2V0IHRvIHRoZSBmdXp6aW5nIHN0YWdlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtORUVEX1BFUl9DUFVfS00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICAgJiMzNDtmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fc3BsaXRfZm9saW9fdG9fb3JkZXImIzM0OywKICAgICYjMzQ7cGNwdV9kZXN0cm95X2NodW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBpbiBwYWdlIGNvbXBhY3Rpb24sIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHNwbGl0dGluZywgYW5kIHBlci1jcHUga2VybmVsIG1lbW9yeSBjaHVuayBkZXN0cnVjdGlvbi4gSXQgcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBwYWdlLVx1MDAzZXByaXZhdGUgZHVyaW5nIGNvbXBhY3Rpb24gYW5kIGFkZHMgd2FybmluZ3MvY2hlY2tzIGZvciB1bmV4cGVjdGVkIHBhZ2UtXHUwMDNlcHJpdmF0ZSB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX0tNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDssCiAgICAmIzM0O3BjcHVfZGVzdHJveV9jaHVuayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cdTAwM2Vwcml2YXRlIGR1cmluZyBjb21wYWN0aW9uIGFuZCBhZGRzIHdhcm5pbmdzL2NoZWNrcyBmb3IgdW5leHBlY3RlZCBwYWdlLVx1MDAzZXByaXZhdGUgdmFsdWVzIGluIHRhaWwgcGFnZXMgZHVyaW5nIHNwbGl0dGluZyBhbmQgZnJlZWluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MTcuNTg1MTkwNDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5MTIyOTUxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk5FRURfUEVSX0NQVV9LTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrXCIsXG4gICAgXCJmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzXCIsXG4gICAgXCJjb21wYWN0aW9uX2FsbG9jX25vcHJvZlwiLFxuICAgIFwiX19zcGxpdF9mb2xpb190b19vcmRlclwiLFxuICAgIFwicGNwdV9kZXN0cm95X2NodW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGluIHBhZ2UgY29tcGFjdGlvbiwgdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGVyLWNwdSBrZXJuZWwgbWVtb3J5IGNodW5rIGRlc3RydWN0aW9uLiBJdCByZW1vdmVzIHRoZSBzZXR0aW5nIG9mIHBhZ2UtXFx1MDAzZXByaXZhdGUgZHVyaW5nIGNvbXBhY3Rpb24gYW5kIGFkZHMgd2FybmluZ3MvY2hlY2tzIGZvciB1bmV4cGVjdGVkIHBhZ2UtXFx1MDAzZXByaXZhdGUgdmFsdWVzIGluIHRhaWwgcGFnZXMgZHVyaW5nIHNwbGl0dGluZyBhbmQgZnJlZWluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDoxNy41ODUxOTg2MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTcyODMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhOWQ4ZTYwZjk0ZmEyMGU1NGYxNDY0OGI1ODAyOTFhZjEyMjIzNmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTQ6MDA6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXFxuaW5kZXggNGIyMzE4ZmFkNGViNTkuLjlmODEwNTVhMzU4ZWQxIDEwMDY0NFxcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xcbkBAIC02NDUsNyArNjQ1LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxuIFxcdFxcdGlzb2xhdGVkID0gX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7XFxuIFxcdFxcdGlmICghaXNvbGF0ZWQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcXG4gXFxuIFxcdFxcdG5yX3NjYW5uZWQgKz0gaXNvbGF0ZWQgLSAxO1xcbiBcXHRcXHR0b3RhbF9pc29sYXRlZCArPSBpc29sYXRlZDtcXG5AQCAtMTYxOCw3ICsxNjE3LDYgQEAgc3RhdGljIHZvaWQgZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4gXFx0XFx0LyogSXNvbGF0ZSB0aGUgcGFnZSBpZiBhdmFpbGFibGUgKi9cXG4gXFx0XFx0aWYgKHBhZ2UpIHtcXG4gXFx0XFx0XFx0aWYgKF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpKSB7XFxuLVxcdFxcdFxcdFxcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xcbiBcXHRcXHRcXHRcXHRucl9pc29sYXRlZCA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuIFxcdFxcdFxcdFxcdG5yX3NjYW5uZWQgKz0gbnJfaXNvbGF0ZWQgLSAxO1xcbiBcXHRcXHRcXHRcXHR0b3RhbF9pc29sYXRlZCArPSBucl9pc29sYXRlZDtcXG5AQCAtMTg0Nyw3ICsxODQ1LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGFcXG4gXFx0XFx0c2l6ZSBcXHUwMDNlXFx1MDAzZT0gMTtcXG4gXFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmcmVlcGFnZVtzaXplXS5scnUsIFxcdTAwMjZjYy1cXHUwMDNlZnJlZXBhZ2VzW3N0YXJ0X29yZGVyXSk7XFxuLVxcdFxcdHNldF9wYWdlX3ByaXZhdGUoXFx1MDAyNmZyZWVwYWdlW3NpemVdLCBzdGFydF9vcmRlcik7XFxuIFxcdH1cXG4gXFx0ZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBmYjJkN2RkMTdkZTBjZi4uZWEwNDQ1ZDZjMTdmMDEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMzU5MSw2ICszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4gXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuIFxcdFxcdG5ld19mb2xpby1cXHUwMDNlaW5kZXggPSBmb2xpby1cXHUwMDNlaW5kZXggKyBpO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogcGFnZS1cXHUwMDNlcHJpdmF0ZSBzaG91bGQgbm90IGJlIHNldCBpbiB0YWlsIHBhZ2VzLiBXYXJuIG9uY2VcXG4rXFx0XFx0ICogaWYgcHJpdmF0ZSBpcyB1bmV4cGVjdGVkbHkgc2V0LiBEbyBpdCBiZWZvcmUgc3dhcC52YWwgYXNzaWdubWVudFxcbitcXHRcXHQgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tXFx1MDAzZXByaXZhdGUsIG5ld19oZWFkKTtcXG4rXFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXFxuIFxcdFxcdFxcdG5ld19mb2xpby1cXHUwMDNlc3dhcC52YWwgPSBmb2xpby1cXHUwMDNlc3dhcC52YWwgKyBpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCA4NDFjMjc2MTE2MjdlMC4uMzk4NzQxYThhYjA5MjMgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtNzQxLDcgKzc0MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXFxuIHtcXG4gXFx0dGFpbC1cXHUwMDNlbWFwcGluZyA9IFRBSUxfTUFQUElORztcXG4gXFx0c2V0X2NvbXBvdW5kX2hlYWQodGFpbCwgaGVhZCwgb3JkZXIpO1xcbi1cXHRzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApO1xcbitcXHRWTV9XQVJOX09OX09OQ0UodGFpbC1cXHUwMDNlcHJpdmF0ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IGE2MzczM2RhYzY1OWUzLi5jYzQ1ZGZlODljNzZiYSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtMTM3NywxNSArMTM3NywyMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuICNlbmRpZlxcbiBcXHRcXHR9XFxuIFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyAoMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqdGFpbF9wYWdlID0gcGFnZSArIGk7XFxuK1xcbiBcXHRcXHRcXHRpZiAoY29tcG91bmQpXFxuLVxcdFxcdFxcdFxcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgKyBpKTtcXG4rXFx0XFx0XFx0XFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgdGFpbF9wYWdlKTtcXG4gXFx0XFx0XFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAoZnJlZV9wYWdlX2lzX2JhZChwYWdlICsgaSkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGZyZWVfcGFnZV9pc19iYWQodGFpbF9wYWdlKSkge1xcbitcXHRcXHRcXHRcXHRcXHRiYWQrKztcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdFxcdGlmICh0YWlsX3BhZ2UtXFx1MDAzZXByaXZhdGUpIHtcXG4rXFx0XFx0XFx0XFx0XFx0YmFkX3BhZ2UodGFpbF9wYWdlLCBcXFwibm9uemVybyBwcml2YXRlXFxcIik7XFxuIFxcdFxcdFxcdFxcdFxcdGJhZCsrO1xcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdChwYWdlICsgaSktXFx1MDAzZWZsYWdzLmYgXFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcXG4rXFx0XFx0XFx0dGFpbF9wYWdlLVxcdTAwM2VmbGFncy5mIFxcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUta20uYyBiL21tL3BlcmNwdS1rbS5jXFxuaW5kZXggNGVmYTc0YTQ5NWNiNmIuLjdmZmU4NGFkYWRiOWQ5IDEwMDY0NFxcbi0tLSBhL21tL3BlcmNwdS1rbS5jXFxuKysrIGIvbW0vcGVyY3B1LWttLmNcXG5AQCAtOTQsOCArOTQsMTUgQEAgc3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcXG4gXFx0cGNwdV9zdGF0c19jaHVua19kZWFsbG9jKCk7XFxuIFxcdHRyYWNlX3BlcmNwdV9kZXN0cm95X2NodW5rKGNodW5rLVxcdTAwM2ViYXNlX2FkZHIpO1xcbiBcXG4tXFx0aWYgKGNodW5rLVxcdTAwM2VkYXRhKVxcbitcXHRpZiAoY2h1bmstXFx1MDAzZWRhdGEpIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2VzID0gKHN0cnVjdCBwYWdlICopY2h1bmstXFx1MDAzZWRhdGE7XFxuK1xcdFxcdGludCBpO1xcbitcXG4rXFx0XFx0LyogY2xlYXIgY2h1bmsgaW5mbyBmcm9tIGVhY2ggcGFnZSBiZWZvcmUgZnJlZSB0aGVtICovXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbitcXHRcXHRcXHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzICsgaSwgTlVMTCk7XFxuIFxcdFxcdF9fZnJlZV9wYWdlcyhjaHVuay1cXHUwMDNlZGF0YSwgb3JkZXJfYmFzZV8yKG5yX3BhZ2VzKSk7XFxuK1xcdH1cXG4gXFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MTguNDA2MDE1NDA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDA5MTQ1NjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTkVFRF9QRVJfQ1BVX0tNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gICAgXCJwY3B1X2Rlc3Ryb3lfY2h1bmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cXHUwMDNlcHJpdmF0ZSBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkcyB3YXJuaW5ncy9jaGVja3MgZm9yIHVuZXhwZWN0ZWQgcGFnZS1cXHUwMDNlcHJpdmF0ZSB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2E5ZDhlNjBmOTRmYTIwZTU0ZjE0NjQ4YjU4MDI5MWFmMTIyMjM2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE0OjAwOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCA0YjIzMThmYWQ0ZWI1OS4uOWY4MTA1NWEzNThlZDEgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTY0NSw3ICs2NDUsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbiBcdFx0aXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcdFx0aWYgKCFpc29sYXRlZClcbiBcdFx0XHRicmVhaztcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXG4gXHRcdG5yX3NjYW5uZWQgKz0gaXNvbGF0ZWQgLSAxO1xuIFx0XHR0b3RhbF9pc29sYXRlZCArPSBpc29sYXRlZDtcbkBAIC0xNjE4LDcgKzE2MTcsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0XHQvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqL1xuIFx0XHRpZiAocGFnZSkge1xuIFx0XHRcdGlmIChfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKSkge1xuLVx0XHRcdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXHRcdFx0XHRucl9pc29sYXRlZCA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIFx0XHRcdFx0bnJfc2Nhbm5lZCArPSBucl9pc29sYXRlZCAtIDE7XG4gXHRcdFx0XHR0b3RhbF9pc29sYXRlZCArPSBucl9pc29sYXRlZDtcbkBAIC0xODQ3LDcgKzE4NDUsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYVxuIFx0XHRzaXplIFx1MDAzZVx1MDAzZT0gMTtcbiBcbiBcdFx0bGlzdF9hZGQoXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0ubHJ1LCBcdTAwMjZjYy1cdTAwM2VmcmVlcGFnZXNbc3RhcnRfb3JkZXJdKTtcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShcdTAwMjZmcmVlcGFnZVtzaXplXSwgc3RhcnRfb3JkZXIpO1xuIFx0fVxuIFx0ZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBmYjJkN2RkMTdkZTBjZi4uZWEwNDQ1ZDZjMTdmMDEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzU5MSw2ICszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBmb2xpby1cdTAwM2VtYXBwaW5nO1xuIFx0XHRuZXdfZm9saW8tXHUwMDNlaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCArIGk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIHBhZ2UtXHUwMDNlcHJpdmF0ZSBzaG91bGQgbm90IGJlIHNldCBpbiB0YWlsIHBhZ2VzLiBXYXJuIG9uY2VcbitcdFx0ICogaWYgcHJpdmF0ZSBpcyB1bmV4cGVjdGVkbHkgc2V0LiBEbyBpdCBiZWZvcmUgc3dhcC52YWwgYXNzaWdubWVudFxuK1x0XHQgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuXG4rXHRcdCAqL1xuK1x0XHRWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tXHUwMDNlcHJpdmF0ZSwgbmV3X2hlYWQpO1xuK1xuIFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuIFx0XHRcdG5ld19mb2xpby1cdTAwM2Vzd2FwLnZhbCA9IGZvbGlvLVx1MDAzZXN3YXAudmFsICsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggODQxYzI3NjExNjI3ZTAuLjM5ODc0MWE4YWIwOTIzIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTc0MSw3ICs3NDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuIHtcbiBcdHRhaWwtXHUwMDNlbWFwcGluZyA9IFRBSUxfTUFQUElORztcbiBcdHNldF9jb21wb3VuZF9oZWFkKHRhaWwsIGhlYWQsIG9yZGVyKTtcbi1cdHNldF9wYWdlX3ByaXZhdGUodGFpbCwgMCk7XG4rXHRWTV9XQVJOX09OX09OQ0UodGFpbC1cdTAwM2Vwcml2YXRlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGE2MzczM2RhYzY1OWUzLi5jYzQ1ZGZlODljNzZiYSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMTM3NywxNSArMTM3NywyMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gI2VuZGlmXG4gXHRcdH1cbiBcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHBhZ2UgKnRhaWxfcGFnZSA9IHBhZ2UgKyBpO1xuK1xuIFx0XHRcdGlmIChjb21wb3VuZClcbi1cdFx0XHRcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgKyBpKTtcbitcdFx0XHRcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHRhaWxfcGFnZSk7XG4gXHRcdFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xuLVx0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSArIGkpKSB7XG4rXHRcdFx0XHRpZiAoZnJlZV9wYWdlX2lzX2JhZCh0YWlsX3BhZ2UpKSB7XG4rXHRcdFx0XHRcdGJhZCsrO1xuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdH1cbitcbitcdFx0XHRcdGlmICh0YWlsX3BhZ2UtXHUwMDNlcHJpdmF0ZSkge1xuK1x0XHRcdFx0XHRiYWRfcGFnZSh0YWlsX3BhZ2UsIFwibm9uemVybyBwcml2YXRlXCIpO1xuIFx0XHRcdFx0XHRiYWQrKztcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdChwYWdlICsgaSktXHUwMDNlZmxhZ3MuZiBcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XG4rXHRcdFx0dGFpbF9wYWdlLVx1MDAzZWZsYWdzLmYgXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS1rbS5jIGIvbW0vcGVyY3B1LWttLmNcbmluZGV4IDRlZmE3NGE0OTVjYjZiLi43ZmZlODRhZGFkYjlkOSAxMDA2NDRcbi0tLSBhL21tL3BlcmNwdS1rbS5jXG4rKysgYi9tbS9wZXJjcHUta20uY1xuQEAgLTk0LDggKzk0LDE1IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gXHRwY3B1X3N0YXRzX2NodW5rX2RlYWxsb2MoKTtcbiBcdHRyYWNlX3BlcmNwdV9kZXN0cm95X2NodW5rKGNodW5rLVx1MDAzZWJhc2VfYWRkcik7XG4gXG4tXHRpZiAoY2h1bmstXHUwMDNlZGF0YSlcbitcdGlmIChjaHVuay1cdTAwM2VkYXRhKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKWNodW5rLVx1MDAzZWRhdGE7XG4rXHRcdGludCBpO1xuK1xuK1x0XHQvKiBjbGVhciBjaHVuayBpbmZvIGZyb20gZWFjaCBwYWdlIGJlZm9yZSBmcmVlIHRoZW0gKi9cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKylcbitcdFx0XHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzICsgaSwgTlVMTCk7XG4gXHRcdF9fZnJlZV9wYWdlcyhjaHVuay1cdTAwM2VkYXRhLCBvcmRlcl9iYXNlXzIobnJfcGFnZXMpKTtcbitcdH1cbiBcdHBjcHVfZnJlZV9jaHVuayhjaHVuayk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MTguNDA2MDE5MDM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5MzEzNDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZGl2ZXMgZGVlcCBpbnRvIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgZmlsZXM6IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGFuZCBgbW0vcGVyY3B1LWttLmNgLiBSaWdodCBhd2F5LCB0aGlzIHNpZ25hbHMgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSByZW1vdmFsIG9mIGBzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKWAgaW4gYG1tL2NvbXBhY3Rpb24uY2AsIHdoaWNoIGlzIGEgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVwbGFjaW5nIHRoZSB1c2Ugb2YgdGhlIGBwcml2YXRlYCBmaWVsZCBvZiBhIHBhZ2UgaW4gY2VydGFpbiBzY2VuYXJpb3MuXG5cblRoZXJlJ3MgYWxzbyBhIGBWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tXHUwMDNlcHJpdmF0ZSwgbmV3X2hlYWQpYCBhZGRlZCBpbiBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBodWdlIHBhZ2Ugc3BsaXR0aW5nLiBGdXJ0aGVybW9yZSwgSSBzZWUgY2hhbmdlcyB0byBgcHJlcF9jb21wb3VuZF90YWlsYCBpbiBgbW0vaW50ZXJuYWwuaGAsIHdoZXJlIGBzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApYCBpcyBjaGFuZ2VkIHRvIGBWTV9XQVJOX09OX09OQ0UodGFpbC1cdTAwM2Vwcml2YXRlKWAuIEFuZCBhIG5ldyBjaGVjayBmb3IgYHRhaWxfcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyBhZGRlZCBpbiBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGFsbCBwb2ludGluZyB0byBhIG1vZGlmaWVkIGxvZ2ljIGFyb3VuZCBjbGVhcmluZyBvciB2YWxpZGF0aW5nIHBhZ2UgcHJpdmF0ZSBkYXRhLiBGaW5hbGx5LCB0aGUgcGF0Y2ggY2xlYXJzIGNodW5rIGluZm8gZnJvbSBlYWNoIHBhZ2UgYmVmb3JlIGZyZWVpbmcgdGhlbSBpbiBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBgbW0vcGVyY3B1LWttLmNgLlxuXG5DbGVhcmx5LCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSB0ZXN0aW5nIHRoaXMgY2hhbmdlIHRob3JvdWdobHkuIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uIHNwZWNpZmljIHN5bWJvbHMgbGlrZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCwgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCwgYW5kIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZC5cblxuV2FpdCwgYF9fZnJlZV9wYWdlc19wcmVwYXJlYD8gVGhhdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIHRoYXQgY2hhbmdlIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AgYW5kIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCBhcmUgYWxzbyBnb2luZyB0byBiZSBmcmVxdWVudGx5IHVzZWQgZHVyaW5nIGNvbXBhY3Rpb24uIFRoZXNlIGFyZSBoaWdoLXByaW9yaXR5IHRlc3QgcG9pbnRzLlxuXG5Ob3cgSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGlzIHdpdGggdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gYG1tL2NvbXBhY3Rpb24uY2AgaXMgZW5hYmxlZCBieSBgQ09ORklHX0NPTVBBQ1RJT05gLCB3aGljaCBJIGtub3csIGJ1dCBpdCdzIHdvcnRoIGEgcmVmcmVzaGVyLiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYG1tL3BlcmNwdS1rbS5jYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgcmlnaHQgdGVzdCBlbnZpcm9ubWVudC4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgb2YgYG1tL3BlcmNwdS1rbS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjI2LjA5OTE1NjYxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMwNjQ4NjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdS1rbS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MjYuMjQyMjMxNDkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NDk4NTc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIE1vZHVsZSBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCB3aGVyZSBgcGVyY3B1LWttLm9gIGlzIGJlaW5nIGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJ1bGVzIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIG9iamVjdCBmaWxlcy4gSSBrbm93IEkndmUgdXN1YWxseSBmb3VuZCB0aGVzZSB0eXBlcyBvZiBtb2R1bGVzIHdpdGhpbiBhIE1ha2VmaWxlIGluIHRoZSByZWxldmFudCBzdWJkaXJlY3RvcnksIHNvIHRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbXkgc2VhcmNoLiBUaW1lIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBMZXQncyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIGhhcyB0byBzYXkuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjI4Ljk4NzIyMDI0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUyNDkwMTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdS1rbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MjkuMTIyNDc4NzYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNDcyMTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEluY2x1c2lvbioqXG5cbkhtbSwgbm93IHRoYXQgSSdtIGxvb2tpbmcgYXQgdGhpcywgaXMgYHBlcmNwdS1rbS5jYCBhY3R1YWxseSBiZWluZyBpbXBsaWNpdGx5IGJyb3VnaHQgaW4gdGhyb3VnaCBgbW0vcGVyY3B1LmNgPyBUaGF0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5LiBJZiBpdCdzIGluY2x1ZGVkIHdpdGhpbiB0aGF0IG1vZHVsZSwgaXQgY291bGQgY2hhbmdlIG15IGFuYWx5c2lzIGNvbXBsZXRlbHkuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbmNsdWRlIHBhdGhzIGFuZCBhbnkgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0byBiZSBjZXJ0YWluLiBBIGZhbHNlIGFzc3VtcHRpb24gaGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSB2ZXJ5IHdyb25nIHBhdGguIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MzIuMDQ3MjAzNDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzQ4MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdS1rbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGVyY3B1LWttLmMtMi0vKlxcbm1tL3BlcmNwdS1rbS5jOjM6ICogbW0vcGVyY3B1LWttLmMgLSBrZXJuZWwgbWVtb3J5IGJhc2VkIGNodW5rIGFsbG9jYXRpb25cXG5tbS9wZXJjcHUta20uYy00LSAqXFxuLS1cXG5tbS9wZXJjcHUta20uYy0xMC0gKlxcbm1tL3BlcmNwdS1rbS5jOjExOiAqIFRvIHVzZSBwZXJjcHUta20sXFxubW0vcGVyY3B1LWttLmMtMTItICpcXG4tLVxcbm1tL3BlcmNwdS1rbS5jLTI1LSAqICAga2VybmVsIG1lbW9yeSBibG9jayB1c2luZyBhbGxvY19wYWdlcygpLCBtZW1vcnkgd2lsbCBiZSB3YXN0ZWQgaWZcXG5tbS9wZXJjcHUta20uYzoyNjogKiAgIGNodW5rIHNpemUgaXMgbm90IGFsaWduZWQuICBwZXJjcHUta20gY29kZSB3aWxsIHdoaW5lIGFib3V0IGl0Llxcbm1tL3BlcmNwdS1rbS5jLTI3LSAqL1xcbi0tXFxubW0vcGVyY3B1LmM9MTU3Nj1zdGF0aWMgaW50IF9faW5pdCBwY3B1X3ZlcmlmeV9hbGxvY19pbmZvKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcXG4tLVxcbm1tL3BlcmNwdS5jLTE1NzgtI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfS01cXG5tbS9wZXJjcHUuYzoxNTc5OiNpbmNsdWRlIFxcXCJwZXJjcHUta20uY1xcXCJcXG5tbS9wZXJjcHUuYy0xNTgwLSNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjMyLjIxNjk1ODc4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njc2MTU0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgTWVudGFsIEF1ZGl0KipcblxuUmlnaHQsIHNvIGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYCBoYXMgY29tZSB1cC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucy4gSXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSwgb3IgYXQgbGVhc3QgYSBzdHJvbmcgY29uc2lkZXJhdGlvbiwgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUgdHlwaWNhbCBwYWlyaW5ncz8gT2theSwgZmlyc3QgdGhpbmdzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRob3NlIGFyZSBjb25uZWN0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgcGVyLUNQVSBhbGxvY2F0aW9ucy4gSXMgYENPTkZJR19ORUVEX1BFUl9DUFVfS01gIHB1bGxlZCBpbiBieSBlaXRoZXIgb2YgdGhvc2UsIG9yIGRvZXMgaXQgKnJlcXVpcmUqIHRoZW0/IE9yIGlzIGl0IG1vcmUgb2YgYSBjb21wYXRpYmlsaXR5IGNvbmNlcm4sIGVuc3VyaW5nIHRoZXkgcGxheSBuaWNlbHkgdG9nZXRoZXI/IEkgbmVlZCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCB0cmFkZS1vZmZzLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHdlIGxvb2tpbmcgZm9yIGluY3JlYXNlZCBtZW1vcnkgdXRpbGl6YXRpb24/IFJlZHVjZWQgZnJhZ21lbnRhdGlvbj8gU3RhYmlsaXR5PyBNeSBtZW50YWwgbW9kZWwgbmVlZHMgdG8gaW5zdGFudGx5IGNhbGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHJlbWVtYmVyIHdoYXQgZWFjaCBjb25maWd1cmF0aW9uIGZsYWcgYWZmZWN0cy4gSXQncyBhIHF1aWNrIG1lbnRhbCByZXZpZXcgdG8gZGV0ZXJtaW5lIGlmIHRob3NlIGNvbmZpZyBvcHRpb25zIGFyZSBnb2luZyB0byBiZSBhZmZlY3RlZCBieSB0aGlzIG5ldyBzZXR0aW5nLCBvciBpZiB0aGlzIHdpbGwgaGF2ZSBzb21lIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MzUuNzg0NTc3NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODYxMDY5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MzUuOTMzMTk4NDc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NjYyNTQ4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk1ha2VmaWxlIENvbXBhY3Rpb24gQ2hlY2sqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjb21wYWN0aW9uLm9gIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgY3VycmVudCBgbW1gIG1vZHVsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gb2JqZWN0IGZpbGVzIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG1ha2VmaWxlIHRvIHNlZSBpZiBgY29tcGFjdGlvbi5vYCBpcyBldmVuIHByZXNlbnQuIExldCdzIHNlZSBob3cgdGhhdCdzIHB1dCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjM4LjQ5OTQ1NjgwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NDQ4MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBhY3Rpb24ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTUtXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU2OlxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Ny1cXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDozOC42NjU5MTE0OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NTAzNjI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENvbXBhY3Rpb24gT2JqZWN0IENvbXBpbGF0aW9uKipcblxuSG1tLCBpdCBzZWVtcyB0aGF0IGBjb21wYWN0aW9uLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBidWlsdCwgd2hpY2ggaXMgdW5leHBlY3RlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IG9yIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gTGV0J3MgZGVsdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBleGFtaW5lIHdoZXRoZXIgYENPTkZJR19DT01QQUNUSU9OYCBwbGF5cyBhIHJvbGUuIFNpbmNlIGBjb21wYWN0aW9uLm9gIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBtbS9jb21wYWN0aW9uLmNgIGZpbGUuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgYGNvbXBhY3Rpb24ub2AgaXMgY29uZGl0aW9uYWwgb24gdGhlIGBDT05GSUdfQ09NUEFDVElPTmAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdpbGwgdGhlbiBjbGFyaWZ5IHdoZXRoZXIgdGhlIGJ1aWxkIGlzIGhhcHBlbmluZyBjb3JyZWN0bHksIG9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjQxLjc0MDk1MTIzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NTA0ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19DT01QQUNUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmMtMjktXFxubW0vY29tcGFjdGlvbi5jOjMwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0zMS0vKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTYyLVxcbm1tL2NvbXBhY3Rpb24uYzo2MzojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9jb21wYWN0aW9uLmMtNjQtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9OTI9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZV9mcmVlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZXBhZ2VzKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTExNi1cXG5tbS9jb21wYWN0aW9uLmM6MTE3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMTgtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NDkxPXN0YXRpYyBib29sIHRlc3RfYW5kX3NldF9za2lwKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy00OTQtfVxcbm1tL2NvbXBhY3Rpb24uYzo0OTU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vY29tcGFjdGlvbi5jLTQ5Ni1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xMzM3PWlzb2xhdGVfbWlncmF0ZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMzcyLVxcbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTEzNzUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzM1MT1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXFxubW0vY29tcGFjdGlvbi5jLTMzNTItXFxubW0vY29tcGFjdGlvbi5jOjMzNTM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjQxLjkxNTQ2MzEzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk3Nzk5NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb21wYWN0aW9uIGFuZCBIdWdlIFBhZ2VzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IGFjdGl2ZS4gR29vZCwgZ29vZC4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIG5vdyBpczogaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIGBodWdlX21lbW9yeS5jYD8gV2UncmUgdGFsa2luZyBhYm91dCBjb21wYWN0aW9uLCB3aGljaCBhaW1zIHRvIGNvbnNvbGlkYXRlIGZyZWUgbWVtb3J5IHJlZ2lvbnMsIGFuZCBodWdlIHBhZ2VzLCB3aGljaCBhcmUgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbXBhY3Rpb24gbWVjaGFuaXNtcyBhcmUgYXdhcmUgb2YsIGFuZCBhcHByb3ByaWF0ZWx5IGhhbmRsZSwgaHVnZSBwYWdlIGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zLiBBcmUgd2UgcnVubmluZyBpbnRvIGZyYWdtZW50YXRpb24gaXNzdWVzIHdpdGhpbiBodWdlIHBhZ2UgcmVnaW9ucyB0aGF0IGNvbXBhY3Rpb24gY291bGQgYWxsZXZpYXRlPyBPciwgY29udmVyc2VseSwgaXMgY29tcGFjdGlvbiBwb3RlbnRpYWxseSAqZGlzcnVwdGluZyogdGhlIGNvbnRpZ3VvdXMgbWVtb3J5IHJlcXVpcmVkIGZvciBodWdlIHBhZ2VzLCBhbmQgaWYgc28sIGhvdz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGFnZSBhbGxvY2F0b3IsIHRoZSBOVU1BIGJhbGFuY2luZywgYW5kIHRoZSBjb21wYWN0aW9uIGNvZGUgcGF0aHMgdG8gYmUgY2VydGFpbiB3ZSBhcmUgZ2V0dGluZyB0aGUgcGVyZm9ybWFuY2Ugd2Ugd2FudC4gVGltZSB0byBzdGFydCB0cmFjaW5nIHNvbWUgY2FsbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjQ1LjQxMzI2NTI0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjAxMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6NDUuNTYwNDczMTM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzg4MzA0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gc2VlbXMgdG8gaGF2ZSBmbGFnZ2VkIHRoZSBpbXBvcnRhbmNlIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyBnb3QgaXQuIFRoYXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJ20ga2VlcGluZyBpbiBtaW5kLiBCdXQsIHdoYXQgYWJvdXQgYENPTkZJR19ORUVEX1BFUl9DUFVfS01gPyBJdCdzIGJlZW4gcmF0dGxpbmcgYXJvdW5kIGluIG15IGhlYWQsIHNpbmNlIGl04oCZcyB1c3VhbGx5IGF1dG8tc2VsZWN0ZWQgYnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgcmlnaHQ/IFRvIGNsYXJpZnkgaXRzIHJlbGV2YW5jZSBoZXJlLCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGBhcmNoL2AgZGlyZWN0b3JpZXMuIEknbGwgc2VhcmNoIHRob3NlIGFuZCBmaW5kIG91dCB3aGVyZSBgTkVFRF9QRVJfQ1BVX0tNYCBpcyBiZWluZyB1c2VkIGFuZCBob3cgYXJjaGl0ZWN0dXJlcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHNldHRpbmcuIFRoYXQncyB0aGUgbmV4dCBzdGVwIHRvIGdhaW4gY2xhcml0eSBhbmQgZW5zdXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDo0OC45MzkzMDY1ODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTY0MTMzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVFRF9QRVJfQ1BVX0tNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDo0OS42NTQ5NTgyNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODY3MzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBORUVEX1BFUl9DUFVfS01gIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gSSdtIHByZXR0eSBzdXJlIEkgcmVjYWxsIGVuY291bnRlcmluZyBgTkVFRF9QRVJfQ1BVX0tNYCBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCwgb3IgbWF5YmUgZXZlbiBjb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQgbWUgbG9vayBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCBmaWxlcy4gVGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdGhpcyBkZXBlbmRlbmN5IGlzIGRlZmluZWQsIG9yIGF0IGxlYXN0IHVzZWQgd2l0aGluIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGl0cyBleGFjdCBsb2NhdGlvbiBvciBoaW50cyBhYm91dCB3aGF0IG90aGVyIG9wdGlvbnMgaXQgbWF5IGRlcGVuZCBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwOyBJIGNhbid0IHByb2NlZWQgY29uZmlkZW50bHkgdW50aWwgSSBoYXZlIGEgaGFuZGxlIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDo1My4zMTM2MzQ1MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTYyMDgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVFRF9QRVJfQ1BVX0tNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF92bWFsbG9jLmM9MzE2PXBjcHVfYWxsb2NfdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTMxOC1cXHRpbnQgcnYgPSAwO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYzozMTk6I2lmbmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTMyMC1cXHR2b2lkIF9fcGVyY3B1ICoqcGNwdTtcXG4tLVxcbm1tL0tjb25maWc9MTA0ND1jb25maWcgQVJDSF9NT0RVTEVfTkVFRFNfV0VBS19QRVJfQ1BVXFxuLS1cXG5tbS9LY29uZmlnLTEwNDktI1xcbm1tL0tjb25maWc6MTA1MDpjb25maWcgTkVFRF9QRVJfQ1BVX0tNXFxubW0vS2NvbmZpZy0xMDUxLVxcdGRlcGVuZHMgb24gIVNNUCB8fCAhTU1VXFxuLS1cXG5tbS9LY29uZmlnPTExNjk9Y29uZmlnIERFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVRcXG4tLVxcbm1tL0tjb25maWctMTE3MS1cXHRkZXBlbmRzIG9uIFNQQVJTRU1FTVxcbm1tL0tjb25maWc6MTE3MjpcXHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cXG5tbS9LY29uZmlnLTExNzMtXFx0ZGVwZW5kcyBvbiA2NEJJVFxcbi0tXFxubW0vcGVyY3B1LWttLmMtMTItICpcXG5tbS9wZXJjcHUta20uYzoxMzogKiAtIGRlZmluZSBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNIGZyb20gdGhlIGFyY2ggS2NvbmZpZy5cXG5tbS9wZXJjcHUta20uYy0xNC0gKlxcbi0tXFxubW0vcGVyY3B1LmM9MTU3Nj1zdGF0aWMgaW50IF9faW5pdCBwY3B1X3ZlcmlmeV9hbGxvY19pbmZvKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcXG5tbS9wZXJjcHUuYy0xNTc3LVxcbm1tL3BlcmNwdS5jOjE1Nzg6I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfS01cXG5tbS9wZXJjcHUuYy0xNTc5LSNpbmNsdWRlIFxcXCJwZXJjcHUta20uY1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6NTguMDA5ODUwMzcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODc0NjE1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gZm9yIFRhcmdldGVkIFByb2ZpbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBORUVEX1BFUl9DUFVfS01gLiBJdCByZWxpZXMgb24gYCFTTVAgfHwgIU1NVWAsIHdoaWNoIG1ha2VzIGl0IHVuc3VpdGFibGUgZm9yIHN0YW5kYXJkIHNldHVwcyBsaWtlIHg4Nl82NCB3aXRoIFNNUCBhbmQgTU1VIGVuYWJsZWQuIE5vIHBvaW50IGluIHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgb24gaXQuIFdlIGVpdGhlciB3b24ndCBsaXN0IGl0LCBvciB3aWxsIG5vdGUgaXQncyBub3QgbGlrZWx5IHRvIGJlIGVuYWJsZWQuXG5cbkxldCdzIGRpdmUgZGVlcGVyLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgcmVsYXRlZCB0byBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLiBJdCdzIGEgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiwgYWx3YXlzIGVuYWJsZWQuIFRoZW4gaW4gYG1tL2ludGVybmFsLmhgIHRoZXJlJ3MgYHByZXBfY29tcG91bmRfdGFpbGAuIFRoYXQgYWxzbyBzZWVtcyBhbHdheXMgZW5hYmxlZC4gVGhpcyBkb2Vzbid0IHNlZW0gbGlrZSB0aGUgYmVzdCBwbGFjZSB0byBwcm9maWxlLlxuXG5TbyB0aGUgY29uZmlncyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhpbmdzIHJlbGF0aW5nIHRvIHRoZXNlLCB0aGVuLiBUaGUgZm9jdXMgc3ltYm9scyBsb29rIGxpa2U6IGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBhbmQgYHBjcHVfZGVzdHJveV9jaHVua2AuXG5cbk5vdywgdGhhdCBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIG1vZGlmaWNhdGlvbiwgd2hpbGUgcHJlc2VudCwgaXMgbGlrZWx5IGluIGEgdmVyeSBob3QgcGF0aC4gSSB3YW50IHRvIGF2b2lkIGFkZGluZyB0b28gbXVjaCBvdmVyaGVhZCB0aGVyZS4gSG93ZXZlciwgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgIGFyZSBjb21wYWN0aW9uIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGxlc3MgcGVyZm9ybWFuY2UgY3JpdGljYWwgdGhhbiBwYWdlIGFsbG9jYXRpb24sIGJ1dCBzdGlsbCBzb21ld2hhdCBob3QuIFRoZSBvbmVzIHRoYXQgbG9vayBtb3N0IHByb21pc2luZyBhcmUgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIHNpbmNlIGl0IGlzIGZvciBUSFAgc3BsaXR0aW5nLCB3aGljaCBpcyBhIGdvb2QgdGFyZ2V0LiBgcGNwdV9kZXN0cm95X2NodW5rYCBmb3IgcGVyY3B1IGNodW5rIGRlc3RydWN0aW9uIGlzIGFsc28gYSBwb3RlbnRpYWwgZ29vZCB0YXJnZXQuXG5cbk9rYXksIGxldCdzIHN0YXJ0IHdpdGggYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLiBJJ2xsIGRpZyBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHdvcmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDE6MDQuMzk3MzE0Mzg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI1ODMwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY29tcGFjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz01NTI9c3RhdGljIGJvb2wgY29tcGFjdF91bmxvY2tfc2hvdWxkX2Fib3J0KHNwaW5sb2NrX3QgKmxvY2ssXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNTc0LSAqL1xcbm1tL2NvbXBhY3Rpb24uYzo1NzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxubW0vY29tcGFjdGlvbi5jLTU3Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NzEzPWlzb2xhdGVfZnJlZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTczMC1cXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbm1tL2NvbXBhY3Rpb24uYzo3MzE6XFx0XFx0LyogUHJvdGVjdCBwZm4gZnJvbSBjaGFuZ2luZyBieSBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayAqL1xcbm1tL2NvbXBhY3Rpb24uYy03MzItXFx0XFx0dW5zaWduZWQgbG9uZyBpc29sYXRlX3N0YXJ0X3BmbiA9IHBmbjtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NDktXFxubW0vY29tcGFjdGlvbi5jOjc1MDpcXHRcXHRpc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTc1MS1cXHRcXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuLCBjYy1cXHUwMDNlZnJlZXBhZ2VzLCAwLCB0cnVlKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NTMtXFx0XFx0LypcXG5tbS9jb21wYWN0aW9uLmM6NzU0OlxcdFxcdCAqIEluIHN0cmljdCBtb2RlLCBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpIHJldHVybnMgMCBpZlxcbm1tL2NvbXBhY3Rpb24uYy03NTUtXFx0XFx0ICogdGhlcmUgYXJlIGFueSBob2xlcyBpbiB0aGUgYmxvY2sgKGllLiBpbnZhbGlkIFBGTnMgb3JcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNDc1PWZhc3RfaXNvbGF0ZV9hcm91bmQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE0OTUtXFxubW0vY29tcGFjdGlvbi5jOjE0OTY6XFx0aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFxcdTAwMjZzdGFydF9wZm4sIGVuZF9wZm4sIGNjLVxcdTAwM2VmcmVlcGFnZXMsIDEsIGZhbHNlKTtcXG5tbS9jb21wYWN0aW9uLmMtMTQ5Ny1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNjkzPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE3NjQtXFx0XFx0LyogRm91bmQgYSBibG9jayBzdWl0YWJsZSBmb3IgaXNvbGF0aW5nIGZyZWUgcGFnZXMgZnJvbS4gKi9cXG5tbS9jb21wYWN0aW9uLmM6MTc2NTpcXHRcXHRucl9pc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTE3NjYtXFx0XFx0XFx0XFx0XFx0YmxvY2tfZW5kX3BmbiwgY2MtXFx1MDAzZWZyZWVwYWdlcywgc3RyaWRlLCBmYWxzZSk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTgwMi1cXHQgKiBicm9rZSBmcm9tIHRoZSBsb29wIGFuZCBzZXQgaXNvbGF0ZV9zdGFydF9wZm4gYmFzZWQgb24gdGhlIGxhc3RcXG5tbS9jb21wYWN0aW9uLmM6MTgwMzpcXHQgKiBjYWxsIHRvIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKCksIG9yIHdlIG1ldCB0aGUgbWlncmF0aW9uIHNjYW5uZXJcXG5tbS9jb21wYWN0aW9uLmMtMTgwNC1cXHQgKiBhbmQgdGhlIGxvb3AgdGVybWluYXRlZCBkdWUgdG8gaXNvbGF0ZV9zdGFydF9wZm4gXFx1MDAzYyBsb3dfcGZuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAxOjA0LjU3OTkwNDM5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTY0Mjg3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IEhvdHNwb3RzKipcblxuT2theSwgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBNeSBpbml0aWFsIHRob3VnaHRzIGlkZW50aWZpZWQgc29tZSBnb29kIGNhbmRpZGF0ZXMuIEkgbGlrZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGFuZCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgYXMgZGVmaW5pdGUgcG9zc2liaWxpdGllcyBmb3IgaG90c3BvdHMgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgIGFsc28gY2FtZSB0byBtaW5kLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gQWgsIGl0J3MgZGVmaW5lZCBpbiBgbW0vcGVyY3B1LWttLmNgLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORUVEX1BFUl9DUFVfS01gIGlzIGVuYWJsZWQuIFRoYXQgZGVwZW5kcyBvbiBgIVNNUCB8fCAhTU1VYC4gU28gaXQncyAqdW5saWtlbHkqIHRvIGJlIHByZXNlbnQgaW4gdHlwaWNhbCB4ODZfNjQgc2V0dXBzLCBidXQgaXQncyBzdGlsbCB3b3J0aCBub3RpbmcuIExldCdzIGxpc3QgaXQgYW55d2F5LCBhdCB0aGlzIHN0YWdlLlxuXG5IbW0sIGEgbW9tZW50LiBMb29raW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGhhcyBiZWVuIG1vZGlmaWVkLiBUaGF0J3MgYSBzdXBlciBob3QgcGF0aCEgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgbGlzdGluZyBpdCB0byByZWR1Y2Ugbm9pc2UuIEFsc28sIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYG1tL2ludGVybmFsLmhgLiBJJ2xsIG9taXQgaXQgYXMgd2VsbC5cblxuTm93LCBJIHdhbnQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXJlIGBDT01QQUNUSU9OYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCB0aGUgb25seSBvbmVzIHRoYXQgaGVhdmlseSBpbmZsdWVuY2UgdGhlc2UgbW9kaWZpZWQgZmlsZXM/IFllcywgdGhleSBzZWVtIHRvIGNvdmVyIHRoZSBtYWluIG9uZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBkcmlsbCBkb3duIGEgYml0IGZ1cnRoZXIuIGBtbS9odWdlX21lbW9yeS5jYCBpcyBpbmRlZWQgdGllZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYG1tL2NvbXBhY3Rpb24uY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfQ09NUEFDVElPTmAsIGFuZCBgbW0vcGVyY3B1LWttLmNgIChhcyB3ZSBkaXNjdXNzZWQpIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19ORUVEX1BFUl9DUFVfS01gLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gZm9ybWFsaXplIG15IGZpbmRpbmdzLlxuXG5IZXJlJ3MgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOlxuXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYFxuICAgICogICBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2BcbiAgICAqICAgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYFxuICAgICogICBgX19zcGxpdF9mb2xpb190b19vcmRlcmBcbiAgICAqICAgYHBjcHVfZGVzdHJveV9jaHVua2BcblxuSGVyZSBhcmUgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgKipFbmFibGVDb25maWdzOioqXG4gICAgKiAgIGBDT01QQUNUSU9OYFxuICAgICogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4gICAgKiAgIGBORUVEX1BFUl9DUFVfS01gXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lLiBUaGF0J3MgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDE6MTIuMTQ0MTk0MTQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExODQ2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY29tcGFjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0xNjkzPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE4MTItICovXFxubW0vY29tcGFjdGlvbi5jOjE4MTM6c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcXG5tbS9jb21wYWN0aW9uLmMtMTgxNC17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTg2MD1zdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhdGEpXFxubW0vY29tcGFjdGlvbi5jLTE4NjEte1xcbm1tL2NvbXBhY3Rpb24uYzoxODYyOlxcdHJldHVybiBhbGxvY19ob29rcyhjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzcmMsIGRhdGEpKTtcXG5tbS9jb21wYWN0aW9uLmMtMTg2My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAxOjEyLjMwNTM4NDkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNzA5NzE5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCBGdW5jdGlvbiBOYW1lIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5SaWdodCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYC4uLiB0aGF0J3MgdGhlIG1vbmlrZXIgd2UncmUgZGVhbGluZyB3aXRoLiBJdCBpbW1lZGlhdGVseSBzaWduYWxzIGFuIGFsbG9jYXRpb24gcHJvY2VzcyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uIHRoYXQgKmRvZXNuJ3QqIGludm9sdmUgcHJvZmlsaW5nLiBJJ20gd29uZGVyaW5nIHdoeSB0aGF0IGRpc3RpbmN0aW9uIGlzIGltcG9ydGFudCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cbk15IG5leHQgbW92ZSBpcyBkZWZpbml0ZWx5IHRvIGp1bXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0byBzY3J1dGluaXplIHRoZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24ncyBnb2luZyB0byBob2xkIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgbGFyZ2UgbWVtb3J5IGJsb2Nrcywgb3IgZm9saW9zIGluIHRoaXMgY2FzZSwgZ2V0IGRpdmlkZWQgdXAsIHdoaWNoIGRpcmVjdGx5IHJlbGF0ZXMgdG8gdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgY29tcGFjdGlvbi4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgYWxsb2NhdGlvbiBvZiBwYWdlcyBpbiBjb21wYWN0aW9uIGlzIGRpZmZlcmVudCB0aGFuIHdoZW4gcGFnZXMgYXJlIG5vdCBiZWluZyBjb21wYWN0ZWQuIFNwZWNpZmljYWxseSwgZG9lcyBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgIGdldCBjYWxsZWQgZnJvbSB3aXRoaW4gdGhhdCBmdW5jdGlvbj8gSWYgc28sIHdoYXQgaXMgdGhlIGNhbGwgcGF0aD9cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMToyMS40NzYzNTk3NDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTU1NDc3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNTE2PXN0YXRpYyBib29sIHBhZ2VfcmFuZ2VfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM1MjctICovXFxubW0vaHVnZV9tZW1vcnkuYzozNTI4OnN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM1MjktXFx0XFx0aW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY2OC0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcXG5tbS9odWdlX21lbW9yeS5jOjM2Njk6ICogICAgX19zcGxpdF9mb2xpb190b19vcmRlcigpIGlzIGNhbGxlZCB0byBzcGxpdCB0aGUgQGZvbGlvIGludG8gQG5ld19vcmRlclxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY3MC0gKiAgICBhbG9uZyB3aXRoIHN0YXRzIHVwZGF0ZS5cXG5tbS9odWdlX21lbW9yeS5jLTM2NzEtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzY3MjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgYXJlIGV4cGVjdGVkIHRvIGJlIG1hZGUgaW4gYSBmb3IgbG9vcCB0byBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY3My0gKiAgICB0aGUgQGZvbGlvIHRvIG9uZSBsb3dlciBvcmRlciBhdCBhIHRpbWUuIFRoZSBmb2xpbyBjb250YWluaW5nIEBzcGxpdF9hdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzMwLVxcdFxcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM3MzE6XFx0XFx0X19zcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zNzMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMToyMi4xMzc5MjEyMjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1OTEyNjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBOYW1lIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5ZZXMsIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4uLnRoYXQncyB0aGUgZnVuY3Rpb24gbmFtZSB3ZSdyZSB3b3JraW5nIHdpdGguIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4gT2theSwgbGV0J3Mgc2VlLCB3aGF0J3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBgbW0vcGVyY3B1LWttLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcG90ZW50aWFsbHkgcmVsYXRlLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggcGVyY3B1IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmb2xpbyBzcGxpdHRpbmcgY29udGV4dC4gS25vd2luZyB3aGVyZSBtZW1vcnkgY2h1bmtzIGFyZSBkZXN0cm95ZWQgY2FuIGNsYXJpZnkgYSBsb3QuIE5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBvciBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBiYXNlZCBvbiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDE6MjUuMDk3MDYyNTkzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA4MzU5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNwdV9kZXN0cm95X2NodW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BlcmNwdS1rbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BlcmNwdS1rbS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jcmVhdGVfY2h1bmsoZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vcGVyY3B1LWttLmMtODYtXFxubW0vcGVyY3B1LWttLmM6ODc6c3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcXG5tbS9wZXJjcHUta20uYy04OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAxOjI1LjM2NzkwMzgzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MzgwNDExNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBzb21lIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgY29kZSBpbiBwYWdlIGNvbXBhY3Rpb24sIGxpa2UgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBhbmQgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYC4gSXQncyBhbHNvIG1vZGlmeWluZyB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcgd2l0aCBjaGFuZ2VzIHRvIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCwgYW5kLCBjcnVjaWFsbHksIHRoZSBkZXN0cnVjdGlvbiBvZiBwZXItQ1BVIGtlcm5lbCBtZW1vcnkgY2h1bmtzIOKAkyB0aGF0J3MgYHBjcHVfZGVzdHJveV9jaHVua2AuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBmaWVsZC4gSXQncyByZW1vdmluZyBpdHMgc2V0dGluZyBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkaW5nIGNoZWNrcyBhbmQgd2FybmluZ3MgcmVsYXRlZCB0byBpdHMgdW5leHBlY3RlZCB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBNeSBicmFpbiBpbW1lZGlhdGVseSBsaWdodHMgdXAgd2l0aCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zIGhlcmUuIFRoaXMgbGV2ZWwgb2YgY29yZSBrZXJuZWwgbG9naWMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhbmQgdGhlIHBhdGNoIGF1dGhvciBldmVuIGFncmVlcy5cblxuVGhlcmVmb3JlLCBJJ20gbWFya2luZyB0aGlzIGFzIFwiV29ydGhGdXp6aW5nOiB0cnVlLlwiXG5cblRvIGZvY3VzIG15IGVmZm9ydHMsIEkgbmVlZCB0byB0YXJnZXQgdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGFuZCBvZiBjb3Vyc2UsIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhcmUgdGFraW5nIHBsYWNlLCBzbyB0aGVzZSBhcmUgdGhlIGhvdHNwb3RzIHRvIHB1dCB1bmRlciB0aGUgbWljcm9zY29wZS5cblxuRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlc2UgY2hhbmdlcyBlZmZlY3RpdmVseS4gSSdsbCBuZWVkIGBDT01QQUNUSU9OYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBORUVEX1BFUl9DUFVfS01gIGVuYWJsZWQgdG8gZ2V0IGEgZnVsbCB2aWV3IG9mIHRoZSBjaGFuZ2VzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgcGxhbiBsb2NrZWQgaW4sIEknbSBub3cgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdG8gdGhlIGZ1enppbmcgc3RhZ2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDM4LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMTozMi4zMDU5NDc3NDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE1MTU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfS01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc29sYXRlX2ZyZWVwYWdlc19ibG9ja1wiLFxuICAgIFwiZmFzdF9pc29sYXRlX2ZyZWVwYWdlc1wiLFxuICAgIFwiY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZcIixcbiAgICBcIl9fc3BsaXRfZm9saW9fdG9fb3JkZXJcIixcbiAgICBcInBjcHVfZGVzdHJveV9jaHVua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBpbiBwYWdlIGNvbXBhY3Rpb24sIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHNwbGl0dGluZywgYW5kIHBlci1jcHUga2VybmVsIG1lbW9yeSBjaHVuayBkZXN0cnVjdGlvbi4gSXQgcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBwYWdlLVxcdTAwM2Vwcml2YXRlIGR1cmluZyBjb21wYWN0aW9uIGFuZCBhZGRzIHdhcm5pbmdzL2NoZWNrcyBmb3IgdW5leHBlY3RlZCBwYWdlLVxcdTAwM2Vwcml2YXRlIHZhbHVlcyBpbiB0YWlsIHBhZ2VzIGR1cmluZyBzcGxpdHRpbmcgYW5kIGZyZWVpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTkVFRF9QRVJfQ1BVX0tNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gICAgXCJwY3B1X2Rlc3Ryb3lfY2h1bmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cXHUwMDNlcHJpdmF0ZSBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkcyB3YXJuaW5ncy9jaGVja3MgZm9yIHVuZXhwZWN0ZWQgcGFnZS1cXHUwMDNlcHJpdmF0ZSB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 13:46:44 +0000 UTC FinishedAt: 2026-07-10 14:01:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c7bf81a726b51f1ba9f197491e1e4c8fdf317326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE", "NEED_PER_CPU_KM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c7bf81a726b51f1ba9f197491e1e4c8fdf317326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE", "NEED_PER_CPU_KM" ], "series_id": "bc9a88fa-689c-46ff-9e6e-408ee855e698" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "isolate_freepages_block", "fast_isolate_freepages", "compaction_alloc_noprof", "__split_folio_to_order", "pcpu_destroy_chunk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX0tNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDssCiAgICAmIzM0O3BjcHVfZGVzdHJveV9jaHVuayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cdTAwM2Vwcml2YXRlIGR1cmluZyBjb21wYWN0aW9uIGFuZCBhZGRzIHdhcm5pbmdzL2NoZWNrcyBmb3IgdW5leHBlY3RlZCBwYWdlLVx1MDAzZXByaXZhdGUgdmFsdWVzIGluIHRhaWwgcGFnZXMgZHVyaW5nIHNwbGl0dGluZyBhbmQgZnJlZWluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2E5ZDhlNjBmOTRmYTIwZTU0ZjE0NjQ4YjU4MDI5MWFmMTIyMjM2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE0OjAwOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggNGIyMzE4ZmFkNGViNTkuLjlmODEwNTVhMzU4ZWQxIDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC02NDUsNyAmIzQzOzY0NSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxuIFx0XHRpc29sYXRlZCA9IF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpO1xuIFx0XHRpZiAoIWlzb2xhdGVkKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcbiBcbiBcdFx0bnJfc2Nhbm5lZCAmIzQzOz0gaXNvbGF0ZWQgLSAxO1xuIFx0XHR0b3RhbF9pc29sYXRlZCAmIzQzOz0gaXNvbGF0ZWQ7XG5AQCAtMTYxOCw3ICYjNDM7MTYxNyw2IEBAIHN0YXRpYyB2b2lkIGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4gXHRcdC8qIElzb2xhdGUgdGhlIHBhZ2UgaWYgYXZhaWxhYmxlICovXG4gXHRcdGlmIChwYWdlKSB7XG4gXHRcdFx0aWYgKF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpKSB7XG4tXHRcdFx0XHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcbiBcdFx0XHRcdG5yX2lzb2xhdGVkID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHRcdFx0XHRucl9zY2FubmVkICYjNDM7PSBucl9pc29sYXRlZCAtIDE7XG4gXHRcdFx0XHR0b3RhbF9pc29sYXRlZCAmIzQzOz0gbnJfaXNvbGF0ZWQ7XG5AQCAtMTg0Nyw3ICYjNDM7MTg0NSw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhXG4gXHRcdHNpemUgXHUwMDNlXHUwMDNlPSAxO1xuIFxuIFx0XHRsaXN0X2FkZChcdTAwMjZmcmVlcGFnZVtzaXplXS5scnUsIFx1MDAyNmNjLVx1MDAzZWZyZWVwYWdlc1tzdGFydF9vcmRlcl0pO1xuLVx0XHRzZXRfcGFnZV9wcml2YXRlKFx1MDAyNmZyZWVwYWdlW3NpemVdLCBzdGFydF9vcmRlcik7XG4gXHR9XG4gXHRkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGZiMmQ3ZGQxN2RlMGNmLi5lYTA0NDVkNmMxN2YwMSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zNTkxLDYgJiM0MzszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBmb2xpby1cdTAwM2VtYXBwaW5nO1xuIFx0XHRuZXdfZm9saW8tXHUwMDNlaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCAmIzQzOyBpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIHBhZ2UtXHUwMDNlcHJpdmF0ZSBzaG91bGQgbm90IGJlIHNldCBpbiB0YWlsIHBhZ2VzLiBXYXJuIG9uY2VcbiYjNDM7XHRcdCAqIGlmIHByaXZhdGUgaXMgdW5leHBlY3RlZGx5IHNldC4gRG8gaXQgYmVmb3JlIHN3YXAudmFsIGFzc2lnbm1lbnRcbiYjNDM7XHRcdCAqIHNpbmNlIHByaXZhdGUgb3ZlcmxhcHMgd2l0aCBzd2FwLnZhbC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UobmV3X2ZvbGlvLVx1MDAzZXByaXZhdGUsIG5ld19oZWFkKTtcbiYjNDM7XG4gXHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG4gXHRcdFx0bmV3X2ZvbGlvLVx1MDAzZXN3YXAudmFsID0gZm9saW8tXHUwMDNlc3dhcC52YWwgJiM0MzsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggODQxYzI3NjExNjI3ZTAuLjM5ODc0MWE4YWIwOTIzIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTc0MSw3ICYjNDM7NzQxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbiB7XG4gXHR0YWlsLVx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XG4gXHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XG4tXHRzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRSh0YWlsLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYTYzNzMzZGFjNjU5ZTMuLmNjNDVkZmU4OWM3NmJhIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0xMzc3LDE1ICYjNDM7MTM3NywyMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gI2VuZGlmXG4gXHRcdH1cbiBcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnRhaWxfcGFnZSA9IHBhZ2UgJiM0MzsgaTtcbiYjNDM7XG4gXHRcdFx0aWYgKGNvbXBvdW5kKVxuLVx0XHRcdFx0YmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgJiM0MzsgaSk7XG4mIzQzO1x0XHRcdFx0YmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHRhaWxfcGFnZSk7XG4gXHRcdFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xuLVx0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSAmIzQzOyBpKSkge1xuJiM0MztcdFx0XHRcdGlmIChmcmVlX3BhZ2VfaXNfYmFkKHRhaWxfcGFnZSkpIHtcbiYjNDM7XHRcdFx0XHRcdGJhZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmICh0YWlsX3BhZ2UtXHUwMDNlcHJpdmF0ZSkge1xuJiM0MztcdFx0XHRcdFx0YmFkX3BhZ2UodGFpbF9wYWdlLCBcJiMzNDtub256ZXJvIHByaXZhdGVcJiMzNDspO1xuIFx0XHRcdFx0XHRiYWQmIzQzOyYjNDM7O1xuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4tXHRcdFx0KHBhZ2UgJiM0MzsgaSktXHUwMDNlZmxhZ3MuZiBcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XG4mIzQzO1x0XHRcdHRhaWxfcGFnZS1cdTAwM2VmbGFncy5mIFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcbiBcdFx0fVxuIFx0fVxuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUta20uYyBiL21tL3BlcmNwdS1rbS5jXG5pbmRleCA0ZWZhNzRhNDk1Y2I2Yi4uN2ZmZTg0YWRhZGI5ZDkgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUta20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LWttLmNcbkBAIC05NCw4ICYjNDM7OTQsMTUgQEAgc3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbiBcdHBjcHVfc3RhdHNfY2h1bmtfZGVhbGxvYygpO1xuIFx0dHJhY2VfcGVyY3B1X2Rlc3Ryb3lfY2h1bmsoY2h1bmstXHUwMDNlYmFzZV9hZGRyKTtcbiBcbi1cdGlmIChjaHVuay1cdTAwM2VkYXRhKVxuJiM0MztcdGlmIChjaHVuay1cdTAwM2VkYXRhKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZXMgPSAoc3RydWN0IHBhZ2UgKiljaHVuay1cdTAwM2VkYXRhO1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0LyogY2xlYXIgY2h1bmsgaW5mbyBmcm9tIGVhY2ggcGFnZSBiZWZvcmUgZnJlZSB0aGVtICovXG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHBjcHVfc2V0X3BhZ2VfY2h1bmsocGFnZXMgJiM0MzsgaSwgTlVMTCk7XG4gXHRcdF9fZnJlZV9wYWdlcyhjaHVuay1cdTAwM2VkYXRhLCBvcmRlcl9iYXNlXzIobnJfcGFnZXMpKTtcbiYjNDM7XHR9XG4gXHRwY3B1X2ZyZWVfY2h1bmsoY2h1bmspO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O05FRURfUEVSX0NQVV9LTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrJiMzNDssCiAgICAmIzM0O2Zhc3RfaXNvbGF0ZV9mcmVlcGFnZXMmIzM0OywKICAgICYjMzQ7Y29tcGFjdGlvbl9hbGxvY19ub3Byb2YmIzM0OywKICAgICYjMzQ7X19zcGxpdF9mb2xpb190b19vcmRlciYjMzQ7LAogICAgJiMzNDtwY3B1X2Rlc3Ryb3lfY2h1bmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGluIHBhZ2UgY29tcGFjdGlvbiwgdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGVyLWNwdSBrZXJuZWwgbWVtb3J5IGNodW5rIGRlc3RydWN0aW9uLiBJdCByZW1vdmVzIHRoZSBzZXR0aW5nIG9mIHBhZ2UtXHUwMDNlcHJpdmF0ZSBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkcyB3YXJuaW5ncy9jaGVja3MgZm9yIHVuZXhwZWN0ZWQgcGFnZS1cdTAwM2Vwcml2YXRlIHZhbHVlcyBpbiB0YWlsIHBhZ2VzIGR1cmluZyBzcGxpdHRpbmcgYW5kIGZyZWVpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E5ZDhlNjBmOTRmYTIwZTU0ZjE0NjQ4YjU4MDI5MWFmMTIyMjM2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE0OjAwOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IDRiMjMxOGZhZDRlYjU5Li45ZjgxMDU1YTM1OGVkMSAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uYwpAQCAtNjQ1LDcgJiM0Mzs2NDUsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywKIAkJaXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTsKIAkJaWYgKCFpc29sYXRlZCkKIAkJCWJyZWFrOwotCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTsKIAogCQlucl9zY2FubmVkICYjNDM7PSBpc29sYXRlZCAtIDE7CiAJCXRvdGFsX2lzb2xhdGVkICYjNDM7PSBpc29sYXRlZDsKQEAgLTE2MTgsNyAmIzQzOzE2MTcsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKQogCQkvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqLwogCQlpZiAocGFnZSkgewogCQkJaWYgKF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpKSB7Ci0JCQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7CiAJCQkJbnJfaXNvbGF0ZWQgPSAxICZsdDsmbHQ7IG9yZGVyOwogCQkJCW5yX3NjYW5uZWQgJiM0Mzs9IG5yX2lzb2xhdGVkIC0gMTsKIAkJCQl0b3RhbF9pc29sYXRlZCAmIzQzOz0gbnJfaXNvbGF0ZWQ7CkBAIC0xODQ3LDcgJiM0MzsxODQ1LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGEKIAkJc2l6ZSAmZ3Q7Jmd0Oz0gMTsKIAogCQlsaXN0X2FkZCgmYW1wO2ZyZWVwYWdlW3NpemVdLmxydSwgJmFtcDtjYy0mZ3Q7ZnJlZXBhZ2VzW3N0YXJ0X29yZGVyXSk7Ci0JCXNldF9wYWdlX3ByaXZhdGUoJmFtcDtmcmVlcGFnZVtzaXplXSwgc3RhcnRfb3JkZXIpOwogCX0KIAlkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGZiMmQ3ZGQxN2RlMGNmLi5lYTA0NDVkNmMxN2YwMSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0zNTkxLDYgJiM0MzszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlciwKIAkJbmV3X2ZvbGlvLSZndDttYXBwaW5nID0gZm9saW8tJmd0O21hcHBpbmc7CiAJCW5ld19mb2xpby0mZ3Q7aW5kZXggPSBmb2xpby0mZ3Q7aW5kZXggJiM0MzsgaTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIHBhZ2UtJmd0O3ByaXZhdGUgc2hvdWxkIG5vdCBiZSBzZXQgaW4gdGFpbCBwYWdlcy4gV2FybiBvbmNlCiYjNDM7CQkgKiBpZiBwcml2YXRlIGlzIHVuZXhwZWN0ZWRseSBzZXQuIERvIGl0IGJlZm9yZSBzd2FwLnZhbCBhc3NpZ25tZW50CiYjNDM7CQkgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuCiYjNDM7CQkgKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRV9QQUdFKG5ld19mb2xpby0mZ3Q7cHJpdmF0ZSwgbmV3X2hlYWQpOwomIzQzOwogCQlpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKQogCQkJbmV3X2ZvbGlvLSZndDtzd2FwLnZhbCA9IGZvbGlvLSZndDtzd2FwLnZhbCAmIzQzOyBpOwogCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA4NDFjMjc2MTE2MjdlMC4uMzk4NzQxYThhYjA5MjMgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtNzQxLDcgJiM0Mzs3NDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLAogewogCXRhaWwtJmd0O21hcHBpbmcgPSBUQUlMX01BUFBJTkc7CiAJc2V0X2NvbXBvdW5kX2hlYWQodGFpbCwgaGVhZCwgb3JkZXIpOwotCXNldF9wYWdlX3ByaXZhdGUodGFpbCwgMCk7CiYjNDM7CVZNX1dBUk5fT05fT05DRSh0YWlsLSZndDtwcml2YXRlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCwKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBhNjM3MzNkYWM2NTllMy4uY2M0NWRmZTg5Yzc2YmEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEzNzcsMTUgJiM0MzsxMzc3LDIzIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSwKICNlbmRpZgogCQl9CiAJCWZvciAoaSA9IDE7IGkgJmx0OyAoMSAmbHQ7Jmx0OyBvcmRlcik7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnRhaWxfcGFnZSA9IHBhZ2UgJiM0MzsgaTsKJiM0MzsKIAkJCWlmIChjb21wb3VuZCkKLQkJCQliYWQgJiM0Mzs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgcGFnZSAmIzQzOyBpKTsKJiM0MzsJCQkJYmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHRhaWxfcGFnZSk7CiAJCQlpZiAoaXNfY2hlY2tfcGFnZXNfZW5hYmxlZCgpKSB7Ci0JCQkJaWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSAmIzQzOyBpKSkgewomIzQzOwkJCQlpZiAoZnJlZV9wYWdlX2lzX2JhZCh0YWlsX3BhZ2UpKSB7CiYjNDM7CQkJCQliYWQmIzQzOyYjNDM7OwomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCX0KJiM0MzsKJiM0MzsJCQkJaWYgKHRhaWxfcGFnZS0mZ3Q7cHJpdmF0ZSkgewomIzQzOwkJCQkJYmFkX3BhZ2UodGFpbF9wYWdlLCAmIzM0O25vbnplcm8gcHJpdmF0ZSYjMzQ7KTsKIAkJCQkJYmFkJiM0MzsmIzQzOzsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQotCQkJKHBhZ2UgJiM0MzsgaSktJmd0O2ZsYWdzLmYgJmFtcDs9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7CiYjNDM7CQkJdGFpbF9wYWdlLSZndDtmbGFncy5mICZhbXA7PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOwogCQl9CiAJfQogCWlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUta20uYyBiL21tL3BlcmNwdS1rbS5jCmluZGV4IDRlZmE3NGE0OTVjYjZiLi43ZmZlODRhZGFkYjlkOSAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LWttLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LWttLmMKQEAgLTk0LDggJiM0Mzs5NCwxNSBAQCBzdGF0aWMgdm9pZCBwY3B1X2Rlc3Ryb3lfY2h1bmsoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQogCXBjcHVfc3RhdHNfY2h1bmtfZGVhbGxvYygpOwogCXRyYWNlX3BlcmNwdV9kZXN0cm95X2NodW5rKGNodW5rLSZndDtiYXNlX2FkZHIpOwogCi0JaWYgKGNodW5rLSZndDtkYXRhKQomIzQzOwlpZiAoY2h1bmstJmd0O2RhdGEpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKWNodW5rLSZndDtkYXRhOwomIzQzOwkJaW50IGk7CiYjNDM7CiYjNDM7CQkvKiBjbGVhciBjaHVuayBpbmZvIGZyb20gZWFjaCBwYWdlIGJlZm9yZSBmcmVlIHRoZW0gKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJcGNwdV9zZXRfcGFnZV9jaHVuayhwYWdlcyAmIzQzOyBpLCBOVUxMKTsKIAkJX19mcmVlX3BhZ2VzKGNodW5rLSZndDtkYXRhLCBvcmRlcl9iYXNlXzIobnJfcGFnZXMpKTsKJiM0MzsJfQogCXBjcHVfZnJlZV9jaHVuayhjaHVuayk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBkaXZlcyBkZWVwIGludG8ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgc2V2ZXJhbCBjcml0aWNhbCBmaWxlczogYG1tL2NvbXBhY3Rpb24uY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIGBtbS9wZXJjcHUta20uY2AuIFJpZ2h0IGF3YXksIHRoaXMgc2lnbmFscyB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSByZW1vdmFsIG9mIGBzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKWAgaW4gYG1tL2NvbXBhY3Rpb24uY2AsIHdoaWNoIGlzIGEgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyB0aGUgdXNlIG9mIHRoZSBgcHJpdmF0ZWAgZmllbGQgb2YgYSBwYWdlIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKVGhlcmUmIzM5O3MgYWxzbyBhIGBWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tJmd0O3ByaXZhdGUsIG5ld19oZWFkKWAgYWRkZWQgaW4gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIGh1Z2UgcGFnZSBzcGxpdHRpbmcuIEZ1cnRoZXJtb3JlLCBJIHNlZSBjaGFuZ2VzIHRvIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGluIGBtbS9pbnRlcm5hbC5oYCwgd2hlcmUgYHNldF9wYWdlX3ByaXZhdGUodGFpbCwgMClgIGlzIGNoYW5nZWQgdG8gYFZNX1dBUk5fT05fT05DRSh0YWlsLSZndDtwcml2YXRlKWAuIEFuZCBhIG5ldyBjaGVjayBmb3IgYHRhaWxfcGFnZS0mZ3Q7cHJpdmF0ZWAgaXMgYWRkZWQgaW4gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBpcyBhbGwgcG9pbnRpbmcgdG8gYSBtb2RpZmllZCBsb2dpYyBhcm91bmQgY2xlYXJpbmcgb3IgdmFsaWRhdGluZyBwYWdlIHByaXZhdGUgZGF0YS4gRmluYWxseSwgdGhlIHBhdGNoIGNsZWFycyBjaHVuayBpbmZvIGZyb20gZWFjaCBwYWdlIGJlZm9yZSBmcmVlaW5nIHRoZW0gaW4gYHBjcHVfZGVzdHJveV9jaHVua2AgaW4gYG1tL3BlcmNwdS1rbS5jYC4KCkNsZWFybHksIHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgdGVzdGluZyB0aGlzIGNoYW5nZSB0aG9yb3VnaGx5LiBJIG5lZWQgdG8gYmUgZm9jdXNlZCBvbiBzcGVjaWZpYyBzeW1ib2xzIGxpa2UgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAsIGFuZCBgcGNwdV9kZXN0cm95X2NodW5rYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQuCgpXYWl0LCBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgPyBUaGF0JiMzOTtzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIHRoYXQgY2hhbmdlIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AgYW5kIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCBhcmUgYWxzbyBnb2luZyB0byBiZSBmcmVxdWVudGx5IHVzZWQgZHVyaW5nIGNvbXBhY3Rpb24uIFRoZXNlIGFyZSBoaWdoLXByaW9yaXR5IHRlc3QgcG9pbnRzLgoKTm93IEkgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBtbS9jb21wYWN0aW9uLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19DT01QQUNUSU9OYCwgd2hpY2ggSSBrbm93LCBidXQgaXQmIzM5O3Mgd29ydGggYSByZWZyZXNoZXIuIGBtbS9odWdlX21lbW9yeS5jYCBpcyBkcml2ZW4gYnkgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgbW0vcGVyY3B1LWttLmNgIGRlcGVuZHMgb24gYENPTkZJR19ORUVEX1BFUl9DUFVfS01gLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBzZXR0aW5nIHVwIHRoZSByaWdodCB0ZXN0IGVudmlyb25tZW50LiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBvZiBgbW0vcGVyY3B1LWttLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyY3B1LWttLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgTW9kdWxlIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCB3aGVyZSBgcGVyY3B1LWttLm9gIGlzIGJlaW5nIGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb2JqZWN0IGZpbGVzLiBJIGtub3cgSSYjMzk7dmUgdXN1YWxseSBmb3VuZCB0aGVzZSB0eXBlcyBvZiBtb2R1bGVzIHdpdGhpbiBhIE1ha2VmaWxlIGluIHRoZSByZWxldmFudCBzdWJkaXJlY3RvcnksIHNvIHRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbXkgc2VhcmNoLiBUaW1lIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBNYWtlZmlsZSBoYXMgdG8gc2F5Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHUta20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSW5jbHVzaW9uKioKCkhtbSwgbm93IHRoYXQgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMsIGlzIGBwZXJjcHUta20uY2AgYWN0dWFsbHkgYmVpbmcgaW1wbGljaXRseSBicm91Z2h0IGluIHRocm91Z2ggYG1tL3BlcmNwdS5jYD8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkuIElmIGl0JiMzOTtzIGluY2x1ZGVkIHdpdGhpbiB0aGF0IG1vZHVsZSwgaXQgY291bGQgY2hhbmdlIG15IGFuYWx5c2lzIGNvbXBsZXRlbHkuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbmNsdWRlIHBhdGhzIGFuZCBhbnkgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0byBiZSBjZXJ0YWluLiBBIGZhbHNlIGFzc3VtcHRpb24gaGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSB2ZXJ5IHdyb25nIHBhdGguIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHUta20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGVyY3B1LWttLmMtMi0vKlxubW0vcGVyY3B1LWttLmM6MzogKiBtbS9wZXJjcHUta20uYyAtIGtlcm5lbCBtZW1vcnkgYmFzZWQgY2h1bmsgYWxsb2NhdGlvblxubW0vcGVyY3B1LWttLmMtNC0gKlxuLS1cbm1tL3BlcmNwdS1rbS5jLTEwLSAqXG5tbS9wZXJjcHUta20uYzoxMTogKiBUbyB1c2UgcGVyY3B1LWttLFxubW0vcGVyY3B1LWttLmMtMTItICpcbi0tXG5tbS9wZXJjcHUta20uYy0yNS0gKiAgIGtlcm5lbCBtZW1vcnkgYmxvY2sgdXNpbmcgYWxsb2NfcGFnZXMoKSwgbWVtb3J5IHdpbGwgYmUgd2FzdGVkIGlmXG5tbS9wZXJjcHUta20uYzoyNjogKiAgIGNodW5rIHNpemUgaXMgbm90IGFsaWduZWQuICBwZXJjcHUta20gY29kZSB3aWxsIHdoaW5lIGFib3V0IGl0LlxubW0vcGVyY3B1LWttLmMtMjctICovXG4tLVxubW0vcGVyY3B1LmM9MTU3Nj1zdGF0aWMgaW50IF9faW5pdCBwY3B1X3ZlcmlmeV9hbGxvY19pbmZvKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcbi0tXG5tbS9wZXJjcHUuYy0xNTc4LSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNXG5tbS9wZXJjcHUuYzoxNTc5OiNpbmNsdWRlIFwmIzM0O3BlcmNwdS1rbS5jXCYjMzQ7XG5tbS9wZXJjcHUuYy0xNTgwLSNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgTWVudGFsIEF1ZGl0KioKClJpZ2h0LCBzbyBgQ09ORklHX05FRURfUEVSX0NQVV9LTWAgaGFzIGNvbWUgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3ksIG9yIGF0IGxlYXN0IGEgc3Ryb25nIGNvbnNpZGVyYXRpb24sIGluIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSB0eXBpY2FsIHBhaXJpbmdzPyBPa2F5LCBmaXJzdCB0aGluZ3MgdGhhdCBzcHJpbmcgdG8gbWluZCBhcmUgYENPTkZJR19DT01QQUNUSU9OYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBob3cgdGhvc2UgYXJlIGNvbm5lY3RlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBwZXItQ1BVIGFsbG9jYXRpb25zLiBJcyBgQ09ORklHX05FRURfUEVSX0NQVV9LTWAgcHVsbGVkIGluIGJ5IGVpdGhlciBvZiB0aG9zZSwgb3IgZG9lcyBpdCAqcmVxdWlyZSogdGhlbT8gT3IgaXMgaXQgbW9yZSBvZiBhIGNvbXBhdGliaWxpdHkgY29uY2VybiwgZW5zdXJpbmcgdGhleSBwbGF5IG5pY2VseSB0b2dldGhlcj8gSSBuZWVkIHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHRyYWRlLW9mZnMuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHdlIGxvb2tpbmcgZm9yIGluY3JlYXNlZCBtZW1vcnkgdXRpbGl6YXRpb24/IFJlZHVjZWQgZnJhZ21lbnRhdGlvbj8gU3RhYmlsaXR5PyBNeSBtZW50YWwgbW9kZWwgbmVlZHMgdG8gaW5zdGFudGx5IGNhbGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHJlbWVtYmVyIHdoYXQgZWFjaCBjb25maWd1cmF0aW9uIGZsYWcgYWZmZWN0cy4gSXQmIzM5O3MgYSBxdWljayBtZW50YWwgcmV2aWV3IHRvIGRldGVybWluZSBpZiB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBuZXcgc2V0dGluZywgb3IgaWYgdGhpcyB3aWxsIGhhdmUgc29tZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqTWFrZWZpbGUgQ29tcGFjdGlvbiBDaGVjayoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjb21wYWN0aW9uLm9gIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgY3VycmVudCBgbW1gIG1vZHVsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIG9iamVjdCBmaWxlcyB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgbWFrZWZpbGUgdG8gc2VlIGlmIGBjb21wYWN0aW9uLm9gIGlzIGV2ZW4gcHJlc2VudC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCYjMzk7cyBwdXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb24ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG5tbS9NYWtlZmlsZTo1NjpcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGUtNTctXHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIENvbXBhY3Rpb24gT2JqZWN0IENvbXBpbGF0aW9uKioKCkhtbSwgaXQgc2VlbXMgdGhhdCBgY29tcGFjdGlvbi5vYCBpcyBjb25zaXN0ZW50bHkgYmVpbmcgYnVpbHQsIHdoaWNoIGlzIHVuZXhwZWN0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgZGVwZW5kZW5jeSBvciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGV4YW1pbmUgd2hldGhlciBgQ09ORklHX0NPTVBBQ1RJT05gIHBsYXlzIGEgcm9sZS4gU2luY2UgYGNvbXBhY3Rpb24ub2AgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBtbS9jb21wYWN0aW9uLmNgIGZpbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgYCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoaXMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhlIGNvbXBpbGF0aW9uIG9mIGBjb21wYWN0aW9uLm9gIGlzIGNvbmRpdGlvbmFsIG9uIHRoZSBgQ09ORklHX0NPTVBBQ1RJT05gIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyB3aWxsIHRoZW4gY2xhcmlmeSB3aGV0aGVyIHRoZSBidWlsZCBpcyBoYXBwZW5pbmcgY29ycmVjdGx5LCBvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYy0yOS1cbm1tL2NvbXBhY3Rpb24uYzozMDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMS0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz02MD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjItXG5tbS9jb21wYWN0aW9uLmM6NjM6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTkyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTE2LVxubW0vY29tcGFjdGlvbi5jOjExNzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0xMTgtXG4tLVxubW0vY29tcGFjdGlvbi5jPTQ5MT1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vY29tcGFjdGlvbi5jLTQ5NC19XG5tbS9jb21wYWN0aW9uLmM6NDk1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xubW0vY29tcGFjdGlvbi5jLTQ5Ni1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MTMzNz1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vY29tcGFjdGlvbi5jLTEzNzItXG5tbS9jb21wYWN0aW9uLmM6MTM3MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTM3NS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzM1MT1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzM1Mi1cbm1tL2NvbXBhY3Rpb24uYzozMzUzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjUzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29tcGFjdGlvbiBhbmQgSHVnZSBQYWdlcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIGRlZmluaXRlbHkgYWN0aXZlLiBHb29kLCBnb29kLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gbm93IGlzOiBob3cgZG9lcyB0aGlzIGludGVyYWN0IHdpdGggYGh1Z2VfbWVtb3J5LmNgPyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb21wYWN0aW9uLCB3aGljaCBhaW1zIHRvIGNvbnNvbGlkYXRlIGZyZWUgbWVtb3J5IHJlZ2lvbnMsIGFuZCBodWdlIHBhZ2VzLCB3aGljaCBhcmUgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbXBhY3Rpb24gbWVjaGFuaXNtcyBhcmUgYXdhcmUgb2YsIGFuZCBhcHByb3ByaWF0ZWx5IGhhbmRsZSwgaHVnZSBwYWdlIGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zLiBBcmUgd2UgcnVubmluZyBpbnRvIGZyYWdtZW50YXRpb24gaXNzdWVzIHdpdGhpbiBodWdlIHBhZ2UgcmVnaW9ucyB0aGF0IGNvbXBhY3Rpb24gY291bGQgYWxsZXZpYXRlPyBPciwgY29udmVyc2VseSwgaXMgY29tcGFjdGlvbiBwb3RlbnRpYWxseSAqZGlzcnVwdGluZyogdGhlIGNvbnRpZ3VvdXMgbWVtb3J5IHJlcXVpcmVkIGZvciBodWdlIHBhZ2VzLCBhbmQgaWYgc28sIGhvdz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGFnZSBhbGxvY2F0b3IsIHRoZSBOVU1BIGJhbGFuY2luZywgYW5kIHRoZSBjb21wYWN0aW9uIGNvZGUgcGF0aHMgdG8gYmUgY2VydGFpbiB3ZSBhcmUgZ2V0dGluZyB0aGUgcGVyZm9ybWFuY2Ugd2Ugd2FudC4gVGltZSB0byBzdGFydCB0cmFjaW5nIHNvbWUgY2FsbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gc2VlbXMgdG8gaGF2ZSBmbGFnZ2VkIHRoZSBpbXBvcnRhbmNlIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyBnb3QgaXQuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgSSYjMzk7bSBrZWVwaW5nIGluIG1pbmQuIEJ1dCwgd2hhdCBhYm91dCBgQ09ORklHX05FRURfUEVSX0NQVV9LTWA/IEl0JiMzOTtzIGJlZW4gcmF0dGxpbmcgYXJvdW5kIGluIG15IGhlYWQsIHNpbmNlIGl04oCZcyB1c3VhbGx5IGF1dG8tc2VsZWN0ZWQgYnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgcmlnaHQ/IFRvIGNsYXJpZnkgaXRzIHJlbGV2YW5jZSBoZXJlLCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGBhcmNoL2AgZGlyZWN0b3JpZXMuIEkmIzM5O2xsIHNlYXJjaCB0aG9zZSBhbmQgZmluZCBvdXQgd2hlcmUgYE5FRURfUEVSX0NQVV9LTWAgaXMgYmVpbmcgdXNlZCBhbmQgaG93IGFyY2hpdGVjdHVyZXMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhpcyBzZXR0aW5nLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBjbGFyaXR5IGFuZCBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORUVEX1BFUl9DUFVfS00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYE5FRURfUEVSX0NQVV9LTWAgRGVwZW5kZW5jeSoqCgpPa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHJlY2FsbCBlbmNvdW50ZXJpbmcgYE5FRURfUEVSX0NQVV9LTWAgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQsIG9yIG1heWJlIGV2ZW4gY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0IG1lIGxvb2sgaW4gdGhlIGBpbml0L0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AgZmlsZXMuIFRob3NlIGFyZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2VzIHRoaXMgZGVwZW5kZW5jeSBpcyBkZWZpbmVkLCBvciBhdCBsZWFzdCB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgaXRzIGV4YWN0IGxvY2F0aW9uIG9yIGhpbnRzIGFib3V0IHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtYXkgZGVwZW5kIG9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcDsgSSBjYW4mIzM5O3QgcHJvY2VlZCBjb25maWRlbnRseSB1bnRpbCBJIGhhdmUgYSBoYW5kbGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVFRF9QRVJfQ1BVX0tNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X3ZtYWxsb2MuYz0zMTY9cGNwdV9hbGxvY190ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTMxOC1cdGludCBydiA9IDA7XG5saWIvdGVzdF92bWFsbG9jLmM6MzE5OiNpZm5kZWYgQ09ORklHX05FRURfUEVSX0NQVV9LTVxubGliL3Rlc3Rfdm1hbGxvYy5jLTMyMC1cdHZvaWQgX19wZXJjcHUgKipwY3B1O1xuLS1cbm1tL0tjb25maWc9MTA0ND1jb25maWcgQVJDSF9NT0RVTEVfTkVFRFNfV0VBS19QRVJfQ1BVXG4tLVxubW0vS2NvbmZpZy0xMDQ5LSNcbm1tL0tjb25maWc6MTA1MDpjb25maWcgTkVFRF9QRVJfQ1BVX0tNXG5tbS9LY29uZmlnLTEwNTEtXHRkZXBlbmRzIG9uICFTTVAgfHwgIU1NVVxuLS1cbm1tL0tjb25maWc9MTE2OT1jb25maWcgREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVFxuLS1cbm1tL0tjb25maWctMTE3MS1cdGRlcGVuZHMgb24gU1BBUlNFTUVNXG5tbS9LY29uZmlnOjExNzI6XHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cbm1tL0tjb25maWctMTE3My1cdGRlcGVuZHMgb24gNjRCSVRcbi0tXG5tbS9wZXJjcHUta20uYy0xMi0gKlxubW0vcGVyY3B1LWttLmM6MTM6ICogLSBkZWZpbmUgQ09ORklHX05FRURfUEVSX0NQVV9LTSBmcm9tIHRoZSBhcmNoIEtjb25maWcuXG5tbS9wZXJjcHUta20uYy0xNC0gKlxuLS1cbm1tL3BlcmNwdS5jPTE1NzY9c3RhdGljIGludCBfX2luaXQgcGNwdV92ZXJpZnlfYWxsb2NfaW5mbyhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSk7XG5tbS9wZXJjcHUuYy0xNTc3LVxubW0vcGVyY3B1LmM6MTU3ODojaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9LTVxubW0vcGVyY3B1LmMtMTU3OS0jaW5jbHVkZSBcJiMzNDtwZXJjcHUta20uY1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIGZvciBUYXJnZXRlZCBQcm9maWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBORUVEX1BFUl9DUFVfS01gLiBJdCByZWxpZXMgb24gYCFTTVAgfHwgIU1NVWAsIHdoaWNoIG1ha2VzIGl0IHVuc3VpdGFibGUgZm9yIHN0YW5kYXJkIHNldHVwcyBsaWtlIHg4Nl82NCB3aXRoIFNNUCBhbmQgTU1VIGVuYWJsZWQuIE5vIHBvaW50IGluIHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgb24gaXQuIFdlIGVpdGhlciB3b24mIzM5O3QgbGlzdCBpdCwgb3Igd2lsbCBub3RlIGl0JiMzOTtzIG5vdCBsaWtlbHkgdG8gYmUgZW5hYmxlZC4KCkxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgbW0vcGFnZV9hbGxvYy5jYCByZWxhdGVkIHRvIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAuIEl0JiMzOTtzIGEgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiwgYWx3YXlzIGVuYWJsZWQuIFRoZW4gaW4gYG1tL2ludGVybmFsLmhgIHRoZXJlJiMzOTtzIGBwcmVwX2NvbXBvdW5kX3RhaWxgLiBUaGF0IGFsc28gc2VlbXMgYWx3YXlzIGVuYWJsZWQuIFRoaXMgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZSBiZXN0IHBsYWNlIHRvIHByb2ZpbGUuCgpTbyB0aGUgY29uZmlncyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhpbmdzIHJlbGF0aW5nIHRvIHRoZXNlLCB0aGVuLiBUaGUgZm9jdXMgc3ltYm9scyBsb29rIGxpa2U6IGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBhbmQgYHBjcHVfZGVzdHJveV9jaHVua2AuCgpOb3csIHRoYXQgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBtb2RpZmljYXRpb24sIHdoaWxlIHByZXNlbnQsIGlzIGxpa2VseSBpbiBhIHZlcnkgaG90IHBhdGguIEkgd2FudCB0byBhdm9pZCBhZGRpbmcgdG9vIG11Y2ggb3ZlcmhlYWQgdGhlcmUuIEhvd2V2ZXIsIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AgYW5kIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCBhcmUgY29tcGFjdGlvbiBmdW5jdGlvbnMsIHdoaWNoIGFyZSBsZXNzIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHRoYW4gcGFnZSBhbGxvY2F0aW9uLCBidXQgc3RpbGwgc29tZXdoYXQgaG90LiBUaGUgb25lcyB0aGF0IGxvb2sgbW9zdCBwcm9taXNpbmcgYXJlIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBzaW5jZSBpdCBpcyBmb3IgVEhQIHNwbGl0dGluZywgd2hpY2ggaXMgYSBnb29kIHRhcmdldC4gYHBjcHVfZGVzdHJveV9jaHVua2AgZm9yIHBlcmNwdSBjaHVuayBkZXN0cnVjdGlvbiBpcyBhbHNvIGEgcG90ZW50aWFsIGdvb2QgdGFyZ2V0LgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLiBJJiMzOTtsbCBkaWcgaW50byBgbW0vY29tcGFjdGlvbi5jYCB0byBzZWUgaG93IHRob3NlIGFyZSB3b3JraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9NTUyPXN0YXRpYyBib29sIGNvbXBhY3RfdW5sb2NrX3Nob3VsZF9hYm9ydChzcGlubG9ja190ICpsb2NrLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy01NzQtICovXG5tbS9jb21wYWN0aW9uLmM6NTc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxubW0vY29tcGFjdGlvbi5jLTU3Ni1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0X3Bmbixcbi0tXG5tbS9jb21wYWN0aW9uLmM9NzEzPWlzb2xhdGVfZnJlZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy03MzAtXHRcdFx0XHRibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbm1tL2NvbXBhY3Rpb24uYzo3MzE6XHRcdC8qIFByb3RlY3QgcGZuIGZyb20gY2hhbmdpbmcgYnkgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2sgKi9cbm1tL2NvbXBhY3Rpb24uYy03MzItXHRcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9zdGFydF9wZm4gPSBwZm47XG4tLVxubW0vY29tcGFjdGlvbi5jLTc0OS1cbm1tL2NvbXBhY3Rpb24uYzo3NTA6XHRcdGlzb2xhdGVkID0gaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFx1MDAyNmlzb2xhdGVfc3RhcnRfcGZuLFxubW0vY29tcGFjdGlvbi5jLTc1MS1cdFx0XHRcdFx0YmxvY2tfZW5kX3BmbiwgY2MtXHUwMDNlZnJlZXBhZ2VzLCAwLCB0cnVlKTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtNzUzLVx0XHQvKlxubW0vY29tcGFjdGlvbi5jOjc1NDpcdFx0ICogSW4gc3RyaWN0IG1vZGUsIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKCkgcmV0dXJucyAwIGlmXG5tbS9jb21wYWN0aW9uLmMtNzU1LVx0XHQgKiB0aGVyZSBhcmUgYW55IGhvbGVzIGluIHRoZSBibG9jayAoaWUuIGludmFsaWQgUEZOcyBvclxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xNDc1PWZhc3RfaXNvbGF0ZV9hcm91bmQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xNDk1LVxubW0vY29tcGFjdGlvbi5jOjE0OTY6XHRpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhjYywgXHUwMDI2c3RhcnRfcGZuLCBlbmRfcGZuLCBjYy1cdTAwM2VmcmVlcGFnZXMsIDEsIGZhbHNlKTtcbm1tL2NvbXBhY3Rpb24uYy0xNDk3LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xNjkzPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xNzY0LVx0XHQvKiBGb3VuZCBhIGJsb2NrIHN1aXRhYmxlIGZvciBpc29sYXRpbmcgZnJlZSBwYWdlcyBmcm9tLiAqL1xubW0vY29tcGFjdGlvbi5jOjE3NjU6XHRcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFx1MDAyNmlzb2xhdGVfc3RhcnRfcGZuLFxubW0vY29tcGFjdGlvbi5jLTE3NjYtXHRcdFx0XHRcdGJsb2NrX2VuZF9wZm4sIGNjLVx1MDAzZWZyZWVwYWdlcywgc3RyaWRlLCBmYWxzZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jLTE4MDItXHQgKiBicm9rZSBmcm9tIHRoZSBsb29wIGFuZCBzZXQgaXNvbGF0ZV9zdGFydF9wZm4gYmFzZWQgb24gdGhlIGxhc3Rcbm1tL2NvbXBhY3Rpb24uYzoxODAzOlx0ICogY2FsbCB0byBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpLCBvciB3ZSBtZXQgdGhlIG1pZ3JhdGlvbiBzY2FubmVyXG5tbS9jb21wYWN0aW9uLmMtMTgwNC1cdCAqIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVkIGR1ZSB0byBpc29sYXRlX3N0YXJ0X3BmbiBcdTAwM2MgbG93X3BmblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IEhvdHNwb3RzKioKCk9rYXksIGxldCYjMzk7cyByZWZpbmUgdGhpcyBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIE15IGluaXRpYWwgdGhvdWdodHMgaWRlbnRpZmllZCBzb21lIGdvb2QgY2FuZGlkYXRlcy4gSSBsaWtlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYW5kIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBhcyBkZWZpbml0ZSBwb3NzaWJpbGl0aWVzIGZvciBob3RzcG90cyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gYHBjcHVfZGVzdHJveV9jaHVua2AgYWxzbyBjYW1lIHRvIG1pbmQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gQWgsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3BlcmNwdS1rbS5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYCBpcyBlbmFibGVkLiBUaGF0IGRlcGVuZHMgb24gYCFTTVAgfHwgIU1NVWAuIFNvIGl0JiMzOTtzICp1bmxpa2VseSogdG8gYmUgcHJlc2VudCBpbiB0eXBpY2FsIHg4Nl82NCBzZXR1cHMsIGJ1dCBpdCYjMzk7cyBzdGlsbCB3b3J0aCBub3RpbmcuIExldCYjMzk7cyBsaXN0IGl0IGFueXdheSwgYXQgdGhpcyBzdGFnZS4KCkhtbSwgYSBtb21lbnQuIExvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgaGFzIGJlZW4gbW9kaWZpZWQuIFRoYXQmIzM5O3MgYSBzdXBlciBob3QgcGF0aCEgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgbGlzdGluZyBpdCB0byByZWR1Y2Ugbm9pc2UuIEFsc28sIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYG1tL2ludGVybmFsLmhgLiBJJiMzOTtsbCBvbWl0IGl0IGFzIHdlbGwuCgpOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBBcmUgYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRoZSBvbmx5IG9uZXMgdGhhdCBoZWF2aWx5IGluZmx1ZW5jZSB0aGVzZSBtb2RpZmllZCBmaWxlcz8gWWVzLCB0aGV5IHNlZW0gdG8gY292ZXIgdGhlIG1haW4gb25lcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBmdXJ0aGVyLiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgaW5kZWVkIHRpZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBtbS9jb21wYWN0aW9uLmNgIGlzIGRyaXZlbiBieSBgQ09ORklHX0NPTVBBQ1RJT05gLCBhbmQgYG1tL3BlcmNwdS1rbS5jYCAoYXMgd2UgZGlzY3Vzc2VkKSBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYC4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZm9ybWFsaXplIG15IGZpbmRpbmdzLgoKSGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6CgoqICAgKipGb2N1c1N5bWJvbHM6KioKICAgICogICBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgCiAgICAqICAgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgCiAgICAqICAgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYAogICAgKiAgIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYAogICAgKiAgIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgCgpIZXJlIGFyZSB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnM6CgoqICAgKipFbmFibGVDb25maWdzOioqCiAgICAqICAgYENPTVBBQ1RJT05gCiAgICAqICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYAogICAgKiAgIGBORUVEX1BFUl9DUFVfS01gCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgbmFtZS4gVGhhdCYjMzk7cyBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcGFjdGlvbl9hbGxvY19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTE2OTM9c3RhdGljIHZvaWQgaXNvbGF0ZV9mcmVlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4tLVxubW0vY29tcGFjdGlvbi5jLTE4MTItICovXG5tbS9jb21wYWN0aW9uLmM6MTgxMzpzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYXRhKVxubW0vY29tcGFjdGlvbi5jLTE4MTQte1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0xODYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Moc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcbm1tL2NvbXBhY3Rpb24uYy0xODYxLXtcbm1tL2NvbXBhY3Rpb24uYzoxODYyOlx0cmV0dXJuIGFsbG9jX2hvb2tzKGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHNyYywgZGF0YSkpO1xubW0vY29tcGFjdGlvbi5jLTE4NjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCBGdW5jdGlvbiBOYW1lIGFuZCBSZWxhdGVkIENvZGUqKgoKUmlnaHQsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuLi4gdGhhdCYjMzk7cyB0aGUgbW9uaWtlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBJdCBpbW1lZGlhdGVseSBzaWduYWxzIGFuIGFsbG9jYXRpb24gcHJvY2VzcyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uIHRoYXQgKmRvZXNuJiMzOTt0KiBpbnZvbHZlIHByb2ZpbGluZy4gSSYjMzk7bSB3b25kZXJpbmcgd2h5IHRoYXQgZGlzdGluY3Rpb24gaXMgaW1wb3J0YW50IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KCk15IG5leHQgbW92ZSBpcyBkZWZpbml0ZWx5IHRvIGp1bXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0byBzY3J1dGluaXplIHRoZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24mIzM5O3MgZ29pbmcgdG8gaG9sZCB0aGUgY29yZSBsb2dpYyBmb3IgaG93IGxhcmdlIG1lbW9yeSBibG9ja3MsIG9yIGZvbGlvcyBpbiB0aGlzIGNhc2UsIGdldCBkaXZpZGVkIHVwLCB3aGljaCBkaXJlY3RseSByZWxhdGVzIHRvIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGNvbXBhY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZSBhbGxvY2F0aW9uIG9mIHBhZ2VzIGluIGNvbXBhY3Rpb24gaXMgZGlmZmVyZW50IHRoYW4gd2hlbiBwYWdlcyBhcmUgbm90IGJlaW5nIGNvbXBhY3RlZC4gU3BlY2lmaWNhbGx5LCBkb2VzIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAgZ2V0IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGF0IGZ1bmN0aW9uPyBJZiBzbywgd2hhdCBpcyB0aGUgY2FsbCBwYXRoPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM1MTY9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1MjctICovXG5tbS9odWdlX21lbW9yeS5jOjM1Mjg6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zNTI5LVx0XHRpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY2OC0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcbm1tL2h1Z2VfbWVtb3J5LmM6MzY2OTogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXG5tbS9odWdlX21lbW9yeS5jLTM2NzAtICogICAgYWxvbmcgd2l0aCBzdGF0cyB1cGRhdGUuXG5tbS9odWdlX21lbW9yeS5jLTM2NzEtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xubW0vaHVnZV9tZW1vcnkuYzozNjcyOiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTM2NzMtICogICAgdGhlIEBmb2xpbyB0byBvbmUgbG93ZXIgb3JkZXIgYXQgYSB0aW1lLiBUaGUgZm9saW8gY29udGFpbmluZyBAc3BsaXRfYXRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODU9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzMwLVx0XHRwZ2FsbG9jX3RhZ19zcGxpdChmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jOjM3MzE6XHRcdF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzMyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gTmFtZSBhbmQgUmVsYXRlZCBDb2RlKioKClllcywgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLi4udGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gbmFtZSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIE9rYXksIGxldCYjMzk7cyBzZWUsIHdoYXQmIzM5O3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBgbW0vcGVyY3B1LWttLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcG90ZW50aWFsbHkgcmVsYXRlLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggcGVyY3B1IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmb2xpbyBzcGxpdHRpbmcgY29udGV4dC4gS25vd2luZyB3aGVyZSBtZW1vcnkgY2h1bmtzIGFyZSBkZXN0cm95ZWQgY2FuIGNsYXJpZnkgYSBsb3QuIE5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBvciBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBiYXNlZCBvbiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE0OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjcHVfZGVzdHJveV9jaHVuayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BlcmNwdS1rbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BlcmNwdS1rbS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jcmVhdGVfY2h1bmsoZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3BlcmNwdS1rbS5jLTg2LVxubW0vcGVyY3B1LWttLmM6ODc6c3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbm1tL3BlcmNwdS1rbS5jLTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTQ6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzgKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IENvcmUgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gc29tZSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGNvZGUgaW4gcGFnZSBjb21wYWN0aW9uLCBsaWtlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHNwbGl0dGluZyB3aXRoIGNoYW5nZXMgdG8gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBhbmQsIGNydWNpYWxseSwgdGhlIGRlc3RydWN0aW9uIG9mIHBlci1DUFUga2VybmVsIG1lbW9yeSBjaHVua3Mg4oCTIHRoYXQmIzM5O3MgYHBjcHVfZGVzdHJveV9jaHVua2AuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgYHBhZ2UtJmd0O3ByaXZhdGVgIGZpZWxkLiBJdCYjMzk7cyByZW1vdmluZyBpdHMgc2V0dGluZyBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkaW5nIGNoZWNrcyBhbmQgd2FybmluZ3MgcmVsYXRlZCB0byBpdHMgdW5leHBlY3RlZCB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBNeSBicmFpbiBpbW1lZGlhdGVseSBsaWdodHMgdXAgd2l0aCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zIGhlcmUuIFRoaXMgbGV2ZWwgb2YgY29yZSBrZXJuZWwgbG9naWMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhbmQgdGhlIHBhdGNoIGF1dGhvciBldmVuIGFncmVlcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBtYXJraW5nIHRoaXMgYXMgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUuJiMzNDsKClRvIGZvY3VzIG15IGVmZm9ydHMsIEkgbmVlZCB0byB0YXJnZXQgdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGFuZCBvZiBjb3Vyc2UsIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhcmUgdGFraW5nIHBsYWNlLCBzbyB0aGVzZSBhcmUgdGhlIGhvdHNwb3RzIHRvIHB1dCB1bmRlciB0aGUgbWljcm9zY29wZS4KCkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoZXNlIGNoYW5nZXMgZWZmZWN0aXZlbHkuIEkmIzM5O2xsIG5lZWQgYENPTVBBQ1RJT05gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5FRURfUEVSX0NQVV9LTWAgZW5hYmxlZCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNoYW5nZXMuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgcGxhbiBsb2NrZWQgaW4sIEkmIzM5O20gbm93IHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgZ2V0IHRvIHRoZSBmdXp6aW5nIHN0YWdlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtORUVEX1BFUl9DUFVfS00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICAgJiMzNDtmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fc3BsaXRfZm9saW9fdG9fb3JkZXImIzM0OywKICAgICYjMzQ7cGNwdV9kZXN0cm95X2NodW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBpbiBwYWdlIGNvbXBhY3Rpb24sIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHNwbGl0dGluZywgYW5kIHBlci1jcHUga2VybmVsIG1lbW9yeSBjaHVuayBkZXN0cnVjdGlvbi4gSXQgcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBwYWdlLVx1MDAzZXByaXZhdGUgZHVyaW5nIGNvbXBhY3Rpb24gYW5kIGFkZHMgd2FybmluZ3MvY2hlY2tzIGZvciB1bmV4cGVjdGVkIHBhZ2UtXHUwMDNlcHJpdmF0ZSB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX0tNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDssCiAgICAmIzM0O3BjcHVfZGVzdHJveV9jaHVuayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cdTAwM2Vwcml2YXRlIGR1cmluZyBjb21wYWN0aW9uIGFuZCBhZGRzIHdhcm5pbmdzL2NoZWNrcyBmb3IgdW5leHBlY3RlZCBwYWdlLVx1MDAzZXByaXZhdGUgdmFsdWVzIGluIHRhaWwgcGFnZXMgZHVyaW5nIHNwbGl0dGluZyBhbmQgZnJlZWluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MTcuNTg1MTkwNDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5MTIyOTUxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk5FRURfUEVSX0NQVV9LTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrXCIsXG4gICAgXCJmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzXCIsXG4gICAgXCJjb21wYWN0aW9uX2FsbG9jX25vcHJvZlwiLFxuICAgIFwiX19zcGxpdF9mb2xpb190b19vcmRlclwiLFxuICAgIFwicGNwdV9kZXN0cm95X2NodW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGluIHBhZ2UgY29tcGFjdGlvbiwgdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGVyLWNwdSBrZXJuZWwgbWVtb3J5IGNodW5rIGRlc3RydWN0aW9uLiBJdCByZW1vdmVzIHRoZSBzZXR0aW5nIG9mIHBhZ2UtXFx1MDAzZXByaXZhdGUgZHVyaW5nIGNvbXBhY3Rpb24gYW5kIGFkZHMgd2FybmluZ3MvY2hlY2tzIGZvciB1bmV4cGVjdGVkIHBhZ2UtXFx1MDAzZXByaXZhdGUgdmFsdWVzIGluIHRhaWwgcGFnZXMgZHVyaW5nIHNwbGl0dGluZyBhbmQgZnJlZWluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDoxNy41ODUxOTg2MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTcyODMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhOWQ4ZTYwZjk0ZmEyMGU1NGYxNDY0OGI1ODAyOTFhZjEyMjIzNmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTQ6MDA6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXFxuaW5kZXggNGIyMzE4ZmFkNGViNTkuLjlmODEwNTVhMzU4ZWQxIDEwMDY0NFxcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xcbkBAIC02NDUsNyArNjQ1LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxuIFxcdFxcdGlzb2xhdGVkID0gX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7XFxuIFxcdFxcdGlmICghaXNvbGF0ZWQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKTtcXG4gXFxuIFxcdFxcdG5yX3NjYW5uZWQgKz0gaXNvbGF0ZWQgLSAxO1xcbiBcXHRcXHR0b3RhbF9pc29sYXRlZCArPSBpc29sYXRlZDtcXG5AQCAtMTYxOCw3ICsxNjE3LDYgQEAgc3RhdGljIHZvaWQgZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4gXFx0XFx0LyogSXNvbGF0ZSB0aGUgcGFnZSBpZiBhdmFpbGFibGUgKi9cXG4gXFx0XFx0aWYgKHBhZ2UpIHtcXG4gXFx0XFx0XFx0aWYgKF9faXNvbGF0ZV9mcmVlX3BhZ2UocGFnZSwgb3JkZXIpKSB7XFxuLVxcdFxcdFxcdFxcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xcbiBcXHRcXHRcXHRcXHRucl9pc29sYXRlZCA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuIFxcdFxcdFxcdFxcdG5yX3NjYW5uZWQgKz0gbnJfaXNvbGF0ZWQgLSAxO1xcbiBcXHRcXHRcXHRcXHR0b3RhbF9pc29sYXRlZCArPSBucl9pc29sYXRlZDtcXG5AQCAtMTg0Nyw3ICsxODQ1LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGFcXG4gXFx0XFx0c2l6ZSBcXHUwMDNlXFx1MDAzZT0gMTtcXG4gXFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmcmVlcGFnZVtzaXplXS5scnUsIFxcdTAwMjZjYy1cXHUwMDNlZnJlZXBhZ2VzW3N0YXJ0X29yZGVyXSk7XFxuLVxcdFxcdHNldF9wYWdlX3ByaXZhdGUoXFx1MDAyNmZyZWVwYWdlW3NpemVdLCBzdGFydF9vcmRlcik7XFxuIFxcdH1cXG4gXFx0ZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBmYjJkN2RkMTdkZTBjZi4uZWEwNDQ1ZDZjMTdmMDEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMzU5MSw2ICszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4gXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuIFxcdFxcdG5ld19mb2xpby1cXHUwMDNlaW5kZXggPSBmb2xpby1cXHUwMDNlaW5kZXggKyBpO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogcGFnZS1cXHUwMDNlcHJpdmF0ZSBzaG91bGQgbm90IGJlIHNldCBpbiB0YWlsIHBhZ2VzLiBXYXJuIG9uY2VcXG4rXFx0XFx0ICogaWYgcHJpdmF0ZSBpcyB1bmV4cGVjdGVkbHkgc2V0LiBEbyBpdCBiZWZvcmUgc3dhcC52YWwgYXNzaWdubWVudFxcbitcXHRcXHQgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tXFx1MDAzZXByaXZhdGUsIG5ld19oZWFkKTtcXG4rXFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXFxuIFxcdFxcdFxcdG5ld19mb2xpby1cXHUwMDNlc3dhcC52YWwgPSBmb2xpby1cXHUwMDNlc3dhcC52YWwgKyBpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCA4NDFjMjc2MTE2MjdlMC4uMzk4NzQxYThhYjA5MjMgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtNzQxLDcgKzc0MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXFxuIHtcXG4gXFx0dGFpbC1cXHUwMDNlbWFwcGluZyA9IFRBSUxfTUFQUElORztcXG4gXFx0c2V0X2NvbXBvdW5kX2hlYWQodGFpbCwgaGVhZCwgb3JkZXIpO1xcbi1cXHRzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApO1xcbitcXHRWTV9XQVJOX09OX09OQ0UodGFpbC1cXHUwMDNlcHJpdmF0ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IGE2MzczM2RhYzY1OWUzLi5jYzQ1ZGZlODljNzZiYSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtMTM3NywxNSArMTM3NywyMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuICNlbmRpZlxcbiBcXHRcXHR9XFxuIFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyAoMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqdGFpbF9wYWdlID0gcGFnZSArIGk7XFxuK1xcbiBcXHRcXHRcXHRpZiAoY29tcG91bmQpXFxuLVxcdFxcdFxcdFxcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgKyBpKTtcXG4rXFx0XFx0XFx0XFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgdGFpbF9wYWdlKTtcXG4gXFx0XFx0XFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAoZnJlZV9wYWdlX2lzX2JhZChwYWdlICsgaSkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGZyZWVfcGFnZV9pc19iYWQodGFpbF9wYWdlKSkge1xcbitcXHRcXHRcXHRcXHRcXHRiYWQrKztcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdFxcdGlmICh0YWlsX3BhZ2UtXFx1MDAzZXByaXZhdGUpIHtcXG4rXFx0XFx0XFx0XFx0XFx0YmFkX3BhZ2UodGFpbF9wYWdlLCBcXFwibm9uemVybyBwcml2YXRlXFxcIik7XFxuIFxcdFxcdFxcdFxcdFxcdGJhZCsrO1xcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdChwYWdlICsgaSktXFx1MDAzZWZsYWdzLmYgXFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcXG4rXFx0XFx0XFx0dGFpbF9wYWdlLVxcdTAwM2VmbGFncy5mIFxcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUta20uYyBiL21tL3BlcmNwdS1rbS5jXFxuaW5kZXggNGVmYTc0YTQ5NWNiNmIuLjdmZmU4NGFkYWRiOWQ5IDEwMDY0NFxcbi0tLSBhL21tL3BlcmNwdS1rbS5jXFxuKysrIGIvbW0vcGVyY3B1LWttLmNcXG5AQCAtOTQsOCArOTQsMTUgQEAgc3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcXG4gXFx0cGNwdV9zdGF0c19jaHVua19kZWFsbG9jKCk7XFxuIFxcdHRyYWNlX3BlcmNwdV9kZXN0cm95X2NodW5rKGNodW5rLVxcdTAwM2ViYXNlX2FkZHIpO1xcbiBcXG4tXFx0aWYgKGNodW5rLVxcdTAwM2VkYXRhKVxcbitcXHRpZiAoY2h1bmstXFx1MDAzZWRhdGEpIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2VzID0gKHN0cnVjdCBwYWdlICopY2h1bmstXFx1MDAzZWRhdGE7XFxuK1xcdFxcdGludCBpO1xcbitcXG4rXFx0XFx0LyogY2xlYXIgY2h1bmsgaW5mbyBmcm9tIGVhY2ggcGFnZSBiZWZvcmUgZnJlZSB0aGVtICovXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbitcXHRcXHRcXHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzICsgaSwgTlVMTCk7XFxuIFxcdFxcdF9fZnJlZV9wYWdlcyhjaHVuay1cXHUwMDNlZGF0YSwgb3JkZXJfYmFzZV8yKG5yX3BhZ2VzKSk7XFxuK1xcdH1cXG4gXFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MTguNDA2MDE1NDA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDA5MTQ1NjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTkVFRF9QRVJfQ1BVX0tNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gICAgXCJwY3B1X2Rlc3Ryb3lfY2h1bmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cXHUwMDNlcHJpdmF0ZSBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkcyB3YXJuaW5ncy9jaGVja3MgZm9yIHVuZXhwZWN0ZWQgcGFnZS1cXHUwMDNlcHJpdmF0ZSB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2E5ZDhlNjBmOTRmYTIwZTU0ZjE0NjQ4YjU4MDI5MWFmMTIyMjM2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE0OjAwOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCA0YjIzMThmYWQ0ZWI1OS4uOWY4MTA1NWEzNThlZDEgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTY0NSw3ICs2NDUsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbiBcdFx0aXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcdFx0aWYgKCFpc29sYXRlZClcbiBcdFx0XHRicmVhaztcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXG4gXHRcdG5yX3NjYW5uZWQgKz0gaXNvbGF0ZWQgLSAxO1xuIFx0XHR0b3RhbF9pc29sYXRlZCArPSBpc29sYXRlZDtcbkBAIC0xNjE4LDcgKzE2MTcsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0XHQvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqL1xuIFx0XHRpZiAocGFnZSkge1xuIFx0XHRcdGlmIChfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKSkge1xuLVx0XHRcdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXHRcdFx0XHRucl9pc29sYXRlZCA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIFx0XHRcdFx0bnJfc2Nhbm5lZCArPSBucl9pc29sYXRlZCAtIDE7XG4gXHRcdFx0XHR0b3RhbF9pc29sYXRlZCArPSBucl9pc29sYXRlZDtcbkBAIC0xODQ3LDcgKzE4NDUsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYVxuIFx0XHRzaXplIFx1MDAzZVx1MDAzZT0gMTtcbiBcbiBcdFx0bGlzdF9hZGQoXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0ubHJ1LCBcdTAwMjZjYy1cdTAwM2VmcmVlcGFnZXNbc3RhcnRfb3JkZXJdKTtcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShcdTAwMjZmcmVlcGFnZVtzaXplXSwgc3RhcnRfb3JkZXIpO1xuIFx0fVxuIFx0ZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBmYjJkN2RkMTdkZTBjZi4uZWEwNDQ1ZDZjMTdmMDEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzU5MSw2ICszNTkxLDEzIEBAIHN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBmb2xpby1cdTAwM2VtYXBwaW5nO1xuIFx0XHRuZXdfZm9saW8tXHUwMDNlaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCArIGk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIHBhZ2UtXHUwMDNlcHJpdmF0ZSBzaG91bGQgbm90IGJlIHNldCBpbiB0YWlsIHBhZ2VzLiBXYXJuIG9uY2VcbitcdFx0ICogaWYgcHJpdmF0ZSBpcyB1bmV4cGVjdGVkbHkgc2V0LiBEbyBpdCBiZWZvcmUgc3dhcC52YWwgYXNzaWdubWVudFxuK1x0XHQgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuXG4rXHRcdCAqL1xuK1x0XHRWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tXHUwMDNlcHJpdmF0ZSwgbmV3X2hlYWQpO1xuK1xuIFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuIFx0XHRcdG5ld19mb2xpby1cdTAwM2Vzd2FwLnZhbCA9IGZvbGlvLVx1MDAzZXN3YXAudmFsICsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggODQxYzI3NjExNjI3ZTAuLjM5ODc0MWE4YWIwOTIzIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTc0MSw3ICs3NDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuIHtcbiBcdHRhaWwtXHUwMDNlbWFwcGluZyA9IFRBSUxfTUFQUElORztcbiBcdHNldF9jb21wb3VuZF9oZWFkKHRhaWwsIGhlYWQsIG9yZGVyKTtcbi1cdHNldF9wYWdlX3ByaXZhdGUodGFpbCwgMCk7XG4rXHRWTV9XQVJOX09OX09OQ0UodGFpbC1cdTAwM2Vwcml2YXRlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGE2MzczM2RhYzY1OWUzLi5jYzQ1ZGZlODljNzZiYSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMTM3NywxNSArMTM3NywyMyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gI2VuZGlmXG4gXHRcdH1cbiBcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHBhZ2UgKnRhaWxfcGFnZSA9IHBhZ2UgKyBpO1xuK1xuIFx0XHRcdGlmIChjb21wb3VuZClcbi1cdFx0XHRcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgKyBpKTtcbitcdFx0XHRcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHRhaWxfcGFnZSk7XG4gXHRcdFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xuLVx0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSArIGkpKSB7XG4rXHRcdFx0XHRpZiAoZnJlZV9wYWdlX2lzX2JhZCh0YWlsX3BhZ2UpKSB7XG4rXHRcdFx0XHRcdGJhZCsrO1xuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdH1cbitcbitcdFx0XHRcdGlmICh0YWlsX3BhZ2UtXHUwMDNlcHJpdmF0ZSkge1xuK1x0XHRcdFx0XHRiYWRfcGFnZSh0YWlsX3BhZ2UsIFwibm9uemVybyBwcml2YXRlXCIpO1xuIFx0XHRcdFx0XHRiYWQrKztcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdChwYWdlICsgaSktXHUwMDNlZmxhZ3MuZiBcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XG4rXHRcdFx0dGFpbF9wYWdlLVx1MDAzZWZsYWdzLmYgXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS1rbS5jIGIvbW0vcGVyY3B1LWttLmNcbmluZGV4IDRlZmE3NGE0OTVjYjZiLi43ZmZlODRhZGFkYjlkOSAxMDA2NDRcbi0tLSBhL21tL3BlcmNwdS1rbS5jXG4rKysgYi9tbS9wZXJjcHUta20uY1xuQEAgLTk0LDggKzk0LDE1IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gXHRwY3B1X3N0YXRzX2NodW5rX2RlYWxsb2MoKTtcbiBcdHRyYWNlX3BlcmNwdV9kZXN0cm95X2NodW5rKGNodW5rLVx1MDAzZWJhc2VfYWRkcik7XG4gXG4tXHRpZiAoY2h1bmstXHUwMDNlZGF0YSlcbitcdGlmIChjaHVuay1cdTAwM2VkYXRhKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKWNodW5rLVx1MDAzZWRhdGE7XG4rXHRcdGludCBpO1xuK1xuK1x0XHQvKiBjbGVhciBjaHVuayBpbmZvIGZyb20gZWFjaCBwYWdlIGJlZm9yZSBmcmVlIHRoZW0gKi9cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKylcbitcdFx0XHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzICsgaSwgTlVMTCk7XG4gXHRcdF9fZnJlZV9wYWdlcyhjaHVuay1cdTAwM2VkYXRhLCBvcmRlcl9iYXNlXzIobnJfcGFnZXMpKTtcbitcdH1cbiBcdHBjcHVfZnJlZV9jaHVuayhjaHVuayk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MTguNDA2MDE5MDM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5MzEzNDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZGl2ZXMgZGVlcCBpbnRvIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgZmlsZXM6IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGFuZCBgbW0vcGVyY3B1LWttLmNgLiBSaWdodCBhd2F5LCB0aGlzIHNpZ25hbHMgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSByZW1vdmFsIG9mIGBzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKWAgaW4gYG1tL2NvbXBhY3Rpb24uY2AsIHdoaWNoIGlzIGEgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVwbGFjaW5nIHRoZSB1c2Ugb2YgdGhlIGBwcml2YXRlYCBmaWVsZCBvZiBhIHBhZ2UgaW4gY2VydGFpbiBzY2VuYXJpb3MuXG5cblRoZXJlJ3MgYWxzbyBhIGBWTV9XQVJOX09OX09OQ0VfUEFHRShuZXdfZm9saW8tXHUwMDNlcHJpdmF0ZSwgbmV3X2hlYWQpYCBhZGRlZCBpbiBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBodWdlIHBhZ2Ugc3BsaXR0aW5nLiBGdXJ0aGVybW9yZSwgSSBzZWUgY2hhbmdlcyB0byBgcHJlcF9jb21wb3VuZF90YWlsYCBpbiBgbW0vaW50ZXJuYWwuaGAsIHdoZXJlIGBzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApYCBpcyBjaGFuZ2VkIHRvIGBWTV9XQVJOX09OX09OQ0UodGFpbC1cdTAwM2Vwcml2YXRlKWAuIEFuZCBhIG5ldyBjaGVjayBmb3IgYHRhaWxfcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyBhZGRlZCBpbiBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGFsbCBwb2ludGluZyB0byBhIG1vZGlmaWVkIGxvZ2ljIGFyb3VuZCBjbGVhcmluZyBvciB2YWxpZGF0aW5nIHBhZ2UgcHJpdmF0ZSBkYXRhLiBGaW5hbGx5LCB0aGUgcGF0Y2ggY2xlYXJzIGNodW5rIGluZm8gZnJvbSBlYWNoIHBhZ2UgYmVmb3JlIGZyZWVpbmcgdGhlbSBpbiBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBgbW0vcGVyY3B1LWttLmNgLlxuXG5DbGVhcmx5LCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSB0ZXN0aW5nIHRoaXMgY2hhbmdlIHRob3JvdWdobHkuIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uIHNwZWNpZmljIHN5bWJvbHMgbGlrZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCwgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCwgYW5kIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZC5cblxuV2FpdCwgYF9fZnJlZV9wYWdlc19wcmVwYXJlYD8gVGhhdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIHRoYXQgY2hhbmdlIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AgYW5kIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCBhcmUgYWxzbyBnb2luZyB0byBiZSBmcmVxdWVudGx5IHVzZWQgZHVyaW5nIGNvbXBhY3Rpb24uIFRoZXNlIGFyZSBoaWdoLXByaW9yaXR5IHRlc3QgcG9pbnRzLlxuXG5Ob3cgSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGlzIHdpdGggdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gYG1tL2NvbXBhY3Rpb24uY2AgaXMgZW5hYmxlZCBieSBgQ09ORklHX0NPTVBBQ1RJT05gLCB3aGljaCBJIGtub3csIGJ1dCBpdCdzIHdvcnRoIGEgcmVmcmVzaGVyLiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYG1tL3BlcmNwdS1rbS5jYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgcmlnaHQgdGVzdCBlbnZpcm9ubWVudC4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgb2YgYG1tL3BlcmNwdS1rbS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjI2LjA5OTE1NjYxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMwNjQ4NjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdS1rbS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MjYuMjQyMjMxNDkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NDk4NTc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIE1vZHVsZSBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCB3aGVyZSBgcGVyY3B1LWttLm9gIGlzIGJlaW5nIGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJ1bGVzIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIG9iamVjdCBmaWxlcy4gSSBrbm93IEkndmUgdXN1YWxseSBmb3VuZCB0aGVzZSB0eXBlcyBvZiBtb2R1bGVzIHdpdGhpbiBhIE1ha2VmaWxlIGluIHRoZSByZWxldmFudCBzdWJkaXJlY3RvcnksIHNvIHRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbXkgc2VhcmNoLiBUaW1lIHRvIHRha2UgYSBsb29rIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBMZXQncyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIGhhcyB0byBzYXkuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjI4Ljk4NzIyMDI0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUyNDkwMTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdS1rbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MjkuMTIyNDc4NzYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNDcyMTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEluY2x1c2lvbioqXG5cbkhtbSwgbm93IHRoYXQgSSdtIGxvb2tpbmcgYXQgdGhpcywgaXMgYHBlcmNwdS1rbS5jYCBhY3R1YWxseSBiZWluZyBpbXBsaWNpdGx5IGJyb3VnaHQgaW4gdGhyb3VnaCBgbW0vcGVyY3B1LmNgPyBUaGF0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5LiBJZiBpdCdzIGluY2x1ZGVkIHdpdGhpbiB0aGF0IG1vZHVsZSwgaXQgY291bGQgY2hhbmdlIG15IGFuYWx5c2lzIGNvbXBsZXRlbHkuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbmNsdWRlIHBhdGhzIGFuZCBhbnkgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0byBiZSBjZXJ0YWluLiBBIGZhbHNlIGFzc3VtcHRpb24gaGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSB2ZXJ5IHdyb25nIHBhdGguIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MzIuMDQ3MjAzNDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzQ4MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdS1rbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGVyY3B1LWttLmMtMi0vKlxcbm1tL3BlcmNwdS1rbS5jOjM6ICogbW0vcGVyY3B1LWttLmMgLSBrZXJuZWwgbWVtb3J5IGJhc2VkIGNodW5rIGFsbG9jYXRpb25cXG5tbS9wZXJjcHUta20uYy00LSAqXFxuLS1cXG5tbS9wZXJjcHUta20uYy0xMC0gKlxcbm1tL3BlcmNwdS1rbS5jOjExOiAqIFRvIHVzZSBwZXJjcHUta20sXFxubW0vcGVyY3B1LWttLmMtMTItICpcXG4tLVxcbm1tL3BlcmNwdS1rbS5jLTI1LSAqICAga2VybmVsIG1lbW9yeSBibG9jayB1c2luZyBhbGxvY19wYWdlcygpLCBtZW1vcnkgd2lsbCBiZSB3YXN0ZWQgaWZcXG5tbS9wZXJjcHUta20uYzoyNjogKiAgIGNodW5rIHNpemUgaXMgbm90IGFsaWduZWQuICBwZXJjcHUta20gY29kZSB3aWxsIHdoaW5lIGFib3V0IGl0Llxcbm1tL3BlcmNwdS1rbS5jLTI3LSAqL1xcbi0tXFxubW0vcGVyY3B1LmM9MTU3Nj1zdGF0aWMgaW50IF9faW5pdCBwY3B1X3ZlcmlmeV9hbGxvY19pbmZvKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcXG4tLVxcbm1tL3BlcmNwdS5jLTE1NzgtI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfS01cXG5tbS9wZXJjcHUuYzoxNTc5OiNpbmNsdWRlIFxcXCJwZXJjcHUta20uY1xcXCJcXG5tbS9wZXJjcHUuYy0xNTgwLSNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjMyLjIxNjk1ODc4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njc2MTU0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgTWVudGFsIEF1ZGl0KipcblxuUmlnaHQsIHNvIGBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNYCBoYXMgY29tZSB1cC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucy4gSXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSwgb3IgYXQgbGVhc3QgYSBzdHJvbmcgY29uc2lkZXJhdGlvbiwgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUgdHlwaWNhbCBwYWlyaW5ncz8gT2theSwgZmlyc3QgdGhpbmdzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRob3NlIGFyZSBjb25uZWN0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgcGVyLUNQVSBhbGxvY2F0aW9ucy4gSXMgYENPTkZJR19ORUVEX1BFUl9DUFVfS01gIHB1bGxlZCBpbiBieSBlaXRoZXIgb2YgdGhvc2UsIG9yIGRvZXMgaXQgKnJlcXVpcmUqIHRoZW0/IE9yIGlzIGl0IG1vcmUgb2YgYSBjb21wYXRpYmlsaXR5IGNvbmNlcm4sIGVuc3VyaW5nIHRoZXkgcGxheSBuaWNlbHkgdG9nZXRoZXI/IEkgbmVlZCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCB0cmFkZS1vZmZzLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHdlIGxvb2tpbmcgZm9yIGluY3JlYXNlZCBtZW1vcnkgdXRpbGl6YXRpb24/IFJlZHVjZWQgZnJhZ21lbnRhdGlvbj8gU3RhYmlsaXR5PyBNeSBtZW50YWwgbW9kZWwgbmVlZHMgdG8gaW5zdGFudGx5IGNhbGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHJlbWVtYmVyIHdoYXQgZWFjaCBjb25maWd1cmF0aW9uIGZsYWcgYWZmZWN0cy4gSXQncyBhIHF1aWNrIG1lbnRhbCByZXZpZXcgdG8gZGV0ZXJtaW5lIGlmIHRob3NlIGNvbmZpZyBvcHRpb25zIGFyZSBnb2luZyB0byBiZSBhZmZlY3RlZCBieSB0aGlzIG5ldyBzZXR0aW5nLCBvciBpZiB0aGlzIHdpbGwgaGF2ZSBzb21lIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MzUuNzg0NTc3NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODYxMDY5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6MzUuOTMzMTk4NDc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NjYyNTQ4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk1ha2VmaWxlIENvbXBhY3Rpb24gQ2hlY2sqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjb21wYWN0aW9uLm9gIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgY3VycmVudCBgbW1gIG1vZHVsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gb2JqZWN0IGZpbGVzIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG1ha2VmaWxlIHRvIHNlZSBpZiBgY29tcGFjdGlvbi5vYCBpcyBldmVuIHByZXNlbnQuIExldCdzIHNlZSBob3cgdGhhdCdzIHB1dCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjM4LjQ5OTQ1NjgwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NDQ4MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBhY3Rpb24ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTUtXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU2OlxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Ny1cXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDozOC42NjU5MTE0OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NTAzNjI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENvbXBhY3Rpb24gT2JqZWN0IENvbXBpbGF0aW9uKipcblxuSG1tLCBpdCBzZWVtcyB0aGF0IGBjb21wYWN0aW9uLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBidWlsdCwgd2hpY2ggaXMgdW5leHBlY3RlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IG9yIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gTGV0J3MgZGVsdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBleGFtaW5lIHdoZXRoZXIgYENPTkZJR19DT01QQUNUSU9OYCBwbGF5cyBhIHJvbGUuIFNpbmNlIGBjb21wYWN0aW9uLm9gIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBtbS9jb21wYWN0aW9uLmNgIGZpbGUuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgYGNvbXBhY3Rpb24ub2AgaXMgY29uZGl0aW9uYWwgb24gdGhlIGBDT05GSUdfQ09NUEFDVElPTmAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdpbGwgdGhlbiBjbGFyaWZ5IHdoZXRoZXIgdGhlIGJ1aWxkIGlzIGhhcHBlbmluZyBjb3JyZWN0bHksIG9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjQxLjc0MDk1MTIzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NTA0ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19DT01QQUNUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmMtMjktXFxubW0vY29tcGFjdGlvbi5jOjMwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0zMS0vKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTYyLVxcbm1tL2NvbXBhY3Rpb24uYzo2MzojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9jb21wYWN0aW9uLmMtNjQtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9OTI9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZV9mcmVlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZXBhZ2VzKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTExNi1cXG5tbS9jb21wYWN0aW9uLmM6MTE3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMTgtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NDkxPXN0YXRpYyBib29sIHRlc3RfYW5kX3NldF9za2lwKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy00OTQtfVxcbm1tL2NvbXBhY3Rpb24uYzo0OTU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vY29tcGFjdGlvbi5jLTQ5Ni1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xMzM3PWlzb2xhdGVfbWlncmF0ZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMzcyLVxcbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTEzNzUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzM1MT1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXFxubW0vY29tcGFjdGlvbi5jLTMzNTItXFxubW0vY29tcGFjdGlvbi5jOjMzNTM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjQxLjkxNTQ2MzEzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk3Nzk5NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb21wYWN0aW9uIGFuZCBIdWdlIFBhZ2VzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IGFjdGl2ZS4gR29vZCwgZ29vZC4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIG5vdyBpczogaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIGBodWdlX21lbW9yeS5jYD8gV2UncmUgdGFsa2luZyBhYm91dCBjb21wYWN0aW9uLCB3aGljaCBhaW1zIHRvIGNvbnNvbGlkYXRlIGZyZWUgbWVtb3J5IHJlZ2lvbnMsIGFuZCBodWdlIHBhZ2VzLCB3aGljaCBhcmUgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbXBhY3Rpb24gbWVjaGFuaXNtcyBhcmUgYXdhcmUgb2YsIGFuZCBhcHByb3ByaWF0ZWx5IGhhbmRsZSwgaHVnZSBwYWdlIGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zLiBBcmUgd2UgcnVubmluZyBpbnRvIGZyYWdtZW50YXRpb24gaXNzdWVzIHdpdGhpbiBodWdlIHBhZ2UgcmVnaW9ucyB0aGF0IGNvbXBhY3Rpb24gY291bGQgYWxsZXZpYXRlPyBPciwgY29udmVyc2VseSwgaXMgY29tcGFjdGlvbiBwb3RlbnRpYWxseSAqZGlzcnVwdGluZyogdGhlIGNvbnRpZ3VvdXMgbWVtb3J5IHJlcXVpcmVkIGZvciBodWdlIHBhZ2VzLCBhbmQgaWYgc28sIGhvdz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGFnZSBhbGxvY2F0b3IsIHRoZSBOVU1BIGJhbGFuY2luZywgYW5kIHRoZSBjb21wYWN0aW9uIGNvZGUgcGF0aHMgdG8gYmUgY2VydGFpbiB3ZSBhcmUgZ2V0dGluZyB0aGUgcGVyZm9ybWFuY2Ugd2Ugd2FudC4gVGltZSB0byBzdGFydCB0cmFjaW5nIHNvbWUgY2FsbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAwOjQ1LjQxMzI2NTI0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjAxMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6NDUuNTYwNDczMTM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzg4MzA0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gc2VlbXMgdG8gaGF2ZSBmbGFnZ2VkIHRoZSBpbXBvcnRhbmNlIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyBnb3QgaXQuIFRoYXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJ20ga2VlcGluZyBpbiBtaW5kLiBCdXQsIHdoYXQgYWJvdXQgYENPTkZJR19ORUVEX1BFUl9DUFVfS01gPyBJdCdzIGJlZW4gcmF0dGxpbmcgYXJvdW5kIGluIG15IGhlYWQsIHNpbmNlIGl04oCZcyB1c3VhbGx5IGF1dG8tc2VsZWN0ZWQgYnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgcmlnaHQ/IFRvIGNsYXJpZnkgaXRzIHJlbGV2YW5jZSBoZXJlLCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGBhcmNoL2AgZGlyZWN0b3JpZXMuIEknbGwgc2VhcmNoIHRob3NlIGFuZCBmaW5kIG91dCB3aGVyZSBgTkVFRF9QRVJfQ1BVX0tNYCBpcyBiZWluZyB1c2VkIGFuZCBob3cgYXJjaGl0ZWN0dXJlcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHNldHRpbmcuIFRoYXQncyB0aGUgbmV4dCBzdGVwIHRvIGdhaW4gY2xhcml0eSBhbmQgZW5zdXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDo0OC45MzkzMDY1ODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTY0MTMzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVFRF9QRVJfQ1BVX0tNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDo0OS42NTQ5NTgyNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODY3MzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBORUVEX1BFUl9DUFVfS01gIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gSSdtIHByZXR0eSBzdXJlIEkgcmVjYWxsIGVuY291bnRlcmluZyBgTkVFRF9QRVJfQ1BVX0tNYCBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCwgb3IgbWF5YmUgZXZlbiBjb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQgbWUgbG9vayBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCBmaWxlcy4gVGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdGhpcyBkZXBlbmRlbmN5IGlzIGRlZmluZWQsIG9yIGF0IGxlYXN0IHVzZWQgd2l0aGluIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGl0cyBleGFjdCBsb2NhdGlvbiBvciBoaW50cyBhYm91dCB3aGF0IG90aGVyIG9wdGlvbnMgaXQgbWF5IGRlcGVuZCBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwOyBJIGNhbid0IHByb2NlZWQgY29uZmlkZW50bHkgdW50aWwgSSBoYXZlIGEgaGFuZGxlIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMDo1My4zMTM2MzQ1MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTYyMDgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVFRF9QRVJfQ1BVX0tNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF92bWFsbG9jLmM9MzE2PXBjcHVfYWxsb2NfdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTMxOC1cXHRpbnQgcnYgPSAwO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYzozMTk6I2lmbmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTMyMC1cXHR2b2lkIF9fcGVyY3B1ICoqcGNwdTtcXG4tLVxcbm1tL0tjb25maWc9MTA0ND1jb25maWcgQVJDSF9NT0RVTEVfTkVFRFNfV0VBS19QRVJfQ1BVXFxuLS1cXG5tbS9LY29uZmlnLTEwNDktI1xcbm1tL0tjb25maWc6MTA1MDpjb25maWcgTkVFRF9QRVJfQ1BVX0tNXFxubW0vS2NvbmZpZy0xMDUxLVxcdGRlcGVuZHMgb24gIVNNUCB8fCAhTU1VXFxuLS1cXG5tbS9LY29uZmlnPTExNjk9Y29uZmlnIERFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVRcXG4tLVxcbm1tL0tjb25maWctMTE3MS1cXHRkZXBlbmRzIG9uIFNQQVJTRU1FTVxcbm1tL0tjb25maWc6MTE3MjpcXHRkZXBlbmRzIG9uICFORUVEX1BFUl9DUFVfS01cXG5tbS9LY29uZmlnLTExNzMtXFx0ZGVwZW5kcyBvbiA2NEJJVFxcbi0tXFxubW0vcGVyY3B1LWttLmMtMTItICpcXG5tbS9wZXJjcHUta20uYzoxMzogKiAtIGRlZmluZSBDT05GSUdfTkVFRF9QRVJfQ1BVX0tNIGZyb20gdGhlIGFyY2ggS2NvbmZpZy5cXG5tbS9wZXJjcHUta20uYy0xNC0gKlxcbi0tXFxubW0vcGVyY3B1LmM9MTU3Nj1zdGF0aWMgaW50IF9faW5pdCBwY3B1X3ZlcmlmeV9hbGxvY19pbmZvKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcXG5tbS9wZXJjcHUuYy0xNTc3LVxcbm1tL3BlcmNwdS5jOjE1Nzg6I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfS01cXG5tbS9wZXJjcHUuYy0xNTc5LSNpbmNsdWRlIFxcXCJwZXJjcHUta20uY1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDA6NTguMDA5ODUwMzcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODc0NjE1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gZm9yIFRhcmdldGVkIFByb2ZpbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBORUVEX1BFUl9DUFVfS01gLiBJdCByZWxpZXMgb24gYCFTTVAgfHwgIU1NVWAsIHdoaWNoIG1ha2VzIGl0IHVuc3VpdGFibGUgZm9yIHN0YW5kYXJkIHNldHVwcyBsaWtlIHg4Nl82NCB3aXRoIFNNUCBhbmQgTU1VIGVuYWJsZWQuIE5vIHBvaW50IGluIHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgb24gaXQuIFdlIGVpdGhlciB3b24ndCBsaXN0IGl0LCBvciB3aWxsIG5vdGUgaXQncyBub3QgbGlrZWx5IHRvIGJlIGVuYWJsZWQuXG5cbkxldCdzIGRpdmUgZGVlcGVyLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgcmVsYXRlZCB0byBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLiBJdCdzIGEgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiwgYWx3YXlzIGVuYWJsZWQuIFRoZW4gaW4gYG1tL2ludGVybmFsLmhgIHRoZXJlJ3MgYHByZXBfY29tcG91bmRfdGFpbGAuIFRoYXQgYWxzbyBzZWVtcyBhbHdheXMgZW5hYmxlZC4gVGhpcyBkb2Vzbid0IHNlZW0gbGlrZSB0aGUgYmVzdCBwbGFjZSB0byBwcm9maWxlLlxuXG5TbyB0aGUgY29uZmlncyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhpbmdzIHJlbGF0aW5nIHRvIHRoZXNlLCB0aGVuLiBUaGUgZm9jdXMgc3ltYm9scyBsb29rIGxpa2U6IGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBhbmQgYHBjcHVfZGVzdHJveV9jaHVua2AuXG5cbk5vdywgdGhhdCBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIG1vZGlmaWNhdGlvbiwgd2hpbGUgcHJlc2VudCwgaXMgbGlrZWx5IGluIGEgdmVyeSBob3QgcGF0aC4gSSB3YW50IHRvIGF2b2lkIGFkZGluZyB0b28gbXVjaCBvdmVyaGVhZCB0aGVyZS4gSG93ZXZlciwgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgIGFyZSBjb21wYWN0aW9uIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGxlc3MgcGVyZm9ybWFuY2UgY3JpdGljYWwgdGhhbiBwYWdlIGFsbG9jYXRpb24sIGJ1dCBzdGlsbCBzb21ld2hhdCBob3QuIFRoZSBvbmVzIHRoYXQgbG9vayBtb3N0IHByb21pc2luZyBhcmUgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIHNpbmNlIGl0IGlzIGZvciBUSFAgc3BsaXR0aW5nLCB3aGljaCBpcyBhIGdvb2QgdGFyZ2V0LiBgcGNwdV9kZXN0cm95X2NodW5rYCBmb3IgcGVyY3B1IGNodW5rIGRlc3RydWN0aW9uIGlzIGFsc28gYSBwb3RlbnRpYWwgZ29vZCB0YXJnZXQuXG5cbk9rYXksIGxldCdzIHN0YXJ0IHdpdGggYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLiBJJ2xsIGRpZyBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHdvcmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDE6MDQuMzk3MzE0Mzg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI1ODMwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY29tcGFjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz01NTI9c3RhdGljIGJvb2wgY29tcGFjdF91bmxvY2tfc2hvdWxkX2Fib3J0KHNwaW5sb2NrX3QgKmxvY2ssXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNTc0LSAqL1xcbm1tL2NvbXBhY3Rpb24uYzo1NzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxubW0vY29tcGFjdGlvbi5jLTU3Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NzEzPWlzb2xhdGVfZnJlZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTczMC1cXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbm1tL2NvbXBhY3Rpb24uYzo3MzE6XFx0XFx0LyogUHJvdGVjdCBwZm4gZnJvbSBjaGFuZ2luZyBieSBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayAqL1xcbm1tL2NvbXBhY3Rpb24uYy03MzItXFx0XFx0dW5zaWduZWQgbG9uZyBpc29sYXRlX3N0YXJ0X3BmbiA9IHBmbjtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NDktXFxubW0vY29tcGFjdGlvbi5jOjc1MDpcXHRcXHRpc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTc1MS1cXHRcXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuLCBjYy1cXHUwMDNlZnJlZXBhZ2VzLCAwLCB0cnVlKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NTMtXFx0XFx0LypcXG5tbS9jb21wYWN0aW9uLmM6NzU0OlxcdFxcdCAqIEluIHN0cmljdCBtb2RlLCBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpIHJldHVybnMgMCBpZlxcbm1tL2NvbXBhY3Rpb24uYy03NTUtXFx0XFx0ICogdGhlcmUgYXJlIGFueSBob2xlcyBpbiB0aGUgYmxvY2sgKGllLiBpbnZhbGlkIFBGTnMgb3JcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNDc1PWZhc3RfaXNvbGF0ZV9hcm91bmQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE0OTUtXFxubW0vY29tcGFjdGlvbi5jOjE0OTY6XFx0aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFxcdTAwMjZzdGFydF9wZm4sIGVuZF9wZm4sIGNjLVxcdTAwM2VmcmVlcGFnZXMsIDEsIGZhbHNlKTtcXG5tbS9jb21wYWN0aW9uLmMtMTQ5Ny1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNjkzPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE3NjQtXFx0XFx0LyogRm91bmQgYSBibG9jayBzdWl0YWJsZSBmb3IgaXNvbGF0aW5nIGZyZWUgcGFnZXMgZnJvbS4gKi9cXG5tbS9jb21wYWN0aW9uLmM6MTc2NTpcXHRcXHRucl9pc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTE3NjYtXFx0XFx0XFx0XFx0XFx0YmxvY2tfZW5kX3BmbiwgY2MtXFx1MDAzZWZyZWVwYWdlcywgc3RyaWRlLCBmYWxzZSk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTgwMi1cXHQgKiBicm9rZSBmcm9tIHRoZSBsb29wIGFuZCBzZXQgaXNvbGF0ZV9zdGFydF9wZm4gYmFzZWQgb24gdGhlIGxhc3RcXG5tbS9jb21wYWN0aW9uLmM6MTgwMzpcXHQgKiBjYWxsIHRvIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKCksIG9yIHdlIG1ldCB0aGUgbWlncmF0aW9uIHNjYW5uZXJcXG5tbS9jb21wYWN0aW9uLmMtMTgwNC1cXHQgKiBhbmQgdGhlIGxvb3AgdGVybWluYXRlZCBkdWUgdG8gaXNvbGF0ZV9zdGFydF9wZm4gXFx1MDAzYyBsb3dfcGZuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAxOjA0LjU3OTkwNDM5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTY0Mjg3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IEhvdHNwb3RzKipcblxuT2theSwgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBNeSBpbml0aWFsIHRob3VnaHRzIGlkZW50aWZpZWQgc29tZSBnb29kIGNhbmRpZGF0ZXMuIEkgbGlrZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGFuZCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgYXMgZGVmaW5pdGUgcG9zc2liaWxpdGllcyBmb3IgaG90c3BvdHMgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgIGFsc28gY2FtZSB0byBtaW5kLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gQWgsIGl0J3MgZGVmaW5lZCBpbiBgbW0vcGVyY3B1LWttLmNgLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORUVEX1BFUl9DUFVfS01gIGlzIGVuYWJsZWQuIFRoYXQgZGVwZW5kcyBvbiBgIVNNUCB8fCAhTU1VYC4gU28gaXQncyAqdW5saWtlbHkqIHRvIGJlIHByZXNlbnQgaW4gdHlwaWNhbCB4ODZfNjQgc2V0dXBzLCBidXQgaXQncyBzdGlsbCB3b3J0aCBub3RpbmcuIExldCdzIGxpc3QgaXQgYW55d2F5LCBhdCB0aGlzIHN0YWdlLlxuXG5IbW0sIGEgbW9tZW50LiBMb29raW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGhhcyBiZWVuIG1vZGlmaWVkLiBUaGF0J3MgYSBzdXBlciBob3QgcGF0aCEgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgbGlzdGluZyBpdCB0byByZWR1Y2Ugbm9pc2UuIEFsc28sIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYG1tL2ludGVybmFsLmhgLiBJJ2xsIG9taXQgaXQgYXMgd2VsbC5cblxuTm93LCBJIHdhbnQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXJlIGBDT01QQUNUSU9OYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCB0aGUgb25seSBvbmVzIHRoYXQgaGVhdmlseSBpbmZsdWVuY2UgdGhlc2UgbW9kaWZpZWQgZmlsZXM/IFllcywgdGhleSBzZWVtIHRvIGNvdmVyIHRoZSBtYWluIG9uZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBkcmlsbCBkb3duIGEgYml0IGZ1cnRoZXIuIGBtbS9odWdlX21lbW9yeS5jYCBpcyBpbmRlZWQgdGllZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYG1tL2NvbXBhY3Rpb24uY2AgaXMgZHJpdmVuIGJ5IGBDT05GSUdfQ09NUEFDVElPTmAsIGFuZCBgbW0vcGVyY3B1LWttLmNgIChhcyB3ZSBkaXNjdXNzZWQpIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19ORUVEX1BFUl9DUFVfS01gLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gZm9ybWFsaXplIG15IGZpbmRpbmdzLlxuXG5IZXJlJ3MgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOlxuXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYFxuICAgICogICBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2BcbiAgICAqICAgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYFxuICAgICogICBgX19zcGxpdF9mb2xpb190b19vcmRlcmBcbiAgICAqICAgYHBjcHVfZGVzdHJveV9jaHVua2BcblxuSGVyZSBhcmUgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgKipFbmFibGVDb25maWdzOioqXG4gICAgKiAgIGBDT01QQUNUSU9OYFxuICAgICogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4gICAgKiAgIGBORUVEX1BFUl9DUFVfS01gXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lLiBUaGF0J3MgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDE6MTIuMTQ0MTk0MTQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExODQ2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY29tcGFjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0xNjkzPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE4MTItICovXFxubW0vY29tcGFjdGlvbi5jOjE4MTM6c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcXG5tbS9jb21wYWN0aW9uLmMtMTgxNC17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTg2MD1zdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhdGEpXFxubW0vY29tcGFjdGlvbi5jLTE4NjEte1xcbm1tL2NvbXBhY3Rpb24uYzoxODYyOlxcdHJldHVybiBhbGxvY19ob29rcyhjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzcmMsIGRhdGEpKTtcXG5tbS9jb21wYWN0aW9uLmMtMTg2My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAxOjEyLjMwNTM4NDkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNzA5NzE5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCBGdW5jdGlvbiBOYW1lIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5SaWdodCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYC4uLiB0aGF0J3MgdGhlIG1vbmlrZXIgd2UncmUgZGVhbGluZyB3aXRoLiBJdCBpbW1lZGlhdGVseSBzaWduYWxzIGFuIGFsbG9jYXRpb24gcHJvY2VzcyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uIHRoYXQgKmRvZXNuJ3QqIGludm9sdmUgcHJvZmlsaW5nLiBJJ20gd29uZGVyaW5nIHdoeSB0aGF0IGRpc3RpbmN0aW9uIGlzIGltcG9ydGFudCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cbk15IG5leHQgbW92ZSBpcyBkZWZpbml0ZWx5IHRvIGp1bXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSB0byBzY3J1dGluaXplIHRoZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24ncyBnb2luZyB0byBob2xkIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgbGFyZ2UgbWVtb3J5IGJsb2Nrcywgb3IgZm9saW9zIGluIHRoaXMgY2FzZSwgZ2V0IGRpdmlkZWQgdXAsIHdoaWNoIGRpcmVjdGx5IHJlbGF0ZXMgdG8gdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgY29tcGFjdGlvbi4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgYWxsb2NhdGlvbiBvZiBwYWdlcyBpbiBjb21wYWN0aW9uIGlzIGRpZmZlcmVudCB0aGFuIHdoZW4gcGFnZXMgYXJlIG5vdCBiZWluZyBjb21wYWN0ZWQuIFNwZWNpZmljYWxseSwgZG9lcyBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgIGdldCBjYWxsZWQgZnJvbSB3aXRoaW4gdGhhdCBmdW5jdGlvbj8gSWYgc28sIHdoYXQgaXMgdGhlIGNhbGwgcGF0aD9cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMToyMS40NzYzNTk3NDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTU1NDc3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNTE2PXN0YXRpYyBib29sIHBhZ2VfcmFuZ2VfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM1MjctICovXFxubW0vaHVnZV9tZW1vcnkuYzozNTI4OnN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM1MjktXFx0XFx0aW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY2OC0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcXG5tbS9odWdlX21lbW9yeS5jOjM2Njk6ICogICAgX19zcGxpdF9mb2xpb190b19vcmRlcigpIGlzIGNhbGxlZCB0byBzcGxpdCB0aGUgQGZvbGlvIGludG8gQG5ld19vcmRlclxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY3MC0gKiAgICBhbG9uZyB3aXRoIHN0YXRzIHVwZGF0ZS5cXG5tbS9odWdlX21lbW9yeS5jLTM2NzEtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzY3MjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgYXJlIGV4cGVjdGVkIHRvIGJlIG1hZGUgaW4gYSBmb3IgbG9vcCB0byBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY3My0gKiAgICB0aGUgQGZvbGlvIHRvIG9uZSBsb3dlciBvcmRlciBhdCBhIHRpbWUuIFRoZSBmb2xpbyBjb250YWluaW5nIEBzcGxpdF9hdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzMwLVxcdFxcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM3MzE6XFx0XFx0X19zcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zNzMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMToyMi4xMzc5MjEyMjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1OTEyNjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBOYW1lIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5ZZXMsIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4uLnRoYXQncyB0aGUgZnVuY3Rpb24gbmFtZSB3ZSdyZSB3b3JraW5nIHdpdGguIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4gT2theSwgbGV0J3Mgc2VlLCB3aGF0J3MgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgcGNwdV9kZXN0cm95X2NodW5rYCBpbiBgbW0vcGVyY3B1LWttLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcG90ZW50aWFsbHkgcmVsYXRlLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggcGVyY3B1IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmb2xpbyBzcGxpdHRpbmcgY29udGV4dC4gS25vd2luZyB3aGVyZSBtZW1vcnkgY2h1bmtzIGFyZSBkZXN0cm95ZWQgY2FuIGNsYXJpZnkgYSBsb3QuIE5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBvciBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBiYXNlZCBvbiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTQ6MDE6MjUuMDk3MDYyNTkzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA4MzU5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNwdV9kZXN0cm95X2NodW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BlcmNwdS1rbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BlcmNwdS1rbS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jcmVhdGVfY2h1bmsoZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vcGVyY3B1LWttLmMtODYtXFxubW0vcGVyY3B1LWttLmM6ODc6c3RhdGljIHZvaWQgcGNwdV9kZXN0cm95X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcXG5tbS9wZXJjcHUta20uYy04OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE0OjAxOjI1LjM2NzkwMzgzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MzgwNDExNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQ29yZSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBzb21lIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgY29kZSBpbiBwYWdlIGNvbXBhY3Rpb24sIGxpa2UgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBhbmQgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYC4gSXQncyBhbHNvIG1vZGlmeWluZyB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcgd2l0aCBjaGFuZ2VzIHRvIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCwgYW5kLCBjcnVjaWFsbHksIHRoZSBkZXN0cnVjdGlvbiBvZiBwZXItQ1BVIGtlcm5lbCBtZW1vcnkgY2h1bmtzIOKAkyB0aGF0J3MgYHBjcHVfZGVzdHJveV9jaHVua2AuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBmaWVsZC4gSXQncyByZW1vdmluZyBpdHMgc2V0dGluZyBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkaW5nIGNoZWNrcyBhbmQgd2FybmluZ3MgcmVsYXRlZCB0byBpdHMgdW5leHBlY3RlZCB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBNeSBicmFpbiBpbW1lZGlhdGVseSBsaWdodHMgdXAgd2l0aCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgcmFjZSBjb25kaXRpb25zIGhlcmUuIFRoaXMgbGV2ZWwgb2YgY29yZSBrZXJuZWwgbG9naWMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhbmQgdGhlIHBhdGNoIGF1dGhvciBldmVuIGFncmVlcy5cblxuVGhlcmVmb3JlLCBJJ20gbWFya2luZyB0aGlzIGFzIFwiV29ydGhGdXp6aW5nOiB0cnVlLlwiXG5cblRvIGZvY3VzIG15IGVmZm9ydHMsIEkgbmVlZCB0byB0YXJnZXQgdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGFuZCBvZiBjb3Vyc2UsIGBwY3B1X2Rlc3Ryb3lfY2h1bmtgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhcmUgdGFraW5nIHBsYWNlLCBzbyB0aGVzZSBhcmUgdGhlIGhvdHNwb3RzIHRvIHB1dCB1bmRlciB0aGUgbWljcm9zY29wZS5cblxuRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlc2UgY2hhbmdlcyBlZmZlY3RpdmVseS4gSSdsbCBuZWVkIGBDT01QQUNUSU9OYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBORUVEX1BFUl9DUFVfS01gIGVuYWJsZWQgdG8gZ2V0IGEgZnVsbCB2aWV3IG9mIHRoZSBjaGFuZ2VzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgcGxhbiBsb2NrZWQgaW4sIEknbSBub3cgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdG8gdGhlIGZ1enppbmcgc3RhZ2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDM4LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNDowMTozMi4zMDU5NDc3NDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE1MTU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfS01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc29sYXRlX2ZyZWVwYWdlc19ibG9ja1wiLFxuICAgIFwiZmFzdF9pc29sYXRlX2ZyZWVwYWdlc1wiLFxuICAgIFwiY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZcIixcbiAgICBcIl9fc3BsaXRfZm9saW9fdG9fb3JkZXJcIixcbiAgICBcInBjcHVfZGVzdHJveV9jaHVua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBpbiBwYWdlIGNvbXBhY3Rpb24sIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHNwbGl0dGluZywgYW5kIHBlci1jcHUga2VybmVsIG1lbW9yeSBjaHVuayBkZXN0cnVjdGlvbi4gSXQgcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBwYWdlLVxcdTAwM2Vwcml2YXRlIGR1cmluZyBjb21wYWN0aW9uIGFuZCBhZGRzIHdhcm5pbmdzL2NoZWNrcyBmb3IgdW5leHBlY3RlZCBwYWdlLVxcdTAwM2Vwcml2YXRlIHZhbHVlcyBpbiB0YWlsIHBhZ2VzIGR1cmluZyBzcGxpdHRpbmcgYW5kIGZyZWVpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTkVFRF9QRVJfQ1BVX0tNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gICAgXCJwY3B1X2Rlc3Ryb3lfY2h1bmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSBjb21wYWN0aW9uLCB0cmFuc3BhcmVudCBodWdlcGFnZSBzcGxpdHRpbmcsIGFuZCBwZXItY3B1IGtlcm5lbCBtZW1vcnkgY2h1bmsgZGVzdHJ1Y3Rpb24uIEl0IHJlbW92ZXMgdGhlIHNldHRpbmcgb2YgcGFnZS1cXHUwMDNlcHJpdmF0ZSBkdXJpbmcgY29tcGFjdGlvbiBhbmQgYWRkcyB3YXJuaW5ncy9jaGVja3MgZm9yIHVuZXhwZWN0ZWQgcGFnZS1cXHUwMDNlcHJpdmF0ZSB2YWx1ZXMgaW4gdGFpbCBwYWdlcyBkdXJpbmcgc3BsaXR0aW5nIGFuZCBmcmVlaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[1] Phase: Succeeded StartedAt: 2026-07-10 14:01:45 +0000 UTC FinishedAt: 2026-07-10 14:01:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 14:01:45 +0000 UTC FinishedAt: 2026-07-10 14:01:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2] Phase: Succeeded StartedAt: 2026-07-10 14:01:45 +0000 UTC FinishedAt: 2026-07-10 18:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 14:01:45 +0000 UTC FinishedAt: 2026-07-10 18:33:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 14:01:45 +0000 UTC FinishedAt: 2026-07-10 14:02:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 14:01:45 +0000 UTC FinishedAt: 2026-07-10 14:02:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflownsp5q/series-workflownsp5q-convert-artifact-3492903770/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 14:02:21 +0000 UTC FinishedAt: 2026-07-10 14:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 14:02:21 +0000 UTC FinishedAt: 2026-07-10 14:35:07 +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:*67c5158f-ca17-4975-82bd-94c6847b6d6f,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-workflownsp5q/series-workflownsp5q-convert-artifact-3492903770/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": "34b223e1-803f-47ef-b814-f3b191db7948", "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-workflownsp5q/series-workflownsp5q-build-action-1834987528/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 14:02:22 +0000 UTC FinishedAt: 2026-07-10 14:33:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*67c5158f-ca17-4975-82bd-94c6847b6d6f,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-workflownsp5q/series-workflownsp5q-convert-artifact-3492903770/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": "34b223e1-803f-47ef-b814-f3b191db7948", "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-workflownsp5q/series-workflownsp5q-build-action-1834987528/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 14:35:07 +0000 UTC FinishedAt: 2026-07-10 14:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 14:35:07 +0000 UTC FinishedAt: 2026-07-10 14:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 14:35:07 +0000 UTC FinishedAt: 2026-07-10 14:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 14:35:07 +0000 UTC FinishedAt: 2026-07-10 14:35:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflownsp5q/series-workflownsp5q-convert-artifact-1030037941/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 14:35:17 +0000 UTC FinishedAt: 2026-07-10 14:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 14:35:17 +0000 UTC FinishedAt: 2026-07-10 14:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34b223e1-803f-47ef-b814-f3b191db7948,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-workflownsp5q/series-workflownsp5q-build-action-1834987528/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-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 14:37:17 +0000 UTC FinishedAt: 2026-07-10 14:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 14:37:17 +0000 UTC FinishedAt: 2026-07-10 14:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 14:37:17 +0000 UTC FinishedAt: 2026-07-10 15:28:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 14:37:17 +0000 UTC FinishedAt: 2026-07-10 15:28:28 +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:*67c5158f-ca17-4975-82bd-94c6847b6d6f,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-workflownsp5q/series-workflownsp5q-convert-artifact-1030037941/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": "74ab666c-1f91-47bc-991b-cd4322276757", "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-workflownsp5q/series-workflownsp5q-build-action-3522253505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 14:37:17 +0000 UTC FinishedAt: 2026-07-10 15:28:18 +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:*67c5158f-ca17-4975-82bd-94c6847b6d6f,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-workflownsp5q/series-workflownsp5q-convert-artifact-1030037941/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": "74ab666c-1f91-47bc-991b-cd4322276757", "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-workflownsp5q/series-workflownsp5q-build-action-3522253505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 15:28:28 +0000 UTC FinishedAt: 2026-07-10 15:28:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 15:28:28 +0000 UTC FinishedAt: 2026-07-10 15:28:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 15:28:28 +0000 UTC FinishedAt: 2026-07-10 15:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 15:28:28 +0000 UTC FinishedAt: 2026-07-10 15:30:24 +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:*74ab666c-1f91-47bc-991b-cd4322276757,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-workflownsp5q/series-workflownsp5q-build-action-3522253505/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-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 15:30:35 +0000 UTC FinishedAt: 2026-07-10 18:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 15:30:35 +0000 UTC FinishedAt: 2026-07-10 18:33:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"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:*34b223e1-803f-47ef-b814-f3b191db7948,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74ab666c-1f91-47bc-991b-cd4322276757,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-workflownsp5q/series-workflownsp5q-build-action-1834987528/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-workflownsp5q/series-workflownsp5q-build-action-3522253505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 15:30:35 +0000 UTC FinishedAt: 2026-07-10 15:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 15:30:35 +0000 UTC FinishedAt: 2026-07-10 15:30:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"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-workflownsp5q/series-workflownsp5q-convert-artifact-2250069402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 15:30:35 +0000 UTC FinishedAt: 2026-07-10 15:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 15:30:35 +0000 UTC FinishedAt: 2026-07-10 15:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 15:30:35 +0000 UTC FinishedAt: 2026-07-10 15:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 15:30:45 +0000 UTC FinishedAt: 2026-07-10 18:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsp5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order","pcpu_destroy_chunk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c7bf81a726b51f1ba9f197491e1e4c8fdf317326","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE","NEED_PER_CPU_KM"],"series_id":"bc9a88fa-689c-46ff-9e6e-408ee855e698","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 15:30:45 +0000 UTC FinishedAt: 2026-07-10 18:32:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34b223e1-803f-47ef-b814-f3b191db7948,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74ab666c-1f91-47bc-991b-cd4322276757,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-workflownsp5q/series-workflownsp5q-build-action-1834987528/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-workflownsp5q/series-workflownsp5q-build-action-3522253505/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-workflownsp5q/series-workflownsp5q-convert-artifact-2250069402/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,}