Name: series-workflowr5d57 Phase: Succeeded StartedAt: 2026-08-10 14:47:11 +0000 UTC FinishedAt: 2026-08-10 18:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[0] Phase: Succeeded StartedAt: 2026-08-10 14:47:11 +0000 UTC FinishedAt: 2026-08-10 15:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 14:47:11 +0000 UTC FinishedAt: 2026-08-10 15:05:59 +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": "36c8b02c3fe9ba56d6f11ec055cd879bc49871f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "CPU_SUP_AMD", "PERF_EVENTS_AMD_BRS", "CPU_SUP_INTEL", "ARM64_BRBE", "ARM_PMUV3" ], "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": "36c8b02c3fe9ba56d6f11ec055cd879bc49871f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "CPU_SUP_AMD", "PERF_EVENTS_AMD_BRS", "CPU_SUP_INTEL", "ARM64_BRBE", "ARM_PMUV3" ], "series_id": "edcd87bb-4acf-41ae-8517-44218e0c4a91" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "amd_brs_drain", "amd_pmu_lbr_read", "intel_pmu_lbr_read_32", "intel_pmu_lbr_read_64", "intel_pmu_store_pebs_lbrs", "brbe_read_filtered_entries" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0NQVV9TVVBfQU1EJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTX0FNRF9CUlMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9JTlRFTCYjMzQ7LAogICAgJiMzNDtBUk02NF9CUkJFJiMzNDssCiAgICAmIzM0O0FSTV9QTVVWMyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtZF9icnNfZHJhaW4mIzM0OywKICAgICYjMzQ7YW1kX3BtdV9sYnJfcmVhZCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfMzImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X2xicl9yZWFkXzY0JiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9zdG9yZV9wZWJzX2xicnMmIzM0OywKICAgICYjMzQ7YnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBicmFuY2ggZW50cnkgaW5pdGlhbGl6YXRpb24gaW4gcGVyZiBldmVudCBQTVUgZHJpdmVycyAoQU1EIEJSUywgQU1EIExCUiwgSW50ZWwgTEJSLCBBUk0gQlJCRSkgYnkgcmVwbGFjaW5nIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHBlcmYgZXZlbnRzIHN1YnN5c3RlbSAoYGtlcm5lbC9ldmVudHMvY29yZS5jYCkgdG8gY2hhbmdlIGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgUE1VIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDllZTVlOGZjNDkxMTEwNzU0NTZiOGZhOTQzODRhMzIwMjQ5OGM0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjAyOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG5pbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuQEAgLTM0MywxMSAmIzQzOzM0MywxMCBAQCB2b2lkIGFtZF9icnNfZHJhaW4odm9pZClcbiBcdFx0aWYgKCFhbWRfYnJzX21hdGNoX3BsbShldmVudCwgZnJvbSwgdG8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnImIzQzO25yKTtcbi1cbi1cdFx0YnJbbnJdLmZyb20gPSBmcm9tO1xuLVx0XHRicltucl0udG8gICA9IHRvO1xuLVxuJiM0MztcdFx0YnJbbnJdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4mIzQzO1x0XHRcdC5mcm9tXHQ9IGZyb20sXG4mIzQzO1x0XHRcdC50b1x0PSB0byxcbiYjNDM7XHRcdH07XG4gXHRcdG5yJiM0MzsmIzQzOztcbiBcdH1cbiBlbXB0eTpcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuY1xuaW5kZXggOWQ5Yzk2MTk4OWQ1MS4uYTU1NjQ2ZmNiODQ2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbkBAIC0xODQsMTMgJiM0MzsxODQsNiBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICAgIGVudHJ5LnRvLnNwbGl0LnJlc2VydmVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgJiM0Mzsgb3V0KTtcbi1cbi1cdFx0YnJbb3V0XS5mcm9tXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS5mcm9tLnNwbGl0LmlwKTtcbi1cdFx0YnJbb3V0XS50b1x0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkudG8uc3BsaXQuaXApO1xuLVx0XHRicltvdXRdLm1pc3ByZWRcdD0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0O1xuLVx0XHRicltvdXRdLnByZWRpY3RlZCA9ICFicltvdXRdLm1pc3ByZWQ7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIFNldCBicmFuY2ggc3BlY3VsYXRpb24gaW5mb3JtYXRpb24gdXNpbmcgdGhlIHN0YXR1cyBvZlxuIFx0XHQgKiB0aGUgdmFsaWQgYW5kIHNwZWMgYml0cy5cbkBAIC0yMDgsNyAmIzQzOzIwMSwxNCBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICogc3BlY3VsYXRpdmUgYW5kIHRvb2sgdGhlIGNvcnJlY3QgcGF0aFxuIFx0XHQgKi9cbiBcdFx0aWR4ID0gKGVudHJ5LnRvLnNwbGl0LnZhbGlkIFx1MDAzY1x1MDAzYyAxKSB8IGVudHJ5LnRvLnNwbGl0LnNwZWM7XG4tXHRcdGJyW291dF0uc3BlYyA9IGxicl9zcGVjX21hcFtpZHhdO1xuJiM0MztcbiYjNDM7XHRcdGJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbiYjNDM7XHRcdFx0LmZyb21cdFx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCksXG4mIzQzO1x0XHRcdC50b1x0XHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksXG4mIzQzO1x0XHRcdC5taXNwcmVkXHQ9IGVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdCxcbiYjNDM7XHRcdFx0LnByZWRpY3RlZFx0PSAhZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LFxuJiM0MztcdFx0XHQuc3BlY1x0XHQ9IGxicl9zcGVjX21hcFtpZHhdLFxuJiM0MztcdFx0fTtcbiBcdFx0b3V0JiM0MzsmIzQzOztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuQEAgLTc1NiwxMCAmIzQzOzc1NiwxMCBAQCB2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbiBcbiBcdFx0cmRtc3JxKHg4Nl9wbXUubGJyX2Zyb20gJiM0MzsgbGJyX2lkeCwgbXNyX2xhc3RicmFuY2gubGJyKTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKTtcbi1cbi1cdFx0YnItXHUwMDNlZnJvbVx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tO1xuLVx0XHRici1cdTAwM2V0b1x0XHQ9IG1zcl9sYXN0YnJhbmNoLnRvO1xuJiM0MztcdFx0KmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4mIzQzO1x0XHRcdC5mcm9tXHQ9IG1zcl9sYXN0YnJhbmNoLmZyb20sXG4mIzQzO1x0XHRcdC50b1x0PSBtc3JfbGFzdGJyYW5jaC50byxcbiYjNDM7XHRcdH07XG4gXHRcdGJyJiM0MzsmIzQzOztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcbkBAIC04NDcsMTQgJiM0Mzs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4gXHRcdGlmIChhYm9ydCBcdTAwMjZcdTAwMjYgeDg2X3BtdS5sYnJfZG91YmxlX2Fib3J0IFx1MDAyNlx1MDAyNiBvdXQgXHUwMDNlIDApXG4gXHRcdFx0b3V0LS07XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhiciYjNDM7b3V0KTtcbi1cdFx0YnJbb3V0XS5mcm9tXHQgPSBmcm9tO1xuLVx0XHRicltvdXRdLnRvXHQgPSB0bztcbi1cdFx0YnJbb3V0XS5taXNwcmVkXHQgPSBtaXM7XG4tXHRcdGJyW291dF0ucHJlZGljdGVkID0gcHJlZDtcbi1cdFx0YnJbb3V0XS5pbl90eFx0ID0gaW5fdHg7XG4tXHRcdGJyW291dF0uYWJvcnRcdCA9IGFib3J0O1xuLVx0XHRicltvdXRdLmN5Y2xlc1x0ID0gY3ljbGVzO1xuJiM0MztcdFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuJiM0MztcdFx0XHQuZnJvbVx0XHQ9IGZyb20sXG4mIzQzO1x0XHRcdC50b1x0XHQ9IHRvLFxuJiM0MztcdFx0XHQubWlzcHJlZFx0PSBtaXMsXG4mIzQzO1x0XHRcdC5wcmVkaWN0ZWRcdD0gcHJlZCxcbiYjNDM7XHRcdFx0LmluX3R4XHRcdD0gaW5fdHgsXG4mIzQzO1x0XHRcdC5hYm9ydFx0XHQ9IGFib3J0LFxuJiM0MztcdFx0XHQuY3ljbGVzXHRcdD0gY3ljbGVzLFxuJiM0MztcdFx0fTtcbiBcdFx0b3V0JiM0MzsmIzQzOztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gb3V0O1xuQEAgLTkwNSw2ICYjNDM7OTA2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcbiBcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZTtcbiBcdHN0cnVjdCBsYnJfZW50cnkgKmxicjtcbiBcdHU2NCBmcm9tLCB0bywgaW5mbztcbiYjNDM7XHRib29sIG1pc3ByZWQ7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHg4Nl9wbXUubGJyX25yOyBpJiM0MzsmIzQzOykge1xuQEAgLTkyMSwyNCAmIzQzOzkyMywyNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuIFx0XHR0byA9IHJkbGJyX3RvKGksIGxicik7XG4gXHRcdGluZm8gPSByZGxicl9pbmZvKGksIGxicik7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlKTtcbi1cbi1cdFx0ZS1cdTAwM2Vmcm9tXHRcdD0gZnJvbTtcbi1cdFx0ZS1cdTAwM2V0b1x0XHQ9IHRvO1xuLVx0XHRlLVx1MDAzZW1pc3ByZWRcdD0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuLVx0XHRlLVx1MDAzZXByZWRpY3RlZFx0PSAhZS1cdTAwM2VtaXNwcmVkO1xuLVx0XHRlLVx1MDAzZWluX3R4XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0lOX1RYKTtcbi1cdFx0ZS1cdTAwM2VhYm9ydFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19BQk9SVCk7XG4tXHRcdGUtXHUwMDNlY3ljbGVzXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pO1xuLVx0XHRlLVx1MDAzZXR5cGVcdFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZiBjcHVjLVx1MDAzZWxicl9lbnRyaWVzW2ldIHRvXG4tXHRcdCAqIHRlbXBvcmFyaWx5IHN0b3JlIHRoZSBicmFuY2ggY291bnRlcnMgaW5mb3JtYXRpb24uXG4tXHRcdCAqIFRoZSBsYXRlciBjb2RlIHdpbGwgZGVjaWRlIHdoYXQgY29udGVudCBjYW4gYmUgZGlzY2xvc2VkXG4tXHRcdCAqIHRvIHRoZSBwZXJmIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS5cbi1cdFx0ICovXG4tXHRcdGUtXHUwMDNlcmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjYgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0s7XG4mIzQzO1x0XHRtaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuJiM0MztcbiYjNDM7XHRcdCplID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4mIzQzO1x0XHRcdC5mcm9tXHRcdD0gZnJvbSxcbiYjNDM7XHRcdFx0LnRvXHRcdD0gdG8sXG4mIzQzO1x0XHRcdC5taXNwcmVkXHQ9IG1pc3ByZWQsXG4mIzQzO1x0XHRcdC5wcmVkaWN0ZWRcdD0gIW1pc3ByZWQsXG4mIzQzO1x0XHRcdC5pbl90eFx0XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0lOX1RYKSxcbiYjNDM7XHRcdFx0LmFib3J0XHRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fQUJPUlQpLFxuJiM0MztcdFx0XHQuY3ljbGVzXHRcdD0gZ2V0X2xicl9jeWNsZXMoaW5mbyksXG4mIzQzO1x0XHRcdC50eXBlXHRcdD0gZ2V0X2xicl9icl90eXBlKGluZm8pLFxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2ZcbiYjNDM7XHRcdFx0ICogY3B1Yy1cdTAwM2VsYnJfZW50cmllc1tpXSB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGVcbiYjNDM7XHRcdFx0ICogYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLiBUaGUgbGF0ZXIgY29kZSB3aWxsXG4mIzQzO1x0XHRcdCAqIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZCB0byB0aGUgcGVyZlxuJiM0MztcdFx0XHQgKiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHQucmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdCAgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0ssXG4mIzQzO1x0XHR9O1xuIFx0fVxuIFxuIFx0Y3B1Yy1cdTAwM2VsYnJfc3RhY2subnIgPSBpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jIGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbmluZGV4IGJhNTU0ZTBjODQ2YzQuLjI1NGJlNGRhOGFlMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbkBAIC02MDQsNyAmIzQzOzYwNCw3IEBAIHN0YXRpYyBib29sIHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldChpbnQgaW5kZXgsIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGJyYmluZiA9IGJyZWdzLmJyYmluZjtcbi1cdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlbnRyeSk7XG4mIzQzO1x0KmVudHJ5ID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7IH07XG4gXHRpZiAoYnJiZV9yZWNvcmRfaXNfY29tcGxldGUoYnJiaW5mKSkge1xuIFx0XHRlbnRyeS1cdTAwM2Vmcm9tID0gYnJlZ3MuYnJic3JjO1xuIFx0XHRlbnRyeS1cdTAwM2V0byA9IGJyZWdzLmJyYnRndDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXG5pbmRleCA0OGQ4NTFmYmQ4ZWE1Li4zMTA2ODFjY2NiNTBhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXG5AQCAtMTQ2NywyMyAmIzQzOzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4tLypcbi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS5cbi0gKiBUaGUgdG8gYW5kIGZyb20gZmllbGRzIGFyZSBub3QgY2xlYXJlZCBiZWNhdXNlIHRoZXkgYXJlXG4tICogc3lzdGVtYXRpY2FsbHkgbW9kaWZpZWQgYnkgY2FsbGVyLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICpicilcbi17XG4tXHRici1cdTAwM2VtaXNwcmVkXHQ9IDA7XG4tXHRici1cdTAwM2VwcmVkaWN0ZWRcdD0gMDtcbi1cdGJyLVx1MDAzZWluX3R4XHQ9IDA7XG4tXHRici1cdTAwM2VhYm9ydFx0PSAwO1xuLVx0YnItXHUwMDNlY3ljbGVzXHQ9IDA7XG4tXHRici1cdTAwM2V0eXBlXHQ9IDA7XG4tXHRici1cdTAwM2VzcGVjXHQ9IFBFUkZfQlJfU1BFQ19OQTtcbi1cdGJyLVx1MDAzZXJlc2VydmVkXHQ9IDA7XG4tfVxuLVxuIGV4dGVybiB2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGVhZGVyLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5pbmRleCA0NjM4NTQ0MjA1ZjI4Li4zNGViMDVlOWQ3NGQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5AQCAtMzc1Nyw2ICYjNDM7Mzc1Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2Ioc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCBcdTAwMjZjdHgtXHUwMDNlcG11X2N0eF9saXN0LCBwbXVfY3R4X2VudHJ5KSB7XG4gXHRcdGNwYyA9IHRoaXNfY3BjKHBtdV9jdHgtXHUwMDNlcG11KTtcbiBcbiYjNDM7XHRcdGlmIChjcGMtXHUwMDNldGFza19lcGMgIT0gcG11X2N0eClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRpZiAoY3BjLVx1MDAzZXNjaGVkX2NiX3VzYWdlIFx1MDAyNlx1MDAyNiBwbXVfY3R4LVx1MDAzZXBtdS1cdTAwM2VzY2hlZF90YXNrKVxuIFx0XHRcdHBtdV9jdHgtXHUwMDNlcG11LVx1MDAzZXNjaGVkX3Rhc2socG11X2N0eCwgdGFzaywgc2NoZWRfaW4pO1xuIFx0fVxuQEAgLTM5MDcsNyAmIzQzOzM5MTAsNyBAQCBzdGF0aWMgdm9pZCBfX3BlcmZfcG11X3NjaGVkX3Rhc2soc3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGMsXG4gXHRwZXJmX2N0eF9sb2NrKGNwdWN0eCwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KTtcbiBcdHBlcmZfcG11X2Rpc2FibGUocG11KTtcbiBcbi1cdHBtdS1cdTAwM2VzY2hlZF90YXNrKGNwYy1cdTAwM2V0YXNrX2VwYywgdGFzaywgc2NoZWRfaW4pO1xuJiM0MztcdHBtdS1cdTAwM2VzY2hlZF90YXNrKFx1MDAyNmNwYy1cdTAwM2VlcGMsIHRhc2ssIHNjaGVkX2luKTtcbiBcbiBcdHBlcmZfcG11X2VuYWJsZShwbXUpO1xuIFx0cGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KTtcbkBAIC0zOTE3LDE1ICYjNDM7MzkyMCwxNyBAQCBzdGF0aWMgdm9pZCBwZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbiBcdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCxcbiBcdFx0XHRcdGJvb2wgc2NoZWRfaW4pXG4ge1xuLVx0c3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9IHRoaXNfY3B1X3B0cihcdTAwMjZwZXJmX2NwdV9jb250ZXh0KTtcbiBcdHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjO1xuIFxuLVx0LyogY3B1Y3R4LVx1MDAzZXRhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovXG4tXHRpZiAocHJldiA9PSBuZXh0IHx8IGNwdWN0eC1cdTAwM2V0YXNrX2N0eClcbiYjNDM7XHRpZiAocHJldiA9PSBuZXh0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFx1MDAyNnNjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSlcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFx1MDAyNnNjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkge1xuJiM0MztcdFx0aWYgKGNwYy1cdTAwM2V0YXNrX2VwYylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRfX3BlcmZfcG11X3NjaGVkX3Rhc2soY3BjLCBzY2hlZF9pbiA/IG5leHQgOiBwcmV2LCBzY2hlZF9pbik7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0NQVV9TVVBfQU1EJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTX0FNRF9CUlMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9JTlRFTCYjMzQ7LAogICAgJiMzNDtBUk02NF9CUkJFJiMzNDssCiAgICAmIzM0O0FSTV9QTVVWMyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtZF9icnNfZHJhaW4mIzM0OywKICAgICYjMzQ7YW1kX3BtdV9sYnJfcmVhZCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfMzImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X2xicl9yZWFkXzY0JiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9zdG9yZV9wZWJzX2xicnMmIzM0OywKICAgICYjMzQ7YnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGJyYW5jaCBlbnRyeSBpbml0aWFsaXphdGlvbiBpbiBwZXJmIGV2ZW50IFBNVSBkcml2ZXJzIChBTUQgQlJTLCBBTUQgTEJSLCBJbnRlbCBMQlIsIEFSTSBCUkJFKSBieSByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgcGVyZiBldmVudHMgc3Vic3lzdGVtIChga2VybmVsL2V2ZW50cy9jb3JlLmNgKSB0byBjaGFuZ2UgaG93IGBzY2hlZF90YXNrYCBjYWxsYmFja3MgYXJlIGludm9rZWQgZm9yIFBNVXMgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBQTVUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCB2aWEgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OWVlNWU4ZmM0OTExMTA3NTQ1NmI4ZmE5NDM4NGEzMjAyNDk4YzQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTU6MDI6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYwppbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMKQEAgLTM0MywxMSAmIzQzOzM0MywxMCBAQCB2b2lkIGFtZF9icnNfZHJhaW4odm9pZCkKIAkJaWYgKCFhbWRfYnJzX21hdGNoX3BsbShldmVudCwgZnJvbSwgdG8pKQogCQkJY29udGludWU7CiAKLQkJcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyJiM0Mztucik7Ci0KLQkJYnJbbnJdLmZyb20gPSBmcm9tOwotCQlicltucl0udG8gICA9IHRvOwotCiYjNDM7CQlicltucl0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQk9IGZyb20sCiYjNDM7CQkJLnRvCT0gdG8sCiYjNDM7CQl9OwogCQluciYjNDM7JiM0Mzs7CiAJfQogZW1wdHk6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYwppbmRleCA5ZDljOTYxOTg5ZDUxLi5hNTU2NDZmY2I4NDY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMKQEAgLTE4NCwxMyAmIzQzOzE4NCw2IEBAIHZvaWQgYW1kX3BtdV9sYnJfcmVhZCh2b2lkKQogCQkgICAgZW50cnkudG8uc3BsaXQucmVzZXJ2ZWQpCiAJCQljb250aW51ZTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgJiM0Mzsgb3V0KTsKLQotCQlicltvdXRdLmZyb20JPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCk7Ci0JCWJyW291dF0udG8JPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkudG8uc3BsaXQuaXApOwotCQlicltvdXRdLm1pc3ByZWQJPSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3Q7Ci0JCWJyW291dF0ucHJlZGljdGVkID0gIWJyW291dF0ubWlzcHJlZDsKLQogCQkvKgogCQkgKiBTZXQgYnJhbmNoIHNwZWN1bGF0aW9uIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBzdGF0dXMgb2YKIAkJICogdGhlIHZhbGlkIGFuZCBzcGVjIGJpdHMuCkBAIC0yMDgsNyAmIzQzOzIwMSwxNCBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZCkKIAkJICogc3BlY3VsYXRpdmUgYW5kIHRvb2sgdGhlIGNvcnJlY3QgcGF0aAogCQkgKi8KIAkJaWR4ID0gKGVudHJ5LnRvLnNwbGl0LnZhbGlkICZsdDsmbHQ7IDEpIHwgZW50cnkudG8uc3BsaXQuc3BlYzsKLQkJYnJbb3V0XS5zcGVjID0gbGJyX3NwZWNfbWFwW2lkeF07CiYjNDM7CiYjNDM7CQlicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiYjNDM7CQkJLmZyb20JCT0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApLAomIzQzOwkJCS50bwkJPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkudG8uc3BsaXQuaXApLAomIzQzOwkJCS5taXNwcmVkCT0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LAomIzQzOwkJCS5wcmVkaWN0ZWQJPSAhZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LAomIzQzOwkJCS5zcGVjCQk9IGxicl9zcGVjX21hcFtpZHhdLAomIzQzOwkJfTsKIAkJb3V0JiM0MzsmIzQzOzsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYwppbmRleCBmOGZhZGIwYjE2YTQ1Li4wYTliMzQyNjFlYmUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jCkBAIC03NTYsMTAgJiM0Mzs3NTYsMTAgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpCiAKIAkJcmRtc3JxKHg4Nl9wbXUubGJyX2Zyb20gJiM0MzsgbGJyX2lkeCwgbXNyX2xhc3RicmFuY2gubGJyKTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIpOwotCi0JCWJyLSZndDtmcm9tCT0gbXNyX2xhc3RicmFuY2guZnJvbTsKLQkJYnItJmd0O3RvCQk9IG1zcl9sYXN0YnJhbmNoLnRvOwomIzQzOwkJKmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiYjNDM7CQkJLmZyb20JPSBtc3JfbGFzdGJyYW5jaC5mcm9tLAomIzQzOwkJCS50bwk9IG1zcl9sYXN0YnJhbmNoLnRvLAomIzQzOwkJfTsKIAkJYnImIzQzOyYjNDM7OwogCX0KIAljcHVjLSZndDtsYnJfc3RhY2subnIgPSBpOwpAQCAtODQ3LDE0ICYjNDM7ODQ3LDE1IEBAIHZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzY0KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKQogCQlpZiAoYWJvcnQgJmFtcDsmYW1wOyB4ODZfcG11Lmxicl9kb3VibGVfYWJvcnQgJmFtcDsmYW1wOyBvdXQgJmd0OyAwKQogCQkJb3V0LS07CiAKLQkJcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyJiM0MztvdXQpOwotCQlicltvdXRdLmZyb20JID0gZnJvbTsKLQkJYnJbb3V0XS50bwkgPSB0bzsKLQkJYnJbb3V0XS5taXNwcmVkCSA9IG1pczsKLQkJYnJbb3V0XS5wcmVkaWN0ZWQgPSBwcmVkOwotCQlicltvdXRdLmluX3R4CSA9IGluX3R4OwotCQlicltvdXRdLmFib3J0CSA9IGFib3J0OwotCQlicltvdXRdLmN5Y2xlcwkgPSBjeWNsZXM7CiYjNDM7CQlicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiYjNDM7CQkJLmZyb20JCT0gZnJvbSwKJiM0MzsJCQkudG8JCT0gdG8sCiYjNDM7CQkJLm1pc3ByZWQJPSBtaXMsCiYjNDM7CQkJLnByZWRpY3RlZAk9IHByZWQsCiYjNDM7CQkJLmluX3R4CQk9IGluX3R4LAomIzQzOwkJCS5hYm9ydAkJPSBhYm9ydCwKJiM0MzsJCQkuY3ljbGVzCQk9IGN5Y2xlcywKJiM0MzsJCX07CiAJCW91dCYjNDM7JiM0Mzs7CiAJfQogCWNwdWMtJmd0O2xicl9zdGFjay5uciA9IG91dDsKQEAgLTkwNSw2ICYjNDM7OTA2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKIAlzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmU7CiAJc3RydWN0IGxicl9lbnRyeSAqbGJyOwogCXU2NCBmcm9tLCB0bywgaW5mbzsKJiM0MzsJYm9vbCBtaXNwcmVkOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHg4Nl9wbXUubGJyX25yOyBpJiM0MzsmIzQzOykgewpAQCAtOTIxLDI0ICYjNDM7OTIzLDI3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCiAJCXRvID0gcmRsYnJfdG8oaSwgbGJyKTsKIAkJaW5mbyA9IHJkbGJyX2luZm8oaSwgbGJyKTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZSk7Ci0KLQkJZS0mZ3Q7ZnJvbQkJPSBmcm9tOwotCQllLSZndDt0bwkJPSB0bzsKLQkJZS0mZ3Q7bWlzcHJlZAk9IGdldF9sYnJfbWlzcHJlZChpbmZvKTsKLQkJZS0mZ3Q7cHJlZGljdGVkCT0gIWUtJmd0O21pc3ByZWQ7Ci0JCWUtJmd0O2luX3R4CT0gISEoaW5mbyAmYW1wOyBMQlJfSU5GT19JTl9UWCk7Ci0JCWUtJmd0O2Fib3J0CT0gISEoaW5mbyAmYW1wOyBMQlJfSU5GT19BQk9SVCk7Ci0JCWUtJmd0O2N5Y2xlcwk9IGdldF9sYnJfY3ljbGVzKGluZm8pOwotCQllLSZndDt0eXBlCQk9IGdldF9sYnJfYnJfdHlwZShpbmZvKTsKLQotCQkvKgotCQkgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YgY3B1Yy0mZ3Q7bGJyX2VudHJpZXNbaV0gdG8KLQkJICogdGVtcG9yYXJpbHkgc3RvcmUgdGhlIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4KLQkJICogVGhlIGxhdGVyIGNvZGUgd2lsbCBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWQKLQkJICogdG8gdGhlIHBlcmYgdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLgotCQkgKi8KLQkJZS0mZ3Q7cmVzZXJ2ZWQJPSAoaW5mbyAmZ3Q7Jmd0OyBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgJmFtcDsgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0s7CiYjNDM7CQltaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pOwomIzQzOwomIzQzOwkJKmUgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQkJPSBmcm9tLAomIzQzOwkJCS50bwkJPSB0bywKJiM0MzsJCQkubWlzcHJlZAk9IG1pc3ByZWQsCiYjNDM7CQkJLnByZWRpY3RlZAk9ICFtaXNwcmVkLAomIzQzOwkJCS5pbl90eAkJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0lOX1RYKSwKJiM0MzsJCQkuYWJvcnQJCT0gISEoaW5mbyAmYW1wOyBMQlJfSU5GT19BQk9SVCksCiYjNDM7CQkJLmN5Y2xlcwkJPSBnZXRfbGJyX2N5Y2xlcyhpbmZvKSwKJiM0MzsJCQkudHlwZQkJPSBnZXRfbGJyX2JyX3R5cGUoaW5mbyksCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YKJiM0MzsJCQkgKiBjcHVjLSZndDtsYnJfZW50cmllc1tpXSB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGUKJiM0MzsJCQkgKiBicmFuY2ggY291bnRlcnMgaW5mb3JtYXRpb24uIFRoZSBsYXRlciBjb2RlIHdpbGwKJiM0MzsJCQkgKiBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWQgdG8gdGhlIHBlcmYKJiM0MzsJCQkgKiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuCiYjNDM7CQkJICovCiYjNDM7CQkJLnJlc2VydmVkCT0gKGluZm8gJmd0OyZndDsgTEJSX0lORk9fQlJfQ05UUl9PRkZTRVQpICZhbXA7CiYjNDM7CQkJCQkgIExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLLAomIzQzOwkJfTsKIAl9CiAKIAljcHVjLSZndDtsYnJfc3RhY2subnIgPSBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL2FybV9icmJlLmMgYi9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYwppbmRleCBiYTU1NGUwYzg0NmM0Li4yNTRiZTRkYThhZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYwpAQCAtNjA0LDcgJiM0Mzs2MDQsNyBAQCBzdGF0aWMgYm9vbCBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQoaW50IGluZGV4LCBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudAogCQlyZXR1cm4gZmFsc2U7CiAKIAlicmJpbmYgPSBicmVncy5icmJpbmY7Ci0JcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGVudHJ5KTsKJiM0MzsJKmVudHJ5ID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7IH07CiAJaWYgKGJyYmVfcmVjb3JkX2lzX2NvbXBsZXRlKGJyYmluZikpIHsKIAkJZW50cnktJmd0O2Zyb20gPSBicmVncy5icmJzcmM7CiAJCWVudHJ5LSZndDt0byA9IGJyZWdzLmJyYnRndDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggNDhkODUxZmJkOGVhNS4uMzEwNjgxY2NjYjUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTE0NjcsMjMgJiM0MzsxNDY3LDYgQEAgc3RhdGljIGlubGluZSB1MzIgcGVyZl9zYW1wbGVfZGF0YV9zaXplKHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAogCXJldHVybiBzaXplOwogfQogCi0vKgotICogQ2xlYXIgYWxsIGJpdGZpZWxkcyBpbiB0aGUgcGVyZl9icmFuY2hfZW50cnkuCi0gKiBUaGUgdG8gYW5kIGZyb20gZmllbGRzIGFyZSBub3QgY2xlYXJlZCBiZWNhdXNlIHRoZXkgYXJlCi0gKiBzeXN0ZW1hdGljYWxseSBtb2RpZmllZCBieSBjYWxsZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICpicikKLXsKLQlici0mZ3Q7bWlzcHJlZAk9IDA7Ci0JYnItJmd0O3ByZWRpY3RlZAk9IDA7Ci0JYnItJmd0O2luX3R4CT0gMDsKLQlici0mZ3Q7YWJvcnQJPSAwOwotCWJyLSZndDtjeWNsZXMJPSAwOwotCWJyLSZndDt0eXBlCT0gMDsKLQlici0mZ3Q7c3BlYwk9IFBFUkZfQlJfU1BFQ19OQTsKLQlici0mZ3Q7cmVzZXJ2ZWQJPSAwOwotfQotCiBleHRlcm4gdm9pZCBwZXJmX291dHB1dF9zYW1wbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGVhZGVyLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLApkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwppbmRleCA0NjM4NTQ0MjA1ZjI4Li4zNGViMDVlOWQ3NGQwIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtMzc1Nyw2ICYjNDM7Mzc1Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2Ioc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG11X2N0eCwgJmFtcDtjdHgtJmd0O3BtdV9jdHhfbGlzdCwgcG11X2N0eF9lbnRyeSkgewogCQljcGMgPSB0aGlzX2NwYyhwbXVfY3R4LSZndDtwbXUpOwogCiYjNDM7CQlpZiAoY3BjLSZndDt0YXNrX2VwYyAhPSBwbXVfY3R4KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlpZiAoY3BjLSZndDtzY2hlZF9jYl91c2FnZSAmYW1wOyZhbXA7IHBtdV9jdHgtJmd0O3BtdS0mZ3Q7c2NoZWRfdGFzaykKIAkJCXBtdV9jdHgtJmd0O3BtdS0mZ3Q7c2NoZWRfdGFzayhwbXVfY3R4LCB0YXNrLCBzY2hlZF9pbik7CiAJfQpAQCAtMzkwNyw3ICYjNDM7MzkxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgcGVyZl9jcHVfcG11X2NvbnRleHQgKmNwYywKIAlwZXJmX2N0eF9sb2NrKGNwdWN0eCwgY3B1Y3R4LSZndDt0YXNrX2N0eCk7CiAJcGVyZl9wbXVfZGlzYWJsZShwbXUpOwogCi0JcG11LSZndDtzY2hlZF90YXNrKGNwYy0mZ3Q7dGFza19lcGMsIHRhc2ssIHNjaGVkX2luKTsKJiM0MzsJcG11LSZndDtzY2hlZF90YXNrKCZhbXA7Y3BjLSZndDtlcGMsIHRhc2ssIHNjaGVkX2luKTsKIAogCXBlcmZfcG11X2VuYWJsZShwbXUpOwogCXBlcmZfY3R4X3VubG9jayhjcHVjdHgsIGNwdWN0eC0mZ3Q7dGFza19jdHgpOwpAQCAtMzkxNywxNSAmIzQzOzM5MjAsMTcgQEAgc3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAogCQkJCWJvb2wgc2NoZWRfaW4pCiB7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9IHRoaXNfY3B1X3B0cigmYW1wO3BlcmZfY3B1X2NvbnRleHQpOwogCXN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjOwogCi0JLyogY3B1Y3R4LSZndDt0YXNrX2N0eCB3aWxsIGJlIGhhbmRsZWQgaW4gcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX2luL291dCAqLwotCWlmIChwcmV2ID09IG5leHQgfHwgY3B1Y3R4LSZndDt0YXNrX2N0eCkKJiM0MzsJaWYgKHByZXYgPT0gbmV4dCkKIAkJcmV0dXJuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cigmYW1wO3NjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cigmYW1wO3NjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkgewomIzQzOwkJaWYgKGNwYy0mZ3Q7dGFza19lcGMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCV9fcGVyZl9wbXVfc2NoZWRfdGFzayhjcGMsIHNjaGVkX2luID8gbmV4dCA6IHByZXYsIHNjaGVkX2luKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHRoZSBQZXJmIEV2ZW50cyBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNldmVyYWwgZmlsZXMgcmVsYXRlZCB0byB0aGUgcGVyZm9ybWFuY2UgZXZlbnRzIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYGRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jYCwgYGluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oYCwgYW5kLCBjcml0aWNhbGx5LCBga2VybmVsL2V2ZW50cy9jb3JlLmNgLiAgVGhlIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgd2hhdCBpbW1lZGlhdGVseSBkcmF3IG15IGF0dGVudGlvbiBiZWNhdXNlIHRoZXkgZGVhbCB3aXRoIHRoZSBgcGVyZl9jdHhfc2NoZWRfdGFza19jYmAgYW5kIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBmdW5jdGlvbnMsIGFuZCB0aGVzZSBhcmUgY29yZSBwaWVjZXMgb2YgdGhlIHNjaGVkdWxpbmcgaW50ZWdyYXRpb24uCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgLiAgTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjayB3aXRoaW4gdGhlIGBwZXJmX2N0eF9zY2hlZF90YXNrX2NiYCBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgdGhlIFBNVSBjb250ZXh0cyBiYXNlZCBvbiBgY3BjLSZndDt0YXNrX2VwY2AuICBGdXJ0aGVybW9yZSwgdGhlIGNhbGwgdG8gYHBtdS0mZ3Q7c2NoZWRfdGFza2AgaW4gYF9fcGVyZl9wbXVfc2NoZWRfdGFza2AgaXMgY2hhbmdlZCB0byBwYXNzIHRoZSBgZXBjYCBmaWVsZCwgbm90IHRoZSBgdGFza19lcGNgLiBGaW5hbGx5LCBJIHNlZSB0aGUgbG9vcCBpbiBgcGVyZl9wbXVfc2NoZWRfdGFza2AgaXMgY2hhbmdlZCB0byBjaGVjayBpZiBgY3BjLSZndDt0YXNrX2VwY2AgaXMgc2V0LgoKVGhpcyBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHNjaGVkdWxpbmcgY2FsbGJhY2sgbWVjaGFuaXNtLiBUaGUgb3RoZXIgY2hhbmdlcyBhcmUgbW9zdGx5IHJlZmFjdG9yaW5nLCByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uICBUaGF0JiMzOTtzIGdlbmVyYWxseSBhIGNsZWFudXAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXBsYWNlbWVudCBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaG93IHJlYWNoYWJsZSB0aGlzIGlzLiAgYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGNhbGxlZCBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcyBpZiB0aGVyZSBhcmUgUE1VcyB3aXRoIGBzY2hlZF90YXNrYCBjYWxsYmFja3MuICBUaGF0IG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSBzb21ldGhpbmcgbGlrZSBgc3l6a2FsbGVyYCwgdXNpbmcgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuIFRoYXQgbWFrZXMgbWUgZmVlbCBiZXR0ZXIsIGFzIEkgY2FuIHdyaXRlIGEgdGVzdCBjYXNlIGZvciB0aGlzLgoKU28sIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgcGVyZl9jdHhfc2NoZWRfdGFza19jYmAsIGBfX3BlcmZfcG11X3NjaGVkX3Rhc2tgLCBhbmQgYHBlcmZfcG11X3NjaGVkX3Rhc2tgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhbGxzIGFyZSBnb2luZyB0byBvcGVyYXRlIG5vdy4gV2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuLi4gVGhhdCYjMzk7cyBhIGxpdHRsZSBsZXNzIGNvbnZlbmllbnQgZm9yIGRpcmVjdGx5IGZ1enppbmcgdGhlbS4gTGV0JiMzOTtzIGxvb2sgYWdhaW4gYXQgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBpcyBhY3R1YWxseSBjYWxsZWQuICBJcyBpdCBpbiBgcGVyZl9ldmVudF9zd2l0Y2hgPyBOby4gSXMgaXQgaW4gYHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgb3IgYHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXRgPyBObywgd2FpdC4gSSBzaG91bGQganVzdCBncmVwIGZvciBjYWxscyB0byBgcGVyZl9wbXVfc2NoZWRfdGFza2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX3BtdV9zY2hlZF90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmM9Mzg3OT12b2lkIHBlcmZfc2NoZWRfY2JfaW5jKHN0cnVjdCBwbXUgKnBtdSlcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODk3LSAqL1xua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzg5ODpzdGF0aWMgdm9pZCBfX3BlcmZfcG11X3NjaGVkX3Rhc2soc3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGMsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODk5LVx0XHRcdFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGJvb2wgc2NoZWRfaW4pXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzkxOC1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5MTk6c3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTIwLVx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5MzEtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozOTMyOlx0XHRfX3BlcmZfcG11X3NjaGVkX3Rhc2soY3BjLCBzY2hlZF9pbiA/IG5leHQgOiBwcmV2LCBzY2hlZF9pbik7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTMzLVx0fVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTM5NTA9dm9pZCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5NTMtXHRpZiAoX190aGlzX2NwdV9yZWFkKHBlcmZfc2NoZWRfY2JfdXNhZ2VzKSlcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5NTQ6XHRcdHBlcmZfcG11X3NjaGVkX3Rhc2sodGFzaywgbmV4dCwgZmFsc2UpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk1NS1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz00MzIyPXZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTQzMzAtXHRpZiAoX190aGlzX2NwdV9yZWFkKHBlcmZfc2NoZWRfY2JfdXNhZ2VzKSlcbmtlcm5lbC9ldmVudHMvY29yZS5jOjQzMzE6XHRcdHBlcmZfcG11X3NjaGVkX3Rhc2socHJldiwgdGFzaywgdHJ1ZSk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgUGVyZm9ybWFuY2UgRXZlbnQgU2NoZWR1bGVyIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aGUgcGVyZm9ybWFuY2UgZXZlbnQgc3lzdGVtIGhhbmRsZXMgdGFzayBzY2hlZHVsaW5nLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgYXJlIHRoZSBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYHBlcmZfcG11X3NjaGVkX3Rhc2tgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBpbnZlc3RpZ2F0ZSB0aGUgdGFzayBzY2hlZHVsaW5nIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9uIHBlcmZvcm1hbmNlIGV2ZW50IGNvbGxlY3Rpb24uIEdpdmVuIHRoYXQsIEkgd2FudCB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byBob3cgdGhhdCBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggcGVyZm9ybWFuY2UgZXZlbnQgY29udGV4dHMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgIGlzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBjYWxsYmFjayB0byByZXZpZXcgbmV4dC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBNVSBpcyBiZWluZyBub3RpZmllZCBvZiB0YXNrIHNjaGVkdWxpbmcgZXZlbnRzIGFuZCBob3cgdGhlIGNvbnRleHRzIGFyZSBiZWluZyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmZfY3R4X3NjaGVkX3Rhc2tfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYz0zNzI1PXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3luY19zdGF0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zNzUwLVxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzc1MTpzdGF0aWMgdm9pZCBwZXJmX2N0eF9zY2hlZF90YXNrX2NiKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM3NTItXHRcdFx0XHQgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGJvb2wgc2NoZWRfaW4pXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzc2OT1wZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4MjYtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozODI3Olx0XHRcdHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2IoY3R4LCB0YXNrLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODI4LVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4NTUtaW5zaWRlX3N3aXRjaDpcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM4NTY6XHRcdHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2IoY3R4LCB0YXNrLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODU3LVx0XHR0YXNrX2N0eF9zY2hlZF9vdXQoY3R4LCBOVUxMLCBFVkVOVF9BTEwpO1xuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTQyNTM9c3RhdGljIHZvaWQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MjY2LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI2NzpcdFx0cGVyZl9jdHhfc2NoZWRfdGFza19jYihjdHgsIHRhc2ssIHRydWUpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtNDI2OC1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00Mjk3LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI5ODpcdHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2IoY3B1Y3R4LVx1MDAzZXRhc2tfY3R4LCB0YXNrLCB0cnVlKTtcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIENvbnRleHQgU3dpdGNoZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0YCBhbmQgYHBlcmZfZXZlbnRfY29udGV4dF9zY2hlZF9pbmAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb250ZXh0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMuIFRoZSBkZXNpZ24gaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudDogYXJlIHRoZXkgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBvdXRzaWRlIHRoZWlyIGNvbXBpbGF0aW9uIHVuaXQsIG9yIGFyZSB0aGV5IG1lYW50IHRvIGJlIGludGVybmFsIGhlbHBlcnM/IExldCBtZSB2ZXJpZnkgdGhpczsgYSBxdWljayBjb2RlIHJldmlldyBpcyBpbiBvcmRlci4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZWlyIGxpbmthZ2UgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgb3IgZXh0ZXJuYWwgY2FsbCBzaXRlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBtYWludGFpbmFiaWxpdHksIHBvdGVudGlhbCBmb3IgbWlzdXNlLCBhbmQgcG90ZW50aWFsbHkgbW9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmM9MzI3PXN0YXRpYyB2b2lkIGV2ZW50X2Z1bmN0aW9uX2NhbGwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBldmVudF9mIGZ1bmMsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzYzLVx0ICogUmVsb2FkIHRoZSB0YXNrIHBvaW50ZXIsIGl0IG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5XG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozNjQ6XHQgKiBhIGNvbmN1cnJlbnQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dCgpLlxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzY1LVx0ICovXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzc2OD1zdGF0aWMgdm9pZFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzc2OTpwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzc3MC17XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzk1MD12b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk1OC1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5NTk6XHRwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHRhc2ssIG5leHQpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzE2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmb3JtYW5jZSBFdmVudCBGdW5jdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgc3RhbmQgb3V0IGFzIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2UgbmFtZXMgYXJlIGtleS4gTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYW5kIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aG9zZSBmaWxlcywgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGggc2NoZWR1bGluZyBvciB0YXNrIGNvbnRleHQgc3dpdGNoZXMuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgd2lsbCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGluIHJlbGF0aW9uIHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbWRfYnJzX2RyYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jPTI2Mj1zdGF0aWMgYm9vbCBhbWRfYnJzX21hdGNoX3BsbShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBmcm9tLCB1NjQgdG8pXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0yODAtICovXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jOjI4MTp2b2lkIGFtZF9icnNfZHJhaW4odm9pZClcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMtMjgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgYW1kX2Jyc19kcmFpbmAgYW5kIGl0cyBOb24tU3RhdGljIE5hdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFtZF9icnNfZHJhaW5gLCBhbmQgaW1tZWRpYXRlbHksIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogc3RhdGljIGp1bXBzIG91dCBhdCBtZS4gVGhpcyBpbXBsaWVzIGl0IGxpa2VseSBob2xkcyBzdGF0ZSwgd2hpY2ggbWVhbnMgaXRzIGJlaGF2aW9yIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIGZhY3RvcnMgYmV5b25kIGp1c3QgaXRzIGRpcmVjdCBpbnB1dCBwYXJhbWV0ZXJzLiBJdCYjMzk7cyBub3QgYSBwdXJlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgaW1wbGljYXRpb24gaGVyZS4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgcmVnaXN0ZXIgcmVhZCB0aGF0JiMzOTtzIHVwZGF0ZWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyBhIGdsb2JhbCBmbGFnLiAKClRoaW5raW5nIGFib3V0IHRoaXMgZnJvbSBhIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMgc3RhbmRwb2ludCwgdGhpcyBub24tc3RhdGljIG5hdHVyZSBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgYSBjYWxsIHRvIGBhbWRfYnJzX2RyYWluYCBpbiBpc29sYXRpb24gYW5kIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXRzIGVmZmVjdHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCB1bmRlcnN0YW5kIGhvdyBpdHMgaW50ZXJuYWwgc3RhdGUgaXMgbW9kaWZpZWQuIFRoaXMgYWRkcyBhIGxheWVyIG9mIGNvbXBsZXhpdHk7IEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBJdCBhbHNvIG1lYW5zIHRoZSBmdW5jdGlvbiBjYWxsIGhhcyBzaWRlIGVmZmVjdHMuCkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIGhvdyBpdHMgbm9uLXN0YXRpYyBjaGFyYWN0ZXJpc3RpY3MgaW1wYWN0IGFueSBzeXN0ZW0gcnVubmluZyBvbiB0aGUgbWFjaGluZS4gVGhpcyBtYXkgcmVxdWlyZSB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgdGhyZWFkcyBhbmQgaG93IHRoZXkgYXJlIGltcGFjdGluZyB0aGlzIGZ1bmN0aW9uLgpUaGlzIGlzIG5vdCBhIHNpbXBsZSBmdW5jdGlvbjsgSSBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCBjYXV0aW9uIGFuZCBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZF9wbXVfbGJyX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMTYzLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNjQ6dm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTm9uLVN0YXRpYyBgYW1kX3BtdV9sYnJfcmVhZGAgLSBJbXBsaWNhdGlvbnMgYW5kIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIGBhbWRfcG11X2xicl9yZWFkYCBpcyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0IGF3YXksIHRoaXMgc3BhcmtzIGEgZmV3IHRob3VnaHRzLiBBcyBhbiBleHBlcnQgaW4gcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBhbmQgbG93LWxldmVsIHN5c3RlbSBkZXNpZ24sIEkgbmVlZCB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFRoZSBhYnNlbmNlIG9mIHRoZSBgc3RhdGljYCBrZXl3b3JkIG1lYW5zIHRoaXMgZnVuY3Rpb24gaGFzIGV4dGVybmFsIGxpbmthZ2UuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3IgcG90ZW50aWFsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gdXNlci1zcGFjZSAodGhvdWdoIHRoYXQmIzM5O3MgbGVzcyBjb21tb24gaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0KS4KClRoaXMgcmFpc2VzIHF1ZXN0aW9uczoKCiogICAqKkludGVuZGVkIHVzZToqKiBJcyBpdCBkZXNpZ25lZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIHdpdGhpbiB0aGUgQU1EIFBNVSBkcml2ZXIsIG9yIGlzIGl0IGEgbW9yZSBnZW5lcmFsIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBvdGhlciBkcml2ZXJzIG9yIGNvZGUgcGF0aHMgbWlnaHQgbmVlZD8gVW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNhZ2UgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgcmlzay9yZXdhcmQgb2YgYW55IG1vZGlmaWNhdGlvbiBvciBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgZnVuY3Rpb24uCiogICAqKkFCSSBzdGFiaWxpdHk6KiogU2luY2UgaXQmIzM5O3MgZXh0ZXJuYWxseSBsaW5rZWQsIGl0cyBzaWduYXR1cmUgYmVjb21lcyBwYXJ0IG9mIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIGZvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uIChvciBwb3RlbnRpYWxseSBiZXlvbmQsIGlmIGl0JiMzOTtzIGNvbnNpZGVyZWQgcGFydCBvZiBhIHN0YWJsZSBpbnRlcmZhY2UpLiBBbnkgY2hhbmdlcyB0byBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHR5cGUsIG9yIGV2ZW4gaXRzIGludGVybmFsIGJlaGF2aW9yIGNhbiBoYXZlIHNpZ25pZmljYW50IHJlcGVyY3Vzc2lvbnMuIFdlJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgYW55IHByb3Bvc2VkIGNoYW5nZXMgdmVyeSBjYXJlZnVsbHkgdG8gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBkb2N1bWVudCBhbnkgYnJlYWtpbmcgY2hhbmdlcyBtZXRpY3Vsb3VzbHkuCiogICAqKlBvdGVudGlhbCBmb3IgbWlzdXNlOioqIFdpdGggZXh0ZXJuYWwgbGlua2FnZSwgaXQmIzM5O3Mgb3BlbiB0byBiZWluZyBjYWxsZWQgYnkgcG90ZW50aWFsbHkgZXJyYW50IGNvZGUgb3IgYnkgY29kZSB0aGF0IGRvZXNuJiMzOTt0IGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIHB1cnBvc2UuIFJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgaW5wdXQgdmFsaWRhdGlvbiB3aWxsIGJlIGNydWNpYWwgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYgdG8gcHJldmVudCBjcmFzaGVzIG9yIGluY29ycmVjdCByZXN1bHRzLiBXZSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBoYW5kbGVzIHVuZXhwZWN0ZWQgaW5wdXRzIG9yIGVkZ2UgY2FzZXMuCiogICAqKk1haW50YWluYWJpbGl0eToqKiAgVGhlIGZ1bmN0aW9uJiMzOTtzIHVzZSBpbiBleHRlcm5hbCBtb2R1bGVzIGNhbiBjb21wbGljYXRlIHRoZSBjb2RlIG1haW50ZW5hbmNlIHByb2Nlc3MuIFdlIG11c3QgdHJhY2UgZG93biB0aGUgdXNhZ2VzIGlmIGFueSBjaGFuZ2VzIGFyZSBwcm9wb3NlZCBhbmQgY29uc2lkZXIgdGhlIGltcGFjdCBvZiB0aG9zZSBjaGFuZ2VzLgoqICAgKipUZXN0aW5nIENvdmVyYWdlOioqIFRob3JvdWdoIHRlc3RpbmcgaXMgY3J1Y2lhbC4gTm90IG9ubHkgZG8gd2UgbmVlZCB0byB0ZXN0IHRoZSBmdW5jdGlvbiBpdHNlbGYgd2l0aCBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMsIGJ1dCBhbHNvIHRlc3Qgc2NlbmFyaW9zIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGl0cyAmIzM0O3B1YmxpYyYjMzQ7IGludGVyZmFjZXMuIFJlZ3Jlc3Npb24gdGVzdGluZyBhbHNvIGJlY29tZXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaGVyZSB0byBtYWludGFpbiBpdHMgYmVoYXZpb3IuCgpJbiBzdW1tYXJ5LCB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgYGFtZF9wbXVfbGJyX3JlYWRgIG1lYW5zIHdlIG5lZWQgdG8gYXBwcm9hY2ggaXQgd2l0aCBhIGxldmVsIG9mIGNhcmUgYXBwcm9wcmlhdGUgZm9yIGFueSBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBjb2duaXphbnQgb2YgaXRzIHBvdGVudGlhbCB1c2Ugd2l0aGluIGEgd2lkZXIgc2NvcGUsIGl0cyBwb3NzaWJsZSBpbXBhY3Qgb24gdGhlIGtlcm5lbCBBQkksIGFuZCB0aGUgaW1wb3J0YW5jZSBvZiBzb2xpZCBlcnJvciBoYW5kbGluZyBhbmQgdGhvcm91Z2ggdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfcG11X2xicl9yZWFkXzMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYz03Mjg9dm9pZCBpbnRlbF9wbXVfbGJyX2Rpc2FibGVfYWxsKHZvaWQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTczOS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzo3NDA6dm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgTEJSIFJlYWRpbmcgRnVuY3Rpb25zIGluIHRoZSBDb250ZXh0IG9mIGEgS2VybmVsIFBNVS4qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBgaW50ZWxfcG11X2xicl9yZWFkXzMyYCBhbmQgYGludGVsX3BtdV9sYnJfcmVhZF82NGAgZnVuY3Rpb25zLiBUaGUga2V5IHRoaW5nIHRoYXQgc3RhbmRzIG91dCBpcyB0aGF0IHRoZXkgYXJlbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGluIG15IG1pbmQsIGNvbmNlcm5pbmcgc2NvcGUsIGxpbmthZ2UsIGFuZCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuIEdpdmVuIHRoZXkmIzM5O3JlIGV4cG9zZWQgbGlrZSB0aGlzLCBhcmUgdGhlcmUgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgb3V0c2lkZSB0aGUgSW50ZWwgUE1VIGRyaXZlciBpdHNlbGYsIHRoYXQgYXJlIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5PyBBbmQgaWYgc28sIGlzIHRoaXMgdGhlIG1vc3Qgcm9idXN0IGRlc2lnbj8gV2Uga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgY3JpdGljYWwgcGF0aCwgc28gYW55IG9wdGltaXphdGlvbnMgYXQgdGhlIHNvZnR3YXJlIGxldmVsIGNvdWxkIGJlIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9ucy4KClRoaXMgdGhlbiBtYWtlcyBtZSBqdW1wIHRvIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIFRoaXMgbWFrZXMgbWUgcXVlc3Rpb24gd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNvbW1vbmFsaXR5IG9yIGEgbWlzc2VkIG9wcG9ydHVuaXR5IGZvciByZXVzZSBoZXJlLiBPciBwZXJoYXBzIGEgZGlmZmVyZW5jZSBpbiB0aGVpciBmdW5jdGlvbnM/IEkmIzM5O20gY3VyaW91cyB3aGV0aGVyIHRoZSBBUk0gaW1wbGVtZW50YXRpb24sIG9yIGFueSBvdGhlcnMsIGhhbmRsZXMgTEJSIChMYXN0IEJyYW5jaCBSZWNvcmQpIHJlYWRpbmcgaW4gYSBzaW1pbGFyIHdheSwgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBwb3J0YWJpbGl0eSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4gQXJlIHRoZXJlIGFueSBsZXNzb25zIGxlYXJuZWQsIGJlc3QgcHJhY3RpY2VzLCBvciBwb3RlbnRpYWwgaXNzdWVzIHRoZXJlIHRoYXQgSSBjYW4gbGV2ZXJhZ2Ugb3IgYXZvaWQ/IEkgbmVlZCB0byBxdWlja2x5IGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBMQlIgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvYXJtX2JyYmUuYz01Nzg9c3RhdGljIGludCBicmJpbmZfZ2V0X3BlcmZfcHJpdih1NjQgYnJiaW5mKVxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTU5Ni1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jOjU5NzpzdGF0aWMgYm9vbCBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQoaW50IGluZGV4LCBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudHJ5LFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNTk4LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NzcyPXZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXG4tLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzkyLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM6NzkzOlx0XHRcdGlmICghcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGksIHBiZSwgZXZlbnQpKVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzk0LVx0XHRcdFx0Z290byBkb25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0YCBhbmQgaXRzIFJvbGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldGAgZnVuY3Rpb24uIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEZpbmUsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIE1vcmUgaW1wb3J0YW50bHksIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24uIGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AgaXMgbGlrZWx5IGEgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBmZXRjaGluZyBhbmQgcHJvY2Vzc2luZyBkYXRhIGZyb20sIHByZXN1bWFibHksIGEgQnJhbmNoIFJlY29yZCBCdWZmZXIgRW50cnkgKEJSQkUpIG9yIHNpbWlsYXIgaGFyZHdhcmUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcmZhY2UuIFNvLCB0aGlzIGBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXRgIGZ1bmN0aW9uIGlzIHRoZSB3b3JraG9yc2UuIEl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRha2luZyByYXcgcmVnaXN0ZXIgc2V0IGRhdGEgcmVsYXRlZCB0byBhIEJSQkUgZW50cnkgYW5kIHRyYW5zZm9ybWluZyBpdCBpbnRvIHNvbWUgdXNlZnVsIGBwZXJmX2VudHJ5YCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRyYW5zZm9ybWF0aW9uIGFjdHVhbGx5IGVudGFpbHMg4oCTIGhvdyBkb2VzIGl0IGludGVycHJldCB0aGUgcmF3IGhhcmR3YXJlIGRhdGEgYW5kIHdoYXQga2luZCBvZiBgcGVyZl9lbnRyeWAgc3RydWN0dXJlIGlzIGl0IHBvcHVsYXRpbmc/IFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwZXJmb3JtYW5jZSBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgb3JnYW5pemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jPTc2ND1zdGF0aWMgYm9vbCBmaWx0ZXJfYnJhbmNoX3JlY29yZChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudHJ5LFxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc3MS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jOjc3Mjp2b2lkIGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKHN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrLFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzczLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AgRnVuY3Rpb24qKgoKT2theSwgc28gYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIHNldC4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZmlsZXMgcmVsYXRlZCB0byBCcmFuY2ggUmVjb3JkIEJ1ZmZlcnMgKEJSQnMpIGFuZCBMYXN0IEJyYW5jaCBSZWNvcmRzIChMQlJzKSBmb3IgQU1EIGFuZCBJbnRlbCBwcm9jZXNzb3JzLiBMb29raW5nIGF0IGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBhbmQgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY2AsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGV5IHNob3VsZCBiZSBidWlsdCB3aGVuIGBDT05GSUdfUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gbW9zdCBzaXR1YXRpb25zLiBCdXQgSSBjYW4mIzM5O3QganVzdCBhc3N1bWUuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCBhbmQgSSYjMzk7bGwgZm9jdXMgb24gYGFyY2gveDg2L2V2ZW50cy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZpbGVzIGFyZSBiZWluZyBjb21waWxlZCBjb3JyZWN0bHkgd2l0aCBgQ09ORklHX1BFUkZfRVZFTlRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticnMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEFNRCBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEFNRC1zcGVjaWZpYyBldmVudCBoYW5kbGluZyBpcyBzdHJ1Y3R1cmVkLiBXaGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydD8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSBmb3IgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiAqeWVzKiwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uLiBMZXQmIzM5O3MgcHVsbCB1cCBhbmQgYW5hbHl6ZSB0aGUgYGFyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpXHRcdCYjNDM7PSBjb3JlLm8gbGJyLm9cbmFyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfUEVSRl9FVkVOVFNfQU1EX0JSUylcdCYjNDM7PSBicnMub1xuYXJjaC94ODYvZXZlbnRzL2FtZC9NYWtlZmlsZS00LW9iai0kKENPTkZJR19QRVJGX0VWRU5UU19BTURfUE9XRVIpXHQmIzQzOz0gcG93ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBQZXJmb3JtYW5jZSBFdmVudCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBlcmZvcm1hbmNlIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfUEVSRl9FVkVOVFNfQU1EX0JSU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgZ2V0IHRoZSBmZWVsaW5nIEkmIzM5O20gbG9va2luZyBhdCBBTUQmIzM5O3MgYnJhbmNoIHJlY29yZCBzdG9yZSBmZWF0dXJlIGhlcmUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgY2VydGFpbiBwZXJmb3JtYW5jZSBhbmFseXNlcyBvbiB0aGVpciBwcm9jZXNzb3JzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0LgoKTm93LCBteSBtaW5kIHNoaWZ0cy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIEFSTSBzaWRlIG9mIHRoaW5ncy4gSSB3b25kZXIsIHdoYXQgYXJlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHNpdHVhdGlvbj8gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgYWxzbyBsb29rIGF0IGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIEl0IGlzIGxpa2VseSBhIHJlbGV2YW50IGZpbGUgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBicmFuY2ggcmVjb3JkIGJ1ZmZlciBlbXVsYXRpb24gb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIHRoYXQsIHRvbywgYXMgdGhpcyBpcyBhbHNvIHByb2JhYmx5IHJlbGV2YW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcGllY2VzIGFsbCBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FybV9icmJlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wZXJmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19BUk1fU1BFX1BNVSkgJiM0Mzs9IGFybV9zcGVfcG11Lm9cbmRyaXZlcnMvcGVyZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQVJNNjRfQlJCRSkgJiM0Mzs9IGFybV9icmJlLm9cbmRyaXZlcnMvcGVyZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQVJNX0RNQzYyMF9QTVUpICYjNDM7PSBhcm1fZG1jNjIwX3BtdS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGlzIOKAkyBhIGJpdCBvZiBhIHN0cmVhbSBvZiBjb25zY2lvdXNuZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkNvbnNpZGVyaW5nIGBDT05GSUdfQVJNNjRfQlJCRWAgYW5kIEludGVsJiMzOTtzIE1ha2VmaWxlKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYENPTkZJR19BUk02NF9CUkJFYCBmbGFnLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBicmFuY2ggcmVjb3JkIGJ1ZmZlciBleHRlbnNpb24gZm9yIEFSTTY0LiBJdCBsb29rcyBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gbm90ZSB0aGF0LiBCdXQgSSBhbHNvIG5lZWQgdG8gY2hlY2sgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSByZWxldmFudCBjb2RlLgoKVGhlbiBteSBtaW5kIGRyaWZ0cyB0byB0aGUgeDg2IHNpZGUg4oCTIHNwZWNpZmljYWxseSBgYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlYC4gSSYjMzk7bSBjdXJpb3VzLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgc29tZSBwb3RlbnRpYWwgaW50ZXJwbGF5IG9yIGFuYWxvZ291cyBmdW5jdGlvbmFsaXR5LiBBcmUgdGhleSBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgZmVhdHVyZSBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcz8gSG93IGRvZXMgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbiByZWxhdGUgdG8gdGhpcyBuZXcgQVJNNjQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBjb21tb24gaGVhZGVyIGZpbGVzLCBzaGFyZWQgY29kZSBtb2R1bGVzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBhbmFseXplIGJvdGggc2VjdGlvbnMgdG9nZXRoZXIuIEl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGNyb3NzLXJlZmVyZW5jaW5nIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB3aGVyZSBhIHNoYXJlZCBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBtaWdodCBiZSBhcHBsaWNhYmxlLiBQZXJoYXBzIHRoZSBJbnRlbCBNYWtlZmlsZSBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIGZpbmRpbmcgc29tZSB1c2VmdWwgcmVmZXJlbmNlcy4gSSBzaG91bGQgZXhwbG9yZSBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGJyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0NQVV9TVVBfSU5URUwpXHRcdCYjNDM7PSBkcy5vIGtuYy5vXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfQ1BVX1NVUF9JTlRFTClcdFx0JiM0Mzs9IGxici5vIHA0Lm8gcDYubyBwdC5vXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGUtNS1vYmotJChDT05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFKVx0JiM0Mzs9IGludGVsLXVuY29yZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBjb25maWd1cmUgdGhpbmdzIGZvciB0aGlzIGZ1enppbmcgcnVuLiBJIHNlZSB3ZSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19DUFVfU1VQX0lOVEVMYCBhbmQgYENPTkZJR19DUFVfU1VQX0FNRGAuIFRoYXQgc2VlbXMgb2J2aW91cyBlbm91Z2guIE5vdywgSSYjMzk7bSBjaGVja2luZyBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFuZCByZW1lbWJlciBpdCYjMzk7cyBidWlsdCBjb25kaXRpb25hbGx5IG9uIGBDT05GSUdfUEVSRl9FVkVOVFNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHRha2Ugc3RvY2sgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgaGF2ZSBpbiBtaW5kOiBgUEVSRl9FVkVOVFNfQU1EX0JSU2AsIGBBUk02NF9CUkJFYCwgYENQVV9TVVBfSU5URUxgLCBgQ1BVX1NVUF9BTURgLCBhbmQgYFBFUkZfRVZFTlRTYC4KCkhvbGQgb24uLi4gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgaGVyZS4gYEFSTTY0X0JSQkVgIGlzIG9idmlvdXNseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gQVJNNjQsIGJ1dCBgQ1BVX1NVUF9JTlRFTGAgYW5kIGBDUFVfU1VQX0FNRGAgYXJlLCBvZiBjb3Vyc2UsIHg4Ni1zcGVjaWZpYy4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZnV6emluZywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBpbmNsdWRlIGFsbCBvZiB0aGVtLiBUaGUgZnV6emVyIHdpbGwgZHluYW1pY2FsbHkgZW5hYmxlIHRoZSBvbmVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0JiMzOTtzIHJ1bm5pbmcgb24sIHNvIHdlIHNob3VsZCBiZSBva2F5LiBUaGlzIHdheSwgd2UgbWF4aW1pemUgdGhlIGZlYXR1cmVzIGV4cG9zZWQuCgpPa2F5LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIGlmIGBQRVJGX0VWRU5UU19BTURfQlJTYCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mzc9Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUgTWF6ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGhlYXZpbHkgcmVsaWFudCBvbiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHdlIG5lZWQgdG8ga25vdyB3aGF0IGNhcGFiaWxpdGllcyBhcmUgc3VwcG9ydGVkLiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aG9zZSBmbGFncywgKlBFUkZfRVZFTlRTKiBhbmQgKkNQVV9TVVBfQU1EKiwgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGNyaXRpY2FsIGZvciBldmVuIGJlZ2lubmluZyB0byByZWFzb24gYWJvdXQgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kIGhhcmR3YXJlIGV2ZW50cy4gVGhvc2UgbGlrZWx5IHNldCB0aGUgZ3JvdW5kIHJ1bGVzIGZvciB3aGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIGFuZCB0cmFjaW5nIHdlIGNhbiBldmVuICp0aGluayogYWJvdXQuIFdlJiMzOTtsbCBiZSBwcmV0dHkgc3R1Y2sgd2l0aG91dCB0aGVtLgoKQnV0IG5vdywgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmV4dCBwb3RlbnRpYWwgYXZlbnVlLCBzbyBteSBtaW5kIGp1bXBzIHRvICpBUk02NF9CUkJFKiDigJMgYnJhbmNoIHJlY29yZCBidWZmZXIgZXZlbnRzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN1cHBvcnQgZm9yIGJyYW5jaCB0cmFjZSBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHdoZXRoZXIgdGhhdCYjMzk7cyBzdXBwb3J0ZWQgaXMgYWJzb2x1dGVseSBwaXZvdGFsIGZvciBpbi1kZXB0aCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gSWYgdGhvc2UgKkJSQkUqIGV2ZW50cyBhcmUgYWNjZXNzaWJsZSwgdGhhdCBjaGFuZ2VzIHRoZSBnYW1lIGVudGlyZWx5LiBJIGNhbiBkcmlsbCBpbnRvIGJyYW5jaCBtaXNwcmVkaWN0aW9ucyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgY29udHJvbCBmbG93IGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgKkFSTTY0X0JSQkUqIGFuZCBpZiB0aG9zZSBhcmUgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJNNjRfQlJCRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzQtXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzU6Y29uZmlnIEFSTTY0X0JSQkVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJyYW5jaCBzdGFjayBzYW1wbGluZyB1c2luZyBGRUFUX0JSQkVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeTogQVJNNjQqKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGxlYW5zIGhlYXZpbHkgdG93YXJkcyB0aGUgc2lnbmlmaWNhbmNlIG9mIGBBUk02NGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaWYgdGhlIHVuZGVybHlpbmcgaXNzdWUgb3IgcHJvcG9zZWQgc29sdXRpb24gaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdGhlIGFyY2hpdGVjdHVyZS4gVGhlIHBlcmZvcm1hbmNlLCBpbnN0cnVjdGlvbiBzZXQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGF2YWlsYWJsZSBvbiBgQVJNNjRgIGFyZSBsaWtlbHkgdGhlIHByaW1hcnkgZmFjdG9ycyBpbmZsdWVuY2luZyB0aGUgZGlyZWN0aW9uIG9mIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHByb2JsZW0gbWFuaWZlc3RzIGRpZmZlcmVudGx5LCBvciB0aGUgc29sdXRpb24gc3BhY2UgaXMgY29uc3RyYWluZWQsIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgYEFSTTY0YCBpcyBwcm9iYWJseSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvS2NvbmZpZz02PW1lbnUgXCYjMzQ7UGVyZm9ybWFuY2UgbW9uaXRvciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UU1xuZHJpdmVycy9wZXJmL0tjb25maWctOC1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTk9Y29uZmlnIEFSTV9DQ0lfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0FSTSBDQ0kgUE1VIGRyaXZlclwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTE6XHRkZXBlbmRzIG9uIChBUk0gXHUwMDI2XHUwMDI2IENQVV9WNykgfHwgQVJNNjRcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTEyLVx0c2VsZWN0IEFSTV9DQ0lcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xOT1jb25maWcgQVJNX0NDSTQwMF9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMS1cdGRlZmF1bHQgeVxuZHJpdmVycy9wZXJmL0tjb25maWc6MjI6XHRkZXBlbmRzIG9uIEFSTV9DQ0lfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMy1cdHNlbGVjdCBBUk1fQ0NJNDAwX0NPTU1PTlxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI4PWNvbmZpZyBBUk1fQ0NJNXh4X1BNVVxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMwLVx0ZGVmYXVsdCB5XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gQVJNX0NDSV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTM3PWNvbmZpZyBBUk1fQ0NOXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O0FSTSBDQ04gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjM5Olx0ZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz00ND1jb25maWcgQVJNX0NNTlxuZHJpdmVycy9wZXJmL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtBcm0gQ01OLTYwMCBQTVUgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wZXJmL0tjb25maWctNDctXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9NTE9Y29uZmlnIEFSTV9OSVxuZHJpdmVycy9wZXJmL0tjb25maWctNTItXHR0cmlzdGF0ZSBcJiMzNDtBcm0gTkktNzAwIFBNVSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo1MzpcdGRlcGVuZHMgb24gQVJNNjQgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy01NC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz01OD1jb25maWcgQVJNX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWc6NTk6XHRkZXBlbmRzIG9uIEFSTSB8fCBBUk02NFxuZHJpdmVycy9wZXJmL0tjb25maWctNjAtXHRib29sIFwmIzM0O0FSTSBQTVUgZnJhbWV3b3JrXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9NjY9Y29uZmlnIEFSTV9WNl9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBBUk1fUE1VIFx1MDAyNlx1MDAyNiAoQ1BVX1Y2IHx8IENQVV9WNkspXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy02OC1cdGRlZl9ib29sIHlcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz03MD1jb25maWcgQVJNX1Y3X1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIEFSTV9QTVUgXHUwMDI2XHUwMDI2IENQVV9WN1xuZHJpdmVycy9wZXJmL0tjb25maWctNzItXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9NzQ9Y29uZmlnIEFSTV9YU0NBTEVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3NTpcdGRlcGVuZHMgb24gQVJNX1BNVSBcdTAwMjZcdTAwMjYgQ1BVX1hTQ0FMRVxuZHJpdmVycy9wZXJmL0tjb25maWctNzYtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9Nzg9Y29uZmlnIFJJU0NWX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWc6Nzk6XHRkZXBlbmRzIG9uIFJJU0NWXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7UklTQy1WIFBNVSBmcmFtZXdvcmtcJiMzNDtcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz04OD1jb25maWcgUklTQ1ZfUE1VX0xFR0FDWVxuZHJpdmVycy9wZXJmL0tjb25maWc6ODk6XHRkZXBlbmRzIG9uIFJJU0NWX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctOTAtXHRib29sIFwmIzM0O1JJU0MtViBsZWdhY3kgUE1VIGltcGxlbWVudGF0aW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9OTg9Y29uZmlnIFJJU0NWX1BNVV9TQklcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBSSVNDVl9QTVUgXHUwMDI2XHUwMDI2IFJJU0NWX1NCSVxuZHJpdmVycy9wZXJmL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDtSSVNDLVYgUE1VIGJhc2VkIG9uIFNCSSBQTVUgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTA4PWNvbmZpZyBTVEFSRklWRV9TVEFSTElOS19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjEwOTpcdGRlcGVuZHMgb24gQVJDSF9TVEFSRklWRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gNjRCSVRcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U3RhckZpdmUgU3RhckxpbmsgUE1VXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTE4PWNvbmZpZyBBTkRFU19DVVNUT01fUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMTktXHRib29sIFwmIzM0O0FuZGVzIGN1c3RvbSBQTVUgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTIwOlx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgXHUwMDI2XHUwMDI2IFJJU0NWX0FMVEVSTkFUSVZFIFx1MDAyNlx1MDAyNiBSSVNDVl9QTVVfU0JJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMjEtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xMzI9Y29uZmlnIEFSTV9QTVVfQUNQSVxuZHJpdmVycy9wZXJmL0tjb25maWc6MTMzOlx0ZGVwZW5kcyBvbiBBUk1fUE1VIFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMzQtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTM2PWNvbmZpZyBBUk1fU01NVV9WM19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTEzNy1cdCB0cmlzdGF0ZSBcJiMzNDtBUk0gU01NVXYzIFBlcmZvcm1hbmNlIE1vbml0b3JzIEV4dGVuc2lvblwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTM4Olx0IGRlcGVuZHMgb24gQVJNNjQgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgNjRCSVQpXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzk6XHQgZGVwZW5kcyBvbiBHRU5FUklDX01TSV9JUlFcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE0MC1cdCAgIGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xNDY9Y29uZmlnIEFSTV9QTVVWM1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTQ3Olx0ZGVwZW5kcyBvbiBIV19QRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgKChBUk0gXHUwMDI2XHUwMDI2IENQVV9WNykgfHwgQVJNNjQpXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNDgtXHRib29sIFwmIzM0O0FSTSBQTVV2MyBzdXBwb3J0XCYjMzQ7IGlmICFBUk02NFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTE1Nj1jb25maWcgQVJNX0RTVV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE1Ny1cdHRyaXN0YXRlIFwmIzM0O0FSTSBEeW5hbUlRIFNoYXJlZCBVbml0IChEU1UpIFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTU4Olx0ZGVwZW5kcyBvbiBBUk02NFxuZHJpdmVycy9wZXJmL0tjb25maWctMTU5LVx0ICBoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTY1PWNvbmZpZyBGU0xfSU1YOF9ERFJfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNjYtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgaS5NWDggRERSIHBlcmYgbW9uaXRvclwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTY3Olx0ZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE2OC1cdCAgaGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTE3Mz1jb25maWcgRlNMX0lNWDlfRERSX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMTc0LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIGkuTVg5IEREUiBwZXJmIG1vbml0b3JcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE3NTpcdGRlcGVuZHMgb24gQVJDSF9NWENcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE3Ni1cdCBoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTgxPWNvbmZpZyBGVUpJVFNVX1VOQ09SRV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE4Mi1cdHRyaXN0YXRlIFwmIzM0O0Z1aml0c3UgVW5jb3JlIFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTgzOlx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFDUEkpIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IDY0QklUKVxuZHJpdmVycy9wZXJmL0tjb25maWctMTg0LVx0IGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xOTA9Y29uZmlnIFFDT01fTDJfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xOTEtXHRib29sIFwmIzM0O1F1YWxjb21tIEwyLWNhY2hlIFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTkyOlx0ZGVwZW5kcyBvbiBBUkNIX1FDT00gXHUwMDI2XHUwMDI2IEFSTTY0IFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xOTMtXHRzZWxlY3QgUUNPTV9LUllPX0wyX0FDQ0VTU09SU1xuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIwMD1jb25maWcgUUNPTV9MM19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIwMS1cdGJvb2wgXCYjMzQ7UXVhbGNvbW0gTDMtY2FjaGUgUE1VXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMDI6XHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSBcdTAwMjZcdTAwMjYgQVJNNjQgXHUwMDI2XHUwMDI2IEFDUElcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIwMy1cdHNlbGVjdCBRQ09NX0lSUV9DT01CSU5FUlxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIxMD1jb25maWcgVEhVTkRFUlgyX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIFRodW5kZXJYMiBTb0MgUE1VIFVOQ09SRVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBBUkNIX1RIVU5ERVIyIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wZXJmL0tjb25maWc6MjEzOlx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMTQtXHRkZWZhdWx0IG0gaWYgQVJDSF9USFVOREVSMlxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIyMD1jb25maWcgWEdFTkVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMjE6ICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfWEdFTkUgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgNjRCSVQpXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMjItICAgICAgICBib29sIFwmIzM0O0FQTSBYLUdlbmUgU29DIFBNVVwmIzM0O1xuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNdjguMiBTdGF0aXN0aWNhbCBQcm9maWxpbmcgRXh0ZW5zaW9uXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMjk6XHRkZXBlbmRzIG9uIEFSTTY0XG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzAtXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjM1PWNvbmZpZyBBUk02NF9CUkJFXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBicmFuY2ggc3RhY2sgc2FtcGxpbmcgdXNpbmcgRkVBVF9CUkJFXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzc6XHRkZXBlbmRzIG9uIEFSTV9QTVVWMyBcdTAwMjZcdTAwMjYgQVJNNjRcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzOC1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI0Nj1jb25maWcgQVJNX0RNQzYyMF9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI0Ny1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBQTVUgc3VwcG9ydCBmb3IgdGhlIEFSTSBETUMtNjIwIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNDg6XHRkZXBlbmRzIG9uIChBUk02NCBcdTAwMjZcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNDktXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjUzPWNvbmZpZyBNQVJWRUxMX0NOMTBLX1RBRF9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI1NC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgQ04xMEsgTExDLVRBRCBQTVVcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI1NTpcdGRlcGVuZHMgb24gQVJDSF9USFVOREVSIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IDY0QklUKVxuZHJpdmVycy9wZXJmL0tjb25maWctMjU2LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI2MD1jb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjYxLVx0Ym9vbCBcJiMzNDtBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MjpcdGRlcGVuZHMgb24gQVJNX1BNVSBcdTAwMjZcdTAwMjYgQVJDSF9BUFBMRVxuZHJpdmVycy9wZXJmL0tjb25maWctMjYzLVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI2Nz1jb25maWcgQUxJQkFCQV9VTkNPUkVfRFJXX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjY4LVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBULUhlYWQgWWl0aWFuIDcxMCBERFIgU3ViLXN5c3RlbSBEcml2ZXdheSBQTVUgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjk6XHRkZXBlbmRzIG9uIChBUk02NCBcdTAwMjZcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNzAtXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9Mjc2PWNvbmZpZyBNQVJWRUxMX0NOMTBLX0REUl9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI3Ny1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBNQVJWRUxMIENOMTBLIERSQU0gU3Vic3lzdGVtKERTUykgUE1VIFN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI3ODpcdGRlcGVuZHMgb24gQVJDSF9USFVOREVSIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IDY0QklUKVxuZHJpdmVycy9wZXJmL0tjb25maWctMjc5LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI4Mz1jb25maWcgRFdDX1BDSUVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yODQtXHR0cmlzdGF0ZSBcJiMzNDtTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyODU6XHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9wZXJmL0tjb25maWctMjg2LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI5ND1jb25maWcgQ1hMX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjk1LVx0dHJpc3RhdGUgXCYjMzQ7Q1hMIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdFwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6Mjk2Olx0ZGVwZW5kcyBvbiBDWExfQlVTXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yOTctXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MzA3PWNvbmZpZyBNQVJWRUxMX1BFTV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMwOC1cdHRyaXN0YXRlIFwmIzM0O01BUlZFTEwgUEVNIFBNVSBTdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMDk6XHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFx1MDAyNlx1MDAyNiA2NEJJVClcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMxMC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0zMTQ9Y29uZmlnIE5WSURJQV9URUdSQTQxMF9DTUVNX0xBVEVOQ1lfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMTUtXHR0cmlzdGF0ZSBcJiMzNDtOVklESUEgVGVncmE0MTAgQ1BVIE1lbW9yeSBMYXRlbmN5IFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MzE2Olx0ZGVwZW5kcyBvbiBBUk02NCBcdTAwMjZcdTAwMjYgQUNQSVxuZHJpdmVycy9wZXJmL0tjb25maWctMzE3LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTMyMT1jb25maWcgTlZJRElBX1RFR1JBNDEwX0MyQ19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O05WSURJQSBUZWdyYTQxMCBDMkMgUE1VXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIEFSTTY0IFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMjQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbiBmb3IgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIEkmIzM5O20gZGVhbGluZyB3aXRoIGRlcGVuZGVuY2llcyBmb3IgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQnJhbmNoIFJlY29yZCBCdWZmZXIgRXh0ZW5zaW9uIChCUkJFKSBvbiBBUk02NCBhcmNoaXRlY3R1cmVzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgQVJNNjRfQlJCRWAgaXMgY29udGluZ2VudCBvbiBgQVJNX1BNVVYzYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGBBUk02NGAgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gVGhlbiwgYEFSTV9QTVVWM2AgaGFzIGl0cyBvd24gZGVwZW5kZW5jaWVzOiBgSFdfUEVSRl9FVkVOVFNgIGFuZCBhIGNvbmRpdGlvbiB0aWVkIHRvIGVpdGhlciBBUk0gVjcgQ1BVcyBvciBBUk02NC4KCkFscmlnaHQsIHNvIHRvIHNhdGlzZnkgYWxsIHRoZXNlIGRlcGVuZGVuY2llcywgSSBkZWZpbml0ZWx5IG5lZWQgYFBFUkZfRVZFTlRTYC4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlIGFyZSBDUFUtc3BlY2lmaWMgc3VwcG9ydCBmbGFncyBmb3IgQU1EIGFuZCBJbnRlbCwgbmFtZWx5IGBDUFVfU1VQX0FNRGAgYW5kIGBDUFVfU1VQX0lOVEVMYCwgd2hpY2ggcHJlc3VtYWJseSBlbmFibGVzIGNlcnRhaW4gcGVyZm9ybWFuY2UgZmVhdHVyZXMgZGVwZW5kaW5nIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBBbmQgdGhlIGZhY3QgdGhhdCBJIHNlZSBgUEVSRl9FVkVOVFNfQU1EX0JSU2Agc3VnZ2VzdHMgYnJhbmNoIHNhbXBsaW5nIGlzIGF2YWlsYWJsZSBmb3IgQU1EIHByb2Nlc3NvcnMuIFdpdGggYEFSTTY0X0JSQkVgIGFuZCBgQVJNX1BNVVYzYCBhbHNvIGluIHRoZSBtaXgsIGFuZCBhY2tub3dsZWRnaW5nIHRoYXQgYEhXX1BFUkZfRVZFTlRTYCBpcyBhIGJvb2xlYW4gbGlrZWx5IHNldCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZiwgSSBjYW4gc2ltcGxpZnkgdGhlIGxpc3QuCgpPa2F5LCBsZXQgbWUganVzdCBrZWVwIGEgY2xlYW4gbGlzdCBvZiB0aGUgY29uZmlndXJhdGlvbnMgSSBleHBsaWNpdGx5IG5lZWQsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBlYWNoOiBgUEVSRl9FVkVOVFNgLCBgQ1BVX1NVUF9BTURgLCBgUEVSRl9FVkVOVFNfQU1EX0JSU2AsIGBDUFVfU1VQX0lOVEVMYCwgYEFSTTY0X0JSQkVgLCBhbmQgYEFSTV9QTVVWM2AuIFRoZW4sIGFzIGEgc2FuaXR5IGNoZWNrLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyByZWdhcmRpbmcgYENQVV9TVVBfSU5URUxgIGFuZCBgQ1BVX1NVUF9BTURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVfU1VQX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYENQVV9TVVBfSU5URUxgIG9wdGlvbiBpcyBkZWZpbmVkLiAgSXQgKnNob3VsZCogYmUgaW4gb25lIG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcmlnaHQ/IFRoZSBsb2dpY2FsIHBsYWNlIHNlZW1zIHRvIGJlIGBhcmNoL3g4Ni9LY29uZmlnLmNwdWAuIFllYWgsIHRoYXQgZmVlbHMgcmlnaHQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmbGFnIG1lYW5zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcHJvY2Vzc29yIGZlYXR1cmVzLiBHb29kLCBnb29kLi4uIGtub3dpbmcgdGhlIGZpbGUgbG9jYXRpb24gaXMgaGFsZiB0aGUgYmF0dGxlLiBOb3csIHRpbWUgdG8gY3JhY2sgaXQgb3BlbiBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVV9TVVBfSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdT0yOTc9bWVudWNvbmZpZyBQUk9DRVNTT1JfU0VMRUNUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMzAyLVxuYXJjaC94ODYvS2NvbmZpZy5jcHU6MzAzOmNvbmZpZyBDUFVfU1VQX0lOVEVMXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0zMDQtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uIC0gUmVmaW5lZCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBkZWZhdWx0IGlzICYjMzQ7eSYjMzQ7IOKAkyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgcG90ZW50aWFsIGluY2x1c2lvbiBhcyBmb2N1cyBzeW1ib2xzLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgTEJSIGltcGxlbWVudGF0aW9ucy4KCkkmIzM5O3ZlIGNoZWNrZWQgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY2AgYW5kIGZvdW5kIHR3byBwcm9taXNpbmcgY2FuZGlkYXRlczogYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLiBNb3Zpbmcgb250byB0aGUgQU1EIHNpZGUsIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jYCB5aWVsZHMgYGFtZF9wbXVfbGJyX3JlYWRgLCBhbmQgYGFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNgIGdpdmVzIHVzIGBhbWRfYnJzX2RyYWluYC4KCkJyYW5jaGluZyBvdXQgdG8gdGhlIEFSTSB3b3JsZCwgSSBjaGVja2VkIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AgYW5kIGRpc2NvdmVyZWQgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYC4KClRoZW4gSSBjaGVja2VkIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYW5kIHNhdyBgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0YCBhbmQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luYC4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aGVzZSBhcmUgb24gdGhlICpob3QqIHBhdGgsIHNwZWNpZmljYWxseSBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcy4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFzIGl0IGNvdWxkIHNrZXcgdGhlIHJlc3VsdHMuIFNvIHRob3NlIHR3byBhcmUgKm91dCouCgpOb3csIGJhY2sgdG8gdGhlIHJlbWFpbmluZyBjYW5kaWRhdGVzOiBgYW1kX2Jyc19kcmFpbmAsIGBhbWRfcG11X2xicl9yZWFkYCwgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAsIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLCBhbmQgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgY2FsbGVkIHdoZW4gcmVhZGluZyBQTVUgZXZlbnRzLCB0cmlnZ2VyZWQgYnkgYHBlcmZfZXZlbnRfb3BlbmAgYW5kIHN1YnNlcXVlbnQgYnVmZmVyIHJlYWRzIG9yIFBNVSBpbnRlcnJ1cHRzLiBUaGV5IGFyZW4mIzM5O3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgbGlrZSB0aGUgc2NoZWR1bGVyIG9yIG5ldHdvcmsgY29kZTsgdGhleSBhcmUgc3BlY2lmaWMgdG8gcGVyZiBldmVudHMgd2hlcmUgTEJSIG9yIEJSUyBhcmUgZW5hYmxlZC4gVGhhdCBtYWtlcyB0aGVtIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gYXMgZm9jdXMgc3ltYm9scy4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IHRob3VnaHQgcHJvY2VzcyBhYm91dCBgYW1kX2Jyc19kcmFpbmAsIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1kX2Jyc19kcmFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM9MjYyPXN0YXRpYyBib29sIGFtZF9icnNfbWF0Y2hfcGxtKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IGZyb20sIHU2NCB0bylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTI4MC0gKi9cbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MjgxOnZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0yODIte1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTg5Nj1zdGF0aWMgaW50IGFtZF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05MTItXHRpZiAoY3B1Yy1cdTAwM2VsYnJfdXNlcnMpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5MTM6XHRcdGFtZF9icnNfZHJhaW4oKTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTkxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipQTVUgSW50ZXJydXB0IEhhbmRsaW5nIGFuZCBMQlIgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gYW5hbHl6aW5nIHRoaXMgY29kZSBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20gYGFtZF9wbXVfaGFuZGxlX2lycWAuIFRoYXQmIzM5O3MgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0LCBzbyB0aGF0JiMzOTtzIGV4cGVjdGVkIGFuZCBwZXJmZWN0bHkgbm9ybWFsLiBObyByZWQgZmxhZ3MgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgaXQgc2hvdWxkIGJlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBhbWRfcG11X2xicl9yZWFkYCBmdW5jdGlvbiBhIGxpdHRsZSBjbG9zZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlIHNob3VsZCBleHBlY3QgaXQgdG8gYmUgcmVhZGluZyBmcm9tIHRoZSBMYXN0IEJyYW5jaCBSZWNvcmQsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgZGF0YSBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSB3aXRoaW4gdGhhdCBjb250ZXh0LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGFib3V0IHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1kX3BtdV9sYnJfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTkzMT1zdGF0aWMgaW50IGFtZF9wbXVfdjJfc25hcHNob3RfYnJhbmNoX3N0YWNrKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50cmllcywgdW5zaWduZWQgaW50IGNudClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05NDUtXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5NDY6XHRhbWRfcG11X2xicl9yZWFkKCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05NDctXHRjbnQgPSBtaW4oY250LCB4ODZfcG11Lmxicl9ucik7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9OTU2PXN0YXRpYyBpbnQgYW1kX3BtdV92Ml9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTk4NC1cdGlmICh4ODZfcG11Lmxicl9ucikge1xuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6OTg1Olx0XHRhbWRfcG11X2xicl9yZWFkKCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05ODYtXHRcdHN0YXR1cyBcdTAwMjY9IH5HTE9CQUxfU1RBVFVTX0xCUlNfRlJPWkVOO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMTYzLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNjQ6dm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBQTVUgSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29kZSYjMzk7cyBjdXJyZW50bHkgY2FsbGluZyBmcm9tIGBhbWRfcG11X3YyX2hhbmRsZV9pcnFgIGFuZCBhbHNvIGBhbWRfcG11X3YyX3NuYXBzaG90X2JyYW5jaF9zdGFja2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIHJlbGF0ZWQgdG8gSW50ZWwmIzM5O3MgTEJSIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgY29tcGFyaXNvbiwgYXQgbGVhc3QuIFRvIGdldCBteSBiZWFyaW5ncywgSSYjMzk7bGwgcXVpY2tseSBuZWVkIHRvIHZlcmlmeSB0aGF0IEkmIzM5O3ZlIGdvdCB0aGUgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgIGNhbGxzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEEgcXVpY2sgcmV2aWV3IG9mIHRob3NlIEludGVsIGZ1bmN0aW9ucyB3aWxsIHByb2JhYmx5IHJldmVhbCB0aGUgY3J1Y2lhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0sIGFuZCB0aGUgQU1EIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJyYW5jaCBzdGFjayBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgc29ydCBvZiBwYXJpdHkgdGhhdCBJIGNhbiByZWx5IG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9Nzg2MT1fX2luaXQgaW50IGludGVsX3BtdV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy03OTQxLVx0XHR4ODZfcG11Lmxicl9yZXNldCA9IGludGVsX3BtdV9sYnJfcmVzZXRfMzI7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjc5NDI6XHRcdHg4Nl9wbXUubGJyX3JlYWQgPSBpbnRlbF9wbXVfbGJyX3JlYWRfMzI7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTc5NDMtXHR9XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTcyOD12b2lkIGludGVsX3BtdV9sYnJfZGlzYWJsZV9hbGwodm9pZClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzM5LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjc0MDp2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03NDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gUG9pbnRlciBhbmQgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IGFyZSBhc3NpZ25lZCB0byBgeDg2X3BtdS5sYnJfcmVhZGAsIGFyZSBoYW5kbGVkLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGV5JiMzOTtyZSBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIHBhdHRlcm4gZm9yIGZsZXhpYmlsaXR5LCBsZXR0aW5nIHVzIHN3YXAgb3V0IGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlYWRpbmcgdGhlIExhc3QgQnJhbmNoIFJlY29yZCAoTEJSKSBkYXRhLCBsaWtlbHkgZGVwZW5kaW5nIG9uIHRoZSBwcm9jZXNzb3IgbW9kZWwgb3Igc3BlY2lmaWMgY29udGV4dC4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBub24tc3RhdGljIGlzIGltcG9ydGFudC4gSXQgaW1wbGllcyB0aGV5IGFyZSBleHRlcm5hbGx5IHZpc2libGUsIGFuZCB0aGF0IHdlIGNhbiBpbnRlcmFjdCB3aXRoIHRoZW0uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgIGlzIGFtb25nIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wZXJmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvYXJtX2JyYmUuYz03NjQ9c3RhdGljIGJvb2wgZmlsdGVyX2JyYW5jaF9yZWNvcmQoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplbnRyeSxcbi0tXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy03NzEtXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYzo3NzI6dm9pZCBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyhzdHJ1Y3QgcGVyZl9icmFuY2hfc3RhY2sgKmJyYW5jaF9zdGFjayxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc3My1cdFx0XHRcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcbi0tXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaD0yMj1ib29sIGJyYmVfYnJhbmNoX2F0dHJfdmFsaWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTtcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5oOjIzOnZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC0yNC1cdFx0XHRcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7XG4tLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmg9Mzc9c3RhdGljIGlubGluZSBib29sIGJyYmVfYnJhbmNoX2F0dHJfdmFsaWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5oLTQyLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmg6NDM6c3RhdGljIHZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC00NC1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuZHJpdmVycy9wZXJmL2FybV9wbXV2My5jPTg3MT1zdGF0aWMgdm9pZCByZWFkX2JyYW5jaF9yZWNvcmRzKHN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjLFxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fcG11djMuYy04NzYtXG5kcml2ZXJzL3BlcmYvYXJtX3BtdXYzLmM6ODc3Olx0YnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoYnJhbmNoX3N0YWNrLCBldmVudCk7XG5kcml2ZXJzL3BlcmYvYXJtX3BtdXYzLmMtODc4LVx0cGVyZl9zYW1wbGVfc2F2ZV9icnN0YWNrKGRhdGEsIGV2ZW50LCBicmFuY2hfc3RhY2ssIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcxNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRnVuY3Rpb24gRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29udGV4dCBpcyBgcmVhZF9icmFuY2hfcmVjb3Jkc2AgaW4gYGFybV9wbXV2My5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGNhbGwgb3JpZ2luYXRlcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIG1vZGlmaWNhdGlvbiBjYXNjYWRlPyBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGltcGFjdGVkPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4KClF1aWNrbHkgc2Nhbm5pbmcuLi4gYWhhISBJbiBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYGludGVsX3BtdV9zdG9yZV9sYnJgIGlzIHRoZXJlIGJ1dCBpdCYjMzk7cyAqc3RhdGljKi4gT2theSwgc28gYXQgbGVhc3QgdGhhdCBvbmUmIzM5O3MgbG9jYWxpemVkLiBUaGF0JiMzOTtzIGEgcmVsaWVmOyBzdGF0aWMgZnVuY3Rpb25zIGFyZSBsZXNzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBpbiBleHRlcm5hbCBjaGFuZ2VzLiBTdGlsbCwgdGhpcyBuZWVkcyBmdXJ0aGVyIGNoZWNraW5nIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbHMgdGhhdCBjb3VsZCBiZSBsaW5rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludGVsX3BtdV9zdG9yZV9sYnImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTkwMT1zdGF0aWNfYXNzZXJ0KCg2NCAtIFBFUkZfQlJBTkNIX0VOVFJZX0lORk9fQklUU19NQVgpIFx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX05VTSAqIExCUl9JTkZPX0JSX0NOVFJfQklUUyk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtOTAyLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjkwMzpzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTkwNC1cdFx0XHRcdHN0cnVjdCBsYnJfZW50cnkgKmVudHJpZXMpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDA9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAwMS17XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAwMjpcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgTlVMTCk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAwMy19XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDU9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWRfeHNhdmUoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMDktXHRpZiAoIXhzYXZlKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAxMDpcdFx0aW50ZWxfcG11X3N0b3JlX2xicihjcHVjLCBOVUxMKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMDExLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMTQtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAxNTpcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgeHNhdmUtXHUwMDNlbGJyLmVudHJpZXMpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMTYtfVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYz0xMjg4PXZvaWQgaW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhzdHJ1Y3QgbGJyX2VudHJ5ICpsYnIpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEyOTgtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTI5OTpcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgbGJyKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMzAwLVx0aW50ZWxfcG11X2xicl9maWx0ZXIoY3B1Yyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBQRUJTL0xCUiBEYXRhIEhhbmRsaW5nKioKCk9rYXksIHNvIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBpcyBhIGZ1bmN0aW9uIHRoYXQmIzM5O3Mgbm90IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCDigJMgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBHaXZlbiB0aGF0IGZhY3QsIGl0IGxpa2VseSBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBJbnRlbCBQTVUgZHJpdmVyLiBOb3csIHRoZSBjb2RlIHN0YXRlcyB0aGF0IGl0IGFjdHVhbGx5IGNhbGxzIGBpbnRlbF9wbXVfc3RvcmVfbGJyYC4gU28sIHRoaXMgdGVsbHMgbWUgdGhhdCBgaW50ZWxfcG11X3N0b3JlX3BlYnNfbGJyc2AgbGlrZWx5IHNpdHMgaGlnaGVyIHVwIGluIHRoZSBkYXRhLWZsb3csIHBvc3NpYmx5IGNvb3JkaW5hdGluZyB0aGUgY29sbGVjdGlvbiBvciBzdG9yYWdlIG9mIExCUiBkYXRhIHdpdGhpbiBhIFBFQlMgY29udGV4dC4gSSBzaG91bGQgY2hlY2sgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MjQ5OT1zdGF0aWMgdm9pZCBzZXR1cF9wZWJzX2FkYXB0aXZlX3NhbXBsZV9kYXRhKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yNTc1LVx0XHRpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpIHtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjI1NzY6XHRcdFx0aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhsYnIpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMjU3Ny1cdFx0XHRpbnRlbF9wbXVfbGJyX3NhdmVfYnJzdGFjayhkYXRhLCBjcHVjLCBldmVudCk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MjYxNj1zdGF0aWMgdm9pZCBzZXR1cF9hcmNoX3BlYnNfc2FtcGxlX2RhdGEoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI3MDgtXHRcdGlmIChoYXNfYnJhbmNoX3N0YWNrKGV2ZW50KSkge1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MjcwOTpcdFx0XHRpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzKGxicik7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yNzEwLVx0XHRcdGludGVsX3BtdV9sYnJfc2F2ZV9icnN0YWNrKGRhdGEsIGNwdWMsIGV2ZW50KTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9MTIxNz1pbnRlbF9wbXVfbGJyX2ZpbHRlcihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTI4Ny1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzoxMjg4OnZvaWQgaW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhzdHJ1Y3QgbGJyX2VudHJ5ICpsYnIpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTI4OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQRUJTL0xCUiBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgIGhlcmUsIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgYmV5b25kIGl0cyBpbW1lZGlhdGUgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIExCUiByZWFkaW5nIHByb2Nlc3MuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gYGludGVsX3BtdV9sYnJfcmVhZF82NGAuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgbm9uLXN0YXRpYyBmdW5jdGlvbiBwbHVncyBpbnRvIHRoZSBicm9hZGVyIExCUiBoYW5kbGluZywgd2hhdCBkYXRhIGl0JiMzOTtzIHBhc3NpbmcsIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBub24tc3RhdGljIHByb3BlcnR5LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGlzIGV4cG9zZXMgYW55IGNyaXRpY2FsIGRhdGEgb3IgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfNjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjU3MT1zdGF0aWMgX19pbml0Y29uc3QgY29uc3Qgc3RydWN0IHg4Nl9wbXUgY29yZV9wbXUgPSB7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02NjE0LVx0Lmxicl9yZXNldFx0XHQ9IGludGVsX3BtdV9sYnJfcmVzZXRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjY2MTU6XHQubGJyX3JlYWRcdFx0PSBpbnRlbF9wbXVfbGJyX3JlYWRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2MTYtXHQubGJyX3NhdmVcdFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz02NjIwPXN0YXRpYyBfX2luaXRjb25zdCBjb25zdCBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02NjY2LVx0Lmxicl9yZXNldFx0XHQ9IGludGVsX3BtdV9sYnJfcmVzZXRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjY2Njc6XHQubGJyX3JlYWRcdFx0PSBpbnRlbF9wbXVfbGJyX3JlYWRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2NjgtXHQubGJyX3NhdmVcdFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTc0MD12b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzczLSAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjc3NDp2b2lkIGludGVsX3BtdV9sYnJfcmVhZF82NChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03NzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE0MwoJCQkJCQkJb3V0cHV0OiAyNzIKCQkJCQkJCXRob3VnaHRzOiAxNzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmIEV2ZW50IFBNVSBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkgc2VlIGlzIHRoYXQgYGludGVsX3BtdV9sYnJfcmVhZF82NGAgaXMsIHRoYW5rZnVsbHksIG5vbi1zdGF0aWMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNsZWFyIGxpc3Qgb2YgdGhlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZ1bmN0aW9ucyBoZXJlOgoKKiAgIGBhbWRfYnJzX2RyYWluYAoqICAgYGFtZF9wbXVfbGJyX3JlYWRgCiogICBgaW50ZWxfcG11X2xicl9yZWFkXzMyYAoqICAgYGludGVsX3BtdV9sYnJfcmVhZF82NGAKKiAgIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYAoqICAgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYAoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgb2J2aW91cyB0YXJnZXRzIGluIHRoZSBob3QgcGF0aC4gSSB3YXMgaW5pdGlhbGx5IGNvbmNlcm5lZCBhYm91dCBgcGVyZl9wbXVfc2NoZWRfdGFza2Agc2luY2UgaXQmIzM5O3Mgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXRgIGFuZCBgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW5gLiBCdXQsIGBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0YCBhbmQgYHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgYXJlIGluIHRoZSBob3QgcGF0aCwgc28gYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uLiBCdXQgdGhlc2Ugc2VlbSB0byBiZSBoYW5kbGVkIGFuZCBjb3JyZWN0bHkgZXhjbHVkZWQsIHNvIHdlJiMzOTtyZSBnb29kLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIGhlcmUmIzM5O3Mgd2hhdCBJIHRoaW5rIHdlIG5lZWQgdG8gdGVzdDoKClRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYWZmZWN0IGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG91ciBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50czoKCiogICBgUEVSRl9FVkVOVFNgOiBBbHdheXMgbmVjZXNzYXJ5LgoqICAgYENQVV9TVVBfQU1EYDogTmVjZXNzYXJ5IGZvciBBTUQgc3VwcG9ydCwgZGVmYXVsdHMgb24geDg2LCBidXQgZ29vZCB0byBpbmNsdWRlLgoqICAgYFBFUkZfRVZFTlRTX0FNRF9CUlNgOiBUaGlzIGxvb2tzIHNwZWNpZmljIHRvIEFNRCBCUlMgc3VwcG9ydCwgc28gd2UgbmVlZCBpdC4KKiAgIGBDUFVfU1VQX0lOVEVMYDogTmVjZXNzYXJ5IGZvciBJbnRlbCBzdXBwb3J0LCBkZWZhdWx0cyBvbiB4ODYsIGJ1dCBnb29kIHRvIGluY2x1ZGUuCiogICBgQVJNNjRfQlJCRWA6IE5lY2Vzc2FyeSBmb3IgQVJNNjQgQlJCRSwgZGVmaW5pdGVseSBuZWVkcyB0byBiZSBlbmFibGVkLgoqICAgYEFSTV9QTVVWM2A6IExvb2tzIGxpa2UgYEFSTTY0X0JSQkVgIGRlcGVuZHMgb24gaXQsIHNvIHdlIG5lZWQgaXQuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbmVha3MgaW4uIGBQRVJGX0VWRU5UU19BTURfQlJTYCBzZWVtcyB0byBiZSB0aGUgb25seSBvbmUgZm9yIEFNRCBCUlMuIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyByZWdhcmRpbmcgSW50ZWwgdW5jb3JlIGV2ZW50cywgc28gd2UgZG9uJiMzOTt0IG5lZWQgYFBFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRWAuIEFmdGVyIHF1aWNrbHkgdmVyaWZ5aW5nIHRoZSBNYWtlZmlsZXMsIGBDUFVfU1VQX0FNRGAsIGFuZCBgUEVSRl9FVkVOVFNfQU1EX0JSU2AgYXJlIGVub3VnaCBmb3IgQU1ELCBgQ1BVX1NVUF9JTlRFTGAgZm9yIEludGVsLCBhbmQgYEFSTTY0X0JSQkVgIGFuZCBgQVJNX1BNVVYzYCBmb3IgQVJNLiBXZSBhbHNvIHdhbnQgYFBFUkZfRVZFTlRTYCwgd2hpY2ggaXMgY29yZS4KClNvLCBoZXJlJiMzOTtzIHRoZSBwbGFuLiBXZSBmb2N1cyBmdXp6aW5nIG9uIHRoZSBsaXN0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgUE1VIGRyaXZlcnMuIFdlIHdpbGwgZW5hYmxlIHRob3NlIGNvbmZpZ3MgYW5kIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGlzIGNvdmVycyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFuZCBwcm92aWRlcyBhIHJlYXNvbmFibHkgdGVzdGFibGUgc2NvcGUgd2l0aCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFNfQU1EX0JSUyYjMzQ7LAogICAgJiMzNDtDUFVfU1VQX0lOVEVMJiMzNDssCiAgICAmIzM0O0FSTTY0X0JSQkUmIzM0OywKICAgICYjMzQ7QVJNX1BNVVYzJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW1kX2Jyc19kcmFpbiYjMzQ7LAogICAgJiMzNDthbWRfcG11X2xicl9yZWFkJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9sYnJfcmVhZF8zMiYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfNjQmIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyYjMzQ7LAogICAgJiMzNDticmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYnJhbmNoIGVudHJ5IGluaXRpYWxpemF0aW9uIGluIHBlcmYgZXZlbnQgUE1VIGRyaXZlcnMgKEFNRCBCUlMsIEFNRCBMQlIsIEludGVsIExCUiwgQVJNIEJSQkUpIGJ5IHJlcGxhY2luZyBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSBwZXJmIGV2ZW50cyBzdWJzeXN0ZW0gKGBrZXJuZWwvZXZlbnRzL2NvcmUuY2ApIHRvIGNoYW5nZSBob3cgYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmb3IgUE1VcyBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIFBNVSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFNfQU1EX0JSUyYjMzQ7LAogICAgJiMzNDtDUFVfU1VQX0lOVEVMJiMzNDssCiAgICAmIzM0O0FSTTY0X0JSQkUmIzM0OywKICAgICYjMzQ7QVJNX1BNVVYzJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW1kX2Jyc19kcmFpbiYjMzQ7LAogICAgJiMzNDthbWRfcG11X2xicl9yZWFkJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9sYnJfcmVhZF8zMiYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfNjQmIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyYjMzQ7LAogICAgJiMzNDticmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYnJhbmNoIGVudHJ5IGluaXRpYWxpemF0aW9uIGluIHBlcmYgZXZlbnQgUE1VIGRyaXZlcnMgKEFNRCBCUlMsIEFNRCBMQlIsIEludGVsIExCUiwgQVJNIEJSQkUpIGJ5IHJlcGxhY2luZyBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSBwZXJmIGV2ZW50cyBzdWJzeXN0ZW0gKGBrZXJuZWwvZXZlbnRzL2NvcmUuY2ApIHRvIGNoYW5nZSBob3cgYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmb3IgUE1VcyBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIFBNVSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ5ZWU1ZThmYzQ5MTExMDc1NDU2YjhmYTk0Mzg0YTMyMDI0OThjNDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowMjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jCmluZGV4IGRjNTY0Njg4ZjNkNzMuLjU0YjEzZmFiYTExNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYwpAQCAtMzQzLDExICYjNDM7MzQzLDEwIEBAIHZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKQogCQlpZiAoIWFtZF9icnNfbWF0Y2hfcGxtKGV2ZW50LCBmcm9tLCB0bykpCiAJCQljb250aW51ZTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnImIzQzO25yKTsKLQotCQlicltucl0uZnJvbSA9IGZyb207Ci0JCWJyW25yXS50byAgID0gdG87Ci0KJiM0MzsJCWJyW25yXSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpewomIzQzOwkJCS5mcm9tCT0gZnJvbSwKJiM0MzsJCQkudG8JPSB0bywKJiM0MzsJCX07CiAJCW5yJiM0MzsmIzQzOzsKIAl9CiBlbXB0eToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jCmluZGV4IDlkOWM5NjE5ODlkNTEuLmE1NTY0NmZjYjg0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYwpAQCAtMTg0LDEzICYjNDM7MTg0LDYgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpCiAJCSAgICBlbnRyeS50by5zcGxpdC5yZXNlcnZlZCkKIAkJCWNvbnRpbnVlOwogCi0JCXBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhiciAmIzQzOyBvdXQpOwotCi0JCWJyW291dF0uZnJvbQk9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS5mcm9tLnNwbGl0LmlwKTsKLQkJYnJbb3V0XS50bwk9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCk7Ci0JCWJyW291dF0ubWlzcHJlZAk9IGVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdDsKLQkJYnJbb3V0XS5wcmVkaWN0ZWQgPSAhYnJbb3V0XS5taXNwcmVkOwotCiAJCS8qCiAJCSAqIFNldCBicmFuY2ggc3BlY3VsYXRpb24gaW5mb3JtYXRpb24gdXNpbmcgdGhlIHN0YXR1cyBvZgogCQkgKiB0aGUgdmFsaWQgYW5kIHNwZWMgYml0cy4KQEAgLTIwOCw3ICYjNDM7MjAxLDE0IEBAIHZvaWQgYW1kX3BtdV9sYnJfcmVhZCh2b2lkKQogCQkgKiBzcGVjdWxhdGl2ZSBhbmQgdG9vayB0aGUgY29ycmVjdCBwYXRoCiAJCSAqLwogCQlpZHggPSAoZW50cnkudG8uc3BsaXQudmFsaWQgJmx0OyZsdDsgMSkgfCBlbnRyeS50by5zcGxpdC5zcGVjOwotCQlicltvdXRdLnNwZWMgPSBsYnJfc3BlY19tYXBbaWR4XTsKJiM0MzsKJiM0MzsJCWJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQkJPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCksCiYjNDM7CQkJLnRvCQk9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksCiYjNDM7CQkJLm1pc3ByZWQJPSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsCiYjNDM7CQkJLnByZWRpY3RlZAk9ICFlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsCiYjNDM7CQkJLnNwZWMJCT0gbGJyX3NwZWNfbWFwW2lkeF0sCiYjNDM7CQl9OwogCQlvdXQmIzQzOyYjNDM7OwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jCmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMKQEAgLTc1NiwxMCAmIzQzOzc1NiwxMCBAQCB2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YykKIAogCQlyZG1zcnEoeDg2X3BtdS5sYnJfZnJvbSAmIzQzOyBsYnJfaWR4LCBtc3JfbGFzdGJyYW5jaC5sYnIpOwogCi0JCXBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicik7Ci0KLQkJYnItJmd0O2Zyb20JPSBtc3JfbGFzdGJyYW5jaC5mcm9tOwotCQlici0mZ3Q7dG8JCT0gbXNyX2xhc3RicmFuY2gudG87CiYjNDM7CQkqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQk9IG1zcl9sYXN0YnJhbmNoLmZyb20sCiYjNDM7CQkJLnRvCT0gbXNyX2xhc3RicmFuY2gudG8sCiYjNDM7CQl9OwogCQliciYjNDM7JiM0Mzs7CiAJfQogCWNwdWMtJmd0O2xicl9zdGFjay5uciA9IGk7CkBAIC04NDcsMTQgJiM0Mzs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpCiAJCWlmIChhYm9ydCAmYW1wOyZhbXA7IHg4Nl9wbXUubGJyX2RvdWJsZV9hYm9ydCAmYW1wOyZhbXA7IG91dCAmZ3Q7IDApCiAJCQlvdXQtLTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnImIzQzO291dCk7Ci0JCWJyW291dF0uZnJvbQkgPSBmcm9tOwotCQlicltvdXRdLnRvCSA9IHRvOwotCQlicltvdXRdLm1pc3ByZWQJID0gbWlzOwotCQlicltvdXRdLnByZWRpY3RlZCA9IHByZWQ7Ci0JCWJyW291dF0uaW5fdHgJID0gaW5fdHg7Ci0JCWJyW291dF0uYWJvcnQJID0gYWJvcnQ7Ci0JCWJyW291dF0uY3ljbGVzCSA9IGN5Y2xlczsKJiM0MzsJCWJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQkJPSBmcm9tLAomIzQzOwkJCS50bwkJPSB0bywKJiM0MzsJCQkubWlzcHJlZAk9IG1pcywKJiM0MzsJCQkucHJlZGljdGVkCT0gcHJlZCwKJiM0MzsJCQkuaW5fdHgJCT0gaW5fdHgsCiYjNDM7CQkJLmFib3J0CQk9IGFib3J0LAomIzQzOwkJCS5jeWNsZXMJCT0gY3ljbGVzLAomIzQzOwkJfTsKIAkJb3V0JiM0MzsmIzQzOzsKIAl9CiAJY3B1Yy0mZ3Q7bGJyX3N0YWNrLm5yID0gb3V0OwpAQCAtOTA1LDYgJiM0Mzs5MDYsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAogCXN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZTsKIAlzdHJ1Y3QgbGJyX2VudHJ5ICpsYnI7CiAJdTY0IGZyb20sIHRvLCBpbmZvOwomIzQzOwlib29sIG1pc3ByZWQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgeDg2X3BtdS5sYnJfbnI7IGkmIzQzOyYjNDM7KSB7CkBAIC05MjEsMjQgJiM0Mzs5MjMsMjcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKIAkJdG8gPSByZGxicl90byhpLCBsYnIpOwogCQlpbmZvID0gcmRsYnJfaW5mbyhpLCBsYnIpOwogCi0JCXBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlKTsKLQotCQllLSZndDtmcm9tCQk9IGZyb207Ci0JCWUtJmd0O3RvCQk9IHRvOwotCQllLSZndDttaXNwcmVkCT0gZ2V0X2xicl9taXNwcmVkKGluZm8pOwotCQllLSZndDtwcmVkaWN0ZWQJPSAhZS0mZ3Q7bWlzcHJlZDsKLQkJZS0mZ3Q7aW5fdHgJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0lOX1RYKTsKLQkJZS0mZ3Q7YWJvcnQJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0FCT1JUKTsKLQkJZS0mZ3Q7Y3ljbGVzCT0gZ2V0X2xicl9jeWNsZXMoaW5mbyk7Ci0JCWUtJmd0O3R5cGUJCT0gZ2V0X2xicl9icl90eXBlKGluZm8pOwotCi0JCS8qCi0JCSAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZiBjcHVjLSZndDtsYnJfZW50cmllc1tpXSB0bwotCQkgKiB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLgotCQkgKiBUaGUgbGF0ZXIgY29kZSB3aWxsIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZAotCQkgKiB0byB0aGUgcGVyZiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuCi0JCSAqLwotCQllLSZndDtyZXNlcnZlZAk9IChpbmZvICZndDsmZ3Q7IExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSAmYW1wOyBMQlJfSU5GT19CUl9DTlRSX0ZVTExfTUFTSzsKJiM0MzsJCW1pc3ByZWQgPSBnZXRfbGJyX21pc3ByZWQoaW5mbyk7CiYjNDM7CiYjNDM7CQkqZSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpewomIzQzOwkJCS5mcm9tCQk9IGZyb20sCiYjNDM7CQkJLnRvCQk9IHRvLAomIzQzOwkJCS5taXNwcmVkCT0gbWlzcHJlZCwKJiM0MzsJCQkucHJlZGljdGVkCT0gIW1pc3ByZWQsCiYjNDM7CQkJLmluX3R4CQk9ICEhKGluZm8gJmFtcDsgTEJSX0lORk9fSU5fVFgpLAomIzQzOwkJCS5hYm9ydAkJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0FCT1JUKSwKJiM0MzsJCQkuY3ljbGVzCQk9IGdldF9sYnJfY3ljbGVzKGluZm8pLAomIzQzOwkJCS50eXBlCQk9IGdldF9sYnJfYnJfdHlwZShpbmZvKSwKJiM0MzsJCQkvKgomIzQzOwkJCSAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZgomIzQzOwkJCSAqIGNwdWMtJmd0O2xicl9lbnRyaWVzW2ldIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHRoZQomIzQzOwkJCSAqIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4gVGhlIGxhdGVyIGNvZGUgd2lsbAomIzQzOwkJCSAqIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZCB0byB0aGUgcGVyZgomIzQzOwkJCSAqIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQkucmVzZXJ2ZWQJPSAoaW5mbyAmZ3Q7Jmd0OyBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkJCSAgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0ssCiYjNDM7CQl9OwogCX0KIAogCWNwdWMtJmd0O2xicl9zdGFjay5uciA9IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jCmluZGV4IGJhNTU0ZTBjODQ2YzQuLjI1NGJlNGRhOGFlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jCkBAIC02MDQsNyAmIzQzOzYwNCw3IEBAIHN0YXRpYyBib29sIHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldChpbnQgaW5kZXgsIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50CiAJCXJldHVybiBmYWxzZTsKIAogCWJyYmluZiA9IGJyZWdzLmJyYmluZjsKLQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZW50cnkpOwomIzQzOwkqZW50cnkgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsgfTsKIAlpZiAoYnJiZV9yZWNvcmRfaXNfY29tcGxldGUoYnJiaW5mKSkgewogCQllbnRyeS0mZ3Q7ZnJvbSA9IGJyZWdzLmJyYnNyYzsKIAkJZW50cnktJmd0O3RvID0gYnJlZ3MuYnJidGd0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA0OGQ4NTFmYmQ4ZWE1Li4zMTA2ODFjY2NiNTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTQ2NywyMyAmIzQzOzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCiAJcmV0dXJuIHNpemU7CiB9CiAKLS8qCi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS4KLSAqIFRoZSB0byBhbmQgZnJvbSBmaWVsZHMgYXJlIG5vdCBjbGVhcmVkIGJlY2F1c2UgdGhleSBhcmUKLSAqIHN5c3RlbWF0aWNhbGx5IG1vZGlmaWVkIGJ5IGNhbGxlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmJyKQotewotCWJyLSZndDttaXNwcmVkCT0gMDsKLQlici0mZ3Q7cHJlZGljdGVkCT0gMDsKLQlici0mZ3Q7aW5fdHgJPSAwOwotCWJyLSZndDthYm9ydAk9IDA7Ci0JYnItJmd0O2N5Y2xlcwk9IDA7Ci0JYnItJmd0O3R5cGUJPSAwOwotCWJyLSZndDtzcGVjCT0gUEVSRl9CUl9TUEVDX05BOwotCWJyLSZndDtyZXNlcnZlZAk9IDA7Ci19Ci0KIGV4dGVybiB2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IDQ2Mzg1NDQyMDVmMjguLjM0ZWIwNWU5ZDc0ZDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0zNzU3LDYgJiM0MzszNzU3LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9jdHhfc2NoZWRfdGFza19jYihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCAmYW1wO2N0eC0mZ3Q7cG11X2N0eF9saXN0LCBwbXVfY3R4X2VudHJ5KSB7CiAJCWNwYyA9IHRoaXNfY3BjKHBtdV9jdHgtJmd0O3BtdSk7CiAKJiM0MzsJCWlmIChjcGMtJmd0O3Rhc2tfZXBjICE9IHBtdV9jdHgpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCWlmIChjcGMtJmd0O3NjaGVkX2NiX3VzYWdlICZhbXA7JmFtcDsgcG11X2N0eC0mZ3Q7cG11LSZndDtzY2hlZF90YXNrKQogCQkJcG11X2N0eC0mZ3Q7cG11LSZndDtzY2hlZF90YXNrKHBtdV9jdHgsIHRhc2ssIHNjaGVkX2luKTsKIAl9CkBAIC0zOTA3LDcgJiM0MzszOTEwLDcgQEAgc3RhdGljIHZvaWQgX19wZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjLAogCXBlcmZfY3R4X2xvY2soY3B1Y3R4LCBjcHVjdHgtJmd0O3Rhc2tfY3R4KTsKIAlwZXJmX3BtdV9kaXNhYmxlKHBtdSk7CiAKLQlwbXUtJmd0O3NjaGVkX3Rhc2soY3BjLSZndDt0YXNrX2VwYywgdGFzaywgc2NoZWRfaW4pOwomIzQzOwlwbXUtJmd0O3NjaGVkX3Rhc2soJmFtcDtjcGMtJmd0O2VwYywgdGFzaywgc2NoZWRfaW4pOwogCiAJcGVyZl9wbXVfZW5hYmxlKHBtdSk7CiAJcGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LSZndDt0YXNrX2N0eCk7CkBAIC0zOTE3LDE1ICYjNDM7MzkyMCwxNyBAQCBzdGF0aWMgdm9pZCBwZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCiAJCQkJYm9vbCBzY2hlZF9pbikKIHsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gdGhpc19jcHVfcHRyKCZhbXA7cGVyZl9jcHVfY29udGV4dCk7CiAJc3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGM7CiAKLQkvKiBjcHVjdHgtJmd0O3Rhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovCi0JaWYgKHByZXYgPT0gbmV4dCB8fCBjcHVjdHgtJmd0O3Rhc2tfY3R4KQomIzQzOwlpZiAocHJldiA9PSBuZXh0KQogCQlyZXR1cm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKCZhbXA7c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KQomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKCZhbXA7c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KSB7CiYjNDM7CQlpZiAoY3BjLSZndDt0YXNrX2VwYykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJX19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgUE1VIEJyYW5jaCBFbnRyeSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyBob3cgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgaXMgaW5pdGlhbGl6ZWQgYWNyb3NzIGEgaGFuZGZ1bCBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0cy4gSXQmIzM5O3MgdG91Y2hpbmcgYGFtZF9icnMuY2AsIGBhbWRfbGJyLmNgLCBgaW50ZWxfbGJyLmNgLCBgYXJtX2JyYmUuY2AsIGFuZCBwcm9iYWJseSBhIGZldyBvdGhlcnMuIFRoZSBjdXJyZW50IG1ldGhvZCBpbnZvbHZlcyBmaXJzdCBjbGVhcmluZyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIpYCBhbmQgdGhlbiBpbmRpdmlkdWFsbHkgYXNzaWduaW5nIHZhbHVlcyB0byB0aGUgZmllbGRzLiBUaGF0IHNlZW1zIGEgYml0Li4uIGNsdW5reSwgZG9lc24mIzM5O3QgaXQ/CgpUaGUgcHJvcG9zZWQgY2hhbmdlIGlzIHRvIHV0aWxpemUgYSBjb21wb3VuZCBsaXRlcmFsIGZvciBpbml0aWFsaXphdGlvbjoKCmBgYGMKKmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiAgICAuZnJvbSA9IC4uLiwKICAgIC50byA9IC4uLiwKICAgIC8vIC4uLgp9OwpgYGAKClRoYXQgbG9va3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQsIGF2b2lkaW5nIHRoZSBuZWVkIGZvciBhIHNlcGFyYXRlIGNsZWFyIG9wZXJhdGlvbi4gQnV0LCB3YWl0IGEgc2Vjb25kLi4uIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgICpkb2VzKiBoYXZlIGJpdGZpZWxkcywgZG9lc24mIzM5O3QgaXQ/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gdG8gYmUgc3VyZSB0aGlzIHJlZmFjdG9yIHBsYXlzIG5pY2VseSB3aXRoIHRob3NlIGJpdGZpZWxkcy4gQmVzdCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGxvc2luZyBkYXRhIG9yIG1ha2luZyBhc3N1bXB0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIExldCBtZSBnbyBncmFiIHRoZSBkZWZpbml0aW9uIGFuZCBnaXZlIGl0IGEgZ29vZCBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9MTMzOD11bmlvbiBwZXJmX21lbV9kYXRhX3NyYyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0xNDkwLSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaDoxNDkxOnN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XG5pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oLTE0OTItXHRfX3U2NFx0ZnJvbTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oPTEzMzg9dW5pb24gcGVyZl9tZW1fZGF0YV9zcmMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMTQ5MC0gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg6MTQ5MTpzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkge1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0xNDkyLVx0X191NjRcdGZyb207XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jPTI3NT11NjQgKmdldF9pbnRyX3JlZ3Moc3RydWN0IGV2ZW50ICpldmVudCwgdm9pZCAqc2FtcGxlX2J1ZmYpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jLTI5Ny1cdFx0ICogfTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvcG11L3NhbXBsaW5nX3Rlc3RzL21pc2MuYzoyOTg6XHRcdCAqIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3BtdS9zYW1wbGluZ190ZXN0cy9taXNjLmMtMjk5LVx0XHQgKiAgICAgdTY0XHRmcm9tO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBQZXJmIEV2ZW50IFN0cnVjdHVyZSBEZWZpbml0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBwZXJmIGV2ZW50cyBhcmUgc3RydWN0dXJlZCBhdCB0aGUga2VybmVsIGxldmVsLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oYC4gSSByZWNhbGwgdGhhdCBmaWxlIGRlZmluZXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIHRvIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHN5c3RlbSwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTQ5MS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgdGhlcmUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgbGF5b3V0IG9yIHNwZWNpZmljIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gZXZlbnQgZGF0YS4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIGRlZXBlciBkaXZlIHRoYW4gYSBjdXJzb3J5IGdsYW5jZSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIGN1cnJlbnQgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDgwOlx0ICogcHJlZGljdGVkOiBicmFuY2ggdGFyZ2V0IHdhcyBwcmVkaWN0ZWRcbjE0ODE6XHQgKlxuMTQ4MjpcdCAqIHN1cHBvcnQgZm9yIG1pc3ByZWQsIHByZWRpY3RlZCBpcyBvcHRpb25hbC4gSW4gY2FzZSBpdFxuMTQ4MzpcdCAqIGlzIG5vdCBzdXBwb3J0ZWQgbWlzcHJlZCA9IHByZWRpY3RlZCA9IDAuXG4xNDg0Olx0ICpcbjE0ODU6XHQgKiAgICAgaW5fdHg6IHJ1bm5pbmcgaW4gYSBoYXJkd2FyZSB0cmFuc2FjdGlvblxuMTQ4NjpcdCAqICAgICBhYm9ydDogYWJvcnRpbmcgYSBoYXJkd2FyZSB0cmFuc2FjdGlvblxuMTQ4NzpcdCAqICAgIGN5Y2xlczogY3ljbGVzIGZyb20gbGFzdCBicmFuY2ggKG9yIDAgaWYgbm90IHN1cHBvcnRlZClcbjE0ODg6XHQgKiAgICAgIHR5cGU6IGJyYW5jaCB0eXBlXG4xNDg5Olx0ICogICAgICBzcGVjOiBicmFuY2ggc3BlY3VsYXRpb24gaW5mbyAob3IgMCBpZiBub3Qgc3VwcG9ydGVkKVxuMTQ5MDpcdCAqL1xuMTQ5MTpcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XG4xNDkyOlx0XHRfX3U2NFx0ZnJvbTtcbjE0OTM6XHRcdF9fdTY0XHR0bztcbjE0OTQ6XHRcdF9fdTY0XHRtaXNwcmVkICAgOiAgMSwgLyogdGFyZ2V0IG1pc3ByZWRpY3RlZCAqL1xuMTQ5NTpcdFx0XHRwcmVkaWN0ZWQgOiAgMSwgLyogdGFyZ2V0IHByZWRpY3RlZCAqL1xuMTQ5NjpcdFx0XHRpbl90eCAgICAgOiAgMSwgLyogaW4gdHJhbnNhY3Rpb24gKi9cbjE0OTc6XHRcdFx0YWJvcnQgICAgIDogIDEsIC8qIHRyYW5zYWN0aW9uIGFib3J0ICovXG4xNDk4Olx0XHRcdGN5Y2xlcyAgICA6IDE2LCAvKiBjeWNsZSBjb3VudCB0byBsYXN0IGJyYW5jaCAqL1xuMTQ5OTpcdFx0XHR0eXBlICAgICAgOiAgNCwgLyogYnJhbmNoIHR5cGUgKi9cbjE1MDA6XHRcdFx0c3BlYyAgICAgIDogIDIsIC8qIGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvICovXG4xNTAxOlx0XHRcdG5ld190eXBlICA6ICA0LCAvKiBhZGRpdGlvbmFsIGJyYW5jaCB0eXBlICovXG4xNTAyOlx0XHRcdHByaXYgICAgICA6ICAzLCAvKiBwcml2aWxlZ2UgbGV2ZWwgKi9cbjE1MDM6XHRcdFx0cmVzZXJ2ZWQgIDogMzE7XG4xNTA0Olx0fTtcbjE1MDU6XHRcbjE1MDY6XHQvKiBTaXplIG9mIHVzZWQgaW5mbyBiaXRzIGluIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqL1xuMTUwNzpcdCNkZWZpbmUgUEVSRl9CUkFOQ0hfRU5UUllfSU5GT19CSVRTX01BWFx0XHQzM1xuMTUwODpcdFxuMTUwOTpcdHVuaW9uIHBlcmZfc2FtcGxlX3dlaWdodCB7XG4xNTEwOlx0XHRfX3U2NFx0ICAgICAgZnVsbDtcbjE1MTE6XHQjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG4xNTEyOlx0XHRzdHJ1Y3Qge1xuMTUxMzpcdFx0XHRfX3UzMiB2YXIxX2R3O1xuMTUxNDpcdFx0XHRfX3UxNiB2YXIyX3c7XG4xNTE1Olx0XHRcdF9fdTE2IHZhcjNfdztcbjE1MTY6XHRcdH07XG4xNTE3Olx0I2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpXG4xNTE4Olx0XHRzdHJ1Y3Qge1xuMTUxOTpcdFx0XHRfX3UxNiB2YXIzX3c7XG4xNTIwOlx0XHRcdF9fdTE2IHZhcjJfdztcbjE1MjE6XHRcdFx0X191MzIgdmFyMV9kdztcbjE1MjI6XHRcdH07XG4xNTIzOlx0I2Vsc2VcbjE1MjQ6XHQjIGVycm9yIFwmIzM0O1Vua25vd24gZW5kaWFubmVzc1wmIzM0O1xuMTUyNTpcdCNlbmRpZlxuMTUyNjpcdH07XG4xNTI3Olx0XG4xNTI4Olx0I2VuZGlmIC8qIF9VQVBJX0xJTlVYX1BFUkZfRVZFTlRfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTkwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwZXJmX2JyYW5jaF9lbnRyeWAgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBjaGFuZ2luZyBob3cgdGhlIGBwZXJmX2JyYW5jaF9lbnRyeWAgc3RydWN0IGlzIGluaXRpYWxpemVkLiAgTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIHNpemVzIGFuZCB0aGUgYml0ZmllbGRzLiBUaGUgc3RydWN0IGNvbnRhaW5zIGBmcm9tYCwgYHRvYCwgYW5kIGEgNjQtYml0IGJpdGZpZWxkIOKAkyBhIGdvb2Qgc3RhcnQuIEkgZGlkIHRoZSBtYXRoIDEmIzQzOzEmIzQzOzEmIzQzOzEmIzQzOzE2JiM0Mzs0JiM0MzsyJiM0Mzs0JiM0MzszJiM0MzszMSBhbmQgY29uZmlybSB0aGF0IHRoZSBiaXRmaWVsZCAqZG9lcyogc3VtIHRvIDY0IGJpdHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGUgY29kZSBpbnRlbmRzLiBUaGF0JiMzOTtzIGdvb2QuCgpOb3csIHRoZSBvbGQgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIpYCBmb2xsb3dlZCBieSBhc3NpZ25tZW50cyB0byBgZnJvbWAgYW5kIGB0b2AuICBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCBmdW5jdGlvbi4gSSBzZWUgdGhlIHBhdGNoIGlzICpyZW1vdmluZyogaXQgYW5kIHJlcGxhY2luZyB0aGUgY29kZSB3aXRoIGEgY29tcG91bmQgbGl0ZXJhbC4gQnV0IHdhaXQgYSBtaW51dGUsIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIGhhcyBhIGNyaXRpY2FsIGZsYXcuIEl0ICpkb2VzbiYjMzk7dCogY2xlYXIgYG5ld190eXBlYCBvciBgcHJpdmAhICBUaG9zZSBmaWVsZHMgd2VyZSBhZGRlZCBsYXRlci4gU28sIGlmIGBicmAgd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgbmV3X3R5cGVgIGFuZCBgcHJpdmAgd291bGQgYmUgbGVmdCB3aXRoIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIGluIG1lbW9yeS4gWWlrZXMuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhaywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc291cmNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGlmIHRob3NlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBsYXRlciB1c2VkLgoKVGhlIHBhdGNoJiMzOTtzIHJlcGxhY2VtZW50IG9mIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggdGhlIGNvbXBvdW5kIGxpdGVyYWwgYXNzaWdubWVudCBsb29rcyBwcm9taXNpbmcuIEkga25vdyB0aGUgQyBzdGFuZGFyZCBndWFyYW50ZWVzIHRoYXQgd2hlbiBhIHN0cnVjdCBpcyBpbml0aWFsaXplZCB3aXRoIGEgY29tcG91bmQgbGl0ZXJhbCwgKmFueSogZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCB3b3VsZCBpbmNsdWRlIHRoZSBgbmV3X3R5cGVgLCBgcHJpdmAsIGByZXNlcnZlZGAsIGFuZCBhbnkgcGFkZGluZyBiaXRzLiBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgQzk5IHN0YW5kYXJkIGZvciB0aGUgZGV0YWlscy4gVGhlIHN0YW5kYXJkIHN0YXRlcywgdGhhdCwgZm9yIGEgc3RydWN0LCBhbnkgcGFydHMgbm90IGluaXRpYWxpemVkIGV4cGxpY2l0bHkgYXJlIGluaXRpYWxpemVkIGFzIGlmIHRoZSBzdHJ1Y3QgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgcGFkZGluZyBiaXRzIGFyZSB6ZXJvZWQgb3V0LgoKQnV0IGlzIHRoZXJlIGFueSBwYWRkaW5nIGhlcmU/IGBmcm9tYCBhbmQgYHRvYCBhcmUgYF9fdTY0YCAoOCBieXRlcyBlYWNoKS4gVGhlIGJpdGZpZWxkcyBzdW0gdG8gOCBieXRlcywgc28gdGhlIHRvdGFsIHNpemUgaXMgMjQgYnl0ZXMsIGFuZCB0aGVyZSYjMzk7cyBubyBwYWRkaW5nLiBTbywgdGhlIGNvbXBvdW5kIGxpdGVyYWwgKmRlZmluaXRlbHkqIGluaXRpYWxpemVzIGV2ZXJ5dGhpbmcgY29ycmVjdGx5LgoKTXkgbWluZCB0aGVuIGZsYXNoZXMgYmFjayB0byB0aGUgb2xkIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYGJyYCB3YXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGBuZXdfdHlwZWAgYW5kIGBwcml2YCB3b3VsZCBhYnNvbHV0ZWx5IGJlIGxlZnQgdW5pbml0aWFsaXplZCEgVGhpcyBpcyBhIGJ1ZyB0aGF0IHRoZSBwYXRjaCAqZml4ZXMqLiBUaGUgcHJldmlvdXMgY29kZSBoYWQgYSByZWFsIHZ1bG5lcmFiaWxpdHkuCgpTbywgZG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZG9lcyBpdCAqZml4KiBpdD8gT2J2aW91c2x5LCBpdCBmaXhlcyB0aGUgcHJvYmxlbSEKCldhaXQsIHRoaXMgS01TQU4gcnVsZS4uLiAmIzM0O1NldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuLi4mIzM0OyBTaW5jZSB0aGlzIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZywgaXQgc2VlbXMgbGlrZSBLTVNBTiBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gV2UmIzM5O3JlICpyZW1vdmluZyogYSBwb3RlbnRpYWwgbGVhaywgbm90IGFkZGluZyBvbmUuIEl0JiMzOTtzIGxpa2UgZml4aW5nIGEgYnVnOiB5b3UgdHlwaWNhbGx5IGRvbiYjMzk7dCBuZWVkIGZ1enppbmcgdG8gZmluZCB0aGUgYnVnIHlvdSBqdXN0IGZpeGVkLgoKSSBhbSByZS1leGFtaW5pbmcgdGhlIGNvZGUgbm93OgpgYGBjCgkJYnJbbnJdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CgkJCS5mcm9tCT0gZnJvbSwKCQkJLnRvCT0gdG8sCgkJfTsKCQluciYjNDM7JiM0Mzs7CmBgYApUaGlzIGlzIGZpbmUuIFdlIGFyZSBpbml0aWFsaXppbmcgYGJyW25yXWAgY29tcGxldGVseS4KCkFuZCBqdXN0IHRvIGJlIHN1cGVyIHN1cmUgYWJvdXQgdGhlIG9sZCBjb2RlLCBgc3BlY2AgaW4gdGhlIG9sZCBjb2RlICp3YXMqIGluaXRpYWxpemVkIHRvIGBQRVJGX0JSX1NQRUNfTkFgLiBUaGlzIHZhbHVlIGlzICpwcm9iYWJseSogemVyby4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEVSRl9CUl9TUEVDX05BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNTg6XHRQRVJGX0JSX1NQRUNfTkEsXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE1OS1cdFBFUkZfQlJfU1BFQ19XUk9OR19QQVRILFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaDoyNzU6XHRQRVJGX0JSX1NQRUNfTkFcdFx0XHRcdD0gMCxcdC8qIE5vdCBhdmFpbGFibGUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMjc2LVx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcdFx0XHQ9IDEsXHQvKiBTcGVjdWxhdGl2ZSBidXQgb24gd3JvbmcgcGF0aCAqL1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaDoyNzU6XHRQRVJGX0JSX1NQRUNfTkFcdFx0XHRcdD0gMCxcdC8qIE5vdCBhdmFpbGFibGUgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMjc2LVx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcdFx0XHQ9IDEsXHQvKiBTcGVjdWxhdGl2ZSBidXQgb24gd3JvbmcgcGF0aCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDczCgkJCQkJCQlvdXRwdXQ6IDMxNQoJCQkJCQkJdGhvdWdodHM6IDM2MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIEludHJvZHVjZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGNvbXBvdW5kIGxpdGVyYWwgaW5pdGlhbGl6ZXMgYHNwZWNgIHRvIHplcm8sIHdoaWNoIGlzIGBQRVJGX0JSX1NQRUNfTkFgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBlbnRpcmUgcGF0Y2ggZm9yIGFueSBvdGhlciBjaGFuZ2VzLgoKTG9va2luZyBjbG9zZXIsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhbmQgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgZml4IHJlbGF0ZWQgdG8gY29udGV4dCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IFBNVSBjb250ZXh0IGlzIHVzZWQgZHVyaW5nIHRhc2sgc2NoZWR1bGluZy4gSXQgbW9kaWZpZXMgdGhlIHBvaW50ZXIgcGFzc2VkIHRvIGBwbXUtJmd0O3NjaGVkX3Rhc2tgLCB1c2luZyB0aGUgZW1iZWRkZWQgYGVwY2AgaW4gYGNwY2AuIE5vdGhpbmcgaGVyZSBwb2ludHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UsIGxpa2VseSBhIGJ1ZyBmaXguCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiB0aGUgY29tcG91bmQgbGl0ZXJhbHMgdGhlbXNlbHZlcy4gTXkgY29uY2VybiB3YXMgYXJvdW5kIGhvdyB0aGUgY29tcGlsZXIgbWlnaHQgaGFuZGxlIHRoZXNlOiBgbWVtY3B5YCBmcm9tIHJlYWQtb25seSBkYXRhLCBjbGVhcmluZyBhbmQgdGhlbiBzZXR0aW5nLCBldGMuIFN0YW5kYXJkIEMgYmVoYXZpb3Igc2hvdWxkIHplcm8gdW51c2VkIGZpZWxkcy4gU3BlY2lmaWNhbGx5LCAgdGhlIGNvbXBpbGVyIGlzIHN1cHBvc2VkIHRvIHplcm8gaW5pdGlhbGl6ZSBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNldC4gVGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhlcmUgYXJlIHBhZGRpbmcgYml0cyBpbiB0aGUgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAuIEkgY2hlY2tlZC4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgYml0cy4gVGhlIGJpdGZpZWxkcyBleGFjdGx5IGZpbGwgYSA2NC1iaXQgaW50ZWdlciwgYW5kIHRoZSBzdHJ1Y3QgaXMgYSBtdWx0aXBsZSBvZiA4LWJ5dGVzIGFuZCB3aXRob3V0IGFueSBvdGhlciBwYWRkaW5nLiBUaGUgY29tcGlsZXIgKm11c3QqIHplcm8gZXZlcnl0aGluZyBlbHNlLiBTbywgdGhlIGNvbXBvdW5kIGxpdGVyYWwgKndpbGwqIGluaXRpYWxpemUgYWxsIGZpZWxkcy4KCkluaXRpYWxseSwgSSBsb29rZWQgZm9yIGFueXRoaW5nIGxpa2UgdGhlIGNvbXBpbGVyIHNldHRpbmcgYml0ZmllbGRzIGluZGl2aWR1YWxseSBhbmQgbGVhdmluZyBvdGhlcnMgdW5pbml0aWFsaXplZC4gSG93ZXZlciwgQyBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYXJlIHplcm9lZC4gVGhpcyBpcyBzYWZlLCBhbmQgSSBjb25maXJtZWQgdGhhdCBHQ0MgYW5kIENsYW5nIGJvdGggZG8gdGhpcy4KCkkgc3RhcnRlZCB0byBjaGVjayBpZiB0aGUgcGF0Y2ggbWlnaHQgKmZpeCogdW5pbml0aWFsaXplZCBtZW1vcnksIHJhdGhlciB0aGFuIGludHJvZHVjZS4gSW4gd2hpY2ggY2FzZSwgaXQgd291bGQgbm90IHJlcXVpcmUgS01TQU4sIGJlY2F1c2UgdGhlIGNvZGUgZG9lcyBub3QgYWRkIGEgbmV3IHJpc2suIEkgY29uc2lkZXJlZCB0aGF0IGl0IG1pZ2h0ICpleHBvc2UqIGFuIGV4aXN0aW5nIHJpc2ssIGJ5IG1ha2luZyBpdCByZWFjaGFibGUgaW4gYSBuZXcgd2F5LiBCdXQgaXQgZG9lc24mIzM5O3QuIEluc3RlYWQsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyAqcHJldmVudGluZyogdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYnkgc3dpdGNoaW5nIHRvIGNvbXBvdW5kIGxpdGVyYWxzLgoKQSBjbG9zZXIgbG9vayByZXZlYWxlZCB0aGF0IHRoZSBwYXRjaCBpcyAqcmVwbGFjaW5nKiBwb3RlbnRpYWxseSBpbmNvbXBsZXRlIGluaXRpYWxpemF0aW9uIHdpdGggY29tcG91bmQgbGl0ZXJhbHMuIEl0JiMzOTtzIHNhZmUhIEluIGZhY3QsIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCAqZml4ZXMqIGFuIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlcnNwYWNlIGJlY2F1c2UgcHJldmlvdXMgY29kZSB3YXMgbm90IGZ1bGx5IHplcm9pbmcgY2VydGFpbiBmaWVsZHMuCgpJbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byByZXZpc2l0IHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBlc3BlY2lhbGx5IHdoZXRoZXIgaXQgaXMgY29waWVkIHRvIHVzZXJzcGFjZS4gSWYgaXQgaXMsIHRoZW4gdGhlIGluZm9ybWF0aW9uIGxlYWsgaXMgcmVsZXZhbnQsIHNvIEkgZG91YmxlIGNoZWNrZWQgdGhhdCBgcGVyZl9icmFuY2hfZW50cnlgIGlzIHBhcnQgb2YgdGhlIHBlcmYgc2FtcGxlIGRhdGEsIHdoaWNoIGlzIHdyaXR0ZW4gdG8gdGhlIHJpbmcgYnVmZmVyIGFuZCBjYW4gYmUgYWNjZXNzZWQgYnkgdXNlcnNwYWNlLgoKVGhlIGNoYW5nZSBpbiBgaW50ZWxfcG11X3N0b3JlX2xicmAgaXMgcmVhbGx5IGp1c3QgYSByZWZhY3RvcmluZy4gSXQgcmVwbGFjZXMgbWFudWFsIGFzc2lnbm1lbnQgd2l0aCBhIGNvbXBvdW5kIGxpdGVyYWwuIFRoZSBjaGFuZ2UgaXMgc2FmZSEKCkxvb2tpbmcgYXQgdGhlIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhZ2FpbiwgSSBzZWUgdGhlIGNoZWNrLCBidXQgbm8gbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weWluZyB0byB1c2Vyc3BhY2UgaXMgYWRkZWQuIFNvIGl0JiMzOTtzIHN0aWxsIHNhZmUuIEFuZCB0aGUgb3RoZXIgY2hhbmdlIHBhc3NlcyBhbiBlbWJlZGRlZCBwb2ludGVyIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4KCioqQ29uY2x1c2lvbjoqKiBUaGUgY29tcG91bmQgbGl0ZXJhbCBhcHByb2FjaCAqZml4ZXMqIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgcGF0Y2ggZG9lcyBub3QgKmludHJvZHVjZSogYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIHVuc3BlY2lmaWVkIGZpZWxkcyBhbmQgYml0ZmllbGRzIGFyZSBjb3JyZWN0bHkgemVyby1pbml0aWFsaXplZCBkdWUgdG8gdGhlIEMgc3RhbmRhcmQgZ3VhcmFudGVlIGZvciBjb21wb3VuZCBsaXRlcmFscy4gVGhlIGxvZ2ljIGNoYW5nZXMgYXJlIHVucmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjE2LjAwMTg2Mzc0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk3NzAyNDk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQ1BVX1NVUF9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTX0FNRF9CUlNcIixcbiAgICBcIkNQVV9TVVBfSU5URUxcIixcbiAgICBcIkFSTTY0X0JSQkVcIixcbiAgICBcIkFSTV9QTVVWM1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtZF9icnNfZHJhaW5cIixcbiAgICBcImFtZF9wbXVfbGJyX3JlYWRcIixcbiAgICBcImludGVsX3BtdV9sYnJfcmVhZF8zMlwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzY0XCIsXG4gICAgXCJpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzXCIsXG4gICAgXCJicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGFjcm9zcyBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTVUgZHJpdmVycyAoQU1ELCBJbnRlbCwgQVJNKS4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKClgIHRvIGNsZWFyIGJpdGZpZWxkcywgYnV0IHRoaXMgZnVuY3Rpb24gd2FzIG91dGRhdGVkIGFuZCBmYWlsZWQgdG8gY2xlYXIgbmV3ZXIgYml0ZmllbGRzIGxpa2UgYG5ld190eXBlYCBhbmQgYHByaXZgLCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBwZXJmIHJpbmcgYnVmZmVyLlxcblxcblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cXG5cXG5UaGUgb3RoZXIgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFyZSBsb2dpYyBmaXhlcyBmb3IgUE1VIGNvbnRleHQgc2NoZWR1bGluZyAoYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcykgYW5kIGRvIG5vdCBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlLlxcblxcblNpbmNlIHRoaXMgcGF0Y2ggKnJlc29sdmVzKiBhbiBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9uZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBicmFuY2ggZW50cnkgaW5pdGlhbGl6YXRpb24gaW4gcGVyZiBldmVudCBQTVUgZHJpdmVycyAoQU1EIEJSUywgQU1EIExCUiwgSW50ZWwgTEJSLCBBUk0gQlJCRSkgYnkgcmVwbGFjaW5nIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHBlcmYgZXZlbnRzIHN1YnN5c3RlbSAoYGtlcm5lbC9ldmVudHMvY29yZS5jYCkgdG8gY2hhbmdlIGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgUE1VIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjoxNi4wMDE4NzAzNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzU1OTA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ5ZWU1ZThmYzQ5MTExMDc1NDU2YjhmYTk0Mzg0YTMyMDI0OThjNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTU6MDI6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNcXG5pbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNcXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXFxuQEAgLTM0MywxMSArMzQzLDEwIEBAIHZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxcbiBcXHRcXHRpZiAoIWFtZF9icnNfbWF0Y2hfcGxtKGV2ZW50LCBmcm9tLCB0bykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyK25yKTtcXG4tXFxuLVxcdFxcdGJyW25yXS5mcm9tID0gZnJvbTtcXG4tXFx0XFx0YnJbbnJdLnRvICAgPSB0bztcXG4tXFxuK1xcdFxcdGJyW25yXSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xcbitcXHRcXHRcXHQuZnJvbVxcdD0gZnJvbSxcXG4rXFx0XFx0XFx0LnRvXFx0PSB0byxcXG4rXFx0XFx0fTtcXG4gXFx0XFx0bnIrKztcXG4gXFx0fVxcbiBlbXB0eTpcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcXG5pbmRleCA5ZDljOTYxOTg5ZDUxLi5hNTU2NDZmY2I4NDY1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXFxuQEAgLTE4NCwxMyArMTg0LDYgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXFxuIFxcdFxcdCAgICBlbnRyeS50by5zcGxpdC5yZXNlcnZlZClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgKyBvdXQpO1xcbi1cXG4tXFx0XFx0YnJbb3V0XS5mcm9tXFx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCk7XFxuLVxcdFxcdGJyW291dF0udG9cXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCk7XFxuLVxcdFxcdGJyW291dF0ubWlzcHJlZFxcdD0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0O1xcbi1cXHRcXHRicltvdXRdLnByZWRpY3RlZCA9ICFicltvdXRdLm1pc3ByZWQ7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTZXQgYnJhbmNoIHNwZWN1bGF0aW9uIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBzdGF0dXMgb2ZcXG4gXFx0XFx0ICogdGhlIHZhbGlkIGFuZCBzcGVjIGJpdHMuXFxuQEAgLTIwOCw3ICsyMDEsMTQgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXFxuIFxcdFxcdCAqIHNwZWN1bGF0aXZlIGFuZCB0b29rIHRoZSBjb3JyZWN0IHBhdGhcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlkeCA9IChlbnRyeS50by5zcGxpdC52YWxpZCBcXHUwMDNjXFx1MDAzYyAxKSB8IGVudHJ5LnRvLnNwbGl0LnNwZWM7XFxuLVxcdFxcdGJyW291dF0uc3BlYyA9IGxicl9zcGVjX21hcFtpZHhdO1xcbitcXG4rXFx0XFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xcbitcXHRcXHRcXHQuZnJvbVxcdFxcdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApLFxcbitcXHRcXHRcXHQudG9cXHRcXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksXFxuK1xcdFxcdFxcdC5taXNwcmVkXFx0PSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsXFxuK1xcdFxcdFxcdC5wcmVkaWN0ZWRcXHQ9ICFlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsXFxuK1xcdFxcdFxcdC5zcGVjXFx0XFx0PSBsYnJfc3BlY19tYXBbaWR4XSxcXG4rXFx0XFx0fTtcXG4gXFx0XFx0b3V0Kys7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xcbmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXFxuKysrIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXFxuQEAgLTc1NiwxMCArNzU2LDEwIEBAIHZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzMyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxcbiBcXG4gXFx0XFx0cmRtc3JxKHg4Nl9wbXUubGJyX2Zyb20gKyBsYnJfaWR4LCBtc3JfbGFzdGJyYW5jaC5sYnIpO1xcbiBcXG4tXFx0XFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKTtcXG4tXFxuLVxcdFxcdGJyLVxcdTAwM2Vmcm9tXFx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tO1xcbi1cXHRcXHRici1cXHUwMDNldG9cXHRcXHQ9IG1zcl9sYXN0YnJhbmNoLnRvO1xcbitcXHRcXHQqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcXG4rXFx0XFx0XFx0LmZyb21cXHQ9IG1zcl9sYXN0YnJhbmNoLmZyb20sXFxuK1xcdFxcdFxcdC50b1xcdD0gbXNyX2xhc3RicmFuY2gudG8sXFxuK1xcdFxcdH07XFxuIFxcdFxcdGJyKys7XFxuIFxcdH1cXG4gXFx0Y3B1Yy1cXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcXG5AQCAtODQ3LDE0ICs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuIFxcdFxcdGlmIChhYm9ydCBcXHUwMDI2XFx1MDAyNiB4ODZfcG11Lmxicl9kb3VibGVfYWJvcnQgXFx1MDAyNlxcdTAwMjYgb3V0IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0b3V0LS07XFxuIFxcbi1cXHRcXHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIrb3V0KTtcXG4tXFx0XFx0YnJbb3V0XS5mcm9tXFx0ID0gZnJvbTtcXG4tXFx0XFx0YnJbb3V0XS50b1xcdCA9IHRvO1xcbi1cXHRcXHRicltvdXRdLm1pc3ByZWRcXHQgPSBtaXM7XFxuLVxcdFxcdGJyW291dF0ucHJlZGljdGVkID0gcHJlZDtcXG4tXFx0XFx0YnJbb3V0XS5pbl90eFxcdCA9IGluX3R4O1xcbi1cXHRcXHRicltvdXRdLmFib3J0XFx0ID0gYWJvcnQ7XFxuLVxcdFxcdGJyW291dF0uY3ljbGVzXFx0ID0gY3ljbGVzO1xcbitcXHRcXHRicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XFxuK1xcdFxcdFxcdC5mcm9tXFx0XFx0PSBmcm9tLFxcbitcXHRcXHRcXHQudG9cXHRcXHQ9IHRvLFxcbitcXHRcXHRcXHQubWlzcHJlZFxcdD0gbWlzLFxcbitcXHRcXHRcXHQucHJlZGljdGVkXFx0PSBwcmVkLFxcbitcXHRcXHRcXHQuaW5fdHhcXHRcXHQ9IGluX3R4LFxcbitcXHRcXHRcXHQuYWJvcnRcXHRcXHQ9IGFib3J0LFxcbitcXHRcXHRcXHQuY3ljbGVzXFx0XFx0PSBjeWNsZXMsXFxuK1xcdFxcdH07XFxuIFxcdFxcdG91dCsrO1xcbiBcXHR9XFxuIFxcdGNwdWMtXFx1MDAzZWxicl9zdGFjay5uciA9IG91dDtcXG5AQCAtOTA1LDYgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXFxuIFxcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZTtcXG4gXFx0c3RydWN0IGxicl9lbnRyeSAqbGJyO1xcbiBcXHR1NjQgZnJvbSwgdG8sIGluZm87XFxuK1xcdGJvb2wgbWlzcHJlZDtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgeDg2X3BtdS5sYnJfbnI7IGkrKykge1xcbkBAIC05MjEsMjQgKzkyMywyNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxcbiBcXHRcXHR0byA9IHJkbGJyX3RvKGksIGxicik7XFxuIFxcdFxcdGluZm8gPSByZGxicl9pbmZvKGksIGxicik7XFxuIFxcbi1cXHRcXHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZSk7XFxuLVxcbi1cXHRcXHRlLVxcdTAwM2Vmcm9tXFx0XFx0PSBmcm9tO1xcbi1cXHRcXHRlLVxcdTAwM2V0b1xcdFxcdD0gdG87XFxuLVxcdFxcdGUtXFx1MDAzZW1pc3ByZWRcXHQ9IGdldF9sYnJfbWlzcHJlZChpbmZvKTtcXG4tXFx0XFx0ZS1cXHUwMDNlcHJlZGljdGVkXFx0PSAhZS1cXHUwMDNlbWlzcHJlZDtcXG4tXFx0XFx0ZS1cXHUwMDNlaW5fdHhcXHQ9ICEhKGluZm8gXFx1MDAyNiBMQlJfSU5GT19JTl9UWCk7XFxuLVxcdFxcdGUtXFx1MDAzZWFib3J0XFx0PSAhIShpbmZvIFxcdTAwMjYgTEJSX0lORk9fQUJPUlQpO1xcbi1cXHRcXHRlLVxcdTAwM2VjeWNsZXNcXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pO1xcbi1cXHRcXHRlLVxcdTAwM2V0eXBlXFx0XFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyk7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YgY3B1Yy1cXHUwMDNlbGJyX2VudHJpZXNbaV0gdG9cXG4tXFx0XFx0ICogdGVtcG9yYXJpbHkgc3RvcmUgdGhlIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi5cXG4tXFx0XFx0ICogVGhlIGxhdGVyIGNvZGUgd2lsbCBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWRcXG4tXFx0XFx0ICogdG8gdGhlIHBlcmYgdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0ZS1cXHUwMDNlcmVzZXJ2ZWRcXHQ9IChpbmZvIFxcdTAwM2VcXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcXHUwMDI2IExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLO1xcbitcXHRcXHRtaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xcbitcXG4rXFx0XFx0KmUgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcXG4rXFx0XFx0XFx0LmZyb21cXHRcXHQ9IGZyb20sXFxuK1xcdFxcdFxcdC50b1xcdFxcdD0gdG8sXFxuK1xcdFxcdFxcdC5taXNwcmVkXFx0PSBtaXNwcmVkLFxcbitcXHRcXHRcXHQucHJlZGljdGVkXFx0PSAhbWlzcHJlZCxcXG4rXFx0XFx0XFx0LmluX3R4XFx0XFx0PSAhIShpbmZvIFxcdTAwMjYgTEJSX0lORk9fSU5fVFgpLFxcbitcXHRcXHRcXHQuYWJvcnRcXHRcXHQ9ICEhKGluZm8gXFx1MDAyNiBMQlJfSU5GT19BQk9SVCksXFxuK1xcdFxcdFxcdC5jeWNsZXNcXHRcXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pLFxcbitcXHRcXHRcXHQudHlwZVxcdFxcdD0gZ2V0X2xicl9icl90eXBlKGluZm8pLFxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2ZcXG4rXFx0XFx0XFx0ICogY3B1Yy1cXHUwMDNlbGJyX2VudHJpZXNbaV0gdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlXFxuK1xcdFxcdFxcdCAqIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4gVGhlIGxhdGVyIGNvZGUgd2lsbFxcbitcXHRcXHRcXHQgKiBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWQgdG8gdGhlIHBlcmZcXG4rXFx0XFx0XFx0ICogdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0LnJlc2VydmVkXFx0PSAoaW5mbyBcXHUwMDNlXFx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQgIExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLLFxcbitcXHRcXHR9O1xcbiBcXHR9XFxuIFxcbiBcXHRjcHVjLVxcdTAwM2VsYnJfc3RhY2subnIgPSBpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXFxuaW5kZXggYmE1NTRlMGM4NDZjNC4uMjU0YmU0ZGE4YWUyOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuY1xcbisrKyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXFxuQEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgYm9vbCBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQoaW50IGluZGV4LCBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRicmJpbmYgPSBicmVncy5icmJpbmY7XFxuLVxcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlbnRyeSk7XFxuK1xcdCplbnRyeSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyB9O1xcbiBcXHRpZiAoYnJiZV9yZWNvcmRfaXNfY29tcGxldGUoYnJiaW5mKSkge1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZnJvbSA9IGJyZWdzLmJyYnNyYztcXG4gXFx0XFx0ZW50cnktXFx1MDAzZXRvID0gYnJlZ3MuYnJidGd0O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXFxuaW5kZXggNDhkODUxZmJkOGVhNS4uMzEwNjgxY2NjYjUwYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXFxuQEAgLTE0NjcsMjMgKzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS5cXG4tICogVGhlIHRvIGFuZCBmcm9tIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgYmVjYXVzZSB0aGV5IGFyZVxcbi0gKiBzeXN0ZW1hdGljYWxseSBtb2RpZmllZCBieSBjYWxsZXIuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqYnIpXFxuLXtcXG4tXFx0YnItXFx1MDAzZW1pc3ByZWRcXHQ9IDA7XFxuLVxcdGJyLVxcdTAwM2VwcmVkaWN0ZWRcXHQ9IDA7XFxuLVxcdGJyLVxcdTAwM2Vpbl90eFxcdD0gMDtcXG4tXFx0YnItXFx1MDAzZWFib3J0XFx0PSAwO1xcbi1cXHRici1cXHUwMDNlY3ljbGVzXFx0PSAwO1xcbi1cXHRici1cXHUwMDNldHlwZVxcdD0gMDtcXG4tXFx0YnItXFx1MDAzZXNwZWNcXHQ9IFBFUkZfQlJfU1BFQ19OQTtcXG4tXFx0YnItXFx1MDAzZXJlc2VydmVkXFx0PSAwO1xcbi19XFxuLVxcbiBleHRlcm4gdm9pZCBwZXJmX291dHB1dF9zYW1wbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbmluZGV4IDQ2Mzg1NDQyMDVmMjguLjM0ZWIwNWU5ZDc0ZDAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbkBAIC0zNzU3LDYgKzM3NTcsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2N0eF9zY2hlZF90YXNrX2NiKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VwbXVfY3R4X2xpc3QsIHBtdV9jdHhfZW50cnkpIHtcXG4gXFx0XFx0Y3BjID0gdGhpc19jcGMocG11X2N0eC1cXHUwMDNlcG11KTtcXG4gXFxuK1xcdFxcdGlmIChjcGMtXFx1MDAzZXRhc2tfZXBjICE9IHBtdV9jdHgpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0aWYgKGNwYy1cXHUwMDNlc2NoZWRfY2JfdXNhZ2UgXFx1MDAyNlxcdTAwMjYgcG11X2N0eC1cXHUwMDNlcG11LVxcdTAwM2VzY2hlZF90YXNrKVxcbiBcXHRcXHRcXHRwbXVfY3R4LVxcdTAwM2VwbXUtXFx1MDAzZXNjaGVkX3Rhc2socG11X2N0eCwgdGFzaywgc2NoZWRfaW4pO1xcbiBcXHR9XFxuQEAgLTM5MDcsNyArMzkxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgcGVyZl9jcHVfcG11X2NvbnRleHQgKmNwYyxcXG4gXFx0cGVyZl9jdHhfbG9jayhjcHVjdHgsIGNwdWN0eC1cXHUwMDNldGFza19jdHgpO1xcbiBcXHRwZXJmX3BtdV9kaXNhYmxlKHBtdSk7XFxuIFxcbi1cXHRwbXUtXFx1MDAzZXNjaGVkX3Rhc2soY3BjLVxcdTAwM2V0YXNrX2VwYywgdGFzaywgc2NoZWRfaW4pO1xcbitcXHRwbXUtXFx1MDAzZXNjaGVkX3Rhc2soXFx1MDAyNmNwYy1cXHUwMDNlZXBjLCB0YXNrLCBzY2hlZF9pbik7XFxuIFxcbiBcXHRwZXJmX3BtdV9lbmFibGUocG11KTtcXG4gXFx0cGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LVxcdTAwM2V0YXNrX2N0eCk7XFxuQEAgLTM5MTcsMTUgKzM5MjAsMTcgQEAgc3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBzY2hlZF9pbilcXG4ge1xcbi1cXHRzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZwZXJmX2NwdV9jb250ZXh0KTtcXG4gXFx0c3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGM7XFxuIFxcbi1cXHQvKiBjcHVjdHgtXFx1MDAzZXRhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovXFxuLVxcdGlmIChwcmV2ID09IG5leHQgfHwgY3B1Y3R4LVxcdTAwM2V0YXNrX2N0eClcXG4rXFx0aWYgKHByZXYgPT0gbmV4dClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cihcXHUwMDI2c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KVxcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFxcdTAwMjZzY2hlZF9jYl9saXN0KSwgc2NoZWRfY2JfZW50cnkpIHtcXG4rXFx0XFx0aWYgKGNwYy1cXHUwMDNldGFza19lcGMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0X19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6MTYuNTYwNDQ0OTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5MzA4MzU2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiLFxuICAgIFwiUEVSRl9FVkVOVFNfQU1EX0JSU1wiLFxuICAgIFwiQ1BVX1NVUF9JTlRFTFwiLFxuICAgIFwiQVJNNjRfQlJCRVwiLFxuICAgIFwiQVJNX1BNVVYzXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYW1kX2Jyc19kcmFpblwiLFxuICAgIFwiYW1kX3BtdV9sYnJfcmVhZFwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzMyXCIsXG4gICAgXCJpbnRlbF9wbXVfbGJyX3JlYWRfNjRcIixcbiAgICBcImludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNcIixcbiAgICBcImJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGJyYW5jaCBlbnRyeSBpbml0aWFsaXphdGlvbiBpbiBwZXJmIGV2ZW50IFBNVSBkcml2ZXJzIChBTUQgQlJTLCBBTUQgTEJSLCBJbnRlbCBMQlIsIEFSTSBCUkJFKSBieSByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgcGVyZiBldmVudHMgc3Vic3lzdGVtIChga2VybmVsL2V2ZW50cy9jb3JlLmNgKSB0byBjaGFuZ2UgaG93IGBzY2hlZF90YXNrYCBjYWxsYmFja3MgYXJlIGludm9rZWQgZm9yIFBNVXMgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBQTVUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCB2aWEgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5ZWU1ZThmYzQ5MTExMDc1NDU2YjhmYTk0Mzg0YTMyMDI0OThjNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowMjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG5pbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuKysrIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuQEAgLTM0MywxMSArMzQzLDEwIEBAIHZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxuIFx0XHRpZiAoIWFtZF9icnNfbWF0Y2hfcGxtKGV2ZW50LCBmcm9tLCB0bykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicitucik7XG4tXG4tXHRcdGJyW25yXS5mcm9tID0gZnJvbTtcbi1cdFx0YnJbbnJdLnRvICAgPSB0bztcbi1cbitcdFx0YnJbbnJdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdD0gZnJvbSxcbitcdFx0XHQudG9cdD0gdG8sXG4rXHRcdH07XG4gXHRcdG5yKys7XG4gXHR9XG4gZW1wdHk6XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbmluZGV4IDlkOWM5NjE5ODlkNTEuLmE1NTY0NmZjYjg0NjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXG5AQCAtMTg0LDEzICsxODQsNiBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICAgIGVudHJ5LnRvLnNwbGl0LnJlc2VydmVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgKyBvdXQpO1xuLVxuLVx0XHRicltvdXRdLmZyb21cdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApO1xuLVx0XHRicltvdXRdLnRvXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCk7XG4tXHRcdGJyW291dF0ubWlzcHJlZFx0PSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3Q7XG4tXHRcdGJyW291dF0ucHJlZGljdGVkID0gIWJyW291dF0ubWlzcHJlZDtcbi1cbiBcdFx0LypcbiBcdFx0ICogU2V0IGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvcm1hdGlvbiB1c2luZyB0aGUgc3RhdHVzIG9mXG4gXHRcdCAqIHRoZSB2YWxpZCBhbmQgc3BlYyBiaXRzLlxuQEAgLTIwOCw3ICsyMDEsMTQgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXG4gXHRcdCAqIHNwZWN1bGF0aXZlIGFuZCB0b29rIHRoZSBjb3JyZWN0IHBhdGhcbiBcdFx0ICovXG4gXHRcdGlkeCA9IChlbnRyeS50by5zcGxpdC52YWxpZCBcdTAwM2NcdTAwM2MgMSkgfCBlbnRyeS50by5zcGxpdC5zcGVjO1xuLVx0XHRicltvdXRdLnNwZWMgPSBsYnJfc3BlY19tYXBbaWR4XTtcbitcbitcdFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuK1x0XHRcdC5mcm9tXHRcdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApLFxuK1x0XHRcdC50b1x0XHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksXG4rXHRcdFx0Lm1pc3ByZWRcdD0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LFxuK1x0XHRcdC5wcmVkaWN0ZWRcdD0gIWVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdCxcbitcdFx0XHQuc3BlY1x0XHQ9IGxicl9zcGVjX21hcFtpZHhdLFxuK1x0XHR9O1xuIFx0XHRvdXQrKztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbisrKyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuQEAgLTc1NiwxMCArNzU2LDEwIEBAIHZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzMyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxuIFxuIFx0XHRyZG1zcnEoeDg2X3BtdS5sYnJfZnJvbSArIGxicl9pZHgsIG1zcl9sYXN0YnJhbmNoLmxicik7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicik7XG4tXG4tXHRcdGJyLVx1MDAzZWZyb21cdD0gbXNyX2xhc3RicmFuY2guZnJvbTtcbi1cdFx0YnItXHUwMDNldG9cdFx0PSBtc3JfbGFzdGJyYW5jaC50bztcbitcdFx0KmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdD0gbXNyX2xhc3RicmFuY2guZnJvbSxcbitcdFx0XHQudG9cdD0gbXNyX2xhc3RicmFuY2gudG8sXG4rXHRcdH07XG4gXHRcdGJyKys7XG4gXHR9XG4gXHRjcHVjLVx1MDAzZWxicl9zdGFjay5uciA9IGk7XG5AQCAtODQ3LDE0ICs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4gXHRcdGlmIChhYm9ydCBcdTAwMjZcdTAwMjYgeDg2X3BtdS5sYnJfZG91YmxlX2Fib3J0IFx1MDAyNlx1MDAyNiBvdXQgXHUwMDNlIDApXG4gXHRcdFx0b3V0LS07XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicitvdXQpO1xuLVx0XHRicltvdXRdLmZyb21cdCA9IGZyb207XG4tXHRcdGJyW291dF0udG9cdCA9IHRvO1xuLVx0XHRicltvdXRdLm1pc3ByZWRcdCA9IG1pcztcbi1cdFx0YnJbb3V0XS5wcmVkaWN0ZWQgPSBwcmVkO1xuLVx0XHRicltvdXRdLmluX3R4XHQgPSBpbl90eDtcbi1cdFx0YnJbb3V0XS5hYm9ydFx0ID0gYWJvcnQ7XG4tXHRcdGJyW291dF0uY3ljbGVzXHQgPSBjeWNsZXM7XG4rXHRcdGJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbitcdFx0XHQuZnJvbVx0XHQ9IGZyb20sXG4rXHRcdFx0LnRvXHRcdD0gdG8sXG4rXHRcdFx0Lm1pc3ByZWRcdD0gbWlzLFxuK1x0XHRcdC5wcmVkaWN0ZWRcdD0gcHJlZCxcbitcdFx0XHQuaW5fdHhcdFx0PSBpbl90eCxcbitcdFx0XHQuYWJvcnRcdFx0PSBhYm9ydCxcbitcdFx0XHQuY3ljbGVzXHRcdD0gY3ljbGVzLFxuK1x0XHR9O1xuIFx0XHRvdXQrKztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gb3V0O1xuQEAgLTkwNSw2ICs5MDYsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuIFx0c3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplO1xuIFx0c3RydWN0IGxicl9lbnRyeSAqbGJyO1xuIFx0dTY0IGZyb20sIHRvLCBpbmZvO1xuK1x0Ym9vbCBtaXNwcmVkO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4ODZfcG11Lmxicl9ucjsgaSsrKSB7XG5AQCAtOTIxLDI0ICs5MjMsMjcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcbiBcdFx0dG8gPSByZGxicl90byhpLCBsYnIpO1xuIFx0XHRpbmZvID0gcmRsYnJfaW5mbyhpLCBsYnIpO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZSk7XG4tXG4tXHRcdGUtXHUwMDNlZnJvbVx0XHQ9IGZyb207XG4tXHRcdGUtXHUwMDNldG9cdFx0PSB0bztcbi1cdFx0ZS1cdTAwM2VtaXNwcmVkXHQ9IGdldF9sYnJfbWlzcHJlZChpbmZvKTtcbi1cdFx0ZS1cdTAwM2VwcmVkaWN0ZWRcdD0gIWUtXHUwMDNlbWlzcHJlZDtcbi1cdFx0ZS1cdTAwM2Vpbl90eFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19JTl9UWCk7XG4tXHRcdGUtXHUwMDNlYWJvcnRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fQUJPUlQpO1xuLVx0XHRlLVx1MDAzZWN5Y2xlc1x0PSBnZXRfbGJyX2N5Y2xlcyhpbmZvKTtcbi1cdFx0ZS1cdTAwM2V0eXBlXHRcdD0gZ2V0X2xicl9icl90eXBlKGluZm8pO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YgY3B1Yy1cdTAwM2VsYnJfZW50cmllc1tpXSB0b1xuLVx0XHQgKiB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLlxuLVx0XHQgKiBUaGUgbGF0ZXIgY29kZSB3aWxsIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZFxuLVx0XHQgKiB0byB0aGUgcGVyZiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuXG4tXHRcdCAqL1xuLVx0XHRlLVx1MDAzZXJlc2VydmVkXHQ9IChpbmZvIFx1MDAzZVx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgXHUwMDI2IExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLO1xuK1x0XHRtaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuK1xuK1x0XHQqZSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuK1x0XHRcdC5mcm9tXHRcdD0gZnJvbSxcbitcdFx0XHQudG9cdFx0PSB0byxcbitcdFx0XHQubWlzcHJlZFx0PSBtaXNwcmVkLFxuK1x0XHRcdC5wcmVkaWN0ZWRcdD0gIW1pc3ByZWQsXG4rXHRcdFx0LmluX3R4XHRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fSU5fVFgpLFxuK1x0XHRcdC5hYm9ydFx0XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0FCT1JUKSxcbitcdFx0XHQuY3ljbGVzXHRcdD0gZ2V0X2xicl9jeWNsZXMoaW5mbyksXG4rXHRcdFx0LnR5cGVcdFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyksXG4rXHRcdFx0LypcbitcdFx0XHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2ZcbitcdFx0XHQgKiBjcHVjLVx1MDAzZWxicl9lbnRyaWVzW2ldIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHRoZVxuK1x0XHRcdCAqIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4gVGhlIGxhdGVyIGNvZGUgd2lsbFxuK1x0XHRcdCAqIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZCB0byB0aGUgcGVyZlxuK1x0XHRcdCAqIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS5cbitcdFx0XHQgKi9cbitcdFx0XHQucmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjZcbitcdFx0XHRcdFx0ICBMQlJfSU5GT19CUl9DTlRSX0ZVTExfTUFTSyxcbitcdFx0fTtcbiBcdH1cbiBcbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXG5pbmRleCBiYTU1NGUwYzg0NmM0Li4yNTRiZTRkYThhZTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbisrKyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXG5AQCAtNjA0LDcgKzYwNCw3IEBAIHN0YXRpYyBib29sIHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldChpbnQgaW5kZXgsIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGJyYmluZiA9IGJyZWdzLmJyYmluZjtcbi1cdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlbnRyeSk7XG4rXHQqZW50cnkgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsgfTtcbiBcdGlmIChicmJlX3JlY29yZF9pc19jb21wbGV0ZShicmJpbmYpKSB7XG4gXHRcdGVudHJ5LVx1MDAzZWZyb20gPSBicmVncy5icmJzcmM7XG4gXHRcdGVudHJ5LVx1MDAzZXRvID0gYnJlZ3MuYnJidGd0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhcbmluZGV4IDQ4ZDg1MWZiZDhlYTUuLjMxMDY4MWNjY2I1MGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhcbkBAIC0xNDY3LDIzICsxNDY3LDYgQEAgc3RhdGljIGlubGluZSB1MzIgcGVyZl9zYW1wbGVfZGF0YV9zaXplKHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuIFx0cmV0dXJuIHNpemU7XG4gfVxuIFxuLS8qXG4tICogQ2xlYXIgYWxsIGJpdGZpZWxkcyBpbiB0aGUgcGVyZl9icmFuY2hfZW50cnkuXG4tICogVGhlIHRvIGFuZCBmcm9tIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgYmVjYXVzZSB0aGV5IGFyZVxuLSAqIHN5c3RlbWF0aWNhbGx5IG1vZGlmaWVkIGJ5IGNhbGxlci5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqYnIpXG4te1xuLVx0YnItXHUwMDNlbWlzcHJlZFx0PSAwO1xuLVx0YnItXHUwMDNlcHJlZGljdGVkXHQ9IDA7XG4tXHRici1cdTAwM2Vpbl90eFx0PSAwO1xuLVx0YnItXHUwMDNlYWJvcnRcdD0gMDtcbi1cdGJyLVx1MDAzZWN5Y2xlc1x0PSAwO1xuLVx0YnItXHUwMDNldHlwZVx0PSAwO1xuLVx0YnItXHUwMDNlc3BlY1x0PSBQRVJGX0JSX1NQRUNfTkE7XG4tXHRici1cdTAwM2VyZXNlcnZlZFx0PSAwO1xuLX1cbi1cbiBleHRlcm4gdm9pZCBwZXJmX291dHB1dF9zYW1wbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhlYWRlcixcbiBcdFx0XHQgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuaW5kZXggNDYzODU0NDIwNWYyOC4uMzRlYjA1ZTlkNzRkMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuQEAgLTM3NTcsNiArMzc1Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2Ioc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCBcdTAwMjZjdHgtXHUwMDNlcG11X2N0eF9saXN0LCBwbXVfY3R4X2VudHJ5KSB7XG4gXHRcdGNwYyA9IHRoaXNfY3BjKHBtdV9jdHgtXHUwMDNlcG11KTtcbiBcbitcdFx0aWYgKGNwYy1cdTAwM2V0YXNrX2VwYyAhPSBwbXVfY3R4KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRpZiAoY3BjLVx1MDAzZXNjaGVkX2NiX3VzYWdlIFx1MDAyNlx1MDAyNiBwbXVfY3R4LVx1MDAzZXBtdS1cdTAwM2VzY2hlZF90YXNrKVxuIFx0XHRcdHBtdV9jdHgtXHUwMDNlcG11LVx1MDAzZXNjaGVkX3Rhc2socG11X2N0eCwgdGFzaywgc2NoZWRfaW4pO1xuIFx0fVxuQEAgLTM5MDcsNyArMzkxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgcGVyZl9jcHVfcG11X2NvbnRleHQgKmNwYyxcbiBcdHBlcmZfY3R4X2xvY2soY3B1Y3R4LCBjcHVjdHgtXHUwMDNldGFza19jdHgpO1xuIFx0cGVyZl9wbXVfZGlzYWJsZShwbXUpO1xuIFxuLVx0cG11LVx1MDAzZXNjaGVkX3Rhc2soY3BjLVx1MDAzZXRhc2tfZXBjLCB0YXNrLCBzY2hlZF9pbik7XG4rXHRwbXUtXHUwMDNlc2NoZWRfdGFzayhcdTAwMjZjcGMtXHUwMDNlZXBjLCB0YXNrLCBzY2hlZF9pbik7XG4gXG4gXHRwZXJmX3BtdV9lbmFibGUocG11KTtcbiBcdHBlcmZfY3R4X3VubG9jayhjcHVjdHgsIGNwdWN0eC1cdTAwM2V0YXNrX2N0eCk7XG5AQCAtMzkxNywxNSArMzkyMCwxNyBAQCBzdGF0aWMgdm9pZCBwZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbiBcdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCxcbiBcdFx0XHRcdGJvb2wgc2NoZWRfaW4pXG4ge1xuLVx0c3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9IHRoaXNfY3B1X3B0cihcdTAwMjZwZXJmX2NwdV9jb250ZXh0KTtcbiBcdHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjO1xuIFxuLVx0LyogY3B1Y3R4LVx1MDAzZXRhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovXG4tXHRpZiAocHJldiA9PSBuZXh0IHx8IGNwdWN0eC1cdTAwM2V0YXNrX2N0eClcbitcdGlmIChwcmV2ID09IG5leHQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3BjLCB0aGlzX2NwdV9wdHIoXHUwMDI2c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KVxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cihcdTAwMjZzY2hlZF9jYl9saXN0KSwgc2NoZWRfY2JfZW50cnkpIHtcbitcdFx0aWYgKGNwYy1cdTAwM2V0YXNrX2VwYylcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0X19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjoxNi41NjA0NDcwNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIyODU0ODM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byB0aGUgUGVyZiBFdmVudHMgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBmaWxlcyByZWxhdGVkIHRvIHRoZSBwZXJmb3JtYW5jZSBldmVudHMgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNgLCBgYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuY2AsIGBhcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNgLCBgZHJpdmVycy9wZXJmL2FybV9icmJlLmNgLCBgaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhgLCBhbmQsIGNyaXRpY2FsbHksIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AuICBUaGUgbW9kaWZpY2F0aW9ucyB0byBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFyZSB3aGF0IGltbWVkaWF0ZWx5IGRyYXcgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGhleSBkZWFsIHdpdGggdGhlIGBwZXJmX2N0eF9zY2hlZF90YXNrX2NiYCBhbmQgYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSBjb3JlIHBpZWNlcyBvZiB0aGUgc2NoZWR1bGluZyBpbnRlZ3JhdGlvbi5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgLiAgTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjayB3aXRoaW4gdGhlIGBwZXJmX2N0eF9zY2hlZF90YXNrX2NiYCBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgdGhlIFBNVSBjb250ZXh0cyBiYXNlZCBvbiBgY3BjLVx1MDAzZXRhc2tfZXBjYC4gIEZ1cnRoZXJtb3JlLCB0aGUgY2FsbCB0byBgcG11LVx1MDAzZXNjaGVkX3Rhc2tgIGluIGBfX3BlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGNoYW5nZWQgdG8gcGFzcyB0aGUgYGVwY2AgZmllbGQsIG5vdCB0aGUgYHRhc2tfZXBjYC4gRmluYWxseSwgSSBzZWUgdGhlIGxvb3AgaW4gYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGNoYW5nZWQgdG8gY2hlY2sgaWYgYGNwYy1cdTAwM2V0YXNrX2VwY2AgaXMgc2V0LlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgc2NoZWR1bGluZyBjYWxsYmFjayBtZWNoYW5pc20uIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBtb3N0bHkgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gIFRoYXQncyBnZW5lcmFsbHkgYSBjbGVhbnVwLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVwbGFjZW1lbnQgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBob3cgcmVhY2hhYmxlIHRoaXMgaXMuICBgcGVyZl9wbXVfc2NoZWRfdGFza2AgaXMgY2FsbGVkIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzIGlmIHRoZXJlIGFyZSBQTVVzIHdpdGggYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcy4gIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIHNvbWV0aGluZyBsaWtlIGBzeXprYWxsZXJgLCB1c2luZyB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgc3lzY2FsbC4gVGhhdCBtYWtlcyBtZSBmZWVsIGJldHRlciwgYXMgSSBjYW4gd3JpdGUgYSB0ZXN0IGNhc2UgZm9yIHRoaXMuXG5cblNvLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgLCBgX19wZXJmX3BtdV9zY2hlZF90YXNrYCwgYW5kIGBwZXJmX3BtdV9zY2hlZF90YXNrYC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSBjYWxscyBhcmUgZ29pbmcgdG8gb3BlcmF0ZSBub3cuIFdhaXQgYSBtaW51dGUsIEkganVzdCByZWFsaXplZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLi4uIFRoYXQncyBhIGxpdHRsZSBsZXNzIGNvbnZlbmllbnQgZm9yIGRpcmVjdGx5IGZ1enppbmcgdGhlbS4gTGV0J3MgbG9vayBhZ2FpbiBhdCB0aGUgY29kZSB0byBzZWUgd2hlcmUgYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGFjdHVhbGx5IGNhbGxlZC4gIElzIGl0IGluIGBwZXJmX2V2ZW50X3N3aXRjaGA/IE5vLiBJcyBpdCBpbiBgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luYCBvciBgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGA/IE5vLCB3YWl0LiBJIHNob3VsZCBqdXN0IGdyZXAgZm9yIGNhbGxzIHRvIGBwZXJmX3BtdV9zY2hlZF90YXNrYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjI4Ljc4ODk5OTU0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTUwOTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX3BtdV9zY2hlZF90YXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTM4Nzk9dm9pZCBwZXJmX3NjaGVkX2NiX2luYyhzdHJ1Y3QgcG11ICpwbXUpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODk3LSAqL1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM4OTg6c3RhdGljIHZvaWQgX19wZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjLFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4OTktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGJvb2wgc2NoZWRfaW4pXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTE4LVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5MTk6c3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzkyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTMxLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5MzI6XFx0XFx0X19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5MzMtXFx0fVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzk1MD12b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTUzLVxcdGlmIChfX3RoaXNfY3B1X3JlYWQocGVyZl9zY2hlZF9jYl91c2FnZXMpKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5NTQ6XFx0XFx0cGVyZl9wbXVfc2NoZWRfdGFzayh0YXNrLCBuZXh0LCBmYWxzZSk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk1NS1cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTQzMjI9dm9pZCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MzMwLVxcdGlmIChfX3RoaXNfY3B1X3JlYWQocGVyZl9zY2hlZF9jYl91c2FnZXMpKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjQzMzE6XFx0XFx0cGVyZl9wbXVfc2NoZWRfdGFzayhwcmV2LCB0YXNrLCB0cnVlKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MzMyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6MjguODgwNTE1NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQwNTYyNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBQZXJmb3JtYW5jZSBFdmVudCBTY2hlZHVsZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgcGVyZm9ybWFuY2UgZXZlbnQgc3lzdGVtIGhhbmRsZXMgdGFzayBzY2hlZHVsaW5nLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgYXJlIHRoZSBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYHBlcmZfcG11X3NjaGVkX3Rhc2tgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlIHRoZSB0YXNrIHNjaGVkdWxpbmcgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdHMgb24gcGVyZm9ybWFuY2UgZXZlbnQgY29sbGVjdGlvbi4gR2l2ZW4gdGhhdCwgSSB3YW50IHRvIGRyaWxsIGRvd24gZnVydGhlciBpbnRvIGhvdyB0aGF0IHNjaGVkdWxlciBpbnRlcmFjdHMgd2l0aCBwZXJmb3JtYW5jZSBldmVudCBjb250ZXh0cywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcGVyZl9jdHhfc2NoZWRfdGFza19jYmAgaXMuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGNhbGxiYWNrIHRvIHJldmlldyBuZXh0LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUE1VIGlzIGJlaW5nIG5vdGlmaWVkIG9mIHRhc2sgc2NoZWR1bGluZyBldmVudHMgYW5kIGhvdyB0aGUgY29udGV4dHMgYXJlIGJlaW5nIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjozNS44MjEwODA0NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0Njk4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9jdHhfc2NoZWRfdGFza19jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZXZlbnRzL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZXZlbnRzL2NvcmUuYz0zNzI1PXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3luY19zdGF0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM3NTAtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzc1MTpzdGF0aWMgdm9pZCBwZXJmX2N0eF9zY2hlZF90YXNrX2NiKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zNzUyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgYm9vbCBzY2hlZF9pbilcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTM3Njk9cGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4MjYtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MzgyNzpcXHRcXHRcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGN0eCwgdGFzaywgZmFsc2UpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4MjgtXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODU1LWluc2lkZV9zd2l0Y2g6XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzg1NjpcXHRcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGN0eCwgdGFzaywgZmFsc2UpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4NTctXFx0XFx0dGFza19jdHhfc2NoZWRfb3V0KGN0eCwgTlVMTCwgRVZFTlRfQUxMKTtcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTQyNTM9c3RhdGljIHZvaWQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyNjYtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI2NzpcXHRcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGN0eCwgdGFzaywgdHJ1ZSk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtNDI2OC1cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyOTctXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI5ODpcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGNwdWN0eC1cXHUwMDNldGFza19jdHgsIHRhc2ssIHRydWUpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjM1Ljg4NDU1NjUxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTUyNjQ5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIENvbnRleHQgU3dpdGNoZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dGAgYW5kIGBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW5gIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgY29udGV4dC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGUgZGVzaWduIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQ6IGFyZSB0aGV5IGludGVuZGVkIHRvIGJlIGV4cG9zZWQgb3V0c2lkZSB0aGVpciBjb21waWxhdGlvbiB1bml0LCBvciBhcmUgdGhleSBtZWFudCB0byBiZSBpbnRlcm5hbCBoZWxwZXJzPyBMZXQgbWUgdmVyaWZ5IHRoaXM7IGEgcXVpY2sgY29kZSByZXZpZXcgaXMgaW4gb3JkZXIuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZWlyIGxpbmthZ2UgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgb3IgZXh0ZXJuYWwgY2FsbCBzaXRlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBtYWludGFpbmFiaWxpdHksIHBvdGVudGlhbCBmb3IgbWlzdXNlLCBhbmQgcG90ZW50aWFsbHkgbW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjM5LjU5OTgyNDUyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc5MjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTMyNz1zdGF0aWMgdm9pZCBldmVudF9mdW5jdGlvbl9jYWxsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgZXZlbnRfZiBmdW5jLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzYzLVxcdCAqIFJlbG9hZCB0aGUgdGFzayBwb2ludGVyLCBpdCBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBieVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM2NDpcXHQgKiBhIGNvbmN1cnJlbnQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dCgpLlxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM2NS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTM3Njg9c3RhdGljIHZvaWRcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozNzY5OnBlcmZfZXZlbnRfY29udGV4dF9zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzc3MC17XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0zOTUwPXZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5NTgtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzk1OTpcXHRwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHRhc2ssIG5leHQpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5NjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjM5LjY4MjYyMDc2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM5NDI4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBlcmZvcm1hbmNlIEV2ZW50IEZ1bmN0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgc3RhbmQgb3V0IGFzIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2UgbmFtZXMgYXJlIGtleS4gTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYW5kIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aG9zZSBmaWxlcywgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGggc2NoZWR1bGluZyBvciB0YXNrIGNvbnRleHQgc3dpdGNoZXMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcyB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3MgaW4gcmVsYXRpb24gdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6NDMuOTI2NTY3MTk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3NTI5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX2Jyc19kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM9MjYyPXN0YXRpYyBib29sIGFtZF9icnNfbWF0Y2hfcGxtKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IGZyb20sIHU2NCB0bylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMtMjgwLSAqL1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MjgxOnZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMtMjgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6NDQuMTcyMzI0NTIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTMzMzE0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYW1kX2Jyc19kcmFpbmAgYW5kIGl0cyBOb24tU3RhdGljIE5hdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbWRfYnJzX2RyYWluYCwgYW5kIGltbWVkaWF0ZWx5LCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogc3RhdGljIGp1bXBzIG91dCBhdCBtZS4gVGhpcyBpbXBsaWVzIGl0IGxpa2VseSBob2xkcyBzdGF0ZSwgd2hpY2ggbWVhbnMgaXRzIGJlaGF2aW9yIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIGZhY3RvcnMgYmV5b25kIGp1c3QgaXRzIGRpcmVjdCBpbnB1dCBwYXJhbWV0ZXJzLiBJdCdzIG5vdCBhIHB1cmUgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5IGltcGxpY2F0aW9uIGhlcmUuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHJlZ2lzdGVyIHJlYWQgdGhhdCdzIHVwZGF0ZWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyBhIGdsb2JhbCBmbGFnLiBcblxuVGhpbmtpbmcgYWJvdXQgdGhpcyBmcm9tIGEgZGVidWdnaW5nIGFuZCBhbmFseXNpcyBzdGFuZHBvaW50LCB0aGlzIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIEkgY2FuJ3QganVzdCBsb29rIGF0IGEgY2FsbCB0byBgYW1kX2Jyc19kcmFpbmAgaW4gaXNvbGF0aW9uIGFuZCBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdW5kZXJzdGFuZCBob3cgaXRzIGludGVybmFsIHN0YXRlIGlzIG1vZGlmaWVkLiBUaGlzIGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5OyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIEl0IGFsc28gbWVhbnMgdGhlIGZ1bmN0aW9uIGNhbGwgaGFzIHNpZGUgZWZmZWN0cy5cbkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIGhvdyBpdHMgbm9uLXN0YXRpYyBjaGFyYWN0ZXJpc3RpY3MgaW1wYWN0IGFueSBzeXN0ZW0gcnVubmluZyBvbiB0aGUgbWFjaGluZS4gVGhpcyBtYXkgcmVxdWlyZSB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgdGhyZWFkcyBhbmQgaG93IHRoZXkgYXJlIGltcGFjdGluZyB0aGlzIGZ1bmN0aW9uLlxuVGhpcyBpcyBub3QgYSBzaW1wbGUgZnVuY3Rpb247IEkgbmVlZCB0byBhcHByb2FjaCB0aGlzIHdpdGggY2F1dGlvbiBhbmQgZW5zdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGFsbCBvZiB0aGUgdXNlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjAxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6NDguOTg1NjU4MzAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwMjYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX3BtdV9sYnJfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy0xNjMtXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNjQ6dm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy0xNjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjo0OS4xNzk2ODk5MjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2Mjc0MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk5vbi1TdGF0aWMgYGFtZF9wbXVfbGJyX3JlYWRgIC0gSW1wbGljYXRpb25zIGFuZCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBhbWRfcG11X2xicl9yZWFkYCBpcyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0IGF3YXksIHRoaXMgc3BhcmtzIGEgZmV3IHRob3VnaHRzLiBBcyBhbiBleHBlcnQgaW4gcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBhbmQgbG93LWxldmVsIHN5c3RlbSBkZXNpZ24sIEkgbmVlZCB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFRoZSBhYnNlbmNlIG9mIHRoZSBgc3RhdGljYCBrZXl3b3JkIG1lYW5zIHRoaXMgZnVuY3Rpb24gaGFzIGV4dGVybmFsIGxpbmthZ2UuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQncyBsaWtlbHkgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBwb3RlbnRpYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB1c2VyLXNwYWNlICh0aG91Z2ggdGhhdCdzIGxlc3MgY29tbW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCkuXG5cblRoaXMgcmFpc2VzIHF1ZXN0aW9uczpcblxuKiAgICoqSW50ZW5kZWQgdXNlOioqIElzIGl0IGRlc2lnbmVkIGZvciBwdWJsaWMgY29uc3VtcHRpb24gd2l0aGluIHRoZSBBTUQgUE1VIGRyaXZlciwgb3IgaXMgaXQgYSBtb3JlIGdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IG90aGVyIGRyaXZlcnMgb3IgY29kZSBwYXRocyBtaWdodCBuZWVkPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2FnZSBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSByaXNrL3Jld2FyZCBvZiBhbnkgbW9kaWZpY2F0aW9uIG9yIGludGVyYWN0aW9uIHdpdGggdGhpcyBmdW5jdGlvbi5cbiogICAqKkFCSSBzdGFiaWxpdHk6KiogU2luY2UgaXQncyBleHRlcm5hbGx5IGxpbmtlZCwgaXRzIHNpZ25hdHVyZSBiZWNvbWVzIHBhcnQgb2YgdGhlIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgZm9yIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24gKG9yIHBvdGVudGlhbGx5IGJleW9uZCwgaWYgaXQncyBjb25zaWRlcmVkIHBhcnQgb2YgYSBzdGFibGUgaW50ZXJmYWNlKS4gQW55IGNoYW5nZXMgdG8gaXRzIHBhcmFtZXRlcnMsIHJldHVybiB0eXBlLCBvciBldmVuIGl0cyBpbnRlcm5hbCBiZWhhdmlvciBjYW4gaGF2ZSBzaWduaWZpY2FudCByZXBlcmN1c3Npb25zLiBXZSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYW55IHByb3Bvc2VkIGNoYW5nZXMgdmVyeSBjYXJlZnVsbHkgdG8gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBkb2N1bWVudCBhbnkgYnJlYWtpbmcgY2hhbmdlcyBtZXRpY3Vsb3VzbHkuXG4qICAgKipQb3RlbnRpYWwgZm9yIG1pc3VzZToqKiBXaXRoIGV4dGVybmFsIGxpbmthZ2UsIGl0J3Mgb3BlbiB0byBiZWluZyBjYWxsZWQgYnkgcG90ZW50aWFsbHkgZXJyYW50IGNvZGUgb3IgYnkgY29kZSB0aGF0IGRvZXNuJ3QgZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZS4gUm9idXN0IGVycm9yIGhhbmRsaW5nIGFuZCBpbnB1dCB2YWxpZGF0aW9uIHdpbGwgYmUgY3J1Y2lhbCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiB0byBwcmV2ZW50IGNyYXNoZXMgb3IgaW5jb3JyZWN0IHJlc3VsdHMuIFdlJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaGFuZGxlcyB1bmV4cGVjdGVkIGlucHV0cyBvciBlZGdlIGNhc2VzLlxuKiAgICoqTWFpbnRhaW5hYmlsaXR5OioqICBUaGUgZnVuY3Rpb24ncyB1c2UgaW4gZXh0ZXJuYWwgbW9kdWxlcyBjYW4gY29tcGxpY2F0ZSB0aGUgY29kZSBtYWludGVuYW5jZSBwcm9jZXNzLiBXZSBtdXN0IHRyYWNlIGRvd24gdGhlIHVzYWdlcyBpZiBhbnkgY2hhbmdlcyBhcmUgcHJvcG9zZWQgYW5kIGNvbnNpZGVyIHRoZSBpbXBhY3Qgb2YgdGhvc2UgY2hhbmdlcy5cbiogICAqKlRlc3RpbmcgQ292ZXJhZ2U6KiogVGhvcm91Z2ggdGVzdGluZyBpcyBjcnVjaWFsLiBOb3Qgb25seSBkbyB3ZSBuZWVkIHRvIHRlc3QgdGhlIGZ1bmN0aW9uIGl0c2VsZiB3aXRoIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cywgYnV0IGFsc28gdGVzdCBzY2VuYXJpb3Mgd2hlcmUgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gaXRzIFwicHVibGljXCIgaW50ZXJmYWNlcy4gUmVncmVzc2lvbiB0ZXN0aW5nIGFsc28gYmVjb21lcyBlc3BlY2lhbGx5IGltcG9ydGFudCBoZXJlIHRvIG1haW50YWluIGl0cyBiZWhhdmlvci5cblxuSW4gc3VtbWFyeSwgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBhbWRfcG11X2xicl9yZWFkYCBtZWFucyB3ZSBuZWVkIHRvIGFwcHJvYWNoIGl0IHdpdGggYSBsZXZlbCBvZiBjYXJlIGFwcHJvcHJpYXRlIGZvciBhbnkgZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uLiBXZSBuZWVkIHRvIGJlIGVzcGVjaWFsbHkgY29nbml6YW50IG9mIGl0cyBwb3RlbnRpYWwgdXNlIHdpdGhpbiBhIHdpZGVyIHNjb3BlLCBpdHMgcG9zc2libGUgaW1wYWN0IG9uIHRoZSBrZXJuZWwgQUJJLCBhbmQgdGhlIGltcG9ydGFuY2Ugb2Ygc29saWQgZXJyb3IgaGFuZGxpbmcgYW5kIHRob3JvdWdoIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NzIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjo1NC40NDI0MzM4NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjA1MjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfbGJyX3JlYWRfMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYz03Mjg9dm9pZCBpbnRlbF9wbXVfbGJyX2Rpc2FibGVfYWxsKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzM5LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzo3NDA6dm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTc0MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjU0LjY3ODQ5MDQxMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTYwMzc1NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgTEJSIFJlYWRpbmcgRnVuY3Rpb25zIGluIHRoZSBDb250ZXh0IG9mIGEgS2VybmVsIFBNVS4qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgIGZ1bmN0aW9ucy4gVGhlIGtleSB0aGluZyB0aGF0IHN0YW5kcyBvdXQgaXMgdGhhdCB0aGV5IGFyZW4ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGluIG15IG1pbmQsIGNvbmNlcm5pbmcgc2NvcGUsIGxpbmthZ2UsIGFuZCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuIEdpdmVuIHRoZXkncmUgZXhwb3NlZCBsaWtlIHRoaXMsIGFyZSB0aGVyZSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBwb3RlbnRpYWxseSBvdXRzaWRlIHRoZSBJbnRlbCBQTVUgZHJpdmVyIGl0c2VsZiwgdGhhdCBhcmUgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHk/IEFuZCBpZiBzbywgaXMgdGhpcyB0aGUgbW9zdCByb2J1c3QgZGVzaWduPyBXZSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiBjcml0aWNhbCBwYXRoLCBzbyBhbnkgb3B0aW1pemF0aW9ucyBhdCB0aGUgc29mdHdhcmUgbGV2ZWwgY291bGQgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5UaGlzIHRoZW4gbWFrZXMgbWUganVtcCB0byBgZHJpdmVycy9wZXJmL2FybV9icmJlLmNgLiBUaGlzIG1ha2VzIG1lIHF1ZXN0aW9uIHdoZXRoZXIgdGhlcmUncyBzb21lIGNvbW1vbmFsaXR5IG9yIGEgbWlzc2VkIG9wcG9ydHVuaXR5IGZvciByZXVzZSBoZXJlLiBPciBwZXJoYXBzIGEgZGlmZmVyZW5jZSBpbiB0aGVpciBmdW5jdGlvbnM/IEknbSBjdXJpb3VzIHdoZXRoZXIgdGhlIEFSTSBpbXBsZW1lbnRhdGlvbiwgb3IgYW55IG90aGVycywgaGFuZGxlcyBMQlIgKExhc3QgQnJhbmNoIFJlY29yZCkgcmVhZGluZyBpbiBhIHNpbWlsYXIgd2F5LCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIHBvcnRhYmlsaXR5IGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBBcmUgdGhlcmUgYW55IGxlc3NvbnMgbGVhcm5lZCwgYmVzdCBwcmFjdGljZXMsIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhlcmUgdGhhdCBJIGNhbiBsZXZlcmFnZSBvciBhdm9pZD8gSSBuZWVkIHRvIHF1aWNrbHkgY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIExCUiBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIGFyY2hpdGVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MDAuMjM4ODY5MzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzczOTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NTc4PXN0YXRpYyBpbnQgYnJiaW5mX2dldF9wZXJmX3ByaXYodTY0IGJyYmluZilcXG4tLVxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTU5Ni1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYzo1OTc6c3RhdGljIGJvb2wgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGludCBpbmRleCwgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplbnRyeSxcXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy01OTgtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NzcyPXZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy03OTItXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM6NzkzOlxcdFxcdFxcdGlmICghcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGksIHBiZSwgZXZlbnQpKVxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc5NC1cXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjAwLjMxMjYyOTQ1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTcyMDE0MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldGAgYW5kIGl0cyBSb2xlKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0YCBmdW5jdGlvbi4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgaW50ZXJuYWwgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEZpbmUsIHRoYXQncyBleHBlY3RlZC4gTW9yZSBpbXBvcnRhbnRseSwgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uLiBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgIGlzIGxpa2VseSBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcgYW5kIHByb2Nlc3NpbmcgZGF0YSBmcm9tLCBwcmVzdW1hYmx5LCBhIEJyYW5jaCBSZWNvcmQgQnVmZmVyIEVudHJ5IChCUkJFKSBvciBzaW1pbGFyIGhhcmR3YXJlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJmYWNlLiBTbywgdGhpcyBgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0YCBmdW5jdGlvbiBpcyB0aGUgd29ya2hvcnNlLiBJdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRha2luZyByYXcgcmVnaXN0ZXIgc2V0IGRhdGEgcmVsYXRlZCB0byBhIEJSQkUgZW50cnkgYW5kIHRyYW5zZm9ybWluZyBpdCBpbnRvIHNvbWUgdXNlZnVsIGBwZXJmX2VudHJ5YCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRyYW5zZm9ybWF0aW9uIGFjdHVhbGx5IGVudGFpbHMg4oCTIGhvdyBkb2VzIGl0IGludGVycHJldCB0aGUgcmF3IGhhcmR3YXJlIGRhdGEgYW5kIHdoYXQga2luZCBvZiBgcGVyZl9lbnRyeWAgc3RydWN0dXJlIGlzIGl0IHBvcHVsYXRpbmc/IFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwZXJmb3JtYW5jZSBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgb3JnYW5pemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjA1LjQ4NDY0NTk5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwMzk3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NzY0PXN0YXRpYyBib29sIGZpbHRlcl9icmFuY2hfcmVjb3JkKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50cnksXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy03NzEtXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM6NzcyOnZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzczLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MDUuNTY5NjkxMDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NjA0MDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgIGlzbid0IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBMZXQncyBzdGFydCB3aXRoIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIHNldC5cblxuU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgdGhlIGZpbGVzIHJlbGF0ZWQgdG8gQnJhbmNoIFJlY29yZCBCdWZmZXJzIChCUkJzKSBhbmQgTGFzdCBCcmFuY2ggUmVjb3JkcyAoTEJScykgZm9yIEFNRCBhbmQgSW50ZWwgcHJvY2Vzc29ycy4gTG9va2luZyBhdCBgYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY2AsIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jYCwgYW5kIGBhcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNgLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhleSBzaG91bGQgYmUgYnVpbHQgd2hlbiBgQ09ORklHX1BFUkZfRVZFTlRTYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIG1vc3Qgc2l0dWF0aW9ucy4gQnV0IEkgY2FuJ3QganVzdCBhc3N1bWUuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MsIGFuZCBJJ2xsIGZvY3VzIG9uIGBhcmNoL3g4Ni9ldmVudHMvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGludGVncmF0ZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmaWxlcyBhcmUgYmVpbmcgY29tcGlsZWQgY29ycmVjdGx5IHdpdGggYENPTkZJR19QRVJGX0VWRU5UU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjEwLjY0NTczNTQ1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NzY4MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJycy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MTAuNjk5MjIyMDc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk1OTU2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBTUQgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEFNRC1zcGVjaWZpYyBldmVudCBoYW5kbGluZyBpcyBzdHJ1Y3R1cmVkLiBXaGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IGZvciB0aGUgY29yZSBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gKnllcyosIHRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbS4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgb3ZlcmFsbCBvcmdhbml6YXRpb24uIExldCdzIHB1bGwgdXAgYW5kIGFuYWx5emUgdGhlIGBhcmNoL3g4Ni9ldmVudHMvYW1kL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MTMuODM4ODIxMzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDMyOTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpXFx0XFx0Kz0gY29yZS5vIGxici5vXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19QRVJGX0VWRU5UU19BTURfQlJTKVxcdCs9IGJycy5vXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9NYWtlZmlsZS00LW9iai0kKENPTkZJR19QRVJGX0VWRU5UU19BTURfUE9XRVIpXFx0Kz0gcG93ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoxMy45MTkxNTU2NzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NDIxMjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFBlcmZvcm1hbmNlIEV2ZW50IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBlcmZvcm1hbmNlIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfUEVSRl9FVkVOVFNfQU1EX0JSU2AgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBnZXQgdGhlIGZlZWxpbmcgSSdtIGxvb2tpbmcgYXQgQU1EJ3MgYnJhbmNoIHJlY29yZCBzdG9yZSBmZWF0dXJlIGhlcmUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgY2VydGFpbiBwZXJmb3JtYW5jZSBhbmFseXNlcyBvbiB0aGVpciBwcm9jZXNzb3JzLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHNldC5cblxuTm93LCBteSBtaW5kIHNoaWZ0cy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIEFSTSBzaWRlIG9mIHRoaW5ncy4gSSB3b25kZXIsIHdoYXQgYXJlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHNpdHVhdGlvbj8gU3BlY2lmaWNhbGx5LCBsZXQncyBhbHNvIGxvb2sgYXQgYGRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jYC4gSXQgaXMgbGlrZWx5IGEgcmVsZXZhbnQgZmlsZSB0byB0aGUgY3VycmVudCBjb250ZXh0LCBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIGJyYW5jaCByZWNvcmQgYnVmZmVyIGVtdWxhdGlvbiBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhhdCwgdG9vLCBhcyB0aGlzIGlzIGFsc28gcHJvYmFibHkgcmVsZXZhbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgYWxsIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoxNy4zNjMzNzAyOTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzQxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFybV9icmJlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wZXJmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfQVJNX1NQRV9QTVUpICs9IGFybV9zcGVfcG11Lm9cXG5kcml2ZXJzL3BlcmYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0FSTTY0X0JSQkUpICs9IGFybV9icmJlLm9cXG5kcml2ZXJzL3BlcmYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0FSTV9ETUM2MjBfUE1VKSArPSBhcm1fZG1jNjIwX3BtdS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjE3LjQ2MjExNjM5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk3OTI3NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGlzIOKAkyBhIGJpdCBvZiBhIHN0cmVhbSBvZiBjb25zY2lvdXNuZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqQ29uc2lkZXJpbmcgYENPTkZJR19BUk02NF9CUkJFYCBhbmQgSW50ZWwncyBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBgQ09ORklHX0FSTTY0X0JSQkVgIGZsYWcsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGJyYW5jaCByZWNvcmQgYnVmZmVyIGV4dGVuc2lvbiBmb3IgQVJNNjQuIEl0IGxvb2tzIGltcG9ydGFudCwgYW5kIEkgbmVlZCB0byBub3RlIHRoYXQuIEJ1dCBJIGFsc28gbmVlZCB0byBjaGVjayBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvZGUuXG5cblRoZW4gbXkgbWluZCBkcmlmdHMgdG8gdGhlIHg4NiBzaWRlIOKAkyBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9NYWtlZmlsZWAuIEknbSBjdXJpb3VzLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgc29tZSBwb3RlbnRpYWwgaW50ZXJwbGF5IG9yIGFuYWxvZ291cyBmdW5jdGlvbmFsaXR5LiBBcmUgdGhleSBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgZmVhdHVyZSBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcz8gSG93IGRvZXMgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbiByZWxhdGUgdG8gdGhpcyBuZXcgQVJNNjQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBjb21tb24gaGVhZGVyIGZpbGVzLCBzaGFyZWQgY29kZSBtb2R1bGVzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBhbmFseXplIGJvdGggc2VjdGlvbnMgdG9nZXRoZXIuIEl0J3MgcHJvYmFibHkgd29ydGggY3Jvc3MtcmVmZXJlbmNpbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHdoZXJlIGEgc2hhcmVkIGltcGxlbWVudGF0aW9uIHN0cmF0ZWd5IG1pZ2h0IGJlIGFwcGxpY2FibGUuIFBlcmhhcHMgdGhlIEludGVsIE1ha2VmaWxlIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBmb3IgZmluZGluZyBzb21lIHVzZWZ1bCByZWZlcmVuY2VzLiBJIHNob3VsZCBleHBsb3JlIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjIxLjM2MDA0Njc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg1NDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYnIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0NQVV9TVVBfSU5URUwpXFx0XFx0Kz0gZHMubyBrbmMub1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19DUFVfU1VQX0lOVEVMKVxcdFxcdCs9IGxici5vIHA0Lm8gcDYubyBwdC5vXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRSlcXHQrPSBpbnRlbC11bmNvcmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoyMS40NTg5MDg1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ0NzI0ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gY29uZmlndXJlIHRoaW5ncyBmb3IgdGhpcyBmdXp6aW5nIHJ1bi4gSSBzZWUgd2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQ1BVX1NVUF9JTlRFTGAgYW5kIGBDT05GSUdfQ1BVX1NVUF9BTURgLiBUaGF0IHNlZW1zIG9idmlvdXMgZW5vdWdoLiBOb3csIEknbSBjaGVja2luZyBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFuZCByZW1lbWJlciBpdCdzIGJ1aWx0IGNvbmRpdGlvbmFsbHkgb24gYENPTkZJR19QRVJGX0VWRU5UU2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgdGFrZSBzdG9jayBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBoYXZlIGluIG1pbmQ6IGBQRVJGX0VWRU5UU19BTURfQlJTYCwgYEFSTTY0X0JSQkVgLCBgQ1BVX1NVUF9JTlRFTGAsIGBDUFVfU1VQX0FNRGAsIGFuZCBgUEVSRl9FVkVOVFNgLlxuXG5Ib2xkIG9uLi4uIEknbSBub3RpY2luZyBzb21ldGhpbmcgaGVyZS4gYEFSTTY0X0JSQkVgIGlzIG9idmlvdXNseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gQVJNNjQsIGJ1dCBgQ1BVX1NVUF9JTlRFTGAgYW5kIGBDUFVfU1VQX0FNRGAgYXJlLCBvZiBjb3Vyc2UsIHg4Ni1zcGVjaWZpYy4gR2l2ZW4gdGhhdCB3ZSdyZSBmdXp6aW5nLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBhbGwgb2YgdGhlbS4gVGhlIGZ1enplciB3aWxsIGR5bmFtaWNhbGx5IGVuYWJsZSB0aGUgb25lcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBpdCdzIHJ1bm5pbmcgb24sIHNvIHdlIHNob3VsZCBiZSBva2F5LiBUaGlzIHdheSwgd2UgbWF4aW1pemUgdGhlIGZlYXR1cmVzIGV4cG9zZWQuXG5cbk9rYXksIGxldCdzIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgUEVSRl9FVkVOVFNfQU1EX0JSU2AgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDY2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjI3LjEwMzYzODE5M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzOTY0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUkZfRVZFTlRTX0FNRF9CUlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mzc9Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoyNy4xNzYwMzk2ODZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNDgwMDA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUgTWF6ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgaGVhdmlseSByZWxpYW50IG9uIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCB3ZSBuZWVkIHRvIGtub3cgd2hhdCBjYXBhYmlsaXRpZXMgYXJlIHN1cHBvcnRlZC5cIiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aG9zZSBmbGFncywgKlBFUkZfRVZFTlRTKiBhbmQgKkNQVV9TVVBfQU1EKiwgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGNyaXRpY2FsIGZvciBldmVuIGJlZ2lubmluZyB0byByZWFzb24gYWJvdXQgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kIGhhcmR3YXJlIGV2ZW50cy4gVGhvc2UgbGlrZWx5IHNldCB0aGUgZ3JvdW5kIHJ1bGVzIGZvciB3aGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIGFuZCB0cmFjaW5nIHdlIGNhbiBldmVuICp0aGluayogYWJvdXQuIFdlJ2xsIGJlIHByZXR0eSBzdHVjayB3aXRob3V0IHRoZW0uXG5cbkJ1dCBub3csIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmV4dCBwb3RlbnRpYWwgYXZlbnVlLCBzbyBteSBtaW5kIGp1bXBzIHRvICpBUk02NF9CUkJFKiDigJMgYnJhbmNoIHJlY29yZCBidWZmZXIgZXZlbnRzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN1cHBvcnQgZm9yIGJyYW5jaCB0cmFjZSBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHdoZXRoZXIgdGhhdCdzIHN1cHBvcnRlZCBpcyBhYnNvbHV0ZWx5IHBpdm90YWwgZm9yIGluLWRlcHRoIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBJZiB0aG9zZSAqQlJCRSogZXZlbnRzIGFyZSBhY2Nlc3NpYmxlLCB0aGF0IGNoYW5nZXMgdGhlIGdhbWUgZW50aXJlbHkuIEkgY2FuIGRyaWxsIGludG8gYnJhbmNoIG1pc3ByZWRpY3Rpb25zIGFuZCByZWFsbHkgdW5kZXJzdGFuZCBjb250cm9sIGZsb3cgYm90dGxlbmVja3MuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSAqQVJNNjRfQlJCRSogYW5kIGlmIHRob3NlIGFyZSBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MzAuODkwODQxNzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjE2MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUk02NF9CUkJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGVyZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzNC1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzU6Y29uZmlnIEFSTTY0X0JSQkVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGJyYW5jaCBzdGFjayBzYW1wbGluZyB1c2luZyBGRUFUX0JSQkVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjMwLjk4MDA2NTUwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIwMjczMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeTogQVJNNjQqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgbGVhbnMgaGVhdmlseSB0b3dhcmRzIHRoZSBzaWduaWZpY2FuY2Ugb2YgYEFSTTY0YC4gSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIGlmIHRoZSB1bmRlcmx5aW5nIGlzc3VlIG9yIHByb3Bvc2VkIHNvbHV0aW9uIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSBhcmNoaXRlY3R1cmUuIFRoZSBwZXJmb3JtYW5jZSwgaW5zdHJ1Y3Rpb24gc2V0LCBvciBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBhdmFpbGFibGUgb24gYEFSTTY0YCBhcmUgbGlrZWx5IHRoZSBwcmltYXJ5IGZhY3RvcnMgaW5mbHVlbmNpbmcgdGhlIGRpcmVjdGlvbiBvZiBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBwcm9ibGVtIG1hbmlmZXN0cyBkaWZmZXJlbnRseSwgb3IgdGhlIHNvbHV0aW9uIHNwYWNlIGlzIGNvbnN0cmFpbmVkLCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLiBUaGVyZWZvcmUsIGBBUk02NGAgaXMgcHJvYmFibHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjM0LjIwMDM0MjEwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTg3OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BlcmYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BlcmYvS2NvbmZpZz02PW1lbnUgXFxcIlBlcmZvcm1hbmNlIG1vbml0b3Igc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFNcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy04LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTk9Y29uZmlnIEFSTV9DQ0lfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIkFSTSBDQ0kgUE1VIGRyaXZlclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMTpcXHRkZXBlbmRzIG9uIChBUk0gXFx1MDAyNlxcdTAwMjYgQ1BVX1Y3KSB8fCBBUk02NFxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTEyLVxcdHNlbGVjdCBBUk1fQ0NJXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xOT1jb25maWcgQVJNX0NDSTQwMF9QTVVcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIxLVxcdGRlZmF1bHQgeVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIyOlxcdGRlcGVuZHMgb24gQVJNX0NDSV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMy1cXHRzZWxlY3QgQVJNX0NDSTQwMF9DT01NT05cXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI4PWNvbmZpZyBBUk1fQ0NJNXh4X1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzAtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9wZXJmL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBBUk1fQ0NJX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTM3PWNvbmZpZyBBUk1fQ0NOXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIkFSTSBDQ04gZHJpdmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6Mzk6XFx0ZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWctNDAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9NDQ9Y29uZmlnIEFSTV9DTU5cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiQXJtIENNTi02MDAgUE1VIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6NDY6XFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy00Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz01MT1jb25maWcgQVJNX05JXFxuZHJpdmVycy9wZXJmL0tjb25maWctNTItXFx0dHJpc3RhdGUgXFxcIkFybSBOSS03MDAgUE1VIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy01NC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz01OD1jb25maWcgQVJNX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjU5OlxcdGRlcGVuZHMgb24gQVJNIHx8IEFSTTY0XFxuZHJpdmVycy9wZXJmL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiQVJNIFBNVSBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz02Nj1jb25maWcgQVJNX1Y2X1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjY3OlxcdGRlcGVuZHMgb24gQVJNX1BNVSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1Y2IHx8IENQVV9WNkspXFxuZHJpdmVycy9wZXJmL0tjb25maWctNjgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9NzA9Y29uZmlnIEFSTV9WN19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3MTpcXHRkZXBlbmRzIG9uIEFSTV9QTVUgXFx1MDAyNlxcdTAwMjYgQ1BVX1Y3XFxuZHJpdmVycy9wZXJmL0tjb25maWctNzItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9NzQ9Y29uZmlnIEFSTV9YU0NBTEVfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBBUk1fUE1VIFxcdTAwMjZcXHUwMDI2IENQVV9YU0NBTEVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy03Ni1cXHRkZWZfYm9vbCB5XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz03OD1jb25maWcgUklTQ1ZfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWc6Nzk6XFx0ZGVwZW5kcyBvbiBSSVNDVlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlJJU0MtViBQTVUgZnJhbWV3b3JrXFxcIlxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9ODg9Y29uZmlnIFJJU0NWX1BNVV9MRUdBQ1lcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo4OTpcXHRkZXBlbmRzIG9uIFJJU0NWX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIlJJU0MtViBsZWdhY3kgUE1VIGltcGxlbWVudGF0aW9uXFxcIlxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9OTg9Y29uZmlnIFJJU0NWX1BNVV9TQklcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIFJJU0NWX1BNVSBcXHUwMDI2XFx1MDAyNiBSSVNDVl9TQklcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiUklTQy1WIFBNVSBiYXNlZCBvbiBTQkkgUE1VIGV4dGVuc2lvblxcXCJcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTEwOD1jb25maWcgU1RBUkZJVkVfU1RBUkxJTktfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MTA5OlxcdGRlcGVuZHMgb24gQVJDSF9TVEFSRklWRSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTdGFyRml2ZSBTdGFyTGluayBQTVVcXFwiXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xMTg9Y29uZmlnIEFOREVTX0NVU1RPTV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMTktXFx0Ym9vbCBcXFwiQW5kZXMgY3VzdG9tIFBNVSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjEyMDpcXHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyBcXHUwMDI2XFx1MDAyNiBSSVNDVl9BTFRFUk5BVElWRSBcXHUwMDI2XFx1MDAyNiBSSVNDVl9QTVVfU0JJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTIxLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTMyPWNvbmZpZyBBUk1fUE1VX0FDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzM6XFx0ZGVwZW5kcyBvbiBBUk1fUE1VIFxcdTAwMjZcXHUwMDI2IEFDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMzQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTM2PWNvbmZpZyBBUk1fU01NVV9WM19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMzctXFx0IHRyaXN0YXRlIFxcXCJBUk0gU01NVXYzIFBlcmZvcm1hbmNlIE1vbml0b3JzIEV4dGVuc2lvblxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzg6XFx0IGRlcGVuZHMgb24gQVJNNjQgfHwgKENPTVBJTEVfVEVTVCBcXHUwMDI2XFx1MDAyNiA2NEJJVClcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzk6XFx0IGRlcGVuZHMgb24gR0VORVJJQ19NU0lfSVJRXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTQwLVxcdCAgIGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTE0Nj1jb25maWcgQVJNX1BNVVYzXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MTQ3OlxcdGRlcGVuZHMgb24gSFdfUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgKChBUk0gXFx1MDAyNlxcdTAwMjYgQ1BVX1Y3KSB8fCBBUk02NClcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNDgtXFx0Ym9vbCBcXFwiQVJNIFBNVXYzIHN1cHBvcnRcXFwiIGlmICFBUk02NFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTU2PWNvbmZpZyBBUk1fRFNVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE1Ny1cXHR0cmlzdGF0ZSBcXFwiQVJNIER5bmFtSVEgU2hhcmVkIFVuaXQgKERTVSkgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE1ODpcXHRkZXBlbmRzIG9uIEFSTTY0XFxuZHJpdmVycy9wZXJmL0tjb25maWctMTU5LVxcdCAgaGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTY1PWNvbmZpZyBGU0xfSU1YOF9ERFJfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTY2LVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgaS5NWDggRERSIHBlcmYgbW9uaXRvclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxNjc6XFx0ZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNjgtXFx0ICBoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xNzM9Y29uZmlnIEZTTF9JTVg5X0REUl9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNzQtXFx0dHJpc3RhdGUgXFxcIkZyZWVzY2FsZSBpLk1YOSBERFIgcGVyZiBtb25pdG9yXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE3NTpcXHRkZXBlbmRzIG9uIEFSQ0hfTVhDXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTc2LVxcdCBoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xODE9Y29uZmlnIEZVSklUU1VfVU5DT1JFX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE4Mi1cXHR0cmlzdGF0ZSBcXFwiRnVqaXRzdSBVbmNvcmUgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE4MzpcXHRkZXBlbmRzIG9uIChBUk02NCBcXHUwMDI2XFx1MDAyNiBBQ1BJKSB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE4NC1cXHQgaGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTkwPWNvbmZpZyBRQ09NX0wyX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE5MS1cXHRib29sIFxcXCJRdWFsY29tbSBMMi1jYWNoZSBQTVVcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MTkyOlxcdGRlcGVuZHMgb24gQVJDSF9RQ09NIFxcdTAwMjZcXHUwMDI2IEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xOTMtXFx0c2VsZWN0IFFDT01fS1JZT19MMl9BQ0NFU1NPUlNcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIwMD1jb25maWcgUUNPTV9MM19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMDEtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gTDMtY2FjaGUgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIwMjpcXHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSBcXHUwMDI2XFx1MDAyNiBBUk02NCBcXHUwMDI2XFx1MDAyNiBBQ1BJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjAzLVxcdHNlbGVjdCBRQ09NX0lSUV9DT01CSU5FUlxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MjEwPWNvbmZpZyBUSFVOREVSWDJfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gVGh1bmRlclgyIFNvQyBQTVUgVU5DT1JFXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIxMjpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUjIgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MjEzOlxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBBQ1BJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjE0LVxcdGRlZmF1bHQgbSBpZiBBUkNIX1RIVU5ERVIyXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yMjA9Y29uZmlnIFhHRU5FX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIyMTogICAgICAgIGRlcGVuZHMgb24gQVJDSF9YR0VORSB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIyMi0gICAgICAgIGJvb2wgXFxcIkFQTSBYLUdlbmUgU29DIFBNVVxcXCJcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNdjguMiBTdGF0aXN0aWNhbCBQcm9maWxpbmcgRXh0ZW5zaW9uXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIyOTpcXHRkZXBlbmRzIG9uIEFSTTY0XFxuZHJpdmVycy9wZXJmL0tjb25maWctMjMwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIzNT1jb25maWcgQVJNNjRfQlJCRVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYnJhbmNoIHN0YWNrIHNhbXBsaW5nIHVzaW5nIEZFQVRfQlJCRVxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzc6XFx0ZGVwZW5kcyBvbiBBUk1fUE1VVjMgXFx1MDAyNlxcdTAwMjYgQVJNNjRcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzgtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNDY9Y29uZmlnIEFSTV9ETUM2MjBfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjQ3LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgUE1VIHN1cHBvcnQgZm9yIHRoZSBBUk0gRE1DLTYyMCBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNDg6XFx0ZGVwZW5kcyBvbiAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI1Mz1jb25maWcgTUFSVkVMTF9DTjEwS19UQURfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU0LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIENOMTBLIExMQy1UQUQgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI1NTpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI1Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNjA9Y29uZmlnIEFQUExFX00xX0NQVV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNjEtXFx0Ym9vbCBcXFwiQXBwbGUgTTEgQ1BVIFBNVSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MjpcXHRkZXBlbmRzIG9uIEFSTV9QTVUgXFx1MDAyNlxcdTAwMjYgQVJDSF9BUFBMRVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNjc9Y29uZmlnIEFMSUJBQkFfVU5DT1JFX0RSV19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNjgtXFx0dHJpc3RhdGUgXFxcIkFsaWJhYmEgVC1IZWFkIFlpdGlhbiA3MTAgRERSIFN1Yi1zeXN0ZW0gRHJpdmV3YXkgUE1VIGRyaXZlclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjk6XFx0ZGVwZW5kcyBvbiAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjcwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI3Nj1jb25maWcgTUFSVkVMTF9DTjEwS19ERFJfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjc3LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgTUFSVkVMTCBDTjEwSyBEUkFNIFN1YnN5c3RlbShEU1MpIFBNVSBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI3ODpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI3OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yODM9Y29uZmlnIERXQ19QQ0lFX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI4NC1cXHR0cmlzdGF0ZSBcXFwiU3lub3BzeXMgRGVzaWduV2FyZSBQQ0llIFBNVVxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyODU6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yODYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9Mjk0PWNvbmZpZyBDWExfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjk1LVxcdHRyaXN0YXRlIFxcXCJDWEwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI5NjpcXHRkZXBlbmRzIG9uIENYTF9CVVNcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yOTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MzA3PWNvbmZpZyBNQVJWRUxMX1BFTV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMDgtXFx0dHJpc3RhdGUgXFxcIk1BUlZFTEwgUEVNIFBNVSBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjMwOTpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMxMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0zMTQ9Y29uZmlnIE5WSURJQV9URUdSQTQxMF9DTUVNX0xBVEVOQ1lfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzE1LVxcdHRyaXN0YXRlIFxcXCJOVklESUEgVGVncmE0MTAgQ1BVIE1lbW9yeSBMYXRlbmN5IFBNVVxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMTY6XFx0ZGVwZW5kcyBvbiBBUk02NCBcXHUwMDI2XFx1MDAyNiBBQ1BJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzE3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTMyMT1jb25maWcgTlZJRElBX1RFR1JBNDEwX0MyQ19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIk5WSURJQSBUZWdyYTQxMCBDMkMgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMjQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzozNC4yNzY4MDgxNjhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxMzg5Mzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIEknbSBkZWFsaW5nIHdpdGggZGVwZW5kZW5jaWVzIGZvciBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGZlYXR1cmVzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBCcmFuY2ggUmVjb3JkIEJ1ZmZlciBFeHRlbnNpb24gKEJSQkUpIG9uIEFSTTY0IGFyY2hpdGVjdHVyZXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBBUk02NF9CUkJFYCBpcyBjb250aW5nZW50IG9uIGBBUk1fUE1VVjNgIGFuZCwgb2YgY291cnNlLCB0aGUgYEFSTTY0YCBhcmNoaXRlY3R1cmUgaXRzZWxmLiBUaGVuLCBgQVJNX1BNVVYzYCBoYXMgaXRzIG93biBkZXBlbmRlbmNpZXM6IGBIV19QRVJGX0VWRU5UU2AgYW5kIGEgY29uZGl0aW9uIHRpZWQgdG8gZWl0aGVyIEFSTSBWNyBDUFVzIG9yIEFSTTY0LlxuXG5BbHJpZ2h0LCBzbyB0byBzYXRpc2Z5IGFsbCB0aGVzZSBkZXBlbmRlbmNpZXMsIEkgZGVmaW5pdGVseSBuZWVkIGBQRVJGX0VWRU5UU2AuIEkgYWxzbyBzZWUgdGhhdCB0aGVyZSBhcmUgQ1BVLXNwZWNpZmljIHN1cHBvcnQgZmxhZ3MgZm9yIEFNRCBhbmQgSW50ZWwsIG5hbWVseSBgQ1BVX1NVUF9BTURgIGFuZCBgQ1BVX1NVUF9JTlRFTGAsIHdoaWNoIHByZXN1bWFibHkgZW5hYmxlcyBjZXJ0YWluIHBlcmZvcm1hbmNlIGZlYXR1cmVzIGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gQW5kIHRoZSBmYWN0IHRoYXQgSSBzZWUgYFBFUkZfRVZFTlRTX0FNRF9CUlNgIHN1Z2dlc3RzIGJyYW5jaCBzYW1wbGluZyBpcyBhdmFpbGFibGUgZm9yIEFNRCBwcm9jZXNzb3JzLiBXaXRoIGBBUk02NF9CUkJFYCBhbmQgYEFSTV9QTVVWM2AgYWxzbyBpbiB0aGUgbWl4LCBhbmQgYWNrbm93bGVkZ2luZyB0aGF0IGBIV19QRVJGX0VWRU5UU2AgaXMgYSBib29sZWFuIGxpa2VseSBzZXQgYnkgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYsIEkgY2FuIHNpbXBsaWZ5IHRoZSBsaXN0LlxuXG5Pa2F5LCBsZXQgbWUganVzdCBrZWVwIGEgY2xlYW4gbGlzdCBvZiB0aGUgY29uZmlndXJhdGlvbnMgSSBleHBsaWNpdGx5IG5lZWQsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBlYWNoOiBgUEVSRl9FVkVOVFNgLCBgQ1BVX1NVUF9BTURgLCBgUEVSRl9FVkVOVFNfQU1EX0JSU2AsIGBDUFVfU1VQX0lOVEVMYCwgYEFSTTY0X0JSQkVgLCBhbmQgYEFSTV9QTVVWM2AuIFRoZW4sIGFzIGEgc2FuaXR5IGNoZWNrLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyByZWdhcmRpbmcgYENQVV9TVVBfSU5URUxgIGFuZCBgQ1BVX1NVUF9BTURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzo0MS4yOTA3MDU0OTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODYxMDMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVX1NVUF9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NDEuMzgxNTgxMzIxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODQ0NzE5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYENQVV9TVVBfSU5URUxgIG9wdGlvbiBpcyBkZWZpbmVkLiAgSXQgKnNob3VsZCogYmUgaW4gb25lIG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcmlnaHQ/IFRoZSBsb2dpY2FsIHBsYWNlIHNlZW1zIHRvIGJlIGBhcmNoL3g4Ni9LY29uZmlnLmNwdWAuIFllYWgsIHRoYXQgZmVlbHMgcmlnaHQuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZmxhZyBtZWFucyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHByb2Nlc3NvciBmZWF0dXJlcy4gR29vZCwgZ29vZC4uLiBrbm93aW5nIHRoZSBmaWxlIGxvY2F0aW9uIGlzIGhhbGYgdGhlIGJhdHRsZS4gTm93LCB0aW1lIHRvIGNyYWNrIGl0IG9wZW4gYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjA2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NDQuNzY2MDYwODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTAwMDMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVX1NVUF9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnLmNwdVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnLmNwdT0yOTc9bWVudWNvbmZpZyBQUk9DRVNTT1JfU0VMRUNUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0zMDItXFxuYXJjaC94ODYvS2NvbmZpZy5jcHU6MzAzOmNvbmZpZyBDUFVfU1VQX0lOVEVMXFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMzA0LVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzo0NC45ODEwNzE0MzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0OTY3Mzc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgSWRlbnRpZmljYXRpb24gLSBSZWZpbmVkKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgZGVmYXVsdCBpcyBcInlcIiDigJMgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIGdldCBkb3duIHRvIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgcG90ZW50aWFsIGluY2x1c2lvbiBhcyBmb2N1cyBzeW1ib2xzLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBMQlIgaW1wbGVtZW50YXRpb25zLlxuXG5JJ3ZlIGNoZWNrZWQgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY2AgYW5kIGZvdW5kIHR3byBwcm9taXNpbmcgY2FuZGlkYXRlczogYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLiBNb3Zpbmcgb250byB0aGUgQU1EIHNpZGUsIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jYCB5aWVsZHMgYGFtZF9wbXVfbGJyX3JlYWRgLCBhbmQgYGFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNgIGdpdmVzIHVzIGBhbWRfYnJzX2RyYWluYC5cblxuQnJhbmNoaW5nIG91dCB0byB0aGUgQVJNIHdvcmxkLCBJIGNoZWNrZWQgYGRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jYCBhbmQgZGlzY292ZXJlZCBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgLlxuXG5UaGVuIEkgY2hlY2tlZCBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFuZCBzYXcgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAuIEhvbGQgb24gYSBzZWNvbmQuLi4gdGhlc2UgYXJlIG9uIHRoZSAqaG90KiBwYXRoLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhcyBpdCBjb3VsZCBza2V3IHRoZSByZXN1bHRzLiBTbyB0aG9zZSB0d28gYXJlICpvdXQqLlxuXG5Ob3csIGJhY2sgdG8gdGhlIHJlbWFpbmluZyBjYW5kaWRhdGVzOiBgYW1kX2Jyc19kcmFpbmAsIGBhbWRfcG11X2xicl9yZWFkYCwgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAsIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLCBhbmQgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgY2FsbGVkIHdoZW4gcmVhZGluZyBQTVUgZXZlbnRzLCB0cmlnZ2VyZWQgYnkgYHBlcmZfZXZlbnRfb3BlbmAgYW5kIHN1YnNlcXVlbnQgYnVmZmVyIHJlYWRzIG9yIFBNVSBpbnRlcnJ1cHRzLiBUaGV5IGFyZW4ndCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBsaWtlIHRoZSBzY2hlZHVsZXIgb3IgbmV0d29yayBjb2RlOyB0aGV5IGFyZSBzcGVjaWZpYyB0byBwZXJmIGV2ZW50cyB3aGVyZSBMQlIgb3IgQlJTIGFyZSBlbmFibGVkLiBUaGF0IG1ha2VzIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBhcyBmb2N1cyBzeW1ib2xzLlxuXG5JJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IHRob3VnaHQgcHJvY2VzcyBhYm91dCBgYW1kX2Jyc19kcmFpbmAsIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NTIuNDMwNzQ4MzUzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3NzcxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX2Jyc19kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jPTI2Mj1zdGF0aWMgYm9vbCBhbWRfYnJzX21hdGNoX3BsbShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBmcm9tLCB1NjQgdG8pXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTI4MC0gKi9cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jOjI4MTp2b2lkIGFtZF9icnNfZHJhaW4odm9pZClcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTI4Mi17XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYz04OTY9c3RhdGljIGludCBhbWRfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05MTItXFx0aWYgKGNwdWMtXFx1MDAzZWxicl91c2VycylcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5MTM6XFx0XFx0YW1kX2Jyc19kcmFpbigpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTkxNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NTIuNjc2NTMwMDg4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODE2OTUxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlBNVSBJbnRlcnJ1cHQgSGFuZGxpbmcgYW5kIExCUiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gYW5hbHl6aW5nIHRoaXMgY29kZSBhbmQgaXQgbG9va3MgbGlrZSB3ZSdyZSBiZWluZyBjYWxsZWQgZnJvbSBgYW1kX3BtdV9oYW5kbGVfaXJxYC4gVGhhdCdzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCwgc28gdGhhdCdzIGV4cGVjdGVkIGFuZCBwZXJmZWN0bHkgbm9ybWFsLiBObyByZWQgZmxhZ3MgdGhlcmUuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBhbWRfcG11X2xicl9yZWFkYCBmdW5jdGlvbiBhIGxpdHRsZSBjbG9zZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlIHNob3VsZCBleHBlY3QgaXQgdG8gYmUgcmVhZGluZyBmcm9tIHRoZSBMYXN0IEJyYW5jaCBSZWNvcmQsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgZGF0YSBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSB3aXRoaW4gdGhhdCBjb250ZXh0LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGFib3V0IHRoZXNlIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzo1Ni4yNTgyMjgwMDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTY2MzMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbWRfcG11X2xicl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTkzMT1zdGF0aWMgaW50IGFtZF9wbXVfdjJfc25hcHNob3RfYnJhbmNoX3N0YWNrKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50cmllcywgdW5zaWduZWQgaW50IGNudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTk0NS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5NDY6XFx0YW1kX3BtdV9sYnJfcmVhZCgpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTk0Ny1cXHRjbnQgPSBtaW4oY250LCB4ODZfcG11Lmxicl9ucik7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYz05NTY9c3RhdGljIGludCBhbWRfcG11X3YyX2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05ODQtXFx0aWYgKHg4Nl9wbXUubGJyX25yKSB7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6OTg1OlxcdFxcdGFtZF9wbXVfbGJyX3JlYWQoKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05ODYtXFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5HTE9CQUxfU1RBVFVTX0xCUlNfRlJPWkVOO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYz0xNTc9c3RhdGljIGNvbnN0IGludCBsYnJfc3BlY19tYXBbUEVSRl9CUl9TUEVDX01BWF0gPSB7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2My1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jOjE2NDp2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjU2LjQ3OTg5NTQ2MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI5OTM5MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFBNVSBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGUgY29kZSdzIGN1cnJlbnRseSBjYWxsaW5nIGZyb20gYGFtZF9wbXVfdjJfaGFuZGxlX2lycWAgYW5kIGFsc28gYGFtZF9wbXVfdjJfc25hcHNob3RfYnJhbmNoX3N0YWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgcmVsYXRlZCB0byBJbnRlbCdzIExCUiBpbXBsZW1lbnRhdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgY29tcGFyaXNvbiwgYXQgbGVhc3QuIFRvIGdldCBteSBiZWFyaW5ncywgSSdsbCBxdWlja2x5IG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSd2ZSBnb3QgdGhlIGBpbnRlbF9wbXVfbGJyX3JlYWRfMzJgIGFuZCBgaW50ZWxfcG11X2xicl9yZWFkXzY0YCBjYWxscyBzdHJhaWdodCBpbiBteSBoZWFkLiBBIHF1aWNrIHJldmlldyBvZiB0aG9zZSBJbnRlbCBmdW5jdGlvbnMgd2lsbCBwcm9iYWJseSByZXZlYWwgdGhlIGNydWNpYWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtLCBhbmQgdGhlIEFNRCBjb2RlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJyYW5jaCBzdGFjayBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSdzIGFueSBzb3J0IG9mIHBhcml0eSB0aGF0IEkgY2FuIHJlbHkgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzkzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDAuNzA5ODM4MjYzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMwNDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfbGJyX3JlYWRfMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTc4NjE9X19pbml0IGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy03OTQxLVxcdFxcdHg4Nl9wbXUubGJyX3Jlc2V0ID0gaW50ZWxfcG11X2xicl9yZXNldF8zMjtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjc5NDI6XFx0XFx0eDg2X3BtdS5sYnJfcmVhZCA9IGludGVsX3BtdV9sYnJfcmVhZF8zMjtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTc5NDMtXFx0fVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTcyOD12b2lkIGludGVsX3BtdV9sYnJfZGlzYWJsZV9hbGwodm9pZClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03MzktXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjc0MDp2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDAuNzgyMTQ3NDM1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzU4MTQ1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gUG9pbnRlciBhbmQgQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gYHg4Nl9wbXUubGJyX3JlYWRgLCBhcmUgaGFuZGxlZC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhleSdyZSBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCdzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgZmxleGliaWxpdHksIGxldHRpbmcgdXMgc3dhcCBvdXQgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBmb3IgcmVhZGluZyB0aGUgTGFzdCBCcmFuY2ggUmVjb3JkIChMQlIpIGRhdGEsIGxpa2VseSBkZXBlbmRpbmcgb24gdGhlIHByb2Nlc3NvciBtb2RlbCBvciBzcGVjaWZpYyBjb250ZXh0LiBUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIG5vbi1zdGF0aWMgaXMgaW1wb3J0YW50LiBJdCBpbXBsaWVzIHRoZXkgYXJlIGV4dGVybmFsbHkgdmlzaWJsZSwgYW5kIHRoYXQgd2UgY2FuIGludGVyYWN0IHdpdGggdGhlbS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYCBpcyBhbW9uZyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDQuNTE3OTY1MTU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODcyNzE4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BlcmYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jPTc2ND1zdGF0aWMgYm9vbCBmaWx0ZXJfYnJhbmNoX3JlY29yZChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudHJ5LFxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzcxLVxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jOjc3Mjp2b2lkIGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKHN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrLFxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc3My1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaD0yMj1ib29sIGJyYmVfYnJhbmNoX2F0dHJfdmFsaWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTtcXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaDoyMzp2b2lkIGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKHN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrLFxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5oLTI0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaD0zNz1zdGF0aWMgaW5saW5lIGJvb2wgYnJiZV9icmFuY2hfYXR0cl92YWxpZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC00Mi1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaDo0MzpzdGF0aWMgdm9pZCBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyhzdHJ1Y3QgcGVyZl9icmFuY2hfc3RhY2sgKmJyYW5jaF9zdGFjayxcXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC00NC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9wbXV2My5jPTg3MT1zdGF0aWMgdm9pZCByZWFkX2JyYW5jaF9yZWNvcmRzKHN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjLFxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9wbXV2My5jLTg3Ni1cXG5kcml2ZXJzL3BlcmYvYXJtX3BtdXYzLmM6ODc3OlxcdGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKGJyYW5jaF9zdGFjaywgZXZlbnQpO1xcbmRyaXZlcnMvcGVyZi9hcm1fcG11djMuYy04NzgtXFx0cGVyZl9zYW1wbGVfc2F2ZV9icnN0YWNrKGRhdGEsIGV2ZW50LCBicmFuY2hfc3RhY2ssIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDowNC41ODY3MDEzN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI0ODg3NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb250ZXh0IGlzIGByZWFkX2JyYW5jaF9yZWNvcmRzYCBpbiBgYXJtX3BtdXYzLmNgLiBUaGF0J3Mgd2hlcmUgdGhpcyBmdW5jdGlvbiBjYWxsIG9yaWdpbmF0ZXMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBtb2RpZmljYXRpb24gY2FzY2FkZT8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbXBhY3RlZD8gSSBuZWVkIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuXG5cblF1aWNrbHkgc2Nhbm5pbmcuLi4gYWhhISBJbiBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYGludGVsX3BtdV9zdG9yZV9sYnJgIGlzIHRoZXJlIGJ1dCBpdCdzICpzdGF0aWMqLiBPa2F5LCBzbyBhdCBsZWFzdCB0aGF0IG9uZSdzIGxvY2FsaXplZC4gVGhhdCdzIGEgcmVsaWVmOyBzdGF0aWMgZnVuY3Rpb25zIGFyZSBsZXNzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBpbiBleHRlcm5hbCBjaGFuZ2VzLiBTdGlsbCwgdGhpcyBuZWVkcyBmdXJ0aGVyIGNoZWNraW5nIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbHMgdGhhdCBjb3VsZCBiZSBsaW5rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzE2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDguNDExNTkyNzAyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU3NTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfc3RvcmVfbGJyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9OTAxPXN0YXRpY19hc3NlcnQoKDY0IC0gUEVSRl9CUkFOQ0hfRU5UUllfSU5GT19CSVRTX01BWCkgXFx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX05VTSAqIExCUl9JTkZPX0JSX0NOVFJfQklUUyk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTkwMi1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6OTAzOnN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTkwNC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGJyX2VudHJ5ICplbnRyaWVzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDA9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMDEte1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzoxMDAyOlxcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgTlVMTCk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMDMtfVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDU9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWRfeHNhdmUoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAwOS1cXHRpZiAoIXhzYXZlKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjEwMTA6XFx0XFx0aW50ZWxfcG11X3N0b3JlX2xicihjcHVjLCBOVUxMKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAxMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAxNC1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAxNTpcXHRpbnRlbF9wbXVfc3RvcmVfbGJyKGNwdWMsIHhzYXZlLVxcdTAwM2VsYnIuZW50cmllcyk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMTYtfVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEyODg9dm9pZCBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzKHN0cnVjdCBsYnJfZW50cnkgKmxicilcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMjk4LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzoxMjk5OlxcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgbGJyKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTMwMC1cXHRpbnRlbF9wbXVfbGJyX2ZpbHRlcihjcHVjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDguNDg0MTc3NDU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzY0ODExNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgUEVCUy9MQlIgRGF0YSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBpcyBhIGZ1bmN0aW9uIHRoYXQncyBub3QgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IOKAkyBtZWFuaW5nIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gR2l2ZW4gdGhhdCBmYWN0LCBpdCBsaWtlbHkgaGFzIGJyb2FkZXIgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgSW50ZWwgUE1VIGRyaXZlci4gTm93LCB0aGUgY29kZSBzdGF0ZXMgdGhhdCBpdCBhY3R1YWxseSBjYWxscyBgaW50ZWxfcG11X3N0b3JlX2xicmAuIFNvLCB0aGlzIHRlbGxzIG1lIHRoYXQgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgIGxpa2VseSBzaXRzIGhpZ2hlciB1cCBpbiB0aGUgZGF0YS1mbG93LCBwb3NzaWJseSBjb29yZGluYXRpbmcgdGhlIGNvbGxlY3Rpb24gb3Igc3RvcmFnZSBvZiBMQlIgZGF0YSB3aXRoaW4gYSBQRUJTIGNvbnRleHQuIEkgc2hvdWxkIGNoZWNrIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBtb3JlIGNsb3NlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjc5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MTIuODIwNjY3OTY0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkwNzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MjQ5OT1zdGF0aWMgdm9pZCBzZXR1cF9wZWJzX2FkYXB0aXZlX3NhbXBsZV9kYXRhKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI1NzUtXFx0XFx0aWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQpKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MjU3NjpcXHRcXHRcXHRpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzKGxicik7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMjU3Ny1cXHRcXHRcXHRpbnRlbF9wbXVfbGJyX3NhdmVfYnJzdGFjayhkYXRhLCBjcHVjLCBldmVudCk7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0yNjE2PXN0YXRpYyB2b2lkIHNldHVwX2FyY2hfcGVic19zYW1wbGVfZGF0YShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yNzA4LVxcdFxcdGlmIChoYXNfYnJhbmNoX3N0YWNrKGV2ZW50KSkge1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjI3MDk6XFx0XFx0XFx0aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhsYnIpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI3MTAtXFx0XFx0XFx0aW50ZWxfcG11X2xicl9zYXZlX2Jyc3RhY2soZGF0YSwgY3B1YywgZXZlbnQpO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEyMTc9aW50ZWxfcG11X2xicl9maWx0ZXIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTI4Ny1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTI4ODp2b2lkIGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnMoc3RydWN0IGxicl9lbnRyeSAqbGJyKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMjg5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MTIuODg3NTgxNjU3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTYwODA4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQRUJTL0xCUiBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBoZXJlLCBhbmQgaXQncyBmbGFnZ2VkIGFzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCBiZXlvbmQgaXRzIGltbWVkaWF0ZSBzY29wZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTEJSIHJlYWRpbmcgcHJvY2Vzcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgaW50ZWxfcG11X2xicl9yZWFkXzY0YC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uIHBsdWdzIGludG8gdGhlIGJyb2FkZXIgTEJSIGhhbmRsaW5nLCB3aGF0IGRhdGEgaXQncyBwYXNzaW5nLCBhbmQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBub24tc3RhdGljIHByb3BlcnR5LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGlzIGV4cG9zZXMgYW55IGNyaXRpY2FsIGRhdGEgb3IgY2FwYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjE2LjcwMzY2NzIzMloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5ODQ2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZWxfcG11X2xicl9yZWFkXzY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz02NTcxPXN0YXRpYyBfX2luaXRjb25zdCBjb25zdCBzdHJ1Y3QgeDg2X3BtdSBjb3JlX3BtdSA9IHtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjYxNC1cXHQubGJyX3Jlc2V0XFx0XFx0PSBpbnRlbF9wbXVfbGJyX3Jlc2V0XzY0LFxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NjYxNTpcXHQubGJyX3JlYWRcXHRcXHQ9IGludGVsX3BtdV9sYnJfcmVhZF82NCxcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2MTYtXFx0Lmxicl9zYXZlXFx0XFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTY2MjA9c3RhdGljIF9faW5pdGNvbnN0IGNvbnN0IHN0cnVjdCB4ODZfcG11IGludGVsX3BtdSA9IHtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjY2Ni1cXHQubGJyX3Jlc2V0XFx0XFx0PSBpbnRlbF9wbXVfbGJyX3Jlc2V0XzY0LFxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NjY2NzpcXHQubGJyX3JlYWRcXHRcXHQ9IGludGVsX3BtdV9sYnJfcmVhZF82NCxcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2NjgtXFx0Lmxicl9zYXZlXFx0XFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9NzQwPXZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzMyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTc3My0gKi9cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Nzc0OnZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzY0KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03NzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDoxNi43ODM2NTY1MzNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg5Mjg0MTkyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBlcmYgRXZlbnQgUE1VIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkgc2VlIGlzIHRoYXQgYGludGVsX3BtdV9sYnJfcmVhZF82NGAgaXMsIHRoYW5rZnVsbHksIG5vbi1zdGF0aWMuIExldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgbGlzdCBvZiB0aGUgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGhlcmU6XG5cbiogICBgYW1kX2Jyc19kcmFpbmBcbiogICBgYW1kX3BtdV9sYnJfcmVhZGBcbiogICBgaW50ZWxfcG11X2xicl9yZWFkXzMyYFxuKiAgIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgXG4qICAgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgXG4qICAgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYFxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb2J2aW91cyB0YXJnZXRzIGluIHRoZSBob3QgcGF0aC4gSSB3YXMgaW5pdGlhbGx5IGNvbmNlcm5lZCBhYm91dCBgcGVyZl9wbXVfc2NoZWRfdGFza2Agc2luY2UgaXQncyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBieSBgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0YCBhbmQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luYC4gQnV0LCBgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW5gIGFyZSBpbiB0aGUgaG90IHBhdGgsIHNvIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi4gQnV0IHRoZXNlIHNlZW0gdG8gYmUgaGFuZGxlZCBhbmQgY29ycmVjdGx5IGV4Y2x1ZGVkLCBzbyB3ZSdyZSBnb29kLlxuXG5HaXZlbiB0aGVzZSBjb25zaWRlcmF0aW9ucywgaGVyZSdzIHdoYXQgSSB0aGluayB3ZSBuZWVkIHRvIHRlc3Q6XG5cblRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYWZmZWN0IGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBvdXIgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHM6XG5cbiogICBgUEVSRl9FVkVOVFNgOiBBbHdheXMgbmVjZXNzYXJ5LlxuKiAgIGBDUFVfU1VQX0FNRGA6IE5lY2Vzc2FyeSBmb3IgQU1EIHN1cHBvcnQsIGRlZmF1bHRzIG9uIHg4NiwgYnV0IGdvb2QgdG8gaW5jbHVkZS5cbiogICBgUEVSRl9FVkVOVFNfQU1EX0JSU2A6IFRoaXMgbG9va3Mgc3BlY2lmaWMgdG8gQU1EIEJSUyBzdXBwb3J0LCBzbyB3ZSBuZWVkIGl0LlxuKiAgIGBDUFVfU1VQX0lOVEVMYDogTmVjZXNzYXJ5IGZvciBJbnRlbCBzdXBwb3J0LCBkZWZhdWx0cyBvbiB4ODYsIGJ1dCBnb29kIHRvIGluY2x1ZGUuXG4qICAgYEFSTTY0X0JSQkVgOiBOZWNlc3NhcnkgZm9yIEFSTTY0IEJSQkUsIGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZW5hYmxlZC5cbiogICBgQVJNX1BNVVYzYDogTG9va3MgbGlrZSBgQVJNNjRfQlJCRWAgZGVwZW5kcyBvbiBpdCwgc28gd2UgbmVlZCBpdC5cblxuTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbmVha3MgaW4uIGBQRVJGX0VWRU5UU19BTURfQlJTYCBzZWVtcyB0byBiZSB0aGUgb25seSBvbmUgZm9yIEFNRCBCUlMuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHJlZ2FyZGluZyBJbnRlbCB1bmNvcmUgZXZlbnRzLCBzbyB3ZSBkb24ndCBuZWVkIGBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVgLiBBZnRlciBxdWlja2x5IHZlcmlmeWluZyB0aGUgTWFrZWZpbGVzLCBgQ1BVX1NVUF9BTURgLCBhbmQgYFBFUkZfRVZFTlRTX0FNRF9CUlNgIGFyZSBlbm91Z2ggZm9yIEFNRCwgYENQVV9TVVBfSU5URUxgIGZvciBJbnRlbCwgYW5kIGBBUk02NF9CUkJFYCBhbmQgYEFSTV9QTVVWM2AgZm9yIEFSTS4gV2UgYWxzbyB3YW50IGBQRVJGX0VWRU5UU2AsIHdoaWNoIGlzIGNvcmUuXG5cblNvLCBoZXJlJ3MgdGhlIHBsYW4uIFdlIGZvY3VzIGZ1enppbmcgb24gdGhlIGxpc3RlZCBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBQTVUgZHJpdmVycy4gV2Ugd2lsbCBlbmFibGUgdGhvc2UgY29uZmlncyBhbmQgdGhlIGZvY3VzIHN5bWJvbHMuIFRoaXMgY292ZXJzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHByb3ZpZGVzIGEgcmVhc29uYWJseSB0ZXN0YWJsZSBzY29wZSB3aXRoIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTQzLCJPdXRwdXRUb2tlbnMiOjI3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MzUuNzEyMDgwMjU2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NzE3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQ1BVX1NVUF9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTX0FNRF9CUlNcIixcbiAgICBcIkNQVV9TVVBfSU5URUxcIixcbiAgICBcIkFSTTY0X0JSQkVcIixcbiAgICBcIkFSTV9QTVVWM1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtZF9icnNfZHJhaW5cIixcbiAgICBcImFtZF9wbXVfbGJyX3JlYWRcIixcbiAgICBcImludGVsX3BtdV9sYnJfcmVhZF8zMlwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzY0XCIsXG4gICAgXCJpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzXCIsXG4gICAgXCJicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBicmFuY2ggZW50cnkgaW5pdGlhbGl6YXRpb24gaW4gcGVyZiBldmVudCBQTVUgZHJpdmVycyAoQU1EIEJSUywgQU1EIExCUiwgSW50ZWwgTEJSLCBBUk0gQlJCRSkgYnkgcmVwbGFjaW5nIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHBlcmYgZXZlbnRzIHN1YnN5c3RlbSAoYGtlcm5lbC9ldmVudHMvY29yZS5jYCkgdG8gY2hhbmdlIGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgUE1VIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiLFxuICAgIFwiUEVSRl9FVkVOVFNfQU1EX0JSU1wiLFxuICAgIFwiQ1BVX1NVUF9JTlRFTFwiLFxuICAgIFwiQVJNNjRfQlJCRVwiLFxuICAgIFwiQVJNX1BNVVYzXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYW1kX2Jyc19kcmFpblwiLFxuICAgIFwiYW1kX3BtdV9sYnJfcmVhZFwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzMyXCIsXG4gICAgXCJpbnRlbF9wbXVfbGJyX3JlYWRfNjRcIixcbiAgICBcImludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNcIixcbiAgICBcImJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGJyYW5jaCBlbnRyeSBpbml0aWFsaXphdGlvbiBpbiBwZXJmIGV2ZW50IFBNVSBkcml2ZXJzIChBTUQgQlJTLCBBTUQgTEJSLCBJbnRlbCBMQlIsIEFSTSBCUkJFKSBieSByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgcGVyZiBldmVudHMgc3Vic3lzdGVtIChga2VybmVsL2V2ZW50cy9jb3JlLmNgKSB0byBjaGFuZ2UgaG93IGBzY2hlZF90YXNrYCBjYWxsYmFja3MgYXJlIGludm9rZWQgZm9yIFBNVXMgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBQTVUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCB2aWEgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjM1Ljg2ODgwNTY2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTExMDA3MzMwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjM1Ljg2OTM2Njc1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMTA5NTA3MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXFxuXFxuVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmVwbGFjaW5nIHRoZSBtYW51YWwgY2xlYXJpbmcgd2l0aCBjb21wb3VuZCBsaXRlcmFsIGFzc2lnbm1lbnRzIChlLmcuLCBgKmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7IC4uLiB9O2ApLiBBY2NvcmRpbmcgdG8gdGhlIEMgc3RhbmRhcmQsIGFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIGEgY29tcG91bmQgbGl0ZXJhbCBhcmUgYXV0b21hdGljYWxseSB6ZXJvLWluaXRpYWxpemVkLiBGdXJ0aGVybW9yZSwgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgaXMgZXhhY3RseSAyNCBieXRlcyB3aXRoIG5vIHBhZGRpbmcgKHR3byA2NC1iaXQgaW50ZWdlcnMgYW5kIGV4YWN0bHkgNjQgYml0cyBvZiBiaXRmaWVsZHMpLCBzbyB0aGUgY29tcG91bmQgbGl0ZXJhbCBndWFyYW50ZWVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkLlxcblxcblRoZSBvdGhlciBjaGFuZ2VzIGluIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYXJlIGxvZ2ljIGZpeGVzIGZvciBQTVUgY29udGV4dCBzY2hlZHVsaW5nIChgc2NoZWRfdGFza2AgY2FsbGJhY2tzKSBhbmQgZG8gbm90IGludm9sdmUgbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weWluZyB0byB1c2Vyc3BhY2UuXFxuXFxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDllZTVlOGZjNDkxMTEwNzU0NTZiOGZhOTQzODRhMzIwMjQ5OGM0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjAyOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNcbmluZGV4IGRjNTY0Njg4ZjNkNzMuLjU0YjEzZmFiYTExNmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG5AQCAtMzQzLDExICszNDMsMTAgQEAgdm9pZCBhbWRfYnJzX2RyYWluKHZvaWQpXG4gXHRcdGlmICghYW1kX2Jyc19tYXRjaF9wbG0oZXZlbnQsIGZyb20sIHRvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyK25yKTtcbi1cbi1cdFx0YnJbbnJdLmZyb20gPSBmcm9tO1xuLVx0XHRicltucl0udG8gICA9IHRvO1xuLVxuK1x0XHRicltucl0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbitcdFx0XHQuZnJvbVx0PSBmcm9tLFxuK1x0XHRcdC50b1x0PSB0byxcbitcdFx0fTtcbiBcdFx0bnIrKztcbiBcdH1cbiBlbXB0eTpcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuY1xuaW5kZXggOWQ5Yzk2MTk4OWQ1MS4uYTU1NjQ2ZmNiODQ2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbisrKyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbkBAIC0xODQsMTMgKzE4NCw2IEBAIHZvaWQgYW1kX3BtdV9sYnJfcmVhZCh2b2lkKVxuIFx0XHQgICAgZW50cnkudG8uc3BsaXQucmVzZXJ2ZWQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhiciArIG91dCk7XG4tXG4tXHRcdGJyW291dF0uZnJvbVx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCk7XG4tXHRcdGJyW291dF0udG9cdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LnRvLnNwbGl0LmlwKTtcbi1cdFx0YnJbb3V0XS5taXNwcmVkXHQ9IGVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdDtcbi1cdFx0YnJbb3V0XS5wcmVkaWN0ZWQgPSAhYnJbb3V0XS5taXNwcmVkO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBTZXQgYnJhbmNoIHNwZWN1bGF0aW9uIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBzdGF0dXMgb2ZcbiBcdFx0ICogdGhlIHZhbGlkIGFuZCBzcGVjIGJpdHMuXG5AQCAtMjA4LDcgKzIwMSwxNCBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICogc3BlY3VsYXRpdmUgYW5kIHRvb2sgdGhlIGNvcnJlY3QgcGF0aFxuIFx0XHQgKi9cbiBcdFx0aWR4ID0gKGVudHJ5LnRvLnNwbGl0LnZhbGlkIFx1MDAzY1x1MDAzYyAxKSB8IGVudHJ5LnRvLnNwbGl0LnNwZWM7XG4tXHRcdGJyW291dF0uc3BlYyA9IGxicl9zcGVjX21hcFtpZHhdO1xuK1xuK1x0XHRicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdFx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCksXG4rXHRcdFx0LnRvXHRcdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LnRvLnNwbGl0LmlwKSxcbitcdFx0XHQubWlzcHJlZFx0PSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsXG4rXHRcdFx0LnByZWRpY3RlZFx0PSAhZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LFxuK1x0XHRcdC5zcGVjXHRcdD0gbGJyX3NwZWNfbWFwW2lkeF0sXG4rXHRcdH07XG4gXHRcdG91dCsrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuaW5kZXggZjhmYWRiMGIxNmE0NS4uMGE5YjM0MjYxZWJlMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuKysrIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXG5AQCAtNzU2LDEwICs3NTYsMTAgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4gXG4gXHRcdHJkbXNycSh4ODZfcG11Lmxicl9mcm9tICsgbGJyX2lkeCwgbXNyX2xhc3RicmFuY2gubGJyKTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKTtcbi1cbi1cdFx0YnItXHUwMDNlZnJvbVx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tO1xuLVx0XHRici1cdTAwM2V0b1x0XHQ9IG1zcl9sYXN0YnJhbmNoLnRvO1xuK1x0XHQqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbitcdFx0XHQuZnJvbVx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tLFxuK1x0XHRcdC50b1x0PSBtc3JfbGFzdGJyYW5jaC50byxcbitcdFx0fTtcbiBcdFx0YnIrKztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcbkBAIC04NDcsMTQgKzg0NywxNSBAQCB2b2lkIGludGVsX3BtdV9sYnJfcmVhZF82NChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbiBcdFx0aWYgKGFib3J0IFx1MDAyNlx1MDAyNiB4ODZfcG11Lmxicl9kb3VibGVfYWJvcnQgXHUwMDI2XHUwMDI2IG91dCBcdTAwM2UgMClcbiBcdFx0XHRvdXQtLTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyK291dCk7XG4tXHRcdGJyW291dF0uZnJvbVx0ID0gZnJvbTtcbi1cdFx0YnJbb3V0XS50b1x0ID0gdG87XG4tXHRcdGJyW291dF0ubWlzcHJlZFx0ID0gbWlzO1xuLVx0XHRicltvdXRdLnByZWRpY3RlZCA9IHByZWQ7XG4tXHRcdGJyW291dF0uaW5fdHhcdCA9IGluX3R4O1xuLVx0XHRicltvdXRdLmFib3J0XHQgPSBhYm9ydDtcbi1cdFx0YnJbb3V0XS5jeWNsZXNcdCA9IGN5Y2xlcztcbitcdFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuK1x0XHRcdC5mcm9tXHRcdD0gZnJvbSxcbitcdFx0XHQudG9cdFx0PSB0byxcbitcdFx0XHQubWlzcHJlZFx0PSBtaXMsXG4rXHRcdFx0LnByZWRpY3RlZFx0PSBwcmVkLFxuK1x0XHRcdC5pbl90eFx0XHQ9IGluX3R4LFxuK1x0XHRcdC5hYm9ydFx0XHQ9IGFib3J0LFxuK1x0XHRcdC5jeWNsZXNcdFx0PSBjeWNsZXMsXG4rXHRcdH07XG4gXHRcdG91dCsrO1xuIFx0fVxuIFx0Y3B1Yy1cdTAwM2VsYnJfc3RhY2subnIgPSBvdXQ7XG5AQCAtOTA1LDYgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXG4gXHRzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmU7XG4gXHRzdHJ1Y3QgbGJyX2VudHJ5ICpsYnI7XG4gXHR1NjQgZnJvbSwgdG8sIGluZm87XG4rXHRib29sIG1pc3ByZWQ7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHg4Nl9wbXUubGJyX25yOyBpKyspIHtcbkBAIC05MjEsMjQgKzkyMywyNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuIFx0XHR0byA9IHJkbGJyX3RvKGksIGxicik7XG4gXHRcdGluZm8gPSByZGxicl9pbmZvKGksIGxicik7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlKTtcbi1cbi1cdFx0ZS1cdTAwM2Vmcm9tXHRcdD0gZnJvbTtcbi1cdFx0ZS1cdTAwM2V0b1x0XHQ9IHRvO1xuLVx0XHRlLVx1MDAzZW1pc3ByZWRcdD0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuLVx0XHRlLVx1MDAzZXByZWRpY3RlZFx0PSAhZS1cdTAwM2VtaXNwcmVkO1xuLVx0XHRlLVx1MDAzZWluX3R4XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0lOX1RYKTtcbi1cdFx0ZS1cdTAwM2VhYm9ydFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19BQk9SVCk7XG4tXHRcdGUtXHUwMDNlY3ljbGVzXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pO1xuLVx0XHRlLVx1MDAzZXR5cGVcdFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZiBjcHVjLVx1MDAzZWxicl9lbnRyaWVzW2ldIHRvXG4tXHRcdCAqIHRlbXBvcmFyaWx5IHN0b3JlIHRoZSBicmFuY2ggY291bnRlcnMgaW5mb3JtYXRpb24uXG4tXHRcdCAqIFRoZSBsYXRlciBjb2RlIHdpbGwgZGVjaWRlIHdoYXQgY29udGVudCBjYW4gYmUgZGlzY2xvc2VkXG4tXHRcdCAqIHRvIHRoZSBwZXJmIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS5cbi1cdFx0ICovXG4tXHRcdGUtXHUwMDNlcmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjYgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0s7XG4rXHRcdG1pc3ByZWQgPSBnZXRfbGJyX21pc3ByZWQoaW5mbyk7XG4rXG4rXHRcdCplID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdFx0PSBmcm9tLFxuK1x0XHRcdC50b1x0XHQ9IHRvLFxuK1x0XHRcdC5taXNwcmVkXHQ9IG1pc3ByZWQsXG4rXHRcdFx0LnByZWRpY3RlZFx0PSAhbWlzcHJlZCxcbitcdFx0XHQuaW5fdHhcdFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19JTl9UWCksXG4rXHRcdFx0LmFib3J0XHRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fQUJPUlQpLFxuK1x0XHRcdC5jeWNsZXNcdFx0PSBnZXRfbGJyX2N5Y2xlcyhpbmZvKSxcbitcdFx0XHQudHlwZVx0XHQ9IGdldF9sYnJfYnJfdHlwZShpbmZvKSxcbitcdFx0XHQvKlxuK1x0XHRcdCAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZlxuK1x0XHRcdCAqIGNwdWMtXHUwMDNlbGJyX2VudHJpZXNbaV0gdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlXG4rXHRcdFx0ICogYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLiBUaGUgbGF0ZXIgY29kZSB3aWxsXG4rXHRcdFx0ICogZGVjaWRlIHdoYXQgY29udGVudCBjYW4gYmUgZGlzY2xvc2VkIHRvIHRoZSBwZXJmXG4rXHRcdFx0ICogdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdC5yZXNlcnZlZFx0PSAoaW5mbyBcdTAwM2VcdTAwM2UgTEJSX0lORk9fQlJfQ05UUl9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdFx0XHQgIExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLLFxuK1x0XHR9O1xuIFx0fVxuIFxuIFx0Y3B1Yy1cdTAwM2VsYnJfc3RhY2subnIgPSBpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jIGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbmluZGV4IGJhNTU0ZTBjODQ2YzQuLjI1NGJlNGRhOGFlMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuY1xuKysrIGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbkBAIC02MDQsNyArNjA0LDcgQEAgc3RhdGljIGJvb2wgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGludCBpbmRleCwgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplbnRcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0YnJiaW5mID0gYnJlZ3MuYnJiaW5mO1xuLVx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGVudHJ5KTtcbitcdCplbnRyeSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyB9O1xuIFx0aWYgKGJyYmVfcmVjb3JkX2lzX2NvbXBsZXRlKGJyYmluZikpIHtcbiBcdFx0ZW50cnktXHUwMDNlZnJvbSA9IGJyZWdzLmJyYnNyYztcbiBcdFx0ZW50cnktXHUwMDNldG8gPSBicmVncy5icmJ0Z3Q7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxuaW5kZXggNDhkODUxZmJkOGVhNS4uMzEwNjgxY2NjYjUwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxuQEAgLTE0NjcsMjMgKzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4tLypcbi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS5cbi0gKiBUaGUgdG8gYW5kIGZyb20gZmllbGRzIGFyZSBub3QgY2xlYXJlZCBiZWNhdXNlIHRoZXkgYXJlXG4tICogc3lzdGVtYXRpY2FsbHkgbW9kaWZpZWQgYnkgY2FsbGVyLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICpicilcbi17XG4tXHRici1cdTAwM2VtaXNwcmVkXHQ9IDA7XG4tXHRici1cdTAwM2VwcmVkaWN0ZWRcdD0gMDtcbi1cdGJyLVx1MDAzZWluX3R4XHQ9IDA7XG4tXHRici1cdTAwM2VhYm9ydFx0PSAwO1xuLVx0YnItXHUwMDNlY3ljbGVzXHQ9IDA7XG4tXHRici1cdTAwM2V0eXBlXHQ9IDA7XG4tXHRici1cdTAwM2VzcGVjXHQ9IFBFUkZfQlJfU1BFQ19OQTtcbi1cdGJyLVx1MDAzZXJlc2VydmVkXHQ9IDA7XG4tfVxuLVxuIGV4dGVybiB2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGVhZGVyLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5pbmRleCA0NjM4NTQ0MjA1ZjI4Li4zNGViMDVlOWQ3NGQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcbisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5AQCAtMzc1Nyw2ICszNzU3LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9jdHhfc2NoZWRfdGFza19jYihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBtdV9jdHgsIFx1MDAyNmN0eC1cdTAwM2VwbXVfY3R4X2xpc3QsIHBtdV9jdHhfZW50cnkpIHtcbiBcdFx0Y3BjID0gdGhpc19jcGMocG11X2N0eC1cdTAwM2VwbXUpO1xuIFxuK1x0XHRpZiAoY3BjLVx1MDAzZXRhc2tfZXBjICE9IHBtdV9jdHgpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdGlmIChjcGMtXHUwMDNlc2NoZWRfY2JfdXNhZ2UgXHUwMDI2XHUwMDI2IHBtdV9jdHgtXHUwMDNlcG11LVx1MDAzZXNjaGVkX3Rhc2spXG4gXHRcdFx0cG11X2N0eC1cdTAwM2VwbXUtXHUwMDNlc2NoZWRfdGFzayhwbXVfY3R4LCB0YXNrLCBzY2hlZF9pbik7XG4gXHR9XG5AQCAtMzkwNyw3ICszOTEwLDcgQEAgc3RhdGljIHZvaWQgX19wZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjLFxuIFx0cGVyZl9jdHhfbG9jayhjcHVjdHgsIGNwdWN0eC1cdTAwM2V0YXNrX2N0eCk7XG4gXHRwZXJmX3BtdV9kaXNhYmxlKHBtdSk7XG4gXG4tXHRwbXUtXHUwMDNlc2NoZWRfdGFzayhjcGMtXHUwMDNldGFza19lcGMsIHRhc2ssIHNjaGVkX2luKTtcbitcdHBtdS1cdTAwM2VzY2hlZF90YXNrKFx1MDAyNmNwYy1cdTAwM2VlcGMsIHRhc2ssIHNjaGVkX2luKTtcbiBcbiBcdHBlcmZfcG11X2VuYWJsZShwbXUpO1xuIFx0cGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KTtcbkBAIC0zOTE3LDE1ICszOTIwLDE3IEBAIHN0YXRpYyB2b2lkIHBlcmZfcG11X3NjaGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxuIFx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LFxuIFx0XHRcdFx0Ym9vbCBzY2hlZF9pbilcbiB7XG4tXHRzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gdGhpc19jcHVfcHRyKFx1MDAyNnBlcmZfY3B1X2NvbnRleHQpO1xuIFx0c3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGM7XG4gXG4tXHQvKiBjcHVjdHgtXHUwMDNldGFza19jdHggd2lsbCBiZSBoYW5kbGVkIGluIHBlcmZfZXZlbnRfY29udGV4dF9zY2hlZF9pbi9vdXQgKi9cbi1cdGlmIChwcmV2ID09IG5leHQgfHwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KVxuK1x0aWYgKHByZXYgPT0gbmV4dClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cihcdTAwMjZzY2hlZF9jYl9saXN0KSwgc2NoZWRfY2JfZW50cnkpXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFx1MDAyNnNjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkge1xuK1x0XHRpZiAoY3BjLVx1MDAzZXRhc2tfZXBjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRfX3BlcmZfcG11X3NjaGVkX3Rhc2soY3BjLCBzY2hlZF9pbiA/IG5leHQgOiBwcmV2LCBzY2hlZF9pbik7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjM1Ljg2OTM2ODU5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzAzMzc0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgUE1VIEJyYW5jaCBFbnRyeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgaW1wcm92aW5nIGhvdyBgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5YCBpcyBpbml0aWFsaXplZCBhY3Jvc3MgYSBoYW5kZnVsIG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXRzLiBJdCdzIHRvdWNoaW5nIGBhbWRfYnJzLmNgLCBgYW1kX2xici5jYCwgYGludGVsX2xici5jYCwgYGFybV9icmJlLmNgLCBhbmQgcHJvYmFibHkgYSBmZXcgb3RoZXJzLiBUaGUgY3VycmVudCBtZXRob2QgaW52b2x2ZXMgZmlyc3QgY2xlYXJpbmcgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgd2l0aCBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKWAgYW5kIHRoZW4gaW5kaXZpZHVhbGx5IGFzc2lnbmluZyB2YWx1ZXMgdG8gdGhlIGZpZWxkcy4gVGhhdCBzZWVtcyBhIGJpdC4uLiBjbHVua3ksIGRvZXNuJ3QgaXQ/XG5cblRoZSBwcm9wb3NlZCBjaGFuZ2UgaXMgdG8gdXRpbGl6ZSBhIGNvbXBvdW5kIGxpdGVyYWwgZm9yIGluaXRpYWxpemF0aW9uOlxuXG5gYGBjXG4qYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbiAgICAuZnJvbSA9IC4uLixcbiAgICAudG8gPSAuLi4sXG4gICAgLy8gLi4uXG59O1xuYGBgXG5cblRoYXQgbG9va3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQsIGF2b2lkaW5nIHRoZSBuZWVkIGZvciBhIHNlcGFyYXRlIGNsZWFyIG9wZXJhdGlvbi4gQnV0LCB3YWl0IGEgc2Vjb25kLi4uIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgICpkb2VzKiBoYXZlIGJpdGZpZWxkcywgZG9lc24ndCBpdD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3IgcGxheXMgbmljZWx5IHdpdGggdGhvc2UgYml0ZmllbGRzLiBCZXN0IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgaW5hZHZlcnRlbnRseSBsb3NpbmcgZGF0YSBvciBtYWtpbmcgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLiBMZXQgbWUgZ28gZ3JhYiB0aGUgZGVmaW5pdGlvbiBhbmQgZ2l2ZSBpdCBhIGdvb2QgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjQwLjg5OTcwODk4NloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNDk0NzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaD0xMzM4PXVuaW9uIHBlcmZfbWVtX2RhdGFfc3JjIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMTQ5MC0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oOjE0OTE6c3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5IHtcXG5pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oLTE0OTItXFx0X191NjRcXHRmcm9tO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaD0xMzM4PXVuaW9uIHBlcmZfbWVtX2RhdGFfc3JjIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMTQ5MC0gKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oOjE0OTE6c3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5IHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oLTE0OTItXFx0X191NjRcXHRmcm9tO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jPTI3NT11NjQgKmdldF9pbnRyX3JlZ3Moc3RydWN0IGV2ZW50ICpldmVudCwgdm9pZCAqc2FtcGxlX2J1ZmYpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3BtdS9zYW1wbGluZ190ZXN0cy9taXNjLmMtMjk3LVxcdFxcdCAqIH07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jOjI5ODpcXHRcXHQgKiBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvcG11L3NhbXBsaW5nX3Rlc3RzL21pc2MuYy0yOTktXFx0XFx0ICogICAgIHU2NFxcdGZyb207XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjQzLjcxNDY5NDMyNFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg5MzQzMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFBlcmYgRXZlbnQgU3RydWN0dXJlIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgcGVyZiBldmVudHMgYXJlIHN0cnVjdHVyZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaGAuIEkgcmVjYWxsIHRoYXQgZmlsZSBkZWZpbmVzIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBzeXN0ZW0sIHNvIGl0J3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gTGV0J3MgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxNDkxLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIHRoZXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGxheW91dCBvciBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGV2ZW50IGRhdGEuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSBkZWVwZXIgZGl2ZSB0aGFuIGEgY3Vyc29yeSBnbGFuY2UsIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBmb3IgYSBjdXJyZW50IHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDo0Ny4wMDQwNDAzNDJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ4MDpcXHQgKiBwcmVkaWN0ZWQ6IGJyYW5jaCB0YXJnZXQgd2FzIHByZWRpY3RlZFxcbjE0ODE6XFx0ICpcXG4xNDgyOlxcdCAqIHN1cHBvcnQgZm9yIG1pc3ByZWQsIHByZWRpY3RlZCBpcyBvcHRpb25hbC4gSW4gY2FzZSBpdFxcbjE0ODM6XFx0ICogaXMgbm90IHN1cHBvcnRlZCBtaXNwcmVkID0gcHJlZGljdGVkID0gMC5cXG4xNDg0OlxcdCAqXFxuMTQ4NTpcXHQgKiAgICAgaW5fdHg6IHJ1bm5pbmcgaW4gYSBoYXJkd2FyZSB0cmFuc2FjdGlvblxcbjE0ODY6XFx0ICogICAgIGFib3J0OiBhYm9ydGluZyBhIGhhcmR3YXJlIHRyYW5zYWN0aW9uXFxuMTQ4NzpcXHQgKiAgICBjeWNsZXM6IGN5Y2xlcyBmcm9tIGxhc3QgYnJhbmNoIChvciAwIGlmIG5vdCBzdXBwb3J0ZWQpXFxuMTQ4ODpcXHQgKiAgICAgIHR5cGU6IGJyYW5jaCB0eXBlXFxuMTQ4OTpcXHQgKiAgICAgIHNwZWM6IGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvIChvciAwIGlmIG5vdCBzdXBwb3J0ZWQpXFxuMTQ5MDpcXHQgKi9cXG4xNDkxOlxcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XFxuMTQ5MjpcXHRcXHRfX3U2NFxcdGZyb207XFxuMTQ5MzpcXHRcXHRfX3U2NFxcdHRvO1xcbjE0OTQ6XFx0XFx0X191NjRcXHRtaXNwcmVkICAgOiAgMSwgLyogdGFyZ2V0IG1pc3ByZWRpY3RlZCAqL1xcbjE0OTU6XFx0XFx0XFx0cHJlZGljdGVkIDogIDEsIC8qIHRhcmdldCBwcmVkaWN0ZWQgKi9cXG4xNDk2OlxcdFxcdFxcdGluX3R4ICAgICA6ICAxLCAvKiBpbiB0cmFuc2FjdGlvbiAqL1xcbjE0OTc6XFx0XFx0XFx0YWJvcnQgICAgIDogIDEsIC8qIHRyYW5zYWN0aW9uIGFib3J0ICovXFxuMTQ5ODpcXHRcXHRcXHRjeWNsZXMgICAgOiAxNiwgLyogY3ljbGUgY291bnQgdG8gbGFzdCBicmFuY2ggKi9cXG4xNDk5OlxcdFxcdFxcdHR5cGUgICAgICA6ICA0LCAvKiBicmFuY2ggdHlwZSAqL1xcbjE1MDA6XFx0XFx0XFx0c3BlYyAgICAgIDogIDIsIC8qIGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvICovXFxuMTUwMTpcXHRcXHRcXHRuZXdfdHlwZSAgOiAgNCwgLyogYWRkaXRpb25hbCBicmFuY2ggdHlwZSAqL1xcbjE1MDI6XFx0XFx0XFx0cHJpdiAgICAgIDogIDMsIC8qIHByaXZpbGVnZSBsZXZlbCAqL1xcbjE1MDM6XFx0XFx0XFx0cmVzZXJ2ZWQgIDogMzE7XFxuMTUwNDpcXHR9O1xcbjE1MDU6XFx0XFxuMTUwNjpcXHQvKiBTaXplIG9mIHVzZWQgaW5mbyBiaXRzIGluIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqL1xcbjE1MDc6XFx0I2RlZmluZSBQRVJGX0JSQU5DSF9FTlRSWV9JTkZPX0JJVFNfTUFYXFx0XFx0MzNcXG4xNTA4OlxcdFxcbjE1MDk6XFx0dW5pb24gcGVyZl9zYW1wbGVfd2VpZ2h0IHtcXG4xNTEwOlxcdFxcdF9fdTY0XFx0ICAgICAgZnVsbDtcXG4xNTExOlxcdCNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRClcXG4xNTEyOlxcdFxcdHN0cnVjdCB7XFxuMTUxMzpcXHRcXHRcXHRfX3UzMiB2YXIxX2R3O1xcbjE1MTQ6XFx0XFx0XFx0X191MTYgdmFyMl93O1xcbjE1MTU6XFx0XFx0XFx0X191MTYgdmFyM193O1xcbjE1MTY6XFx0XFx0fTtcXG4xNTE3OlxcdCNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxcbjE1MTg6XFx0XFx0c3RydWN0IHtcXG4xNTE5OlxcdFxcdFxcdF9fdTE2IHZhcjNfdztcXG4xNTIwOlxcdFxcdFxcdF9fdTE2IHZhcjJfdztcXG4xNTIxOlxcdFxcdFxcdF9fdTMyIHZhcjFfZHc7XFxuMTUyMjpcXHRcXHR9O1xcbjE1MjM6XFx0I2Vsc2VcXG4xNTI0OlxcdCMgZXJyb3IgXFxcIlVua25vd24gZW5kaWFubmVzc1xcXCJcXG4xNTI1OlxcdCNlbmRpZlxcbjE1MjY6XFx0fTtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0I2VuZGlmIC8qIF9VQVBJX0xJTlVYX1BFUkZfRVZFTlRfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDo0Ny4wMDQyMDQ5MDJaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNTA1MzY1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGVyZl9icmFuY2hfZW50cnlgIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgY2hhbmdpbmcgaG93IHRoZSBgcGVyZl9icmFuY2hfZW50cnlgIHN0cnVjdCBpcyBpbml0aWFsaXplZC4gIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBzaXplcyBhbmQgdGhlIGJpdGZpZWxkcy4gVGhlIHN0cnVjdCBjb250YWlucyBgZnJvbWAsIGB0b2AsIGFuZCBhIDY0LWJpdCBiaXRmaWVsZCDigJMgYSBnb29kIHN0YXJ0LiBJIGRpZCB0aGUgbWF0aCAxKzErMSsxKzE2KzQrMis0KzMrMzEgYW5kIGNvbmZpcm0gdGhhdCB0aGUgYml0ZmllbGQgKmRvZXMqIHN1bSB0byA2NCBiaXRzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgdGhlIGNvZGUgaW50ZW5kcy4gVGhhdCdzIGdvb2QuXG5cbk5vdywgdGhlIG9sZCBjb2RlIHVzZWQgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicilgIGZvbGxvd2VkIGJ5IGFzc2lnbm1lbnRzIHRvIGBmcm9tYCBhbmQgYHRvYC4gIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcGF0Y2ggaXMgKnJlbW92aW5nKiBpdCBhbmQgcmVwbGFjaW5nIHRoZSBjb2RlIHdpdGggYSBjb21wb3VuZCBsaXRlcmFsLiBCdXQgd2FpdCBhIG1pbnV0ZSwgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2AgaGFzIGEgY3JpdGljYWwgZmxhdy4gSXQgKmRvZXNuJ3QqIGNsZWFyIGBuZXdfdHlwZWAgb3IgYHByaXZgISAgVGhvc2UgZmllbGRzIHdlcmUgYWRkZWQgbGF0ZXIuIFNvLCBpZiBgYnJgIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYG5ld190eXBlYCBhbmQgYHByaXZgIHdvdWxkIGJlIGxlZnQgd2l0aCB3aGF0ZXZlciBnYXJiYWdlIHdhcyBpbiBtZW1vcnkuIFlpa2VzLiBUaGF0J3MgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhaywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc291cmNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGlmIHRob3NlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBsYXRlciB1c2VkLlxuXG5UaGUgcGF0Y2gncyByZXBsYWNlbWVudCBvZiBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHRoZSBjb21wb3VuZCBsaXRlcmFsIGFzc2lnbm1lbnQgbG9va3MgcHJvbWlzaW5nLiBJIGtub3cgdGhlIEMgc3RhbmRhcmQgZ3VhcmFudGVlcyB0aGF0IHdoZW4gYSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIGNvbXBvdW5kIGxpdGVyYWwsICphbnkqIGZpZWxkcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQgd291bGQgaW5jbHVkZSB0aGUgYG5ld190eXBlYCwgYHByaXZgLCBgcmVzZXJ2ZWRgLCBhbmQgYW55IHBhZGRpbmcgYml0cy4gSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgQzk5IHN0YW5kYXJkIGZvciB0aGUgZGV0YWlscy4gVGhlIHN0YW5kYXJkIHN0YXRlcywgdGhhdCwgZm9yIGEgc3RydWN0LCBhbnkgcGFydHMgbm90IGluaXRpYWxpemVkIGV4cGxpY2l0bHkgYXJlIGluaXRpYWxpemVkIGFzIGlmIHRoZSBzdHJ1Y3QgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgcGFkZGluZyBiaXRzIGFyZSB6ZXJvZWQgb3V0LlxuXG5CdXQgaXMgdGhlcmUgYW55IHBhZGRpbmcgaGVyZT8gYGZyb21gIGFuZCBgdG9gIGFyZSBgX191NjRgICg4IGJ5dGVzIGVhY2gpLiBUaGUgYml0ZmllbGRzIHN1bSB0byA4IGJ5dGVzLCBzbyB0aGUgdG90YWwgc2l6ZSBpcyAyNCBieXRlcywgYW5kIHRoZXJlJ3Mgbm8gcGFkZGluZy4gU28sIHRoZSBjb21wb3VuZCBsaXRlcmFsICpkZWZpbml0ZWx5KiBpbml0aWFsaXplcyBldmVyeXRoaW5nIGNvcnJlY3RseS5cblxuTXkgbWluZCB0aGVuIGZsYXNoZXMgYmFjayB0byB0aGUgb2xkIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYGJyYCB3YXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGBuZXdfdHlwZWAgYW5kIGBwcml2YCB3b3VsZCBhYnNvbHV0ZWx5IGJlIGxlZnQgdW5pbml0aWFsaXplZCEgVGhpcyBpcyBhIGJ1ZyB0aGF0IHRoZSBwYXRjaCAqZml4ZXMqLiBUaGUgcHJldmlvdXMgY29kZSBoYWQgYSByZWFsIHZ1bG5lcmFiaWxpdHkuXG5cblNvLCBkb2VzIHRoaXMgcGF0Y2ggKmludHJvZHVjZSogYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBkb2VzIGl0ICpmaXgqIGl0PyBPYnZpb3VzbHksIGl0IGZpeGVzIHRoZSBwcm9ibGVtIVxuXG5XYWl0LCB0aGlzIEtNU0FOIHJ1bGUuLi4gXCJTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzLi4uXCIgU2luY2UgdGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcsIGl0IHNlZW1zIGxpa2UgS01TQU4gaXMgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIFdlJ3JlICpyZW1vdmluZyogYSBwb3RlbnRpYWwgbGVhaywgbm90IGFkZGluZyBvbmUuIEl0J3MgbGlrZSBmaXhpbmcgYSBidWc6IHlvdSB0eXBpY2FsbHkgZG9uJ3QgbmVlZCBmdXp6aW5nIHRvIGZpbmQgdGhlIGJ1ZyB5b3UganVzdCBmaXhlZC5cblxuSSBhbSByZS1leGFtaW5pbmcgdGhlIGNvZGUgbm93OlxuYGBgY1xuXHRcdGJyW25yXSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuXHRcdFx0LmZyb21cdD0gZnJvbSxcblx0XHRcdC50b1x0PSB0byxcblx0XHR9O1xuXHRcdG5yKys7XG5gYGBcblRoaXMgaXMgZmluZS4gV2UgYXJlIGluaXRpYWxpemluZyBgYnJbbnJdYCBjb21wbGV0ZWx5LlxuXG5BbmQganVzdCB0byBiZSBzdXBlciBzdXJlIGFib3V0IHRoZSBvbGQgY29kZSwgYHNwZWNgIGluIHRoZSBvbGQgY29kZSAqd2FzKiBpbml0aWFsaXplZCB0byBgUEVSRl9CUl9TUEVDX05BYC4gVGhpcyB2YWx1ZSBpcyAqcHJvYmFibHkqIHplcm8uIExldCdzIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNTowNC4zNTQ3NDQ3MzlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDIxNjQ0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEVSRl9CUl9TUEVDX05BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6MTU4OlxcdFBFUkZfQlJfU1BFQ19OQSxcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE1OS1cXHRQRVJGX0JSX1NQRUNfV1JPTkdfUEFUSCxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg6Mjc1OlxcdFBFUkZfQlJfU1BFQ19OQVxcdFxcdFxcdFxcdD0gMCxcXHQvKiBOb3QgYXZhaWxhYmxlICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0yNzYtXFx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcXHRcXHRcXHQ9IDEsXFx0LyogU3BlY3VsYXRpdmUgYnV0IG9uIHdyb25nIHBhdGggKi9cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg6Mjc1OlxcdFBFUkZfQlJfU1BFQ19OQVxcdFxcdFxcdFxcdD0gMCxcXHQvKiBOb3QgYXZhaWxhYmxlICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0yNzYtXFx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcXHRcXHRcXHQ9IDEsXFx0LyogU3BlY3VsYXRpdmUgYnV0IG9uIHdyb25nIHBhdGggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDU6MDcuMTk2OTE0MjUzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzgxOTMyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBJbnRyb2R1Y2VkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgY29tcG91bmQgbGl0ZXJhbCBpbml0aWFsaXplcyBgc3BlY2AgdG8gemVybywgd2hpY2ggaXMgYFBFUkZfQlJfU1BFQ19OQWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGVudGlyZSBwYXRjaCBmb3IgYW55IG90aGVyIGNoYW5nZXMuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhbmQgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgZml4IHJlbGF0ZWQgdG8gY29udGV4dCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IFBNVSBjb250ZXh0IGlzIHVzZWQgZHVyaW5nIHRhc2sgc2NoZWR1bGluZy4gSXQgbW9kaWZpZXMgdGhlIHBvaW50ZXIgcGFzc2VkIHRvIGBwbXUtXHUwMDNlc2NoZWRfdGFza2AsIHVzaW5nIHRoZSBlbWJlZGRlZCBgZXBjYCBpbiBgY3BjYC4gTm90aGluZyBoZXJlIHBvaW50cyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSwgbGlrZWx5IGEgYnVnIGZpeC5cblxuTm93LCBsZXQncyBhZGRyZXNzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiB0aGUgY29tcG91bmQgbGl0ZXJhbHMgdGhlbXNlbHZlcy4gTXkgY29uY2VybiB3YXMgYXJvdW5kIGhvdyB0aGUgY29tcGlsZXIgbWlnaHQgaGFuZGxlIHRoZXNlOiBgbWVtY3B5YCBmcm9tIHJlYWQtb25seSBkYXRhLCBjbGVhcmluZyBhbmQgdGhlbiBzZXR0aW5nLCBldGMuIFN0YW5kYXJkIEMgYmVoYXZpb3Igc2hvdWxkIHplcm8gdW51c2VkIGZpZWxkcy4gU3BlY2lmaWNhbGx5LCAgdGhlIGNvbXBpbGVyIGlzIHN1cHBvc2VkIHRvIHplcm8gaW5pdGlhbGl6ZSBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNldC4gVGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhlcmUgYXJlIHBhZGRpbmcgYml0cyBpbiB0aGUgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAuIEkgY2hlY2tlZC4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgYml0cy4gVGhlIGJpdGZpZWxkcyBleGFjdGx5IGZpbGwgYSA2NC1iaXQgaW50ZWdlciwgYW5kIHRoZSBzdHJ1Y3QgaXMgYSBtdWx0aXBsZSBvZiA4LWJ5dGVzIGFuZCB3aXRob3V0IGFueSBvdGhlciBwYWRkaW5nLiBUaGUgY29tcGlsZXIgKm11c3QqIHplcm8gZXZlcnl0aGluZyBlbHNlLiBTbywgdGhlIGNvbXBvdW5kIGxpdGVyYWwgKndpbGwqIGluaXRpYWxpemUgYWxsIGZpZWxkcy5cblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBmb3IgYW55dGhpbmcgbGlrZSB0aGUgY29tcGlsZXIgc2V0dGluZyBiaXRmaWVsZHMgaW5kaXZpZHVhbGx5IGFuZCBsZWF2aW5nIG90aGVycyB1bmluaXRpYWxpemVkLiBIb3dldmVyLCBDIHN0YW5kYXJkIHJlcXVpcmVzIHRoYXQgYW55IGZpZWxkcyBub3QgZXhwbGljaXRseSBpbml0aWFsaXplZCBhcmUgemVyb2VkLiBUaGlzIGlzIHNhZmUsIGFuZCBJIGNvbmZpcm1lZCB0aGF0IEdDQyBhbmQgQ2xhbmcgYm90aCBkbyB0aGlzLlxuXG5JIHN0YXJ0ZWQgdG8gY2hlY2sgaWYgdGhlIHBhdGNoIG1pZ2h0ICpmaXgqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByYXRoZXIgdGhhbiBpbnRyb2R1Y2UuIEluIHdoaWNoIGNhc2UsIGl0IHdvdWxkIG5vdCByZXF1aXJlIEtNU0FOLCBiZWNhdXNlIHRoZSBjb2RlIGRvZXMgbm90IGFkZCBhIG5ldyByaXNrLiBJIGNvbnNpZGVyZWQgdGhhdCBpdCBtaWdodCAqZXhwb3NlKiBhbiBleGlzdGluZyByaXNrLCBieSBtYWtpbmcgaXQgcmVhY2hhYmxlIGluIGEgbmV3IHdheS4gQnV0IGl0IGRvZXNuJ3QuIEluc3RlYWQsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyAqcHJldmVudGluZyogdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYnkgc3dpdGNoaW5nIHRvIGNvbXBvdW5kIGxpdGVyYWxzLlxuXG5BIGNsb3NlciBsb29rIHJldmVhbGVkIHRoYXQgdGhlIHBhdGNoIGlzICpyZXBsYWNpbmcqIHBvdGVudGlhbGx5IGluY29tcGxldGUgaW5pdGlhbGl6YXRpb24gd2l0aCBjb21wb3VuZCBsaXRlcmFscy4gSXQncyBzYWZlISBJbiBmYWN0LCB0aGUgY29kZSBJJ20gbG9va2luZyBhdCAqZml4ZXMqIGFuIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlcnNwYWNlIGJlY2F1c2UgcHJldmlvdXMgY29kZSB3YXMgbm90IGZ1bGx5IHplcm9pbmcgY2VydGFpbiBmaWVsZHMuXG5cbkluIHRoaXMgY29udGV4dCwgSSBuZWVkIHRvIHJldmlzaXQgdGhlIHN0cnVjdHVyZSBpdHNlbGYsIGVzcGVjaWFsbHkgd2hldGhlciBpdCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJZiBpdCBpcywgdGhlbiB0aGUgaW5mb3JtYXRpb24gbGVhayBpcyByZWxldmFudCwgc28gSSBkb3VibGUgY2hlY2tlZCB0aGF0IGBwZXJmX2JyYW5jaF9lbnRyeWAgaXMgcGFydCBvZiB0aGUgcGVyZiBzYW1wbGUgZGF0YSwgd2hpY2ggaXMgd3JpdHRlbiB0byB0aGUgcmluZyBidWZmZXIgYW5kIGNhbiBiZSBhY2Nlc3NlZCBieSB1c2Vyc3BhY2UuXG5cblRoZSBjaGFuZ2UgaW4gYGludGVsX3BtdV9zdG9yZV9sYnJgIGlzIHJlYWxseSBqdXN0IGEgcmVmYWN0b3JpbmcuIEl0IHJlcGxhY2VzIG1hbnVhbCBhc3NpZ25tZW50IHdpdGggYSBjb21wb3VuZCBsaXRlcmFsLiBUaGUgY2hhbmdlIGlzIHNhZmUhXG5cbkxvb2tpbmcgYXQgdGhlIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhZ2FpbiwgSSBzZWUgdGhlIGNoZWNrLCBidXQgbm8gbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weWluZyB0byB1c2Vyc3BhY2UgaXMgYWRkZWQuIFNvIGl0J3Mgc3RpbGwgc2FmZS4gQW5kIHRoZSBvdGhlciBjaGFuZ2UgcGFzc2VzIGFuIGVtYmVkZGVkIHBvaW50ZXIgd2hpY2ggc2hvdWxkIGJlIGluaXRpYWxpemVkLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLlxuXG4qKkNvbmNsdXNpb246KiogVGhlIGNvbXBvdW5kIGxpdGVyYWwgYXBwcm9hY2ggKmZpeGVzKiBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLiBUaGlzIHBhdGNoIGRvZXMgbm90ICppbnRyb2R1Y2UqIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFsbCB1bnNwZWNpZmllZCBmaWVsZHMgYW5kIGJpdGZpZWxkcyBhcmUgY29ycmVjdGx5IHplcm8taW5pdGlhbGl6ZWQgZHVlIHRvIHRoZSBDIHN0YW5kYXJkIGd1YXJhbnRlZSBmb3IgY29tcG91bmQgbGl0ZXJhbHMuIFRoZSBsb2dpYyBjaGFuZ2VzIGFyZSB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MywiT3V0cHV0VG9rZW5zIjozMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA1OjQ2Ljk3ODg1MTc1MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGFjcm9zcyBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTVUgZHJpdmVycyAoQU1ELCBJbnRlbCwgQVJNKS4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKClgIHRvIGNsZWFyIGJpdGZpZWxkcywgYnV0IHRoaXMgZnVuY3Rpb24gd2FzIG91dGRhdGVkIGFuZCBmYWlsZWQgdG8gY2xlYXIgbmV3ZXIgYml0ZmllbGRzIGxpa2UgYG5ld190eXBlYCBhbmQgYHByaXZgLCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBwZXJmIHJpbmcgYnVmZmVyLlxcblxcblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cXG5cXG5UaGUgb3RoZXIgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFyZSBsb2dpYyBmaXhlcyBmb3IgUE1VIGNvbnRleHQgc2NoZWR1bGluZyAoYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcykgYW5kIGRvIG5vdCBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlLlxcblxcblNpbmNlIHRoaXMgcGF0Y2ggKnJlc29sdmVzKiBhbiBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9uZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5YCBhY3Jvc3Mgc2V2ZXJhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1VIGRyaXZlcnMgKEFNRCwgSW50ZWwsIEFSTSkuIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcygpYCB0byBjbGVhciBiaXRmaWVsZHMsIGJ1dCB0aGlzIGZ1bmN0aW9uIHdhcyBvdXRkYXRlZCBhbmQgZmFpbGVkIHRvIGNsZWFyIG5ld2VyIGJpdGZpZWxkcyBsaWtlIGBuZXdfdHlwZWAgYW5kIGBwcml2YCwgcG90ZW50aWFsbHkgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgcGVyZiByaW5nIGJ1ZmZlci5cXG5cXG5UaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXBsYWNpbmcgdGhlIG1hbnVhbCBjbGVhcmluZyB3aXRoIGNvbXBvdW5kIGxpdGVyYWwgYXNzaWdubWVudHMgKGUuZy4sIGAqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsgLi4uIH07YCkuIEFjY29yZGluZyB0byB0aGUgQyBzdGFuZGFyZCwgYW55IGZpZWxkcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gYSBjb21wb3VuZCBsaXRlcmFsIGFyZSBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5YCBpcyBleGFjdGx5IDI0IGJ5dGVzIHdpdGggbm8gcGFkZGluZyAodHdvIDY0LWJpdCBpbnRlZ2VycyBhbmQgZXhhY3RseSA2NCBiaXRzIG9mIGJpdGZpZWxkcyksIHNvIHRoZSBjb21wb3VuZCBsaXRlcmFsIGd1YXJhbnRlZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuXFxuXFxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cXG5cXG5TaW5jZSB0aGlzIHBhdGNoICpyZXNvbHZlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvbmUsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 14:47:11 +0000 UTC FinishedAt: 2026-08-10 15:05:49 +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": "36c8b02c3fe9ba56d6f11ec055cd879bc49871f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "CPU_SUP_AMD", "PERF_EVENTS_AMD_BRS", "CPU_SUP_INTEL", "ARM64_BRBE", "ARM_PMUV3" ], "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": "36c8b02c3fe9ba56d6f11ec055cd879bc49871f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "CPU_SUP_AMD", "PERF_EVENTS_AMD_BRS", "CPU_SUP_INTEL", "ARM64_BRBE", "ARM_PMUV3" ], "series_id": "edcd87bb-4acf-41ae-8517-44218e0c4a91" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "amd_brs_drain", "amd_pmu_lbr_read", "intel_pmu_lbr_read_32", "intel_pmu_lbr_read_64", "intel_pmu_store_pebs_lbrs", "brbe_read_filtered_entries" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0NQVV9TVVBfQU1EJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTX0FNRF9CUlMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9JTlRFTCYjMzQ7LAogICAgJiMzNDtBUk02NF9CUkJFJiMzNDssCiAgICAmIzM0O0FSTV9QTVVWMyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtZF9icnNfZHJhaW4mIzM0OywKICAgICYjMzQ7YW1kX3BtdV9sYnJfcmVhZCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfMzImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X2xicl9yZWFkXzY0JiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9zdG9yZV9wZWJzX2xicnMmIzM0OywKICAgICYjMzQ7YnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBicmFuY2ggZW50cnkgaW5pdGlhbGl6YXRpb24gaW4gcGVyZiBldmVudCBQTVUgZHJpdmVycyAoQU1EIEJSUywgQU1EIExCUiwgSW50ZWwgTEJSLCBBUk0gQlJCRSkgYnkgcmVwbGFjaW5nIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHBlcmYgZXZlbnRzIHN1YnN5c3RlbSAoYGtlcm5lbC9ldmVudHMvY29yZS5jYCkgdG8gY2hhbmdlIGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgUE1VIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDllZTVlOGZjNDkxMTEwNzU0NTZiOGZhOTQzODRhMzIwMjQ5OGM0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjAyOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG5pbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuQEAgLTM0MywxMSAmIzQzOzM0MywxMCBAQCB2b2lkIGFtZF9icnNfZHJhaW4odm9pZClcbiBcdFx0aWYgKCFhbWRfYnJzX21hdGNoX3BsbShldmVudCwgZnJvbSwgdG8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnImIzQzO25yKTtcbi1cbi1cdFx0YnJbbnJdLmZyb20gPSBmcm9tO1xuLVx0XHRicltucl0udG8gICA9IHRvO1xuLVxuJiM0MztcdFx0YnJbbnJdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4mIzQzO1x0XHRcdC5mcm9tXHQ9IGZyb20sXG4mIzQzO1x0XHRcdC50b1x0PSB0byxcbiYjNDM7XHRcdH07XG4gXHRcdG5yJiM0MzsmIzQzOztcbiBcdH1cbiBlbXB0eTpcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuY1xuaW5kZXggOWQ5Yzk2MTk4OWQ1MS4uYTU1NjQ2ZmNiODQ2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbkBAIC0xODQsMTMgJiM0MzsxODQsNiBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICAgIGVudHJ5LnRvLnNwbGl0LnJlc2VydmVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgJiM0Mzsgb3V0KTtcbi1cbi1cdFx0YnJbb3V0XS5mcm9tXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS5mcm9tLnNwbGl0LmlwKTtcbi1cdFx0YnJbb3V0XS50b1x0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkudG8uc3BsaXQuaXApO1xuLVx0XHRicltvdXRdLm1pc3ByZWRcdD0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0O1xuLVx0XHRicltvdXRdLnByZWRpY3RlZCA9ICFicltvdXRdLm1pc3ByZWQ7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIFNldCBicmFuY2ggc3BlY3VsYXRpb24gaW5mb3JtYXRpb24gdXNpbmcgdGhlIHN0YXR1cyBvZlxuIFx0XHQgKiB0aGUgdmFsaWQgYW5kIHNwZWMgYml0cy5cbkBAIC0yMDgsNyAmIzQzOzIwMSwxNCBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICogc3BlY3VsYXRpdmUgYW5kIHRvb2sgdGhlIGNvcnJlY3QgcGF0aFxuIFx0XHQgKi9cbiBcdFx0aWR4ID0gKGVudHJ5LnRvLnNwbGl0LnZhbGlkIFx1MDAzY1x1MDAzYyAxKSB8IGVudHJ5LnRvLnNwbGl0LnNwZWM7XG4tXHRcdGJyW291dF0uc3BlYyA9IGxicl9zcGVjX21hcFtpZHhdO1xuJiM0MztcbiYjNDM7XHRcdGJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbiYjNDM7XHRcdFx0LmZyb21cdFx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCksXG4mIzQzO1x0XHRcdC50b1x0XHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksXG4mIzQzO1x0XHRcdC5taXNwcmVkXHQ9IGVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdCxcbiYjNDM7XHRcdFx0LnByZWRpY3RlZFx0PSAhZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LFxuJiM0MztcdFx0XHQuc3BlY1x0XHQ9IGxicl9zcGVjX21hcFtpZHhdLFxuJiM0MztcdFx0fTtcbiBcdFx0b3V0JiM0MzsmIzQzOztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuQEAgLTc1NiwxMCAmIzQzOzc1NiwxMCBAQCB2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbiBcbiBcdFx0cmRtc3JxKHg4Nl9wbXUubGJyX2Zyb20gJiM0MzsgbGJyX2lkeCwgbXNyX2xhc3RicmFuY2gubGJyKTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKTtcbi1cbi1cdFx0YnItXHUwMDNlZnJvbVx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tO1xuLVx0XHRici1cdTAwM2V0b1x0XHQ9IG1zcl9sYXN0YnJhbmNoLnRvO1xuJiM0MztcdFx0KmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4mIzQzO1x0XHRcdC5mcm9tXHQ9IG1zcl9sYXN0YnJhbmNoLmZyb20sXG4mIzQzO1x0XHRcdC50b1x0PSBtc3JfbGFzdGJyYW5jaC50byxcbiYjNDM7XHRcdH07XG4gXHRcdGJyJiM0MzsmIzQzOztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcbkBAIC04NDcsMTQgJiM0Mzs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4gXHRcdGlmIChhYm9ydCBcdTAwMjZcdTAwMjYgeDg2X3BtdS5sYnJfZG91YmxlX2Fib3J0IFx1MDAyNlx1MDAyNiBvdXQgXHUwMDNlIDApXG4gXHRcdFx0b3V0LS07XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhiciYjNDM7b3V0KTtcbi1cdFx0YnJbb3V0XS5mcm9tXHQgPSBmcm9tO1xuLVx0XHRicltvdXRdLnRvXHQgPSB0bztcbi1cdFx0YnJbb3V0XS5taXNwcmVkXHQgPSBtaXM7XG4tXHRcdGJyW291dF0ucHJlZGljdGVkID0gcHJlZDtcbi1cdFx0YnJbb3V0XS5pbl90eFx0ID0gaW5fdHg7XG4tXHRcdGJyW291dF0uYWJvcnRcdCA9IGFib3J0O1xuLVx0XHRicltvdXRdLmN5Y2xlc1x0ID0gY3ljbGVzO1xuJiM0MztcdFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuJiM0MztcdFx0XHQuZnJvbVx0XHQ9IGZyb20sXG4mIzQzO1x0XHRcdC50b1x0XHQ9IHRvLFxuJiM0MztcdFx0XHQubWlzcHJlZFx0PSBtaXMsXG4mIzQzO1x0XHRcdC5wcmVkaWN0ZWRcdD0gcHJlZCxcbiYjNDM7XHRcdFx0LmluX3R4XHRcdD0gaW5fdHgsXG4mIzQzO1x0XHRcdC5hYm9ydFx0XHQ9IGFib3J0LFxuJiM0MztcdFx0XHQuY3ljbGVzXHRcdD0gY3ljbGVzLFxuJiM0MztcdFx0fTtcbiBcdFx0b3V0JiM0MzsmIzQzOztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gb3V0O1xuQEAgLTkwNSw2ICYjNDM7OTA2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcbiBcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZTtcbiBcdHN0cnVjdCBsYnJfZW50cnkgKmxicjtcbiBcdHU2NCBmcm9tLCB0bywgaW5mbztcbiYjNDM7XHRib29sIG1pc3ByZWQ7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHg4Nl9wbXUubGJyX25yOyBpJiM0MzsmIzQzOykge1xuQEAgLTkyMSwyNCAmIzQzOzkyMywyNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuIFx0XHR0byA9IHJkbGJyX3RvKGksIGxicik7XG4gXHRcdGluZm8gPSByZGxicl9pbmZvKGksIGxicik7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlKTtcbi1cbi1cdFx0ZS1cdTAwM2Vmcm9tXHRcdD0gZnJvbTtcbi1cdFx0ZS1cdTAwM2V0b1x0XHQ9IHRvO1xuLVx0XHRlLVx1MDAzZW1pc3ByZWRcdD0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuLVx0XHRlLVx1MDAzZXByZWRpY3RlZFx0PSAhZS1cdTAwM2VtaXNwcmVkO1xuLVx0XHRlLVx1MDAzZWluX3R4XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0lOX1RYKTtcbi1cdFx0ZS1cdTAwM2VhYm9ydFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19BQk9SVCk7XG4tXHRcdGUtXHUwMDNlY3ljbGVzXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pO1xuLVx0XHRlLVx1MDAzZXR5cGVcdFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZiBjcHVjLVx1MDAzZWxicl9lbnRyaWVzW2ldIHRvXG4tXHRcdCAqIHRlbXBvcmFyaWx5IHN0b3JlIHRoZSBicmFuY2ggY291bnRlcnMgaW5mb3JtYXRpb24uXG4tXHRcdCAqIFRoZSBsYXRlciBjb2RlIHdpbGwgZGVjaWRlIHdoYXQgY29udGVudCBjYW4gYmUgZGlzY2xvc2VkXG4tXHRcdCAqIHRvIHRoZSBwZXJmIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS5cbi1cdFx0ICovXG4tXHRcdGUtXHUwMDNlcmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjYgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0s7XG4mIzQzO1x0XHRtaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuJiM0MztcbiYjNDM7XHRcdCplID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4mIzQzO1x0XHRcdC5mcm9tXHRcdD0gZnJvbSxcbiYjNDM7XHRcdFx0LnRvXHRcdD0gdG8sXG4mIzQzO1x0XHRcdC5taXNwcmVkXHQ9IG1pc3ByZWQsXG4mIzQzO1x0XHRcdC5wcmVkaWN0ZWRcdD0gIW1pc3ByZWQsXG4mIzQzO1x0XHRcdC5pbl90eFx0XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0lOX1RYKSxcbiYjNDM7XHRcdFx0LmFib3J0XHRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fQUJPUlQpLFxuJiM0MztcdFx0XHQuY3ljbGVzXHRcdD0gZ2V0X2xicl9jeWNsZXMoaW5mbyksXG4mIzQzO1x0XHRcdC50eXBlXHRcdD0gZ2V0X2xicl9icl90eXBlKGluZm8pLFxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2ZcbiYjNDM7XHRcdFx0ICogY3B1Yy1cdTAwM2VsYnJfZW50cmllc1tpXSB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGVcbiYjNDM7XHRcdFx0ICogYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLiBUaGUgbGF0ZXIgY29kZSB3aWxsXG4mIzQzO1x0XHRcdCAqIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZCB0byB0aGUgcGVyZlxuJiM0MztcdFx0XHQgKiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHQucmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdCAgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0ssXG4mIzQzO1x0XHR9O1xuIFx0fVxuIFxuIFx0Y3B1Yy1cdTAwM2VsYnJfc3RhY2subnIgPSBpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jIGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbmluZGV4IGJhNTU0ZTBjODQ2YzQuLjI1NGJlNGRhOGFlMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbkBAIC02MDQsNyAmIzQzOzYwNCw3IEBAIHN0YXRpYyBib29sIHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldChpbnQgaW5kZXgsIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGJyYmluZiA9IGJyZWdzLmJyYmluZjtcbi1cdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlbnRyeSk7XG4mIzQzO1x0KmVudHJ5ID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7IH07XG4gXHRpZiAoYnJiZV9yZWNvcmRfaXNfY29tcGxldGUoYnJiaW5mKSkge1xuIFx0XHRlbnRyeS1cdTAwM2Vmcm9tID0gYnJlZ3MuYnJic3JjO1xuIFx0XHRlbnRyeS1cdTAwM2V0byA9IGJyZWdzLmJyYnRndDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXG5pbmRleCA0OGQ4NTFmYmQ4ZWE1Li4zMTA2ODFjY2NiNTBhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXG5AQCAtMTQ2NywyMyAmIzQzOzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4tLypcbi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS5cbi0gKiBUaGUgdG8gYW5kIGZyb20gZmllbGRzIGFyZSBub3QgY2xlYXJlZCBiZWNhdXNlIHRoZXkgYXJlXG4tICogc3lzdGVtYXRpY2FsbHkgbW9kaWZpZWQgYnkgY2FsbGVyLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICpicilcbi17XG4tXHRici1cdTAwM2VtaXNwcmVkXHQ9IDA7XG4tXHRici1cdTAwM2VwcmVkaWN0ZWRcdD0gMDtcbi1cdGJyLVx1MDAzZWluX3R4XHQ9IDA7XG4tXHRici1cdTAwM2VhYm9ydFx0PSAwO1xuLVx0YnItXHUwMDNlY3ljbGVzXHQ9IDA7XG4tXHRici1cdTAwM2V0eXBlXHQ9IDA7XG4tXHRici1cdTAwM2VzcGVjXHQ9IFBFUkZfQlJfU1BFQ19OQTtcbi1cdGJyLVx1MDAzZXJlc2VydmVkXHQ9IDA7XG4tfVxuLVxuIGV4dGVybiB2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGVhZGVyLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5pbmRleCA0NjM4NTQ0MjA1ZjI4Li4zNGViMDVlOWQ3NGQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5AQCAtMzc1Nyw2ICYjNDM7Mzc1Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2Ioc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCBcdTAwMjZjdHgtXHUwMDNlcG11X2N0eF9saXN0LCBwbXVfY3R4X2VudHJ5KSB7XG4gXHRcdGNwYyA9IHRoaXNfY3BjKHBtdV9jdHgtXHUwMDNlcG11KTtcbiBcbiYjNDM7XHRcdGlmIChjcGMtXHUwMDNldGFza19lcGMgIT0gcG11X2N0eClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRpZiAoY3BjLVx1MDAzZXNjaGVkX2NiX3VzYWdlIFx1MDAyNlx1MDAyNiBwbXVfY3R4LVx1MDAzZXBtdS1cdTAwM2VzY2hlZF90YXNrKVxuIFx0XHRcdHBtdV9jdHgtXHUwMDNlcG11LVx1MDAzZXNjaGVkX3Rhc2socG11X2N0eCwgdGFzaywgc2NoZWRfaW4pO1xuIFx0fVxuQEAgLTM5MDcsNyAmIzQzOzM5MTAsNyBAQCBzdGF0aWMgdm9pZCBfX3BlcmZfcG11X3NjaGVkX3Rhc2soc3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGMsXG4gXHRwZXJmX2N0eF9sb2NrKGNwdWN0eCwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KTtcbiBcdHBlcmZfcG11X2Rpc2FibGUocG11KTtcbiBcbi1cdHBtdS1cdTAwM2VzY2hlZF90YXNrKGNwYy1cdTAwM2V0YXNrX2VwYywgdGFzaywgc2NoZWRfaW4pO1xuJiM0MztcdHBtdS1cdTAwM2VzY2hlZF90YXNrKFx1MDAyNmNwYy1cdTAwM2VlcGMsIHRhc2ssIHNjaGVkX2luKTtcbiBcbiBcdHBlcmZfcG11X2VuYWJsZShwbXUpO1xuIFx0cGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KTtcbkBAIC0zOTE3LDE1ICYjNDM7MzkyMCwxNyBAQCBzdGF0aWMgdm9pZCBwZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbiBcdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCxcbiBcdFx0XHRcdGJvb2wgc2NoZWRfaW4pXG4ge1xuLVx0c3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9IHRoaXNfY3B1X3B0cihcdTAwMjZwZXJmX2NwdV9jb250ZXh0KTtcbiBcdHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjO1xuIFxuLVx0LyogY3B1Y3R4LVx1MDAzZXRhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovXG4tXHRpZiAocHJldiA9PSBuZXh0IHx8IGNwdWN0eC1cdTAwM2V0YXNrX2N0eClcbiYjNDM7XHRpZiAocHJldiA9PSBuZXh0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFx1MDAyNnNjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSlcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFx1MDAyNnNjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkge1xuJiM0MztcdFx0aWYgKGNwYy1cdTAwM2V0YXNrX2VwYylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRfX3BlcmZfcG11X3NjaGVkX3Rhc2soY3BjLCBzY2hlZF9pbiA/IG5leHQgOiBwcmV2LCBzY2hlZF9pbik7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0NQVV9TVVBfQU1EJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTX0FNRF9CUlMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9JTlRFTCYjMzQ7LAogICAgJiMzNDtBUk02NF9CUkJFJiMzNDssCiAgICAmIzM0O0FSTV9QTVVWMyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtZF9icnNfZHJhaW4mIzM0OywKICAgICYjMzQ7YW1kX3BtdV9sYnJfcmVhZCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfMzImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X2xicl9yZWFkXzY0JiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9zdG9yZV9wZWJzX2xicnMmIzM0OywKICAgICYjMzQ7YnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGJyYW5jaCBlbnRyeSBpbml0aWFsaXphdGlvbiBpbiBwZXJmIGV2ZW50IFBNVSBkcml2ZXJzIChBTUQgQlJTLCBBTUQgTEJSLCBJbnRlbCBMQlIsIEFSTSBCUkJFKSBieSByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgcGVyZiBldmVudHMgc3Vic3lzdGVtIChga2VybmVsL2V2ZW50cy9jb3JlLmNgKSB0byBjaGFuZ2UgaG93IGBzY2hlZF90YXNrYCBjYWxsYmFja3MgYXJlIGludm9rZWQgZm9yIFBNVXMgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBQTVUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCB2aWEgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OWVlNWU4ZmM0OTExMTA3NTQ1NmI4ZmE5NDM4NGEzMjAyNDk4YzQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTU6MDI6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYwppbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMKQEAgLTM0MywxMSAmIzQzOzM0MywxMCBAQCB2b2lkIGFtZF9icnNfZHJhaW4odm9pZCkKIAkJaWYgKCFhbWRfYnJzX21hdGNoX3BsbShldmVudCwgZnJvbSwgdG8pKQogCQkJY29udGludWU7CiAKLQkJcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyJiM0Mztucik7Ci0KLQkJYnJbbnJdLmZyb20gPSBmcm9tOwotCQlicltucl0udG8gICA9IHRvOwotCiYjNDM7CQlicltucl0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQk9IGZyb20sCiYjNDM7CQkJLnRvCT0gdG8sCiYjNDM7CQl9OwogCQluciYjNDM7JiM0Mzs7CiAJfQogZW1wdHk6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYwppbmRleCA5ZDljOTYxOTg5ZDUxLi5hNTU2NDZmY2I4NDY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMKQEAgLTE4NCwxMyAmIzQzOzE4NCw2IEBAIHZvaWQgYW1kX3BtdV9sYnJfcmVhZCh2b2lkKQogCQkgICAgZW50cnkudG8uc3BsaXQucmVzZXJ2ZWQpCiAJCQljb250aW51ZTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgJiM0Mzsgb3V0KTsKLQotCQlicltvdXRdLmZyb20JPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCk7Ci0JCWJyW291dF0udG8JPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkudG8uc3BsaXQuaXApOwotCQlicltvdXRdLm1pc3ByZWQJPSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3Q7Ci0JCWJyW291dF0ucHJlZGljdGVkID0gIWJyW291dF0ubWlzcHJlZDsKLQogCQkvKgogCQkgKiBTZXQgYnJhbmNoIHNwZWN1bGF0aW9uIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBzdGF0dXMgb2YKIAkJICogdGhlIHZhbGlkIGFuZCBzcGVjIGJpdHMuCkBAIC0yMDgsNyAmIzQzOzIwMSwxNCBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZCkKIAkJICogc3BlY3VsYXRpdmUgYW5kIHRvb2sgdGhlIGNvcnJlY3QgcGF0aAogCQkgKi8KIAkJaWR4ID0gKGVudHJ5LnRvLnNwbGl0LnZhbGlkICZsdDsmbHQ7IDEpIHwgZW50cnkudG8uc3BsaXQuc3BlYzsKLQkJYnJbb3V0XS5zcGVjID0gbGJyX3NwZWNfbWFwW2lkeF07CiYjNDM7CiYjNDM7CQlicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiYjNDM7CQkJLmZyb20JCT0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApLAomIzQzOwkJCS50bwkJPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkudG8uc3BsaXQuaXApLAomIzQzOwkJCS5taXNwcmVkCT0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LAomIzQzOwkJCS5wcmVkaWN0ZWQJPSAhZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LAomIzQzOwkJCS5zcGVjCQk9IGxicl9zcGVjX21hcFtpZHhdLAomIzQzOwkJfTsKIAkJb3V0JiM0MzsmIzQzOzsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYwppbmRleCBmOGZhZGIwYjE2YTQ1Li4wYTliMzQyNjFlYmUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jCkBAIC03NTYsMTAgJiM0Mzs3NTYsMTAgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpCiAKIAkJcmRtc3JxKHg4Nl9wbXUubGJyX2Zyb20gJiM0MzsgbGJyX2lkeCwgbXNyX2xhc3RicmFuY2gubGJyKTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIpOwotCi0JCWJyLSZndDtmcm9tCT0gbXNyX2xhc3RicmFuY2guZnJvbTsKLQkJYnItJmd0O3RvCQk9IG1zcl9sYXN0YnJhbmNoLnRvOwomIzQzOwkJKmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiYjNDM7CQkJLmZyb20JPSBtc3JfbGFzdGJyYW5jaC5mcm9tLAomIzQzOwkJCS50bwk9IG1zcl9sYXN0YnJhbmNoLnRvLAomIzQzOwkJfTsKIAkJYnImIzQzOyYjNDM7OwogCX0KIAljcHVjLSZndDtsYnJfc3RhY2subnIgPSBpOwpAQCAtODQ3LDE0ICYjNDM7ODQ3LDE1IEBAIHZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzY0KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKQogCQlpZiAoYWJvcnQgJmFtcDsmYW1wOyB4ODZfcG11Lmxicl9kb3VibGVfYWJvcnQgJmFtcDsmYW1wOyBvdXQgJmd0OyAwKQogCQkJb3V0LS07CiAKLQkJcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyJiM0MztvdXQpOwotCQlicltvdXRdLmZyb20JID0gZnJvbTsKLQkJYnJbb3V0XS50bwkgPSB0bzsKLQkJYnJbb3V0XS5taXNwcmVkCSA9IG1pczsKLQkJYnJbb3V0XS5wcmVkaWN0ZWQgPSBwcmVkOwotCQlicltvdXRdLmluX3R4CSA9IGluX3R4OwotCQlicltvdXRdLmFib3J0CSA9IGFib3J0OwotCQlicltvdXRdLmN5Y2xlcwkgPSBjeWNsZXM7CiYjNDM7CQlicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiYjNDM7CQkJLmZyb20JCT0gZnJvbSwKJiM0MzsJCQkudG8JCT0gdG8sCiYjNDM7CQkJLm1pc3ByZWQJPSBtaXMsCiYjNDM7CQkJLnByZWRpY3RlZAk9IHByZWQsCiYjNDM7CQkJLmluX3R4CQk9IGluX3R4LAomIzQzOwkJCS5hYm9ydAkJPSBhYm9ydCwKJiM0MzsJCQkuY3ljbGVzCQk9IGN5Y2xlcywKJiM0MzsJCX07CiAJCW91dCYjNDM7JiM0Mzs7CiAJfQogCWNwdWMtJmd0O2xicl9zdGFjay5uciA9IG91dDsKQEAgLTkwNSw2ICYjNDM7OTA2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKIAlzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmU7CiAJc3RydWN0IGxicl9lbnRyeSAqbGJyOwogCXU2NCBmcm9tLCB0bywgaW5mbzsKJiM0MzsJYm9vbCBtaXNwcmVkOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHg4Nl9wbXUubGJyX25yOyBpJiM0MzsmIzQzOykgewpAQCAtOTIxLDI0ICYjNDM7OTIzLDI3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCiAJCXRvID0gcmRsYnJfdG8oaSwgbGJyKTsKIAkJaW5mbyA9IHJkbGJyX2luZm8oaSwgbGJyKTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZSk7Ci0KLQkJZS0mZ3Q7ZnJvbQkJPSBmcm9tOwotCQllLSZndDt0bwkJPSB0bzsKLQkJZS0mZ3Q7bWlzcHJlZAk9IGdldF9sYnJfbWlzcHJlZChpbmZvKTsKLQkJZS0mZ3Q7cHJlZGljdGVkCT0gIWUtJmd0O21pc3ByZWQ7Ci0JCWUtJmd0O2luX3R4CT0gISEoaW5mbyAmYW1wOyBMQlJfSU5GT19JTl9UWCk7Ci0JCWUtJmd0O2Fib3J0CT0gISEoaW5mbyAmYW1wOyBMQlJfSU5GT19BQk9SVCk7Ci0JCWUtJmd0O2N5Y2xlcwk9IGdldF9sYnJfY3ljbGVzKGluZm8pOwotCQllLSZndDt0eXBlCQk9IGdldF9sYnJfYnJfdHlwZShpbmZvKTsKLQotCQkvKgotCQkgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YgY3B1Yy0mZ3Q7bGJyX2VudHJpZXNbaV0gdG8KLQkJICogdGVtcG9yYXJpbHkgc3RvcmUgdGhlIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4KLQkJICogVGhlIGxhdGVyIGNvZGUgd2lsbCBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWQKLQkJICogdG8gdGhlIHBlcmYgdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLgotCQkgKi8KLQkJZS0mZ3Q7cmVzZXJ2ZWQJPSAoaW5mbyAmZ3Q7Jmd0OyBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgJmFtcDsgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0s7CiYjNDM7CQltaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pOwomIzQzOwomIzQzOwkJKmUgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQkJPSBmcm9tLAomIzQzOwkJCS50bwkJPSB0bywKJiM0MzsJCQkubWlzcHJlZAk9IG1pc3ByZWQsCiYjNDM7CQkJLnByZWRpY3RlZAk9ICFtaXNwcmVkLAomIzQzOwkJCS5pbl90eAkJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0lOX1RYKSwKJiM0MzsJCQkuYWJvcnQJCT0gISEoaW5mbyAmYW1wOyBMQlJfSU5GT19BQk9SVCksCiYjNDM7CQkJLmN5Y2xlcwkJPSBnZXRfbGJyX2N5Y2xlcyhpbmZvKSwKJiM0MzsJCQkudHlwZQkJPSBnZXRfbGJyX2JyX3R5cGUoaW5mbyksCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YKJiM0MzsJCQkgKiBjcHVjLSZndDtsYnJfZW50cmllc1tpXSB0byB0ZW1wb3JhcmlseSBzdG9yZSB0aGUKJiM0MzsJCQkgKiBicmFuY2ggY291bnRlcnMgaW5mb3JtYXRpb24uIFRoZSBsYXRlciBjb2RlIHdpbGwKJiM0MzsJCQkgKiBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWQgdG8gdGhlIHBlcmYKJiM0MzsJCQkgKiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuCiYjNDM7CQkJICovCiYjNDM7CQkJLnJlc2VydmVkCT0gKGluZm8gJmd0OyZndDsgTEJSX0lORk9fQlJfQ05UUl9PRkZTRVQpICZhbXA7CiYjNDM7CQkJCQkgIExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLLAomIzQzOwkJfTsKIAl9CiAKIAljcHVjLSZndDtsYnJfc3RhY2subnIgPSBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL2FybV9icmJlLmMgYi9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYwppbmRleCBiYTU1NGUwYzg0NmM0Li4yNTRiZTRkYThhZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYwpAQCAtNjA0LDcgJiM0Mzs2MDQsNyBAQCBzdGF0aWMgYm9vbCBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQoaW50IGluZGV4LCBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudAogCQlyZXR1cm4gZmFsc2U7CiAKIAlicmJpbmYgPSBicmVncy5icmJpbmY7Ci0JcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGVudHJ5KTsKJiM0MzsJKmVudHJ5ID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7IH07CiAJaWYgKGJyYmVfcmVjb3JkX2lzX2NvbXBsZXRlKGJyYmluZikpIHsKIAkJZW50cnktJmd0O2Zyb20gPSBicmVncy5icmJzcmM7CiAJCWVudHJ5LSZndDt0byA9IGJyZWdzLmJyYnRndDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggNDhkODUxZmJkOGVhNS4uMzEwNjgxY2NjYjUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTE0NjcsMjMgJiM0MzsxNDY3LDYgQEAgc3RhdGljIGlubGluZSB1MzIgcGVyZl9zYW1wbGVfZGF0YV9zaXplKHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAogCXJldHVybiBzaXplOwogfQogCi0vKgotICogQ2xlYXIgYWxsIGJpdGZpZWxkcyBpbiB0aGUgcGVyZl9icmFuY2hfZW50cnkuCi0gKiBUaGUgdG8gYW5kIGZyb20gZmllbGRzIGFyZSBub3QgY2xlYXJlZCBiZWNhdXNlIHRoZXkgYXJlCi0gKiBzeXN0ZW1hdGljYWxseSBtb2RpZmllZCBieSBjYWxsZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICpicikKLXsKLQlici0mZ3Q7bWlzcHJlZAk9IDA7Ci0JYnItJmd0O3ByZWRpY3RlZAk9IDA7Ci0JYnItJmd0O2luX3R4CT0gMDsKLQlici0mZ3Q7YWJvcnQJPSAwOwotCWJyLSZndDtjeWNsZXMJPSAwOwotCWJyLSZndDt0eXBlCT0gMDsKLQlici0mZ3Q7c3BlYwk9IFBFUkZfQlJfU1BFQ19OQTsKLQlici0mZ3Q7cmVzZXJ2ZWQJPSAwOwotfQotCiBleHRlcm4gdm9pZCBwZXJmX291dHB1dF9zYW1wbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGVhZGVyLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLApkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwppbmRleCA0NjM4NTQ0MjA1ZjI4Li4zNGViMDVlOWQ3NGQwIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtMzc1Nyw2ICYjNDM7Mzc1Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2Ioc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG11X2N0eCwgJmFtcDtjdHgtJmd0O3BtdV9jdHhfbGlzdCwgcG11X2N0eF9lbnRyeSkgewogCQljcGMgPSB0aGlzX2NwYyhwbXVfY3R4LSZndDtwbXUpOwogCiYjNDM7CQlpZiAoY3BjLSZndDt0YXNrX2VwYyAhPSBwbXVfY3R4KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlpZiAoY3BjLSZndDtzY2hlZF9jYl91c2FnZSAmYW1wOyZhbXA7IHBtdV9jdHgtJmd0O3BtdS0mZ3Q7c2NoZWRfdGFzaykKIAkJCXBtdV9jdHgtJmd0O3BtdS0mZ3Q7c2NoZWRfdGFzayhwbXVfY3R4LCB0YXNrLCBzY2hlZF9pbik7CiAJfQpAQCAtMzkwNyw3ICYjNDM7MzkxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgcGVyZl9jcHVfcG11X2NvbnRleHQgKmNwYywKIAlwZXJmX2N0eF9sb2NrKGNwdWN0eCwgY3B1Y3R4LSZndDt0YXNrX2N0eCk7CiAJcGVyZl9wbXVfZGlzYWJsZShwbXUpOwogCi0JcG11LSZndDtzY2hlZF90YXNrKGNwYy0mZ3Q7dGFza19lcGMsIHRhc2ssIHNjaGVkX2luKTsKJiM0MzsJcG11LSZndDtzY2hlZF90YXNrKCZhbXA7Y3BjLSZndDtlcGMsIHRhc2ssIHNjaGVkX2luKTsKIAogCXBlcmZfcG11X2VuYWJsZShwbXUpOwogCXBlcmZfY3R4X3VubG9jayhjcHVjdHgsIGNwdWN0eC0mZ3Q7dGFza19jdHgpOwpAQCAtMzkxNywxNSAmIzQzOzM5MjAsMTcgQEAgc3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAogCQkJCWJvb2wgc2NoZWRfaW4pCiB7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9IHRoaXNfY3B1X3B0cigmYW1wO3BlcmZfY3B1X2NvbnRleHQpOwogCXN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjOwogCi0JLyogY3B1Y3R4LSZndDt0YXNrX2N0eCB3aWxsIGJlIGhhbmRsZWQgaW4gcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX2luL291dCAqLwotCWlmIChwcmV2ID09IG5leHQgfHwgY3B1Y3R4LSZndDt0YXNrX2N0eCkKJiM0MzsJaWYgKHByZXYgPT0gbmV4dCkKIAkJcmV0dXJuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cigmYW1wO3NjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cigmYW1wO3NjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkgewomIzQzOwkJaWYgKGNwYy0mZ3Q7dGFza19lcGMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCV9fcGVyZl9wbXVfc2NoZWRfdGFzayhjcGMsIHNjaGVkX2luID8gbmV4dCA6IHByZXYsIHNjaGVkX2luKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHRoZSBQZXJmIEV2ZW50cyBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNldmVyYWwgZmlsZXMgcmVsYXRlZCB0byB0aGUgcGVyZm9ybWFuY2UgZXZlbnRzIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYGRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jYCwgYGluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oYCwgYW5kLCBjcml0aWNhbGx5LCBga2VybmVsL2V2ZW50cy9jb3JlLmNgLiAgVGhlIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgd2hhdCBpbW1lZGlhdGVseSBkcmF3IG15IGF0dGVudGlvbiBiZWNhdXNlIHRoZXkgZGVhbCB3aXRoIHRoZSBgcGVyZl9jdHhfc2NoZWRfdGFza19jYmAgYW5kIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBmdW5jdGlvbnMsIGFuZCB0aGVzZSBhcmUgY29yZSBwaWVjZXMgb2YgdGhlIHNjaGVkdWxpbmcgaW50ZWdyYXRpb24uCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgLiAgTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjayB3aXRoaW4gdGhlIGBwZXJmX2N0eF9zY2hlZF90YXNrX2NiYCBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgdGhlIFBNVSBjb250ZXh0cyBiYXNlZCBvbiBgY3BjLSZndDt0YXNrX2VwY2AuICBGdXJ0aGVybW9yZSwgdGhlIGNhbGwgdG8gYHBtdS0mZ3Q7c2NoZWRfdGFza2AgaW4gYF9fcGVyZl9wbXVfc2NoZWRfdGFza2AgaXMgY2hhbmdlZCB0byBwYXNzIHRoZSBgZXBjYCBmaWVsZCwgbm90IHRoZSBgdGFza19lcGNgLiBGaW5hbGx5LCBJIHNlZSB0aGUgbG9vcCBpbiBgcGVyZl9wbXVfc2NoZWRfdGFza2AgaXMgY2hhbmdlZCB0byBjaGVjayBpZiBgY3BjLSZndDt0YXNrX2VwY2AgaXMgc2V0LgoKVGhpcyBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHNjaGVkdWxpbmcgY2FsbGJhY2sgbWVjaGFuaXNtLiBUaGUgb3RoZXIgY2hhbmdlcyBhcmUgbW9zdGx5IHJlZmFjdG9yaW5nLCByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uICBUaGF0JiMzOTtzIGdlbmVyYWxseSBhIGNsZWFudXAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXBsYWNlbWVudCBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaG93IHJlYWNoYWJsZSB0aGlzIGlzLiAgYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGNhbGxlZCBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcyBpZiB0aGVyZSBhcmUgUE1VcyB3aXRoIGBzY2hlZF90YXNrYCBjYWxsYmFja3MuICBUaGF0IG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSBzb21ldGhpbmcgbGlrZSBgc3l6a2FsbGVyYCwgdXNpbmcgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuIFRoYXQgbWFrZXMgbWUgZmVlbCBiZXR0ZXIsIGFzIEkgY2FuIHdyaXRlIGEgdGVzdCBjYXNlIGZvciB0aGlzLgoKU28sIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgcGVyZl9jdHhfc2NoZWRfdGFza19jYmAsIGBfX3BlcmZfcG11X3NjaGVkX3Rhc2tgLCBhbmQgYHBlcmZfcG11X3NjaGVkX3Rhc2tgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhbGxzIGFyZSBnb2luZyB0byBvcGVyYXRlIG5vdy4gV2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuLi4gVGhhdCYjMzk7cyBhIGxpdHRsZSBsZXNzIGNvbnZlbmllbnQgZm9yIGRpcmVjdGx5IGZ1enppbmcgdGhlbS4gTGV0JiMzOTtzIGxvb2sgYWdhaW4gYXQgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBpcyBhY3R1YWxseSBjYWxsZWQuICBJcyBpdCBpbiBgcGVyZl9ldmVudF9zd2l0Y2hgPyBOby4gSXMgaXQgaW4gYHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgb3IgYHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXRgPyBObywgd2FpdC4gSSBzaG91bGQganVzdCBncmVwIGZvciBjYWxscyB0byBgcGVyZl9wbXVfc2NoZWRfdGFza2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX3BtdV9zY2hlZF90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmM9Mzg3OT12b2lkIHBlcmZfc2NoZWRfY2JfaW5jKHN0cnVjdCBwbXUgKnBtdSlcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODk3LSAqL1xua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzg5ODpzdGF0aWMgdm9pZCBfX3BlcmZfcG11X3NjaGVkX3Rhc2soc3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGMsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODk5LVx0XHRcdFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGJvb2wgc2NoZWRfaW4pXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzkxOC1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5MTk6c3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTIwLVx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5MzEtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozOTMyOlx0XHRfX3BlcmZfcG11X3NjaGVkX3Rhc2soY3BjLCBzY2hlZF9pbiA/IG5leHQgOiBwcmV2LCBzY2hlZF9pbik7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTMzLVx0fVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTM5NTA9dm9pZCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5NTMtXHRpZiAoX190aGlzX2NwdV9yZWFkKHBlcmZfc2NoZWRfY2JfdXNhZ2VzKSlcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5NTQ6XHRcdHBlcmZfcG11X3NjaGVkX3Rhc2sodGFzaywgbmV4dCwgZmFsc2UpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk1NS1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz00MzIyPXZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTQzMzAtXHRpZiAoX190aGlzX2NwdV9yZWFkKHBlcmZfc2NoZWRfY2JfdXNhZ2VzKSlcbmtlcm5lbC9ldmVudHMvY29yZS5jOjQzMzE6XHRcdHBlcmZfcG11X3NjaGVkX3Rhc2socHJldiwgdGFzaywgdHJ1ZSk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgUGVyZm9ybWFuY2UgRXZlbnQgU2NoZWR1bGVyIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aGUgcGVyZm9ybWFuY2UgZXZlbnQgc3lzdGVtIGhhbmRsZXMgdGFzayBzY2hlZHVsaW5nLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgYXJlIHRoZSBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYHBlcmZfcG11X3NjaGVkX3Rhc2tgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBpbnZlc3RpZ2F0ZSB0aGUgdGFzayBzY2hlZHVsaW5nIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9uIHBlcmZvcm1hbmNlIGV2ZW50IGNvbGxlY3Rpb24uIEdpdmVuIHRoYXQsIEkgd2FudCB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byBob3cgdGhhdCBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggcGVyZm9ybWFuY2UgZXZlbnQgY29udGV4dHMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgIGlzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBjYWxsYmFjayB0byByZXZpZXcgbmV4dC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBNVSBpcyBiZWluZyBub3RpZmllZCBvZiB0YXNrIHNjaGVkdWxpbmcgZXZlbnRzIGFuZCBob3cgdGhlIGNvbnRleHRzIGFyZSBiZWluZyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmZfY3R4X3NjaGVkX3Rhc2tfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYz0zNzI1PXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3luY19zdGF0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zNzUwLVxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzc1MTpzdGF0aWMgdm9pZCBwZXJmX2N0eF9zY2hlZF90YXNrX2NiKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM3NTItXHRcdFx0XHQgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGJvb2wgc2NoZWRfaW4pXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzc2OT1wZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4MjYtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozODI3Olx0XHRcdHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2IoY3R4LCB0YXNrLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODI4LVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4NTUtaW5zaWRlX3N3aXRjaDpcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM4NTY6XHRcdHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2IoY3R4LCB0YXNrLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODU3LVx0XHR0YXNrX2N0eF9zY2hlZF9vdXQoY3R4LCBOVUxMLCBFVkVOVF9BTEwpO1xuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTQyNTM9c3RhdGljIHZvaWQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MjY2LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI2NzpcdFx0cGVyZl9jdHhfc2NoZWRfdGFza19jYihjdHgsIHRhc2ssIHRydWUpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtNDI2OC1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00Mjk3LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI5ODpcdHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2IoY3B1Y3R4LVx1MDAzZXRhc2tfY3R4LCB0YXNrLCB0cnVlKTtcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIENvbnRleHQgU3dpdGNoZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0YCBhbmQgYHBlcmZfZXZlbnRfY29udGV4dF9zY2hlZF9pbmAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb250ZXh0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMuIFRoZSBkZXNpZ24gaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudDogYXJlIHRoZXkgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCBvdXRzaWRlIHRoZWlyIGNvbXBpbGF0aW9uIHVuaXQsIG9yIGFyZSB0aGV5IG1lYW50IHRvIGJlIGludGVybmFsIGhlbHBlcnM/IExldCBtZSB2ZXJpZnkgdGhpczsgYSBxdWljayBjb2RlIHJldmlldyBpcyBpbiBvcmRlci4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZWlyIGxpbmthZ2UgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgb3IgZXh0ZXJuYWwgY2FsbCBzaXRlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBtYWludGFpbmFiaWxpdHksIHBvdGVudGlhbCBmb3IgbWlzdXNlLCBhbmQgcG90ZW50aWFsbHkgbW9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmM9MzI3PXN0YXRpYyB2b2lkIGV2ZW50X2Z1bmN0aW9uX2NhbGwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBldmVudF9mIGZ1bmMsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzYzLVx0ICogUmVsb2FkIHRoZSB0YXNrIHBvaW50ZXIsIGl0IG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5XG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozNjQ6XHQgKiBhIGNvbmN1cnJlbnQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dCgpLlxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzY1LVx0ICovXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzc2OD1zdGF0aWMgdm9pZFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzc2OTpwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzc3MC17XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzk1MD12b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk1OC1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5NTk6XHRwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHRhc2ssIG5leHQpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzE2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmb3JtYW5jZSBFdmVudCBGdW5jdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgc3RhbmQgb3V0IGFzIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2UgbmFtZXMgYXJlIGtleS4gTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYW5kIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aG9zZSBmaWxlcywgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGggc2NoZWR1bGluZyBvciB0YXNrIGNvbnRleHQgc3dpdGNoZXMuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgd2lsbCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGluIHJlbGF0aW9uIHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbWRfYnJzX2RyYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jPTI2Mj1zdGF0aWMgYm9vbCBhbWRfYnJzX21hdGNoX3BsbShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBmcm9tLCB1NjQgdG8pXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0yODAtICovXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jOjI4MTp2b2lkIGFtZF9icnNfZHJhaW4odm9pZClcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMtMjgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgYW1kX2Jyc19kcmFpbmAgYW5kIGl0cyBOb24tU3RhdGljIE5hdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFtZF9icnNfZHJhaW5gLCBhbmQgaW1tZWRpYXRlbHksIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogc3RhdGljIGp1bXBzIG91dCBhdCBtZS4gVGhpcyBpbXBsaWVzIGl0IGxpa2VseSBob2xkcyBzdGF0ZSwgd2hpY2ggbWVhbnMgaXRzIGJlaGF2aW9yIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIGZhY3RvcnMgYmV5b25kIGp1c3QgaXRzIGRpcmVjdCBpbnB1dCBwYXJhbWV0ZXJzLiBJdCYjMzk7cyBub3QgYSBwdXJlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgaW1wbGljYXRpb24gaGVyZS4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgcmVnaXN0ZXIgcmVhZCB0aGF0JiMzOTtzIHVwZGF0ZWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyBhIGdsb2JhbCBmbGFnLiAKClRoaW5raW5nIGFib3V0IHRoaXMgZnJvbSBhIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMgc3RhbmRwb2ludCwgdGhpcyBub24tc3RhdGljIG5hdHVyZSBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgYSBjYWxsIHRvIGBhbWRfYnJzX2RyYWluYCBpbiBpc29sYXRpb24gYW5kIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXRzIGVmZmVjdHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCB1bmRlcnN0YW5kIGhvdyBpdHMgaW50ZXJuYWwgc3RhdGUgaXMgbW9kaWZpZWQuIFRoaXMgYWRkcyBhIGxheWVyIG9mIGNvbXBsZXhpdHk7IEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBJdCBhbHNvIG1lYW5zIHRoZSBmdW5jdGlvbiBjYWxsIGhhcyBzaWRlIGVmZmVjdHMuCkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIGhvdyBpdHMgbm9uLXN0YXRpYyBjaGFyYWN0ZXJpc3RpY3MgaW1wYWN0IGFueSBzeXN0ZW0gcnVubmluZyBvbiB0aGUgbWFjaGluZS4gVGhpcyBtYXkgcmVxdWlyZSB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgdGhyZWFkcyBhbmQgaG93IHRoZXkgYXJlIGltcGFjdGluZyB0aGlzIGZ1bmN0aW9uLgpUaGlzIGlzIG5vdCBhIHNpbXBsZSBmdW5jdGlvbjsgSSBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCBjYXV0aW9uIGFuZCBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZF9wbXVfbGJyX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMTYzLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNjQ6dm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTm9uLVN0YXRpYyBgYW1kX3BtdV9sYnJfcmVhZGAgLSBJbXBsaWNhdGlvbnMgYW5kIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIGBhbWRfcG11X2xicl9yZWFkYCBpcyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0IGF3YXksIHRoaXMgc3BhcmtzIGEgZmV3IHRob3VnaHRzLiBBcyBhbiBleHBlcnQgaW4gcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBhbmQgbG93LWxldmVsIHN5c3RlbSBkZXNpZ24sIEkgbmVlZCB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFRoZSBhYnNlbmNlIG9mIHRoZSBgc3RhdGljYCBrZXl3b3JkIG1lYW5zIHRoaXMgZnVuY3Rpb24gaGFzIGV4dGVybmFsIGxpbmthZ2UuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3IgcG90ZW50aWFsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gdXNlci1zcGFjZSAodGhvdWdoIHRoYXQmIzM5O3MgbGVzcyBjb21tb24gaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0KS4KClRoaXMgcmFpc2VzIHF1ZXN0aW9uczoKCiogICAqKkludGVuZGVkIHVzZToqKiBJcyBpdCBkZXNpZ25lZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIHdpdGhpbiB0aGUgQU1EIFBNVSBkcml2ZXIsIG9yIGlzIGl0IGEgbW9yZSBnZW5lcmFsIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBvdGhlciBkcml2ZXJzIG9yIGNvZGUgcGF0aHMgbWlnaHQgbmVlZD8gVW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNhZ2UgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgcmlzay9yZXdhcmQgb2YgYW55IG1vZGlmaWNhdGlvbiBvciBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgZnVuY3Rpb24uCiogICAqKkFCSSBzdGFiaWxpdHk6KiogU2luY2UgaXQmIzM5O3MgZXh0ZXJuYWxseSBsaW5rZWQsIGl0cyBzaWduYXR1cmUgYmVjb21lcyBwYXJ0IG9mIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIGZvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uIChvciBwb3RlbnRpYWxseSBiZXlvbmQsIGlmIGl0JiMzOTtzIGNvbnNpZGVyZWQgcGFydCBvZiBhIHN0YWJsZSBpbnRlcmZhY2UpLiBBbnkgY2hhbmdlcyB0byBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHR5cGUsIG9yIGV2ZW4gaXRzIGludGVybmFsIGJlaGF2aW9yIGNhbiBoYXZlIHNpZ25pZmljYW50IHJlcGVyY3Vzc2lvbnMuIFdlJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgYW55IHByb3Bvc2VkIGNoYW5nZXMgdmVyeSBjYXJlZnVsbHkgdG8gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBkb2N1bWVudCBhbnkgYnJlYWtpbmcgY2hhbmdlcyBtZXRpY3Vsb3VzbHkuCiogICAqKlBvdGVudGlhbCBmb3IgbWlzdXNlOioqIFdpdGggZXh0ZXJuYWwgbGlua2FnZSwgaXQmIzM5O3Mgb3BlbiB0byBiZWluZyBjYWxsZWQgYnkgcG90ZW50aWFsbHkgZXJyYW50IGNvZGUgb3IgYnkgY29kZSB0aGF0IGRvZXNuJiMzOTt0IGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIHB1cnBvc2UuIFJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgaW5wdXQgdmFsaWRhdGlvbiB3aWxsIGJlIGNydWNpYWwgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYgdG8gcHJldmVudCBjcmFzaGVzIG9yIGluY29ycmVjdCByZXN1bHRzLiBXZSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBoYW5kbGVzIHVuZXhwZWN0ZWQgaW5wdXRzIG9yIGVkZ2UgY2FzZXMuCiogICAqKk1haW50YWluYWJpbGl0eToqKiAgVGhlIGZ1bmN0aW9uJiMzOTtzIHVzZSBpbiBleHRlcm5hbCBtb2R1bGVzIGNhbiBjb21wbGljYXRlIHRoZSBjb2RlIG1haW50ZW5hbmNlIHByb2Nlc3MuIFdlIG11c3QgdHJhY2UgZG93biB0aGUgdXNhZ2VzIGlmIGFueSBjaGFuZ2VzIGFyZSBwcm9wb3NlZCBhbmQgY29uc2lkZXIgdGhlIGltcGFjdCBvZiB0aG9zZSBjaGFuZ2VzLgoqICAgKipUZXN0aW5nIENvdmVyYWdlOioqIFRob3JvdWdoIHRlc3RpbmcgaXMgY3J1Y2lhbC4gTm90IG9ubHkgZG8gd2UgbmVlZCB0byB0ZXN0IHRoZSBmdW5jdGlvbiBpdHNlbGYgd2l0aCBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMsIGJ1dCBhbHNvIHRlc3Qgc2NlbmFyaW9zIHdoZXJlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGl0cyAmIzM0O3B1YmxpYyYjMzQ7IGludGVyZmFjZXMuIFJlZ3Jlc3Npb24gdGVzdGluZyBhbHNvIGJlY29tZXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaGVyZSB0byBtYWludGFpbiBpdHMgYmVoYXZpb3IuCgpJbiBzdW1tYXJ5LCB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgYGFtZF9wbXVfbGJyX3JlYWRgIG1lYW5zIHdlIG5lZWQgdG8gYXBwcm9hY2ggaXQgd2l0aCBhIGxldmVsIG9mIGNhcmUgYXBwcm9wcmlhdGUgZm9yIGFueSBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBjb2duaXphbnQgb2YgaXRzIHBvdGVudGlhbCB1c2Ugd2l0aGluIGEgd2lkZXIgc2NvcGUsIGl0cyBwb3NzaWJsZSBpbXBhY3Qgb24gdGhlIGtlcm5lbCBBQkksIGFuZCB0aGUgaW1wb3J0YW5jZSBvZiBzb2xpZCBlcnJvciBoYW5kbGluZyBhbmQgdGhvcm91Z2ggdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfcG11X2xicl9yZWFkXzMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYz03Mjg9dm9pZCBpbnRlbF9wbXVfbGJyX2Rpc2FibGVfYWxsKHZvaWQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTczOS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzo3NDA6dm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgTEJSIFJlYWRpbmcgRnVuY3Rpb25zIGluIHRoZSBDb250ZXh0IG9mIGEgS2VybmVsIFBNVS4qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBgaW50ZWxfcG11X2xicl9yZWFkXzMyYCBhbmQgYGludGVsX3BtdV9sYnJfcmVhZF82NGAgZnVuY3Rpb25zLiBUaGUga2V5IHRoaW5nIHRoYXQgc3RhbmRzIG91dCBpcyB0aGF0IHRoZXkgYXJlbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGluIG15IG1pbmQsIGNvbmNlcm5pbmcgc2NvcGUsIGxpbmthZ2UsIGFuZCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuIEdpdmVuIHRoZXkmIzM5O3JlIGV4cG9zZWQgbGlrZSB0aGlzLCBhcmUgdGhlcmUgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgb3V0c2lkZSB0aGUgSW50ZWwgUE1VIGRyaXZlciBpdHNlbGYsIHRoYXQgYXJlIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5PyBBbmQgaWYgc28sIGlzIHRoaXMgdGhlIG1vc3Qgcm9idXN0IGRlc2lnbj8gV2Uga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgY3JpdGljYWwgcGF0aCwgc28gYW55IG9wdGltaXphdGlvbnMgYXQgdGhlIHNvZnR3YXJlIGxldmVsIGNvdWxkIGJlIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9ucy4KClRoaXMgdGhlbiBtYWtlcyBtZSBqdW1wIHRvIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIFRoaXMgbWFrZXMgbWUgcXVlc3Rpb24gd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNvbW1vbmFsaXR5IG9yIGEgbWlzc2VkIG9wcG9ydHVuaXR5IGZvciByZXVzZSBoZXJlLiBPciBwZXJoYXBzIGEgZGlmZmVyZW5jZSBpbiB0aGVpciBmdW5jdGlvbnM/IEkmIzM5O20gY3VyaW91cyB3aGV0aGVyIHRoZSBBUk0gaW1wbGVtZW50YXRpb24sIG9yIGFueSBvdGhlcnMsIGhhbmRsZXMgTEJSIChMYXN0IEJyYW5jaCBSZWNvcmQpIHJlYWRpbmcgaW4gYSBzaW1pbGFyIHdheSwgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBwb3J0YWJpbGl0eSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4gQXJlIHRoZXJlIGFueSBsZXNzb25zIGxlYXJuZWQsIGJlc3QgcHJhY3RpY2VzLCBvciBwb3RlbnRpYWwgaXNzdWVzIHRoZXJlIHRoYXQgSSBjYW4gbGV2ZXJhZ2Ugb3IgYXZvaWQ/IEkgbmVlZCB0byBxdWlja2x5IGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBMQlIgaW1wbGVtZW50YXRpb25zIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvYXJtX2JyYmUuYz01Nzg9c3RhdGljIGludCBicmJpbmZfZ2V0X3BlcmZfcHJpdih1NjQgYnJiaW5mKVxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTU5Ni1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jOjU5NzpzdGF0aWMgYm9vbCBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQoaW50IGluZGV4LCBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudHJ5LFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNTk4LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NzcyPXZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXG4tLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzkyLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM6NzkzOlx0XHRcdGlmICghcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGksIHBiZSwgZXZlbnQpKVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzk0LVx0XHRcdFx0Z290byBkb25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0YCBhbmQgaXRzIFJvbGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldGAgZnVuY3Rpb24uIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEZpbmUsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIE1vcmUgaW1wb3J0YW50bHksIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24uIGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AgaXMgbGlrZWx5IGEgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBmZXRjaGluZyBhbmQgcHJvY2Vzc2luZyBkYXRhIGZyb20sIHByZXN1bWFibHksIGEgQnJhbmNoIFJlY29yZCBCdWZmZXIgRW50cnkgKEJSQkUpIG9yIHNpbWlsYXIgaGFyZHdhcmUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcmZhY2UuIFNvLCB0aGlzIGBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXRgIGZ1bmN0aW9uIGlzIHRoZSB3b3JraG9yc2UuIEl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRha2luZyByYXcgcmVnaXN0ZXIgc2V0IGRhdGEgcmVsYXRlZCB0byBhIEJSQkUgZW50cnkgYW5kIHRyYW5zZm9ybWluZyBpdCBpbnRvIHNvbWUgdXNlZnVsIGBwZXJmX2VudHJ5YCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRyYW5zZm9ybWF0aW9uIGFjdHVhbGx5IGVudGFpbHMg4oCTIGhvdyBkb2VzIGl0IGludGVycHJldCB0aGUgcmF3IGhhcmR3YXJlIGRhdGEgYW5kIHdoYXQga2luZCBvZiBgcGVyZl9lbnRyeWAgc3RydWN0dXJlIGlzIGl0IHBvcHVsYXRpbmc/IFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwZXJmb3JtYW5jZSBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgb3JnYW5pemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jPTc2ND1zdGF0aWMgYm9vbCBmaWx0ZXJfYnJhbmNoX3JlY29yZChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudHJ5LFxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc3MS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jOjc3Mjp2b2lkIGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKHN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrLFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzczLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AgRnVuY3Rpb24qKgoKT2theSwgc28gYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIHNldC4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZmlsZXMgcmVsYXRlZCB0byBCcmFuY2ggUmVjb3JkIEJ1ZmZlcnMgKEJSQnMpIGFuZCBMYXN0IEJyYW5jaCBSZWNvcmRzIChMQlJzKSBmb3IgQU1EIGFuZCBJbnRlbCBwcm9jZXNzb3JzLiBMb29raW5nIGF0IGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBhbmQgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY2AsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGV5IHNob3VsZCBiZSBidWlsdCB3aGVuIGBDT05GSUdfUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gbW9zdCBzaXR1YXRpb25zLiBCdXQgSSBjYW4mIzM5O3QganVzdCBhc3N1bWUuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCBhbmQgSSYjMzk7bGwgZm9jdXMgb24gYGFyY2gveDg2L2V2ZW50cy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZpbGVzIGFyZSBiZWluZyBjb21waWxlZCBjb3JyZWN0bHkgd2l0aCBgQ09ORklHX1BFUkZfRVZFTlRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticnMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEFNRCBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEFNRC1zcGVjaWZpYyBldmVudCBoYW5kbGluZyBpcyBzdHJ1Y3R1cmVkLiBXaGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydD8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSBmb3IgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiAqeWVzKiwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uLiBMZXQmIzM5O3MgcHVsbCB1cCBhbmQgYW5hbHl6ZSB0aGUgYGFyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpXHRcdCYjNDM7PSBjb3JlLm8gbGJyLm9cbmFyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfUEVSRl9FVkVOVFNfQU1EX0JSUylcdCYjNDM7PSBicnMub1xuYXJjaC94ODYvZXZlbnRzL2FtZC9NYWtlZmlsZS00LW9iai0kKENPTkZJR19QRVJGX0VWRU5UU19BTURfUE9XRVIpXHQmIzQzOz0gcG93ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBQZXJmb3JtYW5jZSBFdmVudCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBlcmZvcm1hbmNlIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfUEVSRl9FVkVOVFNfQU1EX0JSU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgZ2V0IHRoZSBmZWVsaW5nIEkmIzM5O20gbG9va2luZyBhdCBBTUQmIzM5O3MgYnJhbmNoIHJlY29yZCBzdG9yZSBmZWF0dXJlIGhlcmUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgY2VydGFpbiBwZXJmb3JtYW5jZSBhbmFseXNlcyBvbiB0aGVpciBwcm9jZXNzb3JzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0LgoKTm93LCBteSBtaW5kIHNoaWZ0cy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIEFSTSBzaWRlIG9mIHRoaW5ncy4gSSB3b25kZXIsIHdoYXQgYXJlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHNpdHVhdGlvbj8gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgYWxzbyBsb29rIGF0IGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIEl0IGlzIGxpa2VseSBhIHJlbGV2YW50IGZpbGUgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBicmFuY2ggcmVjb3JkIGJ1ZmZlciBlbXVsYXRpb24gb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIHRoYXQsIHRvbywgYXMgdGhpcyBpcyBhbHNvIHByb2JhYmx5IHJlbGV2YW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcGllY2VzIGFsbCBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FybV9icmJlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wZXJmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19BUk1fU1BFX1BNVSkgJiM0Mzs9IGFybV9zcGVfcG11Lm9cbmRyaXZlcnMvcGVyZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQVJNNjRfQlJCRSkgJiM0Mzs9IGFybV9icmJlLm9cbmRyaXZlcnMvcGVyZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQVJNX0RNQzYyMF9QTVUpICYjNDM7PSBhcm1fZG1jNjIwX3BtdS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGlzIOKAkyBhIGJpdCBvZiBhIHN0cmVhbSBvZiBjb25zY2lvdXNuZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkNvbnNpZGVyaW5nIGBDT05GSUdfQVJNNjRfQlJCRWAgYW5kIEludGVsJiMzOTtzIE1ha2VmaWxlKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYENPTkZJR19BUk02NF9CUkJFYCBmbGFnLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBicmFuY2ggcmVjb3JkIGJ1ZmZlciBleHRlbnNpb24gZm9yIEFSTTY0LiBJdCBsb29rcyBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gbm90ZSB0aGF0LiBCdXQgSSBhbHNvIG5lZWQgdG8gY2hlY2sgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSByZWxldmFudCBjb2RlLgoKVGhlbiBteSBtaW5kIGRyaWZ0cyB0byB0aGUgeDg2IHNpZGUg4oCTIHNwZWNpZmljYWxseSBgYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlYC4gSSYjMzk7bSBjdXJpb3VzLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgc29tZSBwb3RlbnRpYWwgaW50ZXJwbGF5IG9yIGFuYWxvZ291cyBmdW5jdGlvbmFsaXR5LiBBcmUgdGhleSBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgZmVhdHVyZSBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcz8gSG93IGRvZXMgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbiByZWxhdGUgdG8gdGhpcyBuZXcgQVJNNjQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBjb21tb24gaGVhZGVyIGZpbGVzLCBzaGFyZWQgY29kZSBtb2R1bGVzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBhbmFseXplIGJvdGggc2VjdGlvbnMgdG9nZXRoZXIuIEl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGNyb3NzLXJlZmVyZW5jaW5nIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB3aGVyZSBhIHNoYXJlZCBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBtaWdodCBiZSBhcHBsaWNhYmxlLiBQZXJoYXBzIHRoZSBJbnRlbCBNYWtlZmlsZSBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIGZpbmRpbmcgc29tZSB1c2VmdWwgcmVmZXJlbmNlcy4gSSBzaG91bGQgZXhwbG9yZSBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGJyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0NQVV9TVVBfSU5URUwpXHRcdCYjNDM7PSBkcy5vIGtuYy5vXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfQ1BVX1NVUF9JTlRFTClcdFx0JiM0Mzs9IGxici5vIHA0Lm8gcDYubyBwdC5vXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGUtNS1vYmotJChDT05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFKVx0JiM0Mzs9IGludGVsLXVuY29yZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBjb25maWd1cmUgdGhpbmdzIGZvciB0aGlzIGZ1enppbmcgcnVuLiBJIHNlZSB3ZSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19DUFVfU1VQX0lOVEVMYCBhbmQgYENPTkZJR19DUFVfU1VQX0FNRGAuIFRoYXQgc2VlbXMgb2J2aW91cyBlbm91Z2guIE5vdywgSSYjMzk7bSBjaGVja2luZyBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFuZCByZW1lbWJlciBpdCYjMzk7cyBidWlsdCBjb25kaXRpb25hbGx5IG9uIGBDT05GSUdfUEVSRl9FVkVOVFNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHRha2Ugc3RvY2sgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgaGF2ZSBpbiBtaW5kOiBgUEVSRl9FVkVOVFNfQU1EX0JSU2AsIGBBUk02NF9CUkJFYCwgYENQVV9TVVBfSU5URUxgLCBgQ1BVX1NVUF9BTURgLCBhbmQgYFBFUkZfRVZFTlRTYC4KCkhvbGQgb24uLi4gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgaGVyZS4gYEFSTTY0X0JSQkVgIGlzIG9idmlvdXNseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gQVJNNjQsIGJ1dCBgQ1BVX1NVUF9JTlRFTGAgYW5kIGBDUFVfU1VQX0FNRGAgYXJlLCBvZiBjb3Vyc2UsIHg4Ni1zcGVjaWZpYy4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZnV6emluZywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBpbmNsdWRlIGFsbCBvZiB0aGVtLiBUaGUgZnV6emVyIHdpbGwgZHluYW1pY2FsbHkgZW5hYmxlIHRoZSBvbmVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0JiMzOTtzIHJ1bm5pbmcgb24sIHNvIHdlIHNob3VsZCBiZSBva2F5LiBUaGlzIHdheSwgd2UgbWF4aW1pemUgdGhlIGZlYXR1cmVzIGV4cG9zZWQuCgpPa2F5LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIGlmIGBQRVJGX0VWRU5UU19BTURfQlJTYCBoYXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mzc9Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUgTWF6ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGhlYXZpbHkgcmVsaWFudCBvbiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHdlIG5lZWQgdG8ga25vdyB3aGF0IGNhcGFiaWxpdGllcyBhcmUgc3VwcG9ydGVkLiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aG9zZSBmbGFncywgKlBFUkZfRVZFTlRTKiBhbmQgKkNQVV9TVVBfQU1EKiwgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGNyaXRpY2FsIGZvciBldmVuIGJlZ2lubmluZyB0byByZWFzb24gYWJvdXQgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kIGhhcmR3YXJlIGV2ZW50cy4gVGhvc2UgbGlrZWx5IHNldCB0aGUgZ3JvdW5kIHJ1bGVzIGZvciB3aGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIGFuZCB0cmFjaW5nIHdlIGNhbiBldmVuICp0aGluayogYWJvdXQuIFdlJiMzOTtsbCBiZSBwcmV0dHkgc3R1Y2sgd2l0aG91dCB0aGVtLgoKQnV0IG5vdywgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmV4dCBwb3RlbnRpYWwgYXZlbnVlLCBzbyBteSBtaW5kIGp1bXBzIHRvICpBUk02NF9CUkJFKiDigJMgYnJhbmNoIHJlY29yZCBidWZmZXIgZXZlbnRzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN1cHBvcnQgZm9yIGJyYW5jaCB0cmFjZSBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHdoZXRoZXIgdGhhdCYjMzk7cyBzdXBwb3J0ZWQgaXMgYWJzb2x1dGVseSBwaXZvdGFsIGZvciBpbi1kZXB0aCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gSWYgdGhvc2UgKkJSQkUqIGV2ZW50cyBhcmUgYWNjZXNzaWJsZSwgdGhhdCBjaGFuZ2VzIHRoZSBnYW1lIGVudGlyZWx5LiBJIGNhbiBkcmlsbCBpbnRvIGJyYW5jaCBtaXNwcmVkaWN0aW9ucyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgY29udHJvbCBmbG93IGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgKkFSTTY0X0JSQkUqIGFuZCBpZiB0aG9zZSBhcmUgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJNNjRfQlJCRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzQtXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzU6Y29uZmlnIEFSTTY0X0JSQkVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJyYW5jaCBzdGFjayBzYW1wbGluZyB1c2luZyBGRUFUX0JSQkVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeTogQVJNNjQqKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGxlYW5zIGhlYXZpbHkgdG93YXJkcyB0aGUgc2lnbmlmaWNhbmNlIG9mIGBBUk02NGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaWYgdGhlIHVuZGVybHlpbmcgaXNzdWUgb3IgcHJvcG9zZWQgc29sdXRpb24gaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdGhlIGFyY2hpdGVjdHVyZS4gVGhlIHBlcmZvcm1hbmNlLCBpbnN0cnVjdGlvbiBzZXQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGF2YWlsYWJsZSBvbiBgQVJNNjRgIGFyZSBsaWtlbHkgdGhlIHByaW1hcnkgZmFjdG9ycyBpbmZsdWVuY2luZyB0aGUgZGlyZWN0aW9uIG9mIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHByb2JsZW0gbWFuaWZlc3RzIGRpZmZlcmVudGx5LCBvciB0aGUgc29sdXRpb24gc3BhY2UgaXMgY29uc3RyYWluZWQsIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgYEFSTTY0YCBpcyBwcm9iYWJseSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvS2NvbmZpZz02PW1lbnUgXCYjMzQ7UGVyZm9ybWFuY2UgbW9uaXRvciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UU1xuZHJpdmVycy9wZXJmL0tjb25maWctOC1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTk9Y29uZmlnIEFSTV9DQ0lfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0FSTSBDQ0kgUE1VIGRyaXZlclwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTE6XHRkZXBlbmRzIG9uIChBUk0gXHUwMDI2XHUwMDI2IENQVV9WNykgfHwgQVJNNjRcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTEyLVx0c2VsZWN0IEFSTV9DQ0lcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xOT1jb25maWcgQVJNX0NDSTQwMF9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMS1cdGRlZmF1bHQgeVxuZHJpdmVycy9wZXJmL0tjb25maWc6MjI6XHRkZXBlbmRzIG9uIEFSTV9DQ0lfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMy1cdHNlbGVjdCBBUk1fQ0NJNDAwX0NPTU1PTlxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI4PWNvbmZpZyBBUk1fQ0NJNXh4X1BNVVxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMwLVx0ZGVmYXVsdCB5XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gQVJNX0NDSV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTM3PWNvbmZpZyBBUk1fQ0NOXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O0FSTSBDQ04gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjM5Olx0ZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz00ND1jb25maWcgQVJNX0NNTlxuZHJpdmVycy9wZXJmL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtBcm0gQ01OLTYwMCBQTVUgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wZXJmL0tjb25maWctNDctXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9NTE9Y29uZmlnIEFSTV9OSVxuZHJpdmVycy9wZXJmL0tjb25maWctNTItXHR0cmlzdGF0ZSBcJiMzNDtBcm0gTkktNzAwIFBNVSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo1MzpcdGRlcGVuZHMgb24gQVJNNjQgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy01NC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz01OD1jb25maWcgQVJNX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWc6NTk6XHRkZXBlbmRzIG9uIEFSTSB8fCBBUk02NFxuZHJpdmVycy9wZXJmL0tjb25maWctNjAtXHRib29sIFwmIzM0O0FSTSBQTVUgZnJhbWV3b3JrXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9NjY9Y29uZmlnIEFSTV9WNl9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBBUk1fUE1VIFx1MDAyNlx1MDAyNiAoQ1BVX1Y2IHx8IENQVV9WNkspXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy02OC1cdGRlZl9ib29sIHlcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz03MD1jb25maWcgQVJNX1Y3X1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIEFSTV9QTVUgXHUwMDI2XHUwMDI2IENQVV9WN1xuZHJpdmVycy9wZXJmL0tjb25maWctNzItXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9NzQ9Y29uZmlnIEFSTV9YU0NBTEVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3NTpcdGRlcGVuZHMgb24gQVJNX1BNVSBcdTAwMjZcdTAwMjYgQ1BVX1hTQ0FMRVxuZHJpdmVycy9wZXJmL0tjb25maWctNzYtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9Nzg9Y29uZmlnIFJJU0NWX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWc6Nzk6XHRkZXBlbmRzIG9uIFJJU0NWXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7UklTQy1WIFBNVSBmcmFtZXdvcmtcJiMzNDtcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz04OD1jb25maWcgUklTQ1ZfUE1VX0xFR0FDWVxuZHJpdmVycy9wZXJmL0tjb25maWc6ODk6XHRkZXBlbmRzIG9uIFJJU0NWX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctOTAtXHRib29sIFwmIzM0O1JJU0MtViBsZWdhY3kgUE1VIGltcGxlbWVudGF0aW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9OTg9Y29uZmlnIFJJU0NWX1BNVV9TQklcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBSSVNDVl9QTVUgXHUwMDI2XHUwMDI2IFJJU0NWX1NCSVxuZHJpdmVycy9wZXJmL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDtSSVNDLVYgUE1VIGJhc2VkIG9uIFNCSSBQTVUgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTA4PWNvbmZpZyBTVEFSRklWRV9TVEFSTElOS19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjEwOTpcdGRlcGVuZHMgb24gQVJDSF9TVEFSRklWRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gNjRCSVRcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U3RhckZpdmUgU3RhckxpbmsgUE1VXCYjMzQ7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTE4PWNvbmZpZyBBTkRFU19DVVNUT01fUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMTktXHRib29sIFwmIzM0O0FuZGVzIGN1c3RvbSBQTVUgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTIwOlx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgXHUwMDI2XHUwMDI2IFJJU0NWX0FMVEVSTkFUSVZFIFx1MDAyNlx1MDAyNiBSSVNDVl9QTVVfU0JJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMjEtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xMzI9Y29uZmlnIEFSTV9QTVVfQUNQSVxuZHJpdmVycy9wZXJmL0tjb25maWc6MTMzOlx0ZGVwZW5kcyBvbiBBUk1fUE1VIFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMzQtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTM2PWNvbmZpZyBBUk1fU01NVV9WM19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTEzNy1cdCB0cmlzdGF0ZSBcJiMzNDtBUk0gU01NVXYzIFBlcmZvcm1hbmNlIE1vbml0b3JzIEV4dGVuc2lvblwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTM4Olx0IGRlcGVuZHMgb24gQVJNNjQgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgNjRCSVQpXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzk6XHQgZGVwZW5kcyBvbiBHRU5FUklDX01TSV9JUlFcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE0MC1cdCAgIGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xNDY9Y29uZmlnIEFSTV9QTVVWM1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTQ3Olx0ZGVwZW5kcyBvbiBIV19QRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgKChBUk0gXHUwMDI2XHUwMDI2IENQVV9WNykgfHwgQVJNNjQpXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNDgtXHRib29sIFwmIzM0O0FSTSBQTVV2MyBzdXBwb3J0XCYjMzQ7IGlmICFBUk02NFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTE1Nj1jb25maWcgQVJNX0RTVV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE1Ny1cdHRyaXN0YXRlIFwmIzM0O0FSTSBEeW5hbUlRIFNoYXJlZCBVbml0IChEU1UpIFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTU4Olx0ZGVwZW5kcyBvbiBBUk02NFxuZHJpdmVycy9wZXJmL0tjb25maWctMTU5LVx0ICBoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTY1PWNvbmZpZyBGU0xfSU1YOF9ERFJfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNjYtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgaS5NWDggRERSIHBlcmYgbW9uaXRvclwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTY3Olx0ZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE2OC1cdCAgaGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTE3Mz1jb25maWcgRlNMX0lNWDlfRERSX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMTc0LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIGkuTVg5IEREUiBwZXJmIG1vbml0b3JcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE3NTpcdGRlcGVuZHMgb24gQVJDSF9NWENcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE3Ni1cdCBoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MTgxPWNvbmZpZyBGVUpJVFNVX1VOQ09SRV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE4Mi1cdHRyaXN0YXRlIFwmIzM0O0Z1aml0c3UgVW5jb3JlIFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTgzOlx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFDUEkpIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IDY0QklUKVxuZHJpdmVycy9wZXJmL0tjb25maWctMTg0LVx0IGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xOTA9Y29uZmlnIFFDT01fTDJfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xOTEtXHRib29sIFwmIzM0O1F1YWxjb21tIEwyLWNhY2hlIFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MTkyOlx0ZGVwZW5kcyBvbiBBUkNIX1FDT00gXHUwMDI2XHUwMDI2IEFSTTY0IFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xOTMtXHRzZWxlY3QgUUNPTV9LUllPX0wyX0FDQ0VTU09SU1xuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIwMD1jb25maWcgUUNPTV9MM19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIwMS1cdGJvb2wgXCYjMzQ7UXVhbGNvbW0gTDMtY2FjaGUgUE1VXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMDI6XHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSBcdTAwMjZcdTAwMjYgQVJNNjQgXHUwMDI2XHUwMDI2IEFDUElcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIwMy1cdHNlbGVjdCBRQ09NX0lSUV9DT01CSU5FUlxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIxMD1jb25maWcgVEhVTkRFUlgyX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIFRodW5kZXJYMiBTb0MgUE1VIFVOQ09SRVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBBUkNIX1RIVU5ERVIyIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wZXJmL0tjb25maWc6MjEzOlx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMTQtXHRkZWZhdWx0IG0gaWYgQVJDSF9USFVOREVSMlxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIyMD1jb25maWcgWEdFTkVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMjE6ICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfWEdFTkUgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgNjRCSVQpXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMjItICAgICAgICBib29sIFwmIzM0O0FQTSBYLUdlbmUgU29DIFBNVVwmIzM0O1xuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNdjguMiBTdGF0aXN0aWNhbCBQcm9maWxpbmcgRXh0ZW5zaW9uXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMjk6XHRkZXBlbmRzIG9uIEFSTTY0XG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzAtXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjM1PWNvbmZpZyBBUk02NF9CUkJFXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBicmFuY2ggc3RhY2sgc2FtcGxpbmcgdXNpbmcgRkVBVF9CUkJFXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzc6XHRkZXBlbmRzIG9uIEFSTV9QTVVWMyBcdTAwMjZcdTAwMjYgQVJNNjRcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzOC1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI0Nj1jb25maWcgQVJNX0RNQzYyMF9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI0Ny1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBQTVUgc3VwcG9ydCBmb3IgdGhlIEFSTSBETUMtNjIwIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNDg6XHRkZXBlbmRzIG9uIChBUk02NCBcdTAwMjZcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNDktXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjUzPWNvbmZpZyBNQVJWRUxMX0NOMTBLX1RBRF9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI1NC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgQ04xMEsgTExDLVRBRCBQTVVcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI1NTpcdGRlcGVuZHMgb24gQVJDSF9USFVOREVSIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IDY0QklUKVxuZHJpdmVycy9wZXJmL0tjb25maWctMjU2LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI2MD1jb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjYxLVx0Ym9vbCBcJiMzNDtBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MjpcdGRlcGVuZHMgb24gQVJNX1BNVSBcdTAwMjZcdTAwMjYgQVJDSF9BUFBMRVxuZHJpdmVycy9wZXJmL0tjb25maWctMjYzLVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI2Nz1jb25maWcgQUxJQkFCQV9VTkNPUkVfRFJXX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjY4LVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBULUhlYWQgWWl0aWFuIDcxMCBERFIgU3ViLXN5c3RlbSBEcml2ZXdheSBQTVUgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjk6XHRkZXBlbmRzIG9uIChBUk02NCBcdTAwMjZcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNzAtXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9Mjc2PWNvbmZpZyBNQVJWRUxMX0NOMTBLX0REUl9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI3Ny1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBNQVJWRUxMIENOMTBLIERSQU0gU3Vic3lzdGVtKERTUykgUE1VIFN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI3ODpcdGRlcGVuZHMgb24gQVJDSF9USFVOREVSIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IDY0QklUKVxuZHJpdmVycy9wZXJmL0tjb25maWctMjc5LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI4Mz1jb25maWcgRFdDX1BDSUVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yODQtXHR0cmlzdGF0ZSBcJiMzNDtTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyODU6XHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9wZXJmL0tjb25maWctMjg2LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI5ND1jb25maWcgQ1hMX1BNVVxuZHJpdmVycy9wZXJmL0tjb25maWctMjk1LVx0dHJpc3RhdGUgXCYjMzQ7Q1hMIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdFwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6Mjk2Olx0ZGVwZW5kcyBvbiBDWExfQlVTXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yOTctXHRoZWxwXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MzA3PWNvbmZpZyBNQVJWRUxMX1BFTV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMwOC1cdHRyaXN0YXRlIFwmIzM0O01BUlZFTEwgUEVNIFBNVSBTdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMDk6XHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFx1MDAyNlx1MDAyNiA2NEJJVClcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMxMC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0zMTQ9Y29uZmlnIE5WSURJQV9URUdSQTQxMF9DTUVNX0xBVEVOQ1lfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMTUtXHR0cmlzdGF0ZSBcJiMzNDtOVklESUEgVGVncmE0MTAgQ1BVIE1lbW9yeSBMYXRlbmN5IFBNVVwmIzM0O1xuZHJpdmVycy9wZXJmL0tjb25maWc6MzE2Olx0ZGVwZW5kcyBvbiBBUk02NCBcdTAwMjZcdTAwMjYgQUNQSVxuZHJpdmVycy9wZXJmL0tjb25maWctMzE3LVx0aGVscFxuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTMyMT1jb25maWcgTlZJRElBX1RFR1JBNDEwX0MyQ19QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O05WSURJQSBUZWdyYTQxMCBDMkMgUE1VXCYjMzQ7XG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIEFSTTY0IFx1MDAyNlx1MDAyNiBBQ1BJXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMjQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbiBmb3IgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIEkmIzM5O20gZGVhbGluZyB3aXRoIGRlcGVuZGVuY2llcyBmb3IgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQnJhbmNoIFJlY29yZCBCdWZmZXIgRXh0ZW5zaW9uIChCUkJFKSBvbiBBUk02NCBhcmNoaXRlY3R1cmVzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgQVJNNjRfQlJCRWAgaXMgY29udGluZ2VudCBvbiBgQVJNX1BNVVYzYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGBBUk02NGAgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gVGhlbiwgYEFSTV9QTVVWM2AgaGFzIGl0cyBvd24gZGVwZW5kZW5jaWVzOiBgSFdfUEVSRl9FVkVOVFNgIGFuZCBhIGNvbmRpdGlvbiB0aWVkIHRvIGVpdGhlciBBUk0gVjcgQ1BVcyBvciBBUk02NC4KCkFscmlnaHQsIHNvIHRvIHNhdGlzZnkgYWxsIHRoZXNlIGRlcGVuZGVuY2llcywgSSBkZWZpbml0ZWx5IG5lZWQgYFBFUkZfRVZFTlRTYC4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlIGFyZSBDUFUtc3BlY2lmaWMgc3VwcG9ydCBmbGFncyBmb3IgQU1EIGFuZCBJbnRlbCwgbmFtZWx5IGBDUFVfU1VQX0FNRGAgYW5kIGBDUFVfU1VQX0lOVEVMYCwgd2hpY2ggcHJlc3VtYWJseSBlbmFibGVzIGNlcnRhaW4gcGVyZm9ybWFuY2UgZmVhdHVyZXMgZGVwZW5kaW5nIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBBbmQgdGhlIGZhY3QgdGhhdCBJIHNlZSBgUEVSRl9FVkVOVFNfQU1EX0JSU2Agc3VnZ2VzdHMgYnJhbmNoIHNhbXBsaW5nIGlzIGF2YWlsYWJsZSBmb3IgQU1EIHByb2Nlc3NvcnMuIFdpdGggYEFSTTY0X0JSQkVgIGFuZCBgQVJNX1BNVVYzYCBhbHNvIGluIHRoZSBtaXgsIGFuZCBhY2tub3dsZWRnaW5nIHRoYXQgYEhXX1BFUkZfRVZFTlRTYCBpcyBhIGJvb2xlYW4gbGlrZWx5IHNldCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZiwgSSBjYW4gc2ltcGxpZnkgdGhlIGxpc3QuCgpPa2F5LCBsZXQgbWUganVzdCBrZWVwIGEgY2xlYW4gbGlzdCBvZiB0aGUgY29uZmlndXJhdGlvbnMgSSBleHBsaWNpdGx5IG5lZWQsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBlYWNoOiBgUEVSRl9FVkVOVFNgLCBgQ1BVX1NVUF9BTURgLCBgUEVSRl9FVkVOVFNfQU1EX0JSU2AsIGBDUFVfU1VQX0lOVEVMYCwgYEFSTTY0X0JSQkVgLCBhbmQgYEFSTV9QTVVWM2AuIFRoZW4sIGFzIGEgc2FuaXR5IGNoZWNrLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyByZWdhcmRpbmcgYENQVV9TVVBfSU5URUxgIGFuZCBgQ1BVX1NVUF9BTURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVfU1VQX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYENQVV9TVVBfSU5URUxgIG9wdGlvbiBpcyBkZWZpbmVkLiAgSXQgKnNob3VsZCogYmUgaW4gb25lIG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcmlnaHQ/IFRoZSBsb2dpY2FsIHBsYWNlIHNlZW1zIHRvIGJlIGBhcmNoL3g4Ni9LY29uZmlnLmNwdWAuIFllYWgsIHRoYXQgZmVlbHMgcmlnaHQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmbGFnIG1lYW5zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcHJvY2Vzc29yIGZlYXR1cmVzLiBHb29kLCBnb29kLi4uIGtub3dpbmcgdGhlIGZpbGUgbG9jYXRpb24gaXMgaGFsZiB0aGUgYmF0dGxlLiBOb3csIHRpbWUgdG8gY3JhY2sgaXQgb3BlbiBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVV9TVVBfSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdT0yOTc9bWVudWNvbmZpZyBQUk9DRVNTT1JfU0VMRUNUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMzAyLVxuYXJjaC94ODYvS2NvbmZpZy5jcHU6MzAzOmNvbmZpZyBDUFVfU1VQX0lOVEVMXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0zMDQtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uIC0gUmVmaW5lZCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBkZWZhdWx0IGlzICYjMzQ7eSYjMzQ7IOKAkyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgcG90ZW50aWFsIGluY2x1c2lvbiBhcyBmb2N1cyBzeW1ib2xzLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgTEJSIGltcGxlbWVudGF0aW9ucy4KCkkmIzM5O3ZlIGNoZWNrZWQgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY2AgYW5kIGZvdW5kIHR3byBwcm9taXNpbmcgY2FuZGlkYXRlczogYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLiBNb3Zpbmcgb250byB0aGUgQU1EIHNpZGUsIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jYCB5aWVsZHMgYGFtZF9wbXVfbGJyX3JlYWRgLCBhbmQgYGFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNgIGdpdmVzIHVzIGBhbWRfYnJzX2RyYWluYC4KCkJyYW5jaGluZyBvdXQgdG8gdGhlIEFSTSB3b3JsZCwgSSBjaGVja2VkIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AgYW5kIGRpc2NvdmVyZWQgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYC4KClRoZW4gSSBjaGVja2VkIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYW5kIHNhdyBgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0YCBhbmQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luYC4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aGVzZSBhcmUgb24gdGhlICpob3QqIHBhdGgsIHNwZWNpZmljYWxseSBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcy4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFzIGl0IGNvdWxkIHNrZXcgdGhlIHJlc3VsdHMuIFNvIHRob3NlIHR3byBhcmUgKm91dCouCgpOb3csIGJhY2sgdG8gdGhlIHJlbWFpbmluZyBjYW5kaWRhdGVzOiBgYW1kX2Jyc19kcmFpbmAsIGBhbWRfcG11X2xicl9yZWFkYCwgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAsIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLCBhbmQgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgY2FsbGVkIHdoZW4gcmVhZGluZyBQTVUgZXZlbnRzLCB0cmlnZ2VyZWQgYnkgYHBlcmZfZXZlbnRfb3BlbmAgYW5kIHN1YnNlcXVlbnQgYnVmZmVyIHJlYWRzIG9yIFBNVSBpbnRlcnJ1cHRzLiBUaGV5IGFyZW4mIzM5O3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgbGlrZSB0aGUgc2NoZWR1bGVyIG9yIG5ldHdvcmsgY29kZTsgdGhleSBhcmUgc3BlY2lmaWMgdG8gcGVyZiBldmVudHMgd2hlcmUgTEJSIG9yIEJSUyBhcmUgZW5hYmxlZC4gVGhhdCBtYWtlcyB0aGVtIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gYXMgZm9jdXMgc3ltYm9scy4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IHRob3VnaHQgcHJvY2VzcyBhYm91dCBgYW1kX2Jyc19kcmFpbmAsIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1kX2Jyc19kcmFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM9MjYyPXN0YXRpYyBib29sIGFtZF9icnNfbWF0Y2hfcGxtKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IGZyb20sIHU2NCB0bylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTI4MC0gKi9cbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MjgxOnZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0yODIte1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTg5Nj1zdGF0aWMgaW50IGFtZF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05MTItXHRpZiAoY3B1Yy1cdTAwM2VsYnJfdXNlcnMpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5MTM6XHRcdGFtZF9icnNfZHJhaW4oKTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTkxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipQTVUgSW50ZXJydXB0IEhhbmRsaW5nIGFuZCBMQlIgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gYW5hbHl6aW5nIHRoaXMgY29kZSBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20gYGFtZF9wbXVfaGFuZGxlX2lycWAuIFRoYXQmIzM5O3MgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0LCBzbyB0aGF0JiMzOTtzIGV4cGVjdGVkIGFuZCBwZXJmZWN0bHkgbm9ybWFsLiBObyByZWQgZmxhZ3MgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgaXQgc2hvdWxkIGJlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBhbWRfcG11X2xicl9yZWFkYCBmdW5jdGlvbiBhIGxpdHRsZSBjbG9zZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlIHNob3VsZCBleHBlY3QgaXQgdG8gYmUgcmVhZGluZyBmcm9tIHRoZSBMYXN0IEJyYW5jaCBSZWNvcmQsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgZGF0YSBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSB3aXRoaW4gdGhhdCBjb250ZXh0LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGFib3V0IHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1kX3BtdV9sYnJfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTkzMT1zdGF0aWMgaW50IGFtZF9wbXVfdjJfc25hcHNob3RfYnJhbmNoX3N0YWNrKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50cmllcywgdW5zaWduZWQgaW50IGNudClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05NDUtXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5NDY6XHRhbWRfcG11X2xicl9yZWFkKCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05NDctXHRjbnQgPSBtaW4oY250LCB4ODZfcG11Lmxicl9ucik7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9OTU2PXN0YXRpYyBpbnQgYW1kX3BtdV92Ml9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTk4NC1cdGlmICh4ODZfcG11Lmxicl9ucikge1xuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6OTg1Olx0XHRhbWRfcG11X2xicl9yZWFkKCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05ODYtXHRcdHN0YXR1cyBcdTAwMjY9IH5HTE9CQUxfU1RBVFVTX0xCUlNfRlJPWkVOO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMTYzLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNjQ6dm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBQTVUgSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29kZSYjMzk7cyBjdXJyZW50bHkgY2FsbGluZyBmcm9tIGBhbWRfcG11X3YyX2hhbmRsZV9pcnFgIGFuZCBhbHNvIGBhbWRfcG11X3YyX3NuYXBzaG90X2JyYW5jaF9zdGFja2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIHJlbGF0ZWQgdG8gSW50ZWwmIzM5O3MgTEJSIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgY29tcGFyaXNvbiwgYXQgbGVhc3QuIFRvIGdldCBteSBiZWFyaW5ncywgSSYjMzk7bGwgcXVpY2tseSBuZWVkIHRvIHZlcmlmeSB0aGF0IEkmIzM5O3ZlIGdvdCB0aGUgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgIGNhbGxzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEEgcXVpY2sgcmV2aWV3IG9mIHRob3NlIEludGVsIGZ1bmN0aW9ucyB3aWxsIHByb2JhYmx5IHJldmVhbCB0aGUgY3J1Y2lhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0sIGFuZCB0aGUgQU1EIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJyYW5jaCBzdGFjayBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgc29ydCBvZiBwYXJpdHkgdGhhdCBJIGNhbiByZWx5IG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9Nzg2MT1fX2luaXQgaW50IGludGVsX3BtdV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy03OTQxLVx0XHR4ODZfcG11Lmxicl9yZXNldCA9IGludGVsX3BtdV9sYnJfcmVzZXRfMzI7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjc5NDI6XHRcdHg4Nl9wbXUubGJyX3JlYWQgPSBpbnRlbF9wbXVfbGJyX3JlYWRfMzI7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTc5NDMtXHR9XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTcyOD12b2lkIGludGVsX3BtdV9sYnJfZGlzYWJsZV9hbGwodm9pZClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzM5LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjc0MDp2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03NDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gUG9pbnRlciBhbmQgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IGFyZSBhc3NpZ25lZCB0byBgeDg2X3BtdS5sYnJfcmVhZGAsIGFyZSBoYW5kbGVkLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGV5JiMzOTtyZSBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIHBhdHRlcm4gZm9yIGZsZXhpYmlsaXR5LCBsZXR0aW5nIHVzIHN3YXAgb3V0IGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlYWRpbmcgdGhlIExhc3QgQnJhbmNoIFJlY29yZCAoTEJSKSBkYXRhLCBsaWtlbHkgZGVwZW5kaW5nIG9uIHRoZSBwcm9jZXNzb3IgbW9kZWwgb3Igc3BlY2lmaWMgY29udGV4dC4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBub24tc3RhdGljIGlzIGltcG9ydGFudC4gSXQgaW1wbGllcyB0aGV5IGFyZSBleHRlcm5hbGx5IHZpc2libGUsIGFuZCB0aGF0IHdlIGNhbiBpbnRlcmFjdCB3aXRoIHRoZW0uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgIGlzIGFtb25nIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wZXJmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BlcmYvYXJtX2JyYmUuYz03NjQ9c3RhdGljIGJvb2wgZmlsdGVyX2JyYW5jaF9yZWNvcmQoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplbnRyeSxcbi0tXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy03NzEtXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYzo3NzI6dm9pZCBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyhzdHJ1Y3QgcGVyZl9icmFuY2hfc3RhY2sgKmJyYW5jaF9zdGFjayxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc3My1cdFx0XHRcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcbi0tXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaD0yMj1ib29sIGJyYmVfYnJhbmNoX2F0dHJfdmFsaWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTtcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5oOjIzOnZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC0yNC1cdFx0XHRcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7XG4tLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmg9Mzc9c3RhdGljIGlubGluZSBib29sIGJyYmVfYnJhbmNoX2F0dHJfdmFsaWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5oLTQyLVxuZHJpdmVycy9wZXJmL2FybV9icmJlLmg6NDM6c3RhdGljIHZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC00NC1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuZHJpdmVycy9wZXJmL2FybV9wbXV2My5jPTg3MT1zdGF0aWMgdm9pZCByZWFkX2JyYW5jaF9yZWNvcmRzKHN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjLFxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fcG11djMuYy04NzYtXG5kcml2ZXJzL3BlcmYvYXJtX3BtdXYzLmM6ODc3Olx0YnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoYnJhbmNoX3N0YWNrLCBldmVudCk7XG5kcml2ZXJzL3BlcmYvYXJtX3BtdXYzLmMtODc4LVx0cGVyZl9zYW1wbGVfc2F2ZV9icnN0YWNrKGRhdGEsIGV2ZW50LCBicmFuY2hfc3RhY2ssIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcxNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRnVuY3Rpb24gRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29udGV4dCBpcyBgcmVhZF9icmFuY2hfcmVjb3Jkc2AgaW4gYGFybV9wbXV2My5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGNhbGwgb3JpZ2luYXRlcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIG1vZGlmaWNhdGlvbiBjYXNjYWRlPyBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGltcGFjdGVkPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4KClF1aWNrbHkgc2Nhbm5pbmcuLi4gYWhhISBJbiBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYGludGVsX3BtdV9zdG9yZV9sYnJgIGlzIHRoZXJlIGJ1dCBpdCYjMzk7cyAqc3RhdGljKi4gT2theSwgc28gYXQgbGVhc3QgdGhhdCBvbmUmIzM5O3MgbG9jYWxpemVkLiBUaGF0JiMzOTtzIGEgcmVsaWVmOyBzdGF0aWMgZnVuY3Rpb25zIGFyZSBsZXNzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBpbiBleHRlcm5hbCBjaGFuZ2VzLiBTdGlsbCwgdGhpcyBuZWVkcyBmdXJ0aGVyIGNoZWNraW5nIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbHMgdGhhdCBjb3VsZCBiZSBsaW5rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludGVsX3BtdV9zdG9yZV9sYnImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTkwMT1zdGF0aWNfYXNzZXJ0KCg2NCAtIFBFUkZfQlJBTkNIX0VOVFJZX0lORk9fQklUU19NQVgpIFx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX05VTSAqIExCUl9JTkZPX0JSX0NOVFJfQklUUyk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtOTAyLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjkwMzpzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTkwNC1cdFx0XHRcdHN0cnVjdCBsYnJfZW50cnkgKmVudHJpZXMpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDA9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAwMS17XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAwMjpcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgTlVMTCk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAwMy19XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDU9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWRfeHNhdmUoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMDktXHRpZiAoIXhzYXZlKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAxMDpcdFx0aW50ZWxfcG11X3N0b3JlX2xicihjcHVjLCBOVUxMKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMDExLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMTQtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAxNTpcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgeHNhdmUtXHUwMDNlbGJyLmVudHJpZXMpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMTYtfVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYz0xMjg4PXZvaWQgaW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhzdHJ1Y3QgbGJyX2VudHJ5ICpsYnIpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEyOTgtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTI5OTpcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgbGJyKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMzAwLVx0aW50ZWxfcG11X2xicl9maWx0ZXIoY3B1Yyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBQRUJTL0xCUiBEYXRhIEhhbmRsaW5nKioKCk9rYXksIHNvIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBpcyBhIGZ1bmN0aW9uIHRoYXQmIzM5O3Mgbm90IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCDigJMgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBHaXZlbiB0aGF0IGZhY3QsIGl0IGxpa2VseSBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBJbnRlbCBQTVUgZHJpdmVyLiBOb3csIHRoZSBjb2RlIHN0YXRlcyB0aGF0IGl0IGFjdHVhbGx5IGNhbGxzIGBpbnRlbF9wbXVfc3RvcmVfbGJyYC4gU28sIHRoaXMgdGVsbHMgbWUgdGhhdCBgaW50ZWxfcG11X3N0b3JlX3BlYnNfbGJyc2AgbGlrZWx5IHNpdHMgaGlnaGVyIHVwIGluIHRoZSBkYXRhLWZsb3csIHBvc3NpYmx5IGNvb3JkaW5hdGluZyB0aGUgY29sbGVjdGlvbiBvciBzdG9yYWdlIG9mIExCUiBkYXRhIHdpdGhpbiBhIFBFQlMgY29udGV4dC4gSSBzaG91bGQgY2hlY2sgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MjQ5OT1zdGF0aWMgdm9pZCBzZXR1cF9wZWJzX2FkYXB0aXZlX3NhbXBsZV9kYXRhKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yNTc1LVx0XHRpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpIHtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjI1NzY6XHRcdFx0aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhsYnIpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMjU3Ny1cdFx0XHRpbnRlbF9wbXVfbGJyX3NhdmVfYnJzdGFjayhkYXRhLCBjcHVjLCBldmVudCk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MjYxNj1zdGF0aWMgdm9pZCBzZXR1cF9hcmNoX3BlYnNfc2FtcGxlX2RhdGEoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI3MDgtXHRcdGlmIChoYXNfYnJhbmNoX3N0YWNrKGV2ZW50KSkge1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MjcwOTpcdFx0XHRpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzKGxicik7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yNzEwLVx0XHRcdGludGVsX3BtdV9sYnJfc2F2ZV9icnN0YWNrKGRhdGEsIGNwdWMsIGV2ZW50KTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9MTIxNz1pbnRlbF9wbXVfbGJyX2ZpbHRlcihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTI4Ny1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzoxMjg4OnZvaWQgaW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhzdHJ1Y3QgbGJyX2VudHJ5ICpsYnIpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTI4OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQRUJTL0xCUiBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgIGhlcmUsIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgYmV5b25kIGl0cyBpbW1lZGlhdGUgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIExCUiByZWFkaW5nIHByb2Nlc3MuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gYGludGVsX3BtdV9sYnJfcmVhZF82NGAuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgbm9uLXN0YXRpYyBmdW5jdGlvbiBwbHVncyBpbnRvIHRoZSBicm9hZGVyIExCUiBoYW5kbGluZywgd2hhdCBkYXRhIGl0JiMzOTtzIHBhc3NpbmcsIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBub24tc3RhdGljIHByb3BlcnR5LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGlzIGV4cG9zZXMgYW55IGNyaXRpY2FsIGRhdGEgb3IgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfNjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjU3MT1zdGF0aWMgX19pbml0Y29uc3QgY29uc3Qgc3RydWN0IHg4Nl9wbXUgY29yZV9wbXUgPSB7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02NjE0LVx0Lmxicl9yZXNldFx0XHQ9IGludGVsX3BtdV9sYnJfcmVzZXRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjY2MTU6XHQubGJyX3JlYWRcdFx0PSBpbnRlbF9wbXVfbGJyX3JlYWRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2MTYtXHQubGJyX3NhdmVcdFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz02NjIwPXN0YXRpYyBfX2luaXRjb25zdCBjb25zdCBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02NjY2LVx0Lmxicl9yZXNldFx0XHQ9IGludGVsX3BtdV9sYnJfcmVzZXRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjY2Njc6XHQubGJyX3JlYWRcdFx0PSBpbnRlbF9wbXVfbGJyX3JlYWRfNjQsXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2NjgtXHQubGJyX3NhdmVcdFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTc0MD12b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzczLSAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjc3NDp2b2lkIGludGVsX3BtdV9sYnJfcmVhZF82NChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03NzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE0MwoJCQkJCQkJb3V0cHV0OiAyNzIKCQkJCQkJCXRob3VnaHRzOiAxNzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmIEV2ZW50IFBNVSBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkgc2VlIGlzIHRoYXQgYGludGVsX3BtdV9sYnJfcmVhZF82NGAgaXMsIHRoYW5rZnVsbHksIG5vbi1zdGF0aWMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNsZWFyIGxpc3Qgb2YgdGhlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZ1bmN0aW9ucyBoZXJlOgoKKiAgIGBhbWRfYnJzX2RyYWluYAoqICAgYGFtZF9wbXVfbGJyX3JlYWRgCiogICBgaW50ZWxfcG11X2xicl9yZWFkXzMyYAoqICAgYGludGVsX3BtdV9sYnJfcmVhZF82NGAKKiAgIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYAoqICAgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYAoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgb2J2aW91cyB0YXJnZXRzIGluIHRoZSBob3QgcGF0aC4gSSB3YXMgaW5pdGlhbGx5IGNvbmNlcm5lZCBhYm91dCBgcGVyZl9wbXVfc2NoZWRfdGFza2Agc2luY2UgaXQmIzM5O3Mgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXRgIGFuZCBgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW5gLiBCdXQsIGBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0YCBhbmQgYHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgYXJlIGluIHRoZSBob3QgcGF0aCwgc28gYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uLiBCdXQgdGhlc2Ugc2VlbSB0byBiZSBoYW5kbGVkIGFuZCBjb3JyZWN0bHkgZXhjbHVkZWQsIHNvIHdlJiMzOTtyZSBnb29kLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIGhlcmUmIzM5O3Mgd2hhdCBJIHRoaW5rIHdlIG5lZWQgdG8gdGVzdDoKClRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYWZmZWN0IGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG91ciBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50czoKCiogICBgUEVSRl9FVkVOVFNgOiBBbHdheXMgbmVjZXNzYXJ5LgoqICAgYENQVV9TVVBfQU1EYDogTmVjZXNzYXJ5IGZvciBBTUQgc3VwcG9ydCwgZGVmYXVsdHMgb24geDg2LCBidXQgZ29vZCB0byBpbmNsdWRlLgoqICAgYFBFUkZfRVZFTlRTX0FNRF9CUlNgOiBUaGlzIGxvb2tzIHNwZWNpZmljIHRvIEFNRCBCUlMgc3VwcG9ydCwgc28gd2UgbmVlZCBpdC4KKiAgIGBDUFVfU1VQX0lOVEVMYDogTmVjZXNzYXJ5IGZvciBJbnRlbCBzdXBwb3J0LCBkZWZhdWx0cyBvbiB4ODYsIGJ1dCBnb29kIHRvIGluY2x1ZGUuCiogICBgQVJNNjRfQlJCRWA6IE5lY2Vzc2FyeSBmb3IgQVJNNjQgQlJCRSwgZGVmaW5pdGVseSBuZWVkcyB0byBiZSBlbmFibGVkLgoqICAgYEFSTV9QTVVWM2A6IExvb2tzIGxpa2UgYEFSTTY0X0JSQkVgIGRlcGVuZHMgb24gaXQsIHNvIHdlIG5lZWQgaXQuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbmVha3MgaW4uIGBQRVJGX0VWRU5UU19BTURfQlJTYCBzZWVtcyB0byBiZSB0aGUgb25seSBvbmUgZm9yIEFNRCBCUlMuIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyByZWdhcmRpbmcgSW50ZWwgdW5jb3JlIGV2ZW50cywgc28gd2UgZG9uJiMzOTt0IG5lZWQgYFBFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRWAuIEFmdGVyIHF1aWNrbHkgdmVyaWZ5aW5nIHRoZSBNYWtlZmlsZXMsIGBDUFVfU1VQX0FNRGAsIGFuZCBgUEVSRl9FVkVOVFNfQU1EX0JSU2AgYXJlIGVub3VnaCBmb3IgQU1ELCBgQ1BVX1NVUF9JTlRFTGAgZm9yIEludGVsLCBhbmQgYEFSTTY0X0JSQkVgIGFuZCBgQVJNX1BNVVYzYCBmb3IgQVJNLiBXZSBhbHNvIHdhbnQgYFBFUkZfRVZFTlRTYCwgd2hpY2ggaXMgY29yZS4KClNvLCBoZXJlJiMzOTtzIHRoZSBwbGFuLiBXZSBmb2N1cyBmdXp6aW5nIG9uIHRoZSBsaXN0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgUE1VIGRyaXZlcnMuIFdlIHdpbGwgZW5hYmxlIHRob3NlIGNvbmZpZ3MgYW5kIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGlzIGNvdmVycyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFuZCBwcm92aWRlcyBhIHJlYXNvbmFibHkgdGVzdGFibGUgc2NvcGUgd2l0aCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFNfQU1EX0JSUyYjMzQ7LAogICAgJiMzNDtDUFVfU1VQX0lOVEVMJiMzNDssCiAgICAmIzM0O0FSTTY0X0JSQkUmIzM0OywKICAgICYjMzQ7QVJNX1BNVVYzJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW1kX2Jyc19kcmFpbiYjMzQ7LAogICAgJiMzNDthbWRfcG11X2xicl9yZWFkJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9sYnJfcmVhZF8zMiYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfNjQmIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyYjMzQ7LAogICAgJiMzNDticmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYnJhbmNoIGVudHJ5IGluaXRpYWxpemF0aW9uIGluIHBlcmYgZXZlbnQgUE1VIGRyaXZlcnMgKEFNRCBCUlMsIEFNRCBMQlIsIEludGVsIExCUiwgQVJNIEJSQkUpIGJ5IHJlcGxhY2luZyBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSBwZXJmIGV2ZW50cyBzdWJzeXN0ZW0gKGBrZXJuZWwvZXZlbnRzL2NvcmUuY2ApIHRvIGNoYW5nZSBob3cgYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmb3IgUE1VcyBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIFBNVSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFNfQU1EX0JSUyYjMzQ7LAogICAgJiMzNDtDUFVfU1VQX0lOVEVMJiMzNDssCiAgICAmIzM0O0FSTTY0X0JSQkUmIzM0OywKICAgICYjMzQ7QVJNX1BNVVYzJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW1kX2Jyc19kcmFpbiYjMzQ7LAogICAgJiMzNDthbWRfcG11X2xicl9yZWFkJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9sYnJfcmVhZF8zMiYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfbGJyX3JlYWRfNjQmIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyYjMzQ7LAogICAgJiMzNDticmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYnJhbmNoIGVudHJ5IGluaXRpYWxpemF0aW9uIGluIHBlcmYgZXZlbnQgUE1VIGRyaXZlcnMgKEFNRCBCUlMsIEFNRCBMQlIsIEludGVsIExCUiwgQVJNIEJSQkUpIGJ5IHJlcGxhY2luZyBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSBwZXJmIGV2ZW50cyBzdWJzeXN0ZW0gKGBrZXJuZWwvZXZlbnRzL2NvcmUuY2ApIHRvIGNoYW5nZSBob3cgYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmb3IgUE1VcyBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIFBNVSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgdGVzdGVkIHZpYSB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ5ZWU1ZThmYzQ5MTExMDc1NDU2YjhmYTk0Mzg0YTMyMDI0OThjNDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowMjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jCmluZGV4IGRjNTY0Njg4ZjNkNzMuLjU0YjEzZmFiYTExNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYwpAQCAtMzQzLDExICYjNDM7MzQzLDEwIEBAIHZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKQogCQlpZiAoIWFtZF9icnNfbWF0Y2hfcGxtKGV2ZW50LCBmcm9tLCB0bykpCiAJCQljb250aW51ZTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnImIzQzO25yKTsKLQotCQlicltucl0uZnJvbSA9IGZyb207Ci0JCWJyW25yXS50byAgID0gdG87Ci0KJiM0MzsJCWJyW25yXSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpewomIzQzOwkJCS5mcm9tCT0gZnJvbSwKJiM0MzsJCQkudG8JPSB0bywKJiM0MzsJCX07CiAJCW5yJiM0MzsmIzQzOzsKIAl9CiBlbXB0eToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jCmluZGV4IDlkOWM5NjE5ODlkNTEuLmE1NTY0NmZjYjg0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYwpAQCAtMTg0LDEzICYjNDM7MTg0LDYgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpCiAJCSAgICBlbnRyeS50by5zcGxpdC5yZXNlcnZlZCkKIAkJCWNvbnRpbnVlOwogCi0JCXBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhiciAmIzQzOyBvdXQpOwotCi0JCWJyW291dF0uZnJvbQk9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS5mcm9tLnNwbGl0LmlwKTsKLQkJYnJbb3V0XS50bwk9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCk7Ci0JCWJyW291dF0ubWlzcHJlZAk9IGVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdDsKLQkJYnJbb3V0XS5wcmVkaWN0ZWQgPSAhYnJbb3V0XS5taXNwcmVkOwotCiAJCS8qCiAJCSAqIFNldCBicmFuY2ggc3BlY3VsYXRpb24gaW5mb3JtYXRpb24gdXNpbmcgdGhlIHN0YXR1cyBvZgogCQkgKiB0aGUgdmFsaWQgYW5kIHNwZWMgYml0cy4KQEAgLTIwOCw3ICYjNDM7MjAxLDE0IEBAIHZvaWQgYW1kX3BtdV9sYnJfcmVhZCh2b2lkKQogCQkgKiBzcGVjdWxhdGl2ZSBhbmQgdG9vayB0aGUgY29ycmVjdCBwYXRoCiAJCSAqLwogCQlpZHggPSAoZW50cnkudG8uc3BsaXQudmFsaWQgJmx0OyZsdDsgMSkgfCBlbnRyeS50by5zcGxpdC5zcGVjOwotCQlicltvdXRdLnNwZWMgPSBsYnJfc3BlY19tYXBbaWR4XTsKJiM0MzsKJiM0MzsJCWJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQkJPSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCksCiYjNDM7CQkJLnRvCQk9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksCiYjNDM7CQkJLm1pc3ByZWQJPSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsCiYjNDM7CQkJLnByZWRpY3RlZAk9ICFlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsCiYjNDM7CQkJLnNwZWMJCT0gbGJyX3NwZWNfbWFwW2lkeF0sCiYjNDM7CQl9OwogCQlvdXQmIzQzOyYjNDM7OwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jCmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMKQEAgLTc1NiwxMCAmIzQzOzc1NiwxMCBAQCB2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YykKIAogCQlyZG1zcnEoeDg2X3BtdS5sYnJfZnJvbSAmIzQzOyBsYnJfaWR4LCBtc3JfbGFzdGJyYW5jaC5sYnIpOwogCi0JCXBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicik7Ci0KLQkJYnItJmd0O2Zyb20JPSBtc3JfbGFzdGJyYW5jaC5mcm9tOwotCQlici0mZ3Q7dG8JCT0gbXNyX2xhc3RicmFuY2gudG87CiYjNDM7CQkqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQk9IG1zcl9sYXN0YnJhbmNoLmZyb20sCiYjNDM7CQkJLnRvCT0gbXNyX2xhc3RicmFuY2gudG8sCiYjNDM7CQl9OwogCQliciYjNDM7JiM0Mzs7CiAJfQogCWNwdWMtJmd0O2xicl9zdGFjay5uciA9IGk7CkBAIC04NDcsMTQgJiM0Mzs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpCiAJCWlmIChhYm9ydCAmYW1wOyZhbXA7IHg4Nl9wbXUubGJyX2RvdWJsZV9hYm9ydCAmYW1wOyZhbXA7IG91dCAmZ3Q7IDApCiAJCQlvdXQtLTsKIAotCQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnImIzQzO291dCk7Ci0JCWJyW291dF0uZnJvbQkgPSBmcm9tOwotCQlicltvdXRdLnRvCSA9IHRvOwotCQlicltvdXRdLm1pc3ByZWQJID0gbWlzOwotCQlicltvdXRdLnByZWRpY3RlZCA9IHByZWQ7Ci0JCWJyW291dF0uaW5fdHgJID0gaW5fdHg7Ci0JCWJyW291dF0uYWJvcnQJID0gYWJvcnQ7Ci0JCWJyW291dF0uY3ljbGVzCSA9IGN5Y2xlczsKJiM0MzsJCWJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsKJiM0MzsJCQkuZnJvbQkJPSBmcm9tLAomIzQzOwkJCS50bwkJPSB0bywKJiM0MzsJCQkubWlzcHJlZAk9IG1pcywKJiM0MzsJCQkucHJlZGljdGVkCT0gcHJlZCwKJiM0MzsJCQkuaW5fdHgJCT0gaW5fdHgsCiYjNDM7CQkJLmFib3J0CQk9IGFib3J0LAomIzQzOwkJCS5jeWNsZXMJCT0gY3ljbGVzLAomIzQzOwkJfTsKIAkJb3V0JiM0MzsmIzQzOzsKIAl9CiAJY3B1Yy0mZ3Q7bGJyX3N0YWNrLm5yID0gb3V0OwpAQCAtOTA1LDYgJiM0Mzs5MDYsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAogCXN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZTsKIAlzdHJ1Y3QgbGJyX2VudHJ5ICpsYnI7CiAJdTY0IGZyb20sIHRvLCBpbmZvOwomIzQzOwlib29sIG1pc3ByZWQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgeDg2X3BtdS5sYnJfbnI7IGkmIzQzOyYjNDM7KSB7CkBAIC05MjEsMjQgJiM0Mzs5MjMsMjcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKIAkJdG8gPSByZGxicl90byhpLCBsYnIpOwogCQlpbmZvID0gcmRsYnJfaW5mbyhpLCBsYnIpOwogCi0JCXBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlKTsKLQotCQllLSZndDtmcm9tCQk9IGZyb207Ci0JCWUtJmd0O3RvCQk9IHRvOwotCQllLSZndDttaXNwcmVkCT0gZ2V0X2xicl9taXNwcmVkKGluZm8pOwotCQllLSZndDtwcmVkaWN0ZWQJPSAhZS0mZ3Q7bWlzcHJlZDsKLQkJZS0mZ3Q7aW5fdHgJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0lOX1RYKTsKLQkJZS0mZ3Q7YWJvcnQJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0FCT1JUKTsKLQkJZS0mZ3Q7Y3ljbGVzCT0gZ2V0X2xicl9jeWNsZXMoaW5mbyk7Ci0JCWUtJmd0O3R5cGUJCT0gZ2V0X2xicl9icl90eXBlKGluZm8pOwotCi0JCS8qCi0JCSAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZiBjcHVjLSZndDtsYnJfZW50cmllc1tpXSB0bwotCQkgKiB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLgotCQkgKiBUaGUgbGF0ZXIgY29kZSB3aWxsIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZAotCQkgKiB0byB0aGUgcGVyZiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuCi0JCSAqLwotCQllLSZndDtyZXNlcnZlZAk9IChpbmZvICZndDsmZ3Q7IExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSAmYW1wOyBMQlJfSU5GT19CUl9DTlRSX0ZVTExfTUFTSzsKJiM0MzsJCW1pc3ByZWQgPSBnZXRfbGJyX21pc3ByZWQoaW5mbyk7CiYjNDM7CiYjNDM7CQkqZSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpewomIzQzOwkJCS5mcm9tCQk9IGZyb20sCiYjNDM7CQkJLnRvCQk9IHRvLAomIzQzOwkJCS5taXNwcmVkCT0gbWlzcHJlZCwKJiM0MzsJCQkucHJlZGljdGVkCT0gIW1pc3ByZWQsCiYjNDM7CQkJLmluX3R4CQk9ICEhKGluZm8gJmFtcDsgTEJSX0lORk9fSU5fVFgpLAomIzQzOwkJCS5hYm9ydAkJPSAhIShpbmZvICZhbXA7IExCUl9JTkZPX0FCT1JUKSwKJiM0MzsJCQkuY3ljbGVzCQk9IGdldF9sYnJfY3ljbGVzKGluZm8pLAomIzQzOwkJCS50eXBlCQk9IGdldF9sYnJfYnJfdHlwZShpbmZvKSwKJiM0MzsJCQkvKgomIzQzOwkJCSAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZgomIzQzOwkJCSAqIGNwdWMtJmd0O2xicl9lbnRyaWVzW2ldIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHRoZQomIzQzOwkJCSAqIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4gVGhlIGxhdGVyIGNvZGUgd2lsbAomIzQzOwkJCSAqIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZCB0byB0aGUgcGVyZgomIzQzOwkJCSAqIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQkucmVzZXJ2ZWQJPSAoaW5mbyAmZ3Q7Jmd0OyBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkJCSAgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0ssCiYjNDM7CQl9OwogCX0KIAogCWNwdWMtJmd0O2xicl9zdGFjay5uciA9IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jCmluZGV4IGJhNTU0ZTBjODQ2YzQuLjI1NGJlNGRhOGFlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jCkBAIC02MDQsNyAmIzQzOzYwNCw3IEBAIHN0YXRpYyBib29sIHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldChpbnQgaW5kZXgsIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50CiAJCXJldHVybiBmYWxzZTsKIAogCWJyYmluZiA9IGJyZWdzLmJyYmluZjsKLQlwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZW50cnkpOwomIzQzOwkqZW50cnkgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsgfTsKIAlpZiAoYnJiZV9yZWNvcmRfaXNfY29tcGxldGUoYnJiaW5mKSkgewogCQllbnRyeS0mZ3Q7ZnJvbSA9IGJyZWdzLmJyYnNyYzsKIAkJZW50cnktJmd0O3RvID0gYnJlZ3MuYnJidGd0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA0OGQ4NTFmYmQ4ZWE1Li4zMTA2ODFjY2NiNTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTQ2NywyMyAmIzQzOzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCiAJcmV0dXJuIHNpemU7CiB9CiAKLS8qCi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS4KLSAqIFRoZSB0byBhbmQgZnJvbSBmaWVsZHMgYXJlIG5vdCBjbGVhcmVkIGJlY2F1c2UgdGhleSBhcmUKLSAqIHN5c3RlbWF0aWNhbGx5IG1vZGlmaWVkIGJ5IGNhbGxlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmJyKQotewotCWJyLSZndDttaXNwcmVkCT0gMDsKLQlici0mZ3Q7cHJlZGljdGVkCT0gMDsKLQlici0mZ3Q7aW5fdHgJPSAwOwotCWJyLSZndDthYm9ydAk9IDA7Ci0JYnItJmd0O2N5Y2xlcwk9IDA7Ci0JYnItJmd0O3R5cGUJPSAwOwotCWJyLSZndDtzcGVjCT0gUEVSRl9CUl9TUEVDX05BOwotCWJyLSZndDtyZXNlcnZlZAk9IDA7Ci19Ci0KIGV4dGVybiB2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IDQ2Mzg1NDQyMDVmMjguLjM0ZWIwNWU5ZDc0ZDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0zNzU3LDYgJiM0MzszNzU3LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9jdHhfc2NoZWRfdGFza19jYihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCAmYW1wO2N0eC0mZ3Q7cG11X2N0eF9saXN0LCBwbXVfY3R4X2VudHJ5KSB7CiAJCWNwYyA9IHRoaXNfY3BjKHBtdV9jdHgtJmd0O3BtdSk7CiAKJiM0MzsJCWlmIChjcGMtJmd0O3Rhc2tfZXBjICE9IHBtdV9jdHgpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCWlmIChjcGMtJmd0O3NjaGVkX2NiX3VzYWdlICZhbXA7JmFtcDsgcG11X2N0eC0mZ3Q7cG11LSZndDtzY2hlZF90YXNrKQogCQkJcG11X2N0eC0mZ3Q7cG11LSZndDtzY2hlZF90YXNrKHBtdV9jdHgsIHRhc2ssIHNjaGVkX2luKTsKIAl9CkBAIC0zOTA3LDcgJiM0MzszOTEwLDcgQEAgc3RhdGljIHZvaWQgX19wZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjLAogCXBlcmZfY3R4X2xvY2soY3B1Y3R4LCBjcHVjdHgtJmd0O3Rhc2tfY3R4KTsKIAlwZXJmX3BtdV9kaXNhYmxlKHBtdSk7CiAKLQlwbXUtJmd0O3NjaGVkX3Rhc2soY3BjLSZndDt0YXNrX2VwYywgdGFzaywgc2NoZWRfaW4pOwomIzQzOwlwbXUtJmd0O3NjaGVkX3Rhc2soJmFtcDtjcGMtJmd0O2VwYywgdGFzaywgc2NoZWRfaW4pOwogCiAJcGVyZl9wbXVfZW5hYmxlKHBtdSk7CiAJcGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LSZndDt0YXNrX2N0eCk7CkBAIC0zOTE3LDE1ICYjNDM7MzkyMCwxNyBAQCBzdGF0aWMgdm9pZCBwZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCiAJCQkJYm9vbCBzY2hlZF9pbikKIHsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gdGhpc19jcHVfcHRyKCZhbXA7cGVyZl9jcHVfY29udGV4dCk7CiAJc3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGM7CiAKLQkvKiBjcHVjdHgtJmd0O3Rhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovCi0JaWYgKHByZXYgPT0gbmV4dCB8fCBjcHVjdHgtJmd0O3Rhc2tfY3R4KQomIzQzOwlpZiAocHJldiA9PSBuZXh0KQogCQlyZXR1cm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKCZhbXA7c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KQomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKCZhbXA7c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KSB7CiYjNDM7CQlpZiAoY3BjLSZndDt0YXNrX2VwYykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJX19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgUE1VIEJyYW5jaCBFbnRyeSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyBob3cgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgaXMgaW5pdGlhbGl6ZWQgYWNyb3NzIGEgaGFuZGZ1bCBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0cy4gSXQmIzM5O3MgdG91Y2hpbmcgYGFtZF9icnMuY2AsIGBhbWRfbGJyLmNgLCBgaW50ZWxfbGJyLmNgLCBgYXJtX2JyYmUuY2AsIGFuZCBwcm9iYWJseSBhIGZldyBvdGhlcnMuIFRoZSBjdXJyZW50IG1ldGhvZCBpbnZvbHZlcyBmaXJzdCBjbGVhcmluZyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIpYCBhbmQgdGhlbiBpbmRpdmlkdWFsbHkgYXNzaWduaW5nIHZhbHVlcyB0byB0aGUgZmllbGRzLiBUaGF0IHNlZW1zIGEgYml0Li4uIGNsdW5reSwgZG9lc24mIzM5O3QgaXQ/CgpUaGUgcHJvcG9zZWQgY2hhbmdlIGlzIHRvIHV0aWxpemUgYSBjb21wb3VuZCBsaXRlcmFsIGZvciBpbml0aWFsaXphdGlvbjoKCmBgYGMKKmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CiAgICAuZnJvbSA9IC4uLiwKICAgIC50byA9IC4uLiwKICAgIC8vIC4uLgp9OwpgYGAKClRoYXQgbG9va3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQsIGF2b2lkaW5nIHRoZSBuZWVkIGZvciBhIHNlcGFyYXRlIGNsZWFyIG9wZXJhdGlvbi4gQnV0LCB3YWl0IGEgc2Vjb25kLi4uIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgICpkb2VzKiBoYXZlIGJpdGZpZWxkcywgZG9lc24mIzM5O3QgaXQ/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGRlZmluaXRpb24gdG8gYmUgc3VyZSB0aGlzIHJlZmFjdG9yIHBsYXlzIG5pY2VseSB3aXRoIHRob3NlIGJpdGZpZWxkcy4gQmVzdCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGxvc2luZyBkYXRhIG9yIG1ha2luZyBhc3N1bXB0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIExldCBtZSBnbyBncmFiIHRoZSBkZWZpbml0aW9uIGFuZCBnaXZlIGl0IGEgZ29vZCBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9MTMzOD11bmlvbiBwZXJmX21lbV9kYXRhX3NyYyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0xNDkwLSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaDoxNDkxOnN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XG5pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oLTE0OTItXHRfX3U2NFx0ZnJvbTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oPTEzMzg9dW5pb24gcGVyZl9tZW1fZGF0YV9zcmMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMTQ5MC0gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg6MTQ5MTpzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkge1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0xNDkyLVx0X191NjRcdGZyb207XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jPTI3NT11NjQgKmdldF9pbnRyX3JlZ3Moc3RydWN0IGV2ZW50ICpldmVudCwgdm9pZCAqc2FtcGxlX2J1ZmYpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jLTI5Ny1cdFx0ICogfTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvcG11L3NhbXBsaW5nX3Rlc3RzL21pc2MuYzoyOTg6XHRcdCAqIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3BtdS9zYW1wbGluZ190ZXN0cy9taXNjLmMtMjk5LVx0XHQgKiAgICAgdTY0XHRmcm9tO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBQZXJmIEV2ZW50IFN0cnVjdHVyZSBEZWZpbml0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBwZXJmIGV2ZW50cyBhcmUgc3RydWN0dXJlZCBhdCB0aGUga2VybmVsIGxldmVsLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oYC4gSSByZWNhbGwgdGhhdCBmaWxlIGRlZmluZXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIHRvIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHN5c3RlbSwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTQ5MS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgdGhlcmUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgbGF5b3V0IG9yIHNwZWNpZmljIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gZXZlbnQgZGF0YS4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIGRlZXBlciBkaXZlIHRoYW4gYSBjdXJzb3J5IGdsYW5jZSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIGN1cnJlbnQgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDgwOlx0ICogcHJlZGljdGVkOiBicmFuY2ggdGFyZ2V0IHdhcyBwcmVkaWN0ZWRcbjE0ODE6XHQgKlxuMTQ4MjpcdCAqIHN1cHBvcnQgZm9yIG1pc3ByZWQsIHByZWRpY3RlZCBpcyBvcHRpb25hbC4gSW4gY2FzZSBpdFxuMTQ4MzpcdCAqIGlzIG5vdCBzdXBwb3J0ZWQgbWlzcHJlZCA9IHByZWRpY3RlZCA9IDAuXG4xNDg0Olx0ICpcbjE0ODU6XHQgKiAgICAgaW5fdHg6IHJ1bm5pbmcgaW4gYSBoYXJkd2FyZSB0cmFuc2FjdGlvblxuMTQ4NjpcdCAqICAgICBhYm9ydDogYWJvcnRpbmcgYSBoYXJkd2FyZSB0cmFuc2FjdGlvblxuMTQ4NzpcdCAqICAgIGN5Y2xlczogY3ljbGVzIGZyb20gbGFzdCBicmFuY2ggKG9yIDAgaWYgbm90IHN1cHBvcnRlZClcbjE0ODg6XHQgKiAgICAgIHR5cGU6IGJyYW5jaCB0eXBlXG4xNDg5Olx0ICogICAgICBzcGVjOiBicmFuY2ggc3BlY3VsYXRpb24gaW5mbyAob3IgMCBpZiBub3Qgc3VwcG9ydGVkKVxuMTQ5MDpcdCAqL1xuMTQ5MTpcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XG4xNDkyOlx0XHRfX3U2NFx0ZnJvbTtcbjE0OTM6XHRcdF9fdTY0XHR0bztcbjE0OTQ6XHRcdF9fdTY0XHRtaXNwcmVkICAgOiAgMSwgLyogdGFyZ2V0IG1pc3ByZWRpY3RlZCAqL1xuMTQ5NTpcdFx0XHRwcmVkaWN0ZWQgOiAgMSwgLyogdGFyZ2V0IHByZWRpY3RlZCAqL1xuMTQ5NjpcdFx0XHRpbl90eCAgICAgOiAgMSwgLyogaW4gdHJhbnNhY3Rpb24gKi9cbjE0OTc6XHRcdFx0YWJvcnQgICAgIDogIDEsIC8qIHRyYW5zYWN0aW9uIGFib3J0ICovXG4xNDk4Olx0XHRcdGN5Y2xlcyAgICA6IDE2LCAvKiBjeWNsZSBjb3VudCB0byBsYXN0IGJyYW5jaCAqL1xuMTQ5OTpcdFx0XHR0eXBlICAgICAgOiAgNCwgLyogYnJhbmNoIHR5cGUgKi9cbjE1MDA6XHRcdFx0c3BlYyAgICAgIDogIDIsIC8qIGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvICovXG4xNTAxOlx0XHRcdG5ld190eXBlICA6ICA0LCAvKiBhZGRpdGlvbmFsIGJyYW5jaCB0eXBlICovXG4xNTAyOlx0XHRcdHByaXYgICAgICA6ICAzLCAvKiBwcml2aWxlZ2UgbGV2ZWwgKi9cbjE1MDM6XHRcdFx0cmVzZXJ2ZWQgIDogMzE7XG4xNTA0Olx0fTtcbjE1MDU6XHRcbjE1MDY6XHQvKiBTaXplIG9mIHVzZWQgaW5mbyBiaXRzIGluIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqL1xuMTUwNzpcdCNkZWZpbmUgUEVSRl9CUkFOQ0hfRU5UUllfSU5GT19CSVRTX01BWFx0XHQzM1xuMTUwODpcdFxuMTUwOTpcdHVuaW9uIHBlcmZfc2FtcGxlX3dlaWdodCB7XG4xNTEwOlx0XHRfX3U2NFx0ICAgICAgZnVsbDtcbjE1MTE6XHQjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG4xNTEyOlx0XHRzdHJ1Y3Qge1xuMTUxMzpcdFx0XHRfX3UzMiB2YXIxX2R3O1xuMTUxNDpcdFx0XHRfX3UxNiB2YXIyX3c7XG4xNTE1Olx0XHRcdF9fdTE2IHZhcjNfdztcbjE1MTY6XHRcdH07XG4xNTE3Olx0I2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpXG4xNTE4Olx0XHRzdHJ1Y3Qge1xuMTUxOTpcdFx0XHRfX3UxNiB2YXIzX3c7XG4xNTIwOlx0XHRcdF9fdTE2IHZhcjJfdztcbjE1MjE6XHRcdFx0X191MzIgdmFyMV9kdztcbjE1MjI6XHRcdH07XG4xNTIzOlx0I2Vsc2VcbjE1MjQ6XHQjIGVycm9yIFwmIzM0O1Vua25vd24gZW5kaWFubmVzc1wmIzM0O1xuMTUyNTpcdCNlbmRpZlxuMTUyNjpcdH07XG4xNTI3Olx0XG4xNTI4Olx0I2VuZGlmIC8qIF9VQVBJX0xJTlVYX1BFUkZfRVZFTlRfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTkwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwZXJmX2JyYW5jaF9lbnRyeWAgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBjaGFuZ2luZyBob3cgdGhlIGBwZXJmX2JyYW5jaF9lbnRyeWAgc3RydWN0IGlzIGluaXRpYWxpemVkLiAgTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIHNpemVzIGFuZCB0aGUgYml0ZmllbGRzLiBUaGUgc3RydWN0IGNvbnRhaW5zIGBmcm9tYCwgYHRvYCwgYW5kIGEgNjQtYml0IGJpdGZpZWxkIOKAkyBhIGdvb2Qgc3RhcnQuIEkgZGlkIHRoZSBtYXRoIDEmIzQzOzEmIzQzOzEmIzQzOzEmIzQzOzE2JiM0Mzs0JiM0MzsyJiM0Mzs0JiM0MzszJiM0MzszMSBhbmQgY29uZmlybSB0aGF0IHRoZSBiaXRmaWVsZCAqZG9lcyogc3VtIHRvIDY0IGJpdHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGUgY29kZSBpbnRlbmRzLiBUaGF0JiMzOTtzIGdvb2QuCgpOb3csIHRoZSBvbGQgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIpYCBmb2xsb3dlZCBieSBhc3NpZ25tZW50cyB0byBgZnJvbWAgYW5kIGB0b2AuICBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCBmdW5jdGlvbi4gSSBzZWUgdGhlIHBhdGNoIGlzICpyZW1vdmluZyogaXQgYW5kIHJlcGxhY2luZyB0aGUgY29kZSB3aXRoIGEgY29tcG91bmQgbGl0ZXJhbC4gQnV0IHdhaXQgYSBtaW51dGUsIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIGhhcyBhIGNyaXRpY2FsIGZsYXcuIEl0ICpkb2VzbiYjMzk7dCogY2xlYXIgYG5ld190eXBlYCBvciBgcHJpdmAhICBUaG9zZSBmaWVsZHMgd2VyZSBhZGRlZCBsYXRlci4gU28sIGlmIGBicmAgd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgbmV3X3R5cGVgIGFuZCBgcHJpdmAgd291bGQgYmUgbGVmdCB3aXRoIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIGluIG1lbW9yeS4gWWlrZXMuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhaywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc291cmNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGlmIHRob3NlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBsYXRlciB1c2VkLgoKVGhlIHBhdGNoJiMzOTtzIHJlcGxhY2VtZW50IG9mIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggdGhlIGNvbXBvdW5kIGxpdGVyYWwgYXNzaWdubWVudCBsb29rcyBwcm9taXNpbmcuIEkga25vdyB0aGUgQyBzdGFuZGFyZCBndWFyYW50ZWVzIHRoYXQgd2hlbiBhIHN0cnVjdCBpcyBpbml0aWFsaXplZCB3aXRoIGEgY29tcG91bmQgbGl0ZXJhbCwgKmFueSogZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCB3b3VsZCBpbmNsdWRlIHRoZSBgbmV3X3R5cGVgLCBgcHJpdmAsIGByZXNlcnZlZGAsIGFuZCBhbnkgcGFkZGluZyBiaXRzLiBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgQzk5IHN0YW5kYXJkIGZvciB0aGUgZGV0YWlscy4gVGhlIHN0YW5kYXJkIHN0YXRlcywgdGhhdCwgZm9yIGEgc3RydWN0LCBhbnkgcGFydHMgbm90IGluaXRpYWxpemVkIGV4cGxpY2l0bHkgYXJlIGluaXRpYWxpemVkIGFzIGlmIHRoZSBzdHJ1Y3QgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgcGFkZGluZyBiaXRzIGFyZSB6ZXJvZWQgb3V0LgoKQnV0IGlzIHRoZXJlIGFueSBwYWRkaW5nIGhlcmU/IGBmcm9tYCBhbmQgYHRvYCBhcmUgYF9fdTY0YCAoOCBieXRlcyBlYWNoKS4gVGhlIGJpdGZpZWxkcyBzdW0gdG8gOCBieXRlcywgc28gdGhlIHRvdGFsIHNpemUgaXMgMjQgYnl0ZXMsIGFuZCB0aGVyZSYjMzk7cyBubyBwYWRkaW5nLiBTbywgdGhlIGNvbXBvdW5kIGxpdGVyYWwgKmRlZmluaXRlbHkqIGluaXRpYWxpemVzIGV2ZXJ5dGhpbmcgY29ycmVjdGx5LgoKTXkgbWluZCB0aGVuIGZsYXNoZXMgYmFjayB0byB0aGUgb2xkIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYGJyYCB3YXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGBuZXdfdHlwZWAgYW5kIGBwcml2YCB3b3VsZCBhYnNvbHV0ZWx5IGJlIGxlZnQgdW5pbml0aWFsaXplZCEgVGhpcyBpcyBhIGJ1ZyB0aGF0IHRoZSBwYXRjaCAqZml4ZXMqLiBUaGUgcHJldmlvdXMgY29kZSBoYWQgYSByZWFsIHZ1bG5lcmFiaWxpdHkuCgpTbywgZG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZG9lcyBpdCAqZml4KiBpdD8gT2J2aW91c2x5LCBpdCBmaXhlcyB0aGUgcHJvYmxlbSEKCldhaXQsIHRoaXMgS01TQU4gcnVsZS4uLiAmIzM0O1NldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuLi4mIzM0OyBTaW5jZSB0aGlzIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZywgaXQgc2VlbXMgbGlrZSBLTVNBTiBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gV2UmIzM5O3JlICpyZW1vdmluZyogYSBwb3RlbnRpYWwgbGVhaywgbm90IGFkZGluZyBvbmUuIEl0JiMzOTtzIGxpa2UgZml4aW5nIGEgYnVnOiB5b3UgdHlwaWNhbGx5IGRvbiYjMzk7dCBuZWVkIGZ1enppbmcgdG8gZmluZCB0aGUgYnVnIHlvdSBqdXN0IGZpeGVkLgoKSSBhbSByZS1leGFtaW5pbmcgdGhlIGNvZGUgbm93OgpgYGBjCgkJYnJbbnJdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7CgkJCS5mcm9tCT0gZnJvbSwKCQkJLnRvCT0gdG8sCgkJfTsKCQluciYjNDM7JiM0Mzs7CmBgYApUaGlzIGlzIGZpbmUuIFdlIGFyZSBpbml0aWFsaXppbmcgYGJyW25yXWAgY29tcGxldGVseS4KCkFuZCBqdXN0IHRvIGJlIHN1cGVyIHN1cmUgYWJvdXQgdGhlIG9sZCBjb2RlLCBgc3BlY2AgaW4gdGhlIG9sZCBjb2RlICp3YXMqIGluaXRpYWxpemVkIHRvIGBQRVJGX0JSX1NQRUNfTkFgLiBUaGlzIHZhbHVlIGlzICpwcm9iYWJseSogemVyby4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEVSRl9CUl9TUEVDX05BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNTg6XHRQRVJGX0JSX1NQRUNfTkEsXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE1OS1cdFBFUkZfQlJfU1BFQ19XUk9OR19QQVRILFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaDoyNzU6XHRQRVJGX0JSX1NQRUNfTkFcdFx0XHRcdD0gMCxcdC8qIE5vdCBhdmFpbGFibGUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMjc2LVx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcdFx0XHQ9IDEsXHQvKiBTcGVjdWxhdGl2ZSBidXQgb24gd3JvbmcgcGF0aCAqL1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaDoyNzU6XHRQRVJGX0JSX1NQRUNfTkFcdFx0XHRcdD0gMCxcdC8qIE5vdCBhdmFpbGFibGUgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMjc2LVx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcdFx0XHQ9IDEsXHQvKiBTcGVjdWxhdGl2ZSBidXQgb24gd3JvbmcgcGF0aCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDczCgkJCQkJCQlvdXRwdXQ6IDMxNQoJCQkJCQkJdGhvdWdodHM6IDM2MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIEludHJvZHVjZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGNvbXBvdW5kIGxpdGVyYWwgaW5pdGlhbGl6ZXMgYHNwZWNgIHRvIHplcm8sIHdoaWNoIGlzIGBQRVJGX0JSX1NQRUNfTkFgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBlbnRpcmUgcGF0Y2ggZm9yIGFueSBvdGhlciBjaGFuZ2VzLgoKTG9va2luZyBjbG9zZXIsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhbmQgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgZml4IHJlbGF0ZWQgdG8gY29udGV4dCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IFBNVSBjb250ZXh0IGlzIHVzZWQgZHVyaW5nIHRhc2sgc2NoZWR1bGluZy4gSXQgbW9kaWZpZXMgdGhlIHBvaW50ZXIgcGFzc2VkIHRvIGBwbXUtJmd0O3NjaGVkX3Rhc2tgLCB1c2luZyB0aGUgZW1iZWRkZWQgYGVwY2AgaW4gYGNwY2AuIE5vdGhpbmcgaGVyZSBwb2ludHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UsIGxpa2VseSBhIGJ1ZyBmaXguCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiB0aGUgY29tcG91bmQgbGl0ZXJhbHMgdGhlbXNlbHZlcy4gTXkgY29uY2VybiB3YXMgYXJvdW5kIGhvdyB0aGUgY29tcGlsZXIgbWlnaHQgaGFuZGxlIHRoZXNlOiBgbWVtY3B5YCBmcm9tIHJlYWQtb25seSBkYXRhLCBjbGVhcmluZyBhbmQgdGhlbiBzZXR0aW5nLCBldGMuIFN0YW5kYXJkIEMgYmVoYXZpb3Igc2hvdWxkIHplcm8gdW51c2VkIGZpZWxkcy4gU3BlY2lmaWNhbGx5LCAgdGhlIGNvbXBpbGVyIGlzIHN1cHBvc2VkIHRvIHplcm8gaW5pdGlhbGl6ZSBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNldC4gVGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhlcmUgYXJlIHBhZGRpbmcgYml0cyBpbiB0aGUgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAuIEkgY2hlY2tlZC4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgYml0cy4gVGhlIGJpdGZpZWxkcyBleGFjdGx5IGZpbGwgYSA2NC1iaXQgaW50ZWdlciwgYW5kIHRoZSBzdHJ1Y3QgaXMgYSBtdWx0aXBsZSBvZiA4LWJ5dGVzIGFuZCB3aXRob3V0IGFueSBvdGhlciBwYWRkaW5nLiBUaGUgY29tcGlsZXIgKm11c3QqIHplcm8gZXZlcnl0aGluZyBlbHNlLiBTbywgdGhlIGNvbXBvdW5kIGxpdGVyYWwgKndpbGwqIGluaXRpYWxpemUgYWxsIGZpZWxkcy4KCkluaXRpYWxseSwgSSBsb29rZWQgZm9yIGFueXRoaW5nIGxpa2UgdGhlIGNvbXBpbGVyIHNldHRpbmcgYml0ZmllbGRzIGluZGl2aWR1YWxseSBhbmQgbGVhdmluZyBvdGhlcnMgdW5pbml0aWFsaXplZC4gSG93ZXZlciwgQyBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYXJlIHplcm9lZC4gVGhpcyBpcyBzYWZlLCBhbmQgSSBjb25maXJtZWQgdGhhdCBHQ0MgYW5kIENsYW5nIGJvdGggZG8gdGhpcy4KCkkgc3RhcnRlZCB0byBjaGVjayBpZiB0aGUgcGF0Y2ggbWlnaHQgKmZpeCogdW5pbml0aWFsaXplZCBtZW1vcnksIHJhdGhlciB0aGFuIGludHJvZHVjZS4gSW4gd2hpY2ggY2FzZSwgaXQgd291bGQgbm90IHJlcXVpcmUgS01TQU4sIGJlY2F1c2UgdGhlIGNvZGUgZG9lcyBub3QgYWRkIGEgbmV3IHJpc2suIEkgY29uc2lkZXJlZCB0aGF0IGl0IG1pZ2h0ICpleHBvc2UqIGFuIGV4aXN0aW5nIHJpc2ssIGJ5IG1ha2luZyBpdCByZWFjaGFibGUgaW4gYSBuZXcgd2F5LiBCdXQgaXQgZG9lc24mIzM5O3QuIEluc3RlYWQsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyAqcHJldmVudGluZyogdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYnkgc3dpdGNoaW5nIHRvIGNvbXBvdW5kIGxpdGVyYWxzLgoKQSBjbG9zZXIgbG9vayByZXZlYWxlZCB0aGF0IHRoZSBwYXRjaCBpcyAqcmVwbGFjaW5nKiBwb3RlbnRpYWxseSBpbmNvbXBsZXRlIGluaXRpYWxpemF0aW9uIHdpdGggY29tcG91bmQgbGl0ZXJhbHMuIEl0JiMzOTtzIHNhZmUhIEluIGZhY3QsIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCAqZml4ZXMqIGFuIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlcnNwYWNlIGJlY2F1c2UgcHJldmlvdXMgY29kZSB3YXMgbm90IGZ1bGx5IHplcm9pbmcgY2VydGFpbiBmaWVsZHMuCgpJbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byByZXZpc2l0IHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBlc3BlY2lhbGx5IHdoZXRoZXIgaXQgaXMgY29waWVkIHRvIHVzZXJzcGFjZS4gSWYgaXQgaXMsIHRoZW4gdGhlIGluZm9ybWF0aW9uIGxlYWsgaXMgcmVsZXZhbnQsIHNvIEkgZG91YmxlIGNoZWNrZWQgdGhhdCBgcGVyZl9icmFuY2hfZW50cnlgIGlzIHBhcnQgb2YgdGhlIHBlcmYgc2FtcGxlIGRhdGEsIHdoaWNoIGlzIHdyaXR0ZW4gdG8gdGhlIHJpbmcgYnVmZmVyIGFuZCBjYW4gYmUgYWNjZXNzZWQgYnkgdXNlcnNwYWNlLgoKVGhlIGNoYW5nZSBpbiBgaW50ZWxfcG11X3N0b3JlX2xicmAgaXMgcmVhbGx5IGp1c3QgYSByZWZhY3RvcmluZy4gSXQgcmVwbGFjZXMgbWFudWFsIGFzc2lnbm1lbnQgd2l0aCBhIGNvbXBvdW5kIGxpdGVyYWwuIFRoZSBjaGFuZ2UgaXMgc2FmZSEKCkxvb2tpbmcgYXQgdGhlIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhZ2FpbiwgSSBzZWUgdGhlIGNoZWNrLCBidXQgbm8gbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weWluZyB0byB1c2Vyc3BhY2UgaXMgYWRkZWQuIFNvIGl0JiMzOTtzIHN0aWxsIHNhZmUuIEFuZCB0aGUgb3RoZXIgY2hhbmdlIHBhc3NlcyBhbiBlbWJlZGRlZCBwb2ludGVyIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4KCioqQ29uY2x1c2lvbjoqKiBUaGUgY29tcG91bmQgbGl0ZXJhbCBhcHByb2FjaCAqZml4ZXMqIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgcGF0Y2ggZG9lcyBub3QgKmludHJvZHVjZSogYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIHVuc3BlY2lmaWVkIGZpZWxkcyBhbmQgYml0ZmllbGRzIGFyZSBjb3JyZWN0bHkgemVyby1pbml0aWFsaXplZCBkdWUgdG8gdGhlIEMgc3RhbmRhcmQgZ3VhcmFudGVlIGZvciBjb21wb3VuZCBsaXRlcmFscy4gVGhlIGxvZ2ljIGNoYW5nZXMgYXJlIHVucmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cblxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjE2LjAwMTg2Mzc0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk3NzAyNDk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQ1BVX1NVUF9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTX0FNRF9CUlNcIixcbiAgICBcIkNQVV9TVVBfSU5URUxcIixcbiAgICBcIkFSTTY0X0JSQkVcIixcbiAgICBcIkFSTV9QTVVWM1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtZF9icnNfZHJhaW5cIixcbiAgICBcImFtZF9wbXVfbGJyX3JlYWRcIixcbiAgICBcImludGVsX3BtdV9sYnJfcmVhZF8zMlwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzY0XCIsXG4gICAgXCJpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzXCIsXG4gICAgXCJicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGFjcm9zcyBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTVUgZHJpdmVycyAoQU1ELCBJbnRlbCwgQVJNKS4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKClgIHRvIGNsZWFyIGJpdGZpZWxkcywgYnV0IHRoaXMgZnVuY3Rpb24gd2FzIG91dGRhdGVkIGFuZCBmYWlsZWQgdG8gY2xlYXIgbmV3ZXIgYml0ZmllbGRzIGxpa2UgYG5ld190eXBlYCBhbmQgYHByaXZgLCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBwZXJmIHJpbmcgYnVmZmVyLlxcblxcblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cXG5cXG5UaGUgb3RoZXIgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFyZSBsb2dpYyBmaXhlcyBmb3IgUE1VIGNvbnRleHQgc2NoZWR1bGluZyAoYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcykgYW5kIGRvIG5vdCBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlLlxcblxcblNpbmNlIHRoaXMgcGF0Y2ggKnJlc29sdmVzKiBhbiBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9uZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBicmFuY2ggZW50cnkgaW5pdGlhbGl6YXRpb24gaW4gcGVyZiBldmVudCBQTVUgZHJpdmVycyAoQU1EIEJSUywgQU1EIExCUiwgSW50ZWwgTEJSLCBBUk0gQlJCRSkgYnkgcmVwbGFjaW5nIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHBlcmYgZXZlbnRzIHN1YnN5c3RlbSAoYGtlcm5lbC9ldmVudHMvY29yZS5jYCkgdG8gY2hhbmdlIGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgUE1VIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjoxNi4wMDE4NzAzNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzU1OTA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ5ZWU1ZThmYzQ5MTExMDc1NDU2YjhmYTk0Mzg0YTMyMDI0OThjNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTU6MDI6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNcXG5pbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNcXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXFxuQEAgLTM0MywxMSArMzQzLDEwIEBAIHZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxcbiBcXHRcXHRpZiAoIWFtZF9icnNfbWF0Y2hfcGxtKGV2ZW50LCBmcm9tLCB0bykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyK25yKTtcXG4tXFxuLVxcdFxcdGJyW25yXS5mcm9tID0gZnJvbTtcXG4tXFx0XFx0YnJbbnJdLnRvICAgPSB0bztcXG4tXFxuK1xcdFxcdGJyW25yXSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xcbitcXHRcXHRcXHQuZnJvbVxcdD0gZnJvbSxcXG4rXFx0XFx0XFx0LnRvXFx0PSB0byxcXG4rXFx0XFx0fTtcXG4gXFx0XFx0bnIrKztcXG4gXFx0fVxcbiBlbXB0eTpcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcXG5pbmRleCA5ZDljOTYxOTg5ZDUxLi5hNTU2NDZmY2I4NDY1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXFxuQEAgLTE4NCwxMyArMTg0LDYgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXFxuIFxcdFxcdCAgICBlbnRyeS50by5zcGxpdC5yZXNlcnZlZClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgKyBvdXQpO1xcbi1cXG4tXFx0XFx0YnJbb3V0XS5mcm9tXFx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCk7XFxuLVxcdFxcdGJyW291dF0udG9cXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCk7XFxuLVxcdFxcdGJyW291dF0ubWlzcHJlZFxcdD0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0O1xcbi1cXHRcXHRicltvdXRdLnByZWRpY3RlZCA9ICFicltvdXRdLm1pc3ByZWQ7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTZXQgYnJhbmNoIHNwZWN1bGF0aW9uIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBzdGF0dXMgb2ZcXG4gXFx0XFx0ICogdGhlIHZhbGlkIGFuZCBzcGVjIGJpdHMuXFxuQEAgLTIwOCw3ICsyMDEsMTQgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXFxuIFxcdFxcdCAqIHNwZWN1bGF0aXZlIGFuZCB0b29rIHRoZSBjb3JyZWN0IHBhdGhcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlkeCA9IChlbnRyeS50by5zcGxpdC52YWxpZCBcXHUwMDNjXFx1MDAzYyAxKSB8IGVudHJ5LnRvLnNwbGl0LnNwZWM7XFxuLVxcdFxcdGJyW291dF0uc3BlYyA9IGxicl9zcGVjX21hcFtpZHhdO1xcbitcXG4rXFx0XFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xcbitcXHRcXHRcXHQuZnJvbVxcdFxcdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApLFxcbitcXHRcXHRcXHQudG9cXHRcXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksXFxuK1xcdFxcdFxcdC5taXNwcmVkXFx0PSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsXFxuK1xcdFxcdFxcdC5wcmVkaWN0ZWRcXHQ9ICFlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsXFxuK1xcdFxcdFxcdC5zcGVjXFx0XFx0PSBsYnJfc3BlY19tYXBbaWR4XSxcXG4rXFx0XFx0fTtcXG4gXFx0XFx0b3V0Kys7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xcbmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXFxuKysrIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXFxuQEAgLTc1NiwxMCArNzU2LDEwIEBAIHZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzMyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxcbiBcXG4gXFx0XFx0cmRtc3JxKHg4Nl9wbXUubGJyX2Zyb20gKyBsYnJfaWR4LCBtc3JfbGFzdGJyYW5jaC5sYnIpO1xcbiBcXG4tXFx0XFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKTtcXG4tXFxuLVxcdFxcdGJyLVxcdTAwM2Vmcm9tXFx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tO1xcbi1cXHRcXHRici1cXHUwMDNldG9cXHRcXHQ9IG1zcl9sYXN0YnJhbmNoLnRvO1xcbitcXHRcXHQqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcXG4rXFx0XFx0XFx0LmZyb21cXHQ9IG1zcl9sYXN0YnJhbmNoLmZyb20sXFxuK1xcdFxcdFxcdC50b1xcdD0gbXNyX2xhc3RicmFuY2gudG8sXFxuK1xcdFxcdH07XFxuIFxcdFxcdGJyKys7XFxuIFxcdH1cXG4gXFx0Y3B1Yy1cXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcXG5AQCAtODQ3LDE0ICs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuIFxcdFxcdGlmIChhYm9ydCBcXHUwMDI2XFx1MDAyNiB4ODZfcG11Lmxicl9kb3VibGVfYWJvcnQgXFx1MDAyNlxcdTAwMjYgb3V0IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0b3V0LS07XFxuIFxcbi1cXHRcXHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIrb3V0KTtcXG4tXFx0XFx0YnJbb3V0XS5mcm9tXFx0ID0gZnJvbTtcXG4tXFx0XFx0YnJbb3V0XS50b1xcdCA9IHRvO1xcbi1cXHRcXHRicltvdXRdLm1pc3ByZWRcXHQgPSBtaXM7XFxuLVxcdFxcdGJyW291dF0ucHJlZGljdGVkID0gcHJlZDtcXG4tXFx0XFx0YnJbb3V0XS5pbl90eFxcdCA9IGluX3R4O1xcbi1cXHRcXHRicltvdXRdLmFib3J0XFx0ID0gYWJvcnQ7XFxuLVxcdFxcdGJyW291dF0uY3ljbGVzXFx0ID0gY3ljbGVzO1xcbitcXHRcXHRicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XFxuK1xcdFxcdFxcdC5mcm9tXFx0XFx0PSBmcm9tLFxcbitcXHRcXHRcXHQudG9cXHRcXHQ9IHRvLFxcbitcXHRcXHRcXHQubWlzcHJlZFxcdD0gbWlzLFxcbitcXHRcXHRcXHQucHJlZGljdGVkXFx0PSBwcmVkLFxcbitcXHRcXHRcXHQuaW5fdHhcXHRcXHQ9IGluX3R4LFxcbitcXHRcXHRcXHQuYWJvcnRcXHRcXHQ9IGFib3J0LFxcbitcXHRcXHRcXHQuY3ljbGVzXFx0XFx0PSBjeWNsZXMsXFxuK1xcdFxcdH07XFxuIFxcdFxcdG91dCsrO1xcbiBcXHR9XFxuIFxcdGNwdWMtXFx1MDAzZWxicl9zdGFjay5uciA9IG91dDtcXG5AQCAtOTA1LDYgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXFxuIFxcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZTtcXG4gXFx0c3RydWN0IGxicl9lbnRyeSAqbGJyO1xcbiBcXHR1NjQgZnJvbSwgdG8sIGluZm87XFxuK1xcdGJvb2wgbWlzcHJlZDtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgeDg2X3BtdS5sYnJfbnI7IGkrKykge1xcbkBAIC05MjEsMjQgKzkyMywyNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxcbiBcXHRcXHR0byA9IHJkbGJyX3RvKGksIGxicik7XFxuIFxcdFxcdGluZm8gPSByZGxicl9pbmZvKGksIGxicik7XFxuIFxcbi1cXHRcXHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZSk7XFxuLVxcbi1cXHRcXHRlLVxcdTAwM2Vmcm9tXFx0XFx0PSBmcm9tO1xcbi1cXHRcXHRlLVxcdTAwM2V0b1xcdFxcdD0gdG87XFxuLVxcdFxcdGUtXFx1MDAzZW1pc3ByZWRcXHQ9IGdldF9sYnJfbWlzcHJlZChpbmZvKTtcXG4tXFx0XFx0ZS1cXHUwMDNlcHJlZGljdGVkXFx0PSAhZS1cXHUwMDNlbWlzcHJlZDtcXG4tXFx0XFx0ZS1cXHUwMDNlaW5fdHhcXHQ9ICEhKGluZm8gXFx1MDAyNiBMQlJfSU5GT19JTl9UWCk7XFxuLVxcdFxcdGUtXFx1MDAzZWFib3J0XFx0PSAhIShpbmZvIFxcdTAwMjYgTEJSX0lORk9fQUJPUlQpO1xcbi1cXHRcXHRlLVxcdTAwM2VjeWNsZXNcXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pO1xcbi1cXHRcXHRlLVxcdTAwM2V0eXBlXFx0XFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyk7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YgY3B1Yy1cXHUwMDNlbGJyX2VudHJpZXNbaV0gdG9cXG4tXFx0XFx0ICogdGVtcG9yYXJpbHkgc3RvcmUgdGhlIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi5cXG4tXFx0XFx0ICogVGhlIGxhdGVyIGNvZGUgd2lsbCBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWRcXG4tXFx0XFx0ICogdG8gdGhlIHBlcmYgdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0ZS1cXHUwMDNlcmVzZXJ2ZWRcXHQ9IChpbmZvIFxcdTAwM2VcXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcXHUwMDI2IExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLO1xcbitcXHRcXHRtaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xcbitcXG4rXFx0XFx0KmUgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcXG4rXFx0XFx0XFx0LmZyb21cXHRcXHQ9IGZyb20sXFxuK1xcdFxcdFxcdC50b1xcdFxcdD0gdG8sXFxuK1xcdFxcdFxcdC5taXNwcmVkXFx0PSBtaXNwcmVkLFxcbitcXHRcXHRcXHQucHJlZGljdGVkXFx0PSAhbWlzcHJlZCxcXG4rXFx0XFx0XFx0LmluX3R4XFx0XFx0PSAhIShpbmZvIFxcdTAwMjYgTEJSX0lORk9fSU5fVFgpLFxcbitcXHRcXHRcXHQuYWJvcnRcXHRcXHQ9ICEhKGluZm8gXFx1MDAyNiBMQlJfSU5GT19BQk9SVCksXFxuK1xcdFxcdFxcdC5jeWNsZXNcXHRcXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pLFxcbitcXHRcXHRcXHQudHlwZVxcdFxcdD0gZ2V0X2xicl9icl90eXBlKGluZm8pLFxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2ZcXG4rXFx0XFx0XFx0ICogY3B1Yy1cXHUwMDNlbGJyX2VudHJpZXNbaV0gdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlXFxuK1xcdFxcdFxcdCAqIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4gVGhlIGxhdGVyIGNvZGUgd2lsbFxcbitcXHRcXHRcXHQgKiBkZWNpZGUgd2hhdCBjb250ZW50IGNhbiBiZSBkaXNjbG9zZWQgdG8gdGhlIHBlcmZcXG4rXFx0XFx0XFx0ICogdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0LnJlc2VydmVkXFx0PSAoaW5mbyBcXHUwMDNlXFx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQgIExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLLFxcbitcXHRcXHR9O1xcbiBcXHR9XFxuIFxcbiBcXHRjcHVjLVxcdTAwM2VsYnJfc3RhY2subnIgPSBpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXFxuaW5kZXggYmE1NTRlMGM4NDZjNC4uMjU0YmU0ZGE4YWUyOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuY1xcbisrKyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXFxuQEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgYm9vbCBwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXQoaW50IGluZGV4LCBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRicmJpbmYgPSBicmVncy5icmJpbmY7XFxuLVxcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlbnRyeSk7XFxuK1xcdCplbnRyeSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyB9O1xcbiBcXHRpZiAoYnJiZV9yZWNvcmRfaXNfY29tcGxldGUoYnJiaW5mKSkge1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZnJvbSA9IGJyZWdzLmJyYnNyYztcXG4gXFx0XFx0ZW50cnktXFx1MDAzZXRvID0gYnJlZ3MuYnJidGd0O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXFxuaW5kZXggNDhkODUxZmJkOGVhNS4uMzEwNjgxY2NjYjUwYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXFxuQEAgLTE0NjcsMjMgKzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS5cXG4tICogVGhlIHRvIGFuZCBmcm9tIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgYmVjYXVzZSB0aGV5IGFyZVxcbi0gKiBzeXN0ZW1hdGljYWxseSBtb2RpZmllZCBieSBjYWxsZXIuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqYnIpXFxuLXtcXG4tXFx0YnItXFx1MDAzZW1pc3ByZWRcXHQ9IDA7XFxuLVxcdGJyLVxcdTAwM2VwcmVkaWN0ZWRcXHQ9IDA7XFxuLVxcdGJyLVxcdTAwM2Vpbl90eFxcdD0gMDtcXG4tXFx0YnItXFx1MDAzZWFib3J0XFx0PSAwO1xcbi1cXHRici1cXHUwMDNlY3ljbGVzXFx0PSAwO1xcbi1cXHRici1cXHUwMDNldHlwZVxcdD0gMDtcXG4tXFx0YnItXFx1MDAzZXNwZWNcXHQ9IFBFUkZfQlJfU1BFQ19OQTtcXG4tXFx0YnItXFx1MDAzZXJlc2VydmVkXFx0PSAwO1xcbi19XFxuLVxcbiBleHRlcm4gdm9pZCBwZXJmX291dHB1dF9zYW1wbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbmluZGV4IDQ2Mzg1NDQyMDVmMjguLjM0ZWIwNWU5ZDc0ZDAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbkBAIC0zNzU3LDYgKzM3NTcsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2N0eF9zY2hlZF90YXNrX2NiKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VwbXVfY3R4X2xpc3QsIHBtdV9jdHhfZW50cnkpIHtcXG4gXFx0XFx0Y3BjID0gdGhpc19jcGMocG11X2N0eC1cXHUwMDNlcG11KTtcXG4gXFxuK1xcdFxcdGlmIChjcGMtXFx1MDAzZXRhc2tfZXBjICE9IHBtdV9jdHgpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0aWYgKGNwYy1cXHUwMDNlc2NoZWRfY2JfdXNhZ2UgXFx1MDAyNlxcdTAwMjYgcG11X2N0eC1cXHUwMDNlcG11LVxcdTAwM2VzY2hlZF90YXNrKVxcbiBcXHRcXHRcXHRwbXVfY3R4LVxcdTAwM2VwbXUtXFx1MDAzZXNjaGVkX3Rhc2socG11X2N0eCwgdGFzaywgc2NoZWRfaW4pO1xcbiBcXHR9XFxuQEAgLTM5MDcsNyArMzkxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgcGVyZl9jcHVfcG11X2NvbnRleHQgKmNwYyxcXG4gXFx0cGVyZl9jdHhfbG9jayhjcHVjdHgsIGNwdWN0eC1cXHUwMDNldGFza19jdHgpO1xcbiBcXHRwZXJmX3BtdV9kaXNhYmxlKHBtdSk7XFxuIFxcbi1cXHRwbXUtXFx1MDAzZXNjaGVkX3Rhc2soY3BjLVxcdTAwM2V0YXNrX2VwYywgdGFzaywgc2NoZWRfaW4pO1xcbitcXHRwbXUtXFx1MDAzZXNjaGVkX3Rhc2soXFx1MDAyNmNwYy1cXHUwMDNlZXBjLCB0YXNrLCBzY2hlZF9pbik7XFxuIFxcbiBcXHRwZXJmX3BtdV9lbmFibGUocG11KTtcXG4gXFx0cGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LVxcdTAwM2V0YXNrX2N0eCk7XFxuQEAgLTM5MTcsMTUgKzM5MjAsMTcgQEAgc3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBzY2hlZF9pbilcXG4ge1xcbi1cXHRzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZwZXJmX2NwdV9jb250ZXh0KTtcXG4gXFx0c3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGM7XFxuIFxcbi1cXHQvKiBjcHVjdHgtXFx1MDAzZXRhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovXFxuLVxcdGlmIChwcmV2ID09IG5leHQgfHwgY3B1Y3R4LVxcdTAwM2V0YXNrX2N0eClcXG4rXFx0aWYgKHByZXYgPT0gbmV4dClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cihcXHUwMDI2c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KVxcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFxcdTAwMjZzY2hlZF9jYl9saXN0KSwgc2NoZWRfY2JfZW50cnkpIHtcXG4rXFx0XFx0aWYgKGNwYy1cXHUwMDNldGFza19lcGMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0X19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6MTYuNTYwNDQ0OTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5MzA4MzU2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiLFxuICAgIFwiUEVSRl9FVkVOVFNfQU1EX0JSU1wiLFxuICAgIFwiQ1BVX1NVUF9JTlRFTFwiLFxuICAgIFwiQVJNNjRfQlJCRVwiLFxuICAgIFwiQVJNX1BNVVYzXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYW1kX2Jyc19kcmFpblwiLFxuICAgIFwiYW1kX3BtdV9sYnJfcmVhZFwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzMyXCIsXG4gICAgXCJpbnRlbF9wbXVfbGJyX3JlYWRfNjRcIixcbiAgICBcImludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNcIixcbiAgICBcImJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGJyYW5jaCBlbnRyeSBpbml0aWFsaXphdGlvbiBpbiBwZXJmIGV2ZW50IFBNVSBkcml2ZXJzIChBTUQgQlJTLCBBTUQgTEJSLCBJbnRlbCBMQlIsIEFSTSBCUkJFKSBieSByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgcGVyZiBldmVudHMgc3Vic3lzdGVtIChga2VybmVsL2V2ZW50cy9jb3JlLmNgKSB0byBjaGFuZ2UgaG93IGBzY2hlZF90YXNrYCBjYWxsYmFja3MgYXJlIGludm9rZWQgZm9yIFBNVXMgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBQTVUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCB2aWEgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5ZWU1ZThmYzQ5MTExMDc1NDU2YjhmYTk0Mzg0YTMyMDI0OThjNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTowMjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG5pbmRleCBkYzU2NDY4OGYzZDczLi41NGIxM2ZhYmExMTZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuKysrIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY1xuQEAgLTM0MywxMSArMzQzLDEwIEBAIHZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxuIFx0XHRpZiAoIWFtZF9icnNfbWF0Y2hfcGxtKGV2ZW50LCBmcm9tLCB0bykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicitucik7XG4tXG4tXHRcdGJyW25yXS5mcm9tID0gZnJvbTtcbi1cdFx0YnJbbnJdLnRvICAgPSB0bztcbi1cbitcdFx0YnJbbnJdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdD0gZnJvbSxcbitcdFx0XHQudG9cdD0gdG8sXG4rXHRcdH07XG4gXHRcdG5yKys7XG4gXHR9XG4gZW1wdHk6XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbmluZGV4IDlkOWM5NjE5ODlkNTEuLmE1NTY0NmZjYjg0NjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXG5AQCAtMTg0LDEzICsxODQsNiBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICAgIGVudHJ5LnRvLnNwbGl0LnJlc2VydmVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoYnIgKyBvdXQpO1xuLVxuLVx0XHRicltvdXRdLmZyb21cdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApO1xuLVx0XHRicltvdXRdLnRvXHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCk7XG4tXHRcdGJyW291dF0ubWlzcHJlZFx0PSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3Q7XG4tXHRcdGJyW291dF0ucHJlZGljdGVkID0gIWJyW291dF0ubWlzcHJlZDtcbi1cbiBcdFx0LypcbiBcdFx0ICogU2V0IGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvcm1hdGlvbiB1c2luZyB0aGUgc3RhdHVzIG9mXG4gXHRcdCAqIHRoZSB2YWxpZCBhbmQgc3BlYyBiaXRzLlxuQEAgLTIwOCw3ICsyMDEsMTQgQEAgdm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXG4gXHRcdCAqIHNwZWN1bGF0aXZlIGFuZCB0b29rIHRoZSBjb3JyZWN0IHBhdGhcbiBcdFx0ICovXG4gXHRcdGlkeCA9IChlbnRyeS50by5zcGxpdC52YWxpZCBcdTAwM2NcdTAwM2MgMSkgfCBlbnRyeS50by5zcGxpdC5zcGVjO1xuLVx0XHRicltvdXRdLnNwZWMgPSBsYnJfc3BlY19tYXBbaWR4XTtcbitcbitcdFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuK1x0XHRcdC5mcm9tXHRcdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LmZyb20uc3BsaXQuaXApLFxuK1x0XHRcdC50b1x0XHQ9IHNpZ25fZXh0X2JyYW5jaF9pcChlbnRyeS50by5zcGxpdC5pcCksXG4rXHRcdFx0Lm1pc3ByZWRcdD0gZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LFxuK1x0XHRcdC5wcmVkaWN0ZWRcdD0gIWVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdCxcbitcdFx0XHQuc3BlY1x0XHQ9IGxicl9zcGVjX21hcFtpZHhdLFxuK1x0XHR9O1xuIFx0XHRvdXQrKztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbmluZGV4IGY4ZmFkYjBiMTZhNDUuLjBhOWIzNDI2MWViZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNcbisrKyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuQEAgLTc1NiwxMCArNzU2LDEwIEBAIHZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzMyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxuIFxuIFx0XHRyZG1zcnEoeDg2X3BtdS5sYnJfZnJvbSArIGxicl9pZHgsIG1zcl9sYXN0YnJhbmNoLmxicik7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicik7XG4tXG4tXHRcdGJyLVx1MDAzZWZyb21cdD0gbXNyX2xhc3RicmFuY2guZnJvbTtcbi1cdFx0YnItXHUwMDNldG9cdFx0PSBtc3JfbGFzdGJyYW5jaC50bztcbitcdFx0KmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdD0gbXNyX2xhc3RicmFuY2guZnJvbSxcbitcdFx0XHQudG9cdD0gbXNyX2xhc3RicmFuY2gudG8sXG4rXHRcdH07XG4gXHRcdGJyKys7XG4gXHR9XG4gXHRjcHVjLVx1MDAzZWxicl9zdGFjay5uciA9IGk7XG5AQCAtODQ3LDE0ICs4NDcsMTUgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfNjQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4gXHRcdGlmIChhYm9ydCBcdTAwMjZcdTAwMjYgeDg2X3BtdS5sYnJfZG91YmxlX2Fib3J0IFx1MDAyNlx1MDAyNiBvdXQgXHUwMDNlIDApXG4gXHRcdFx0b3V0LS07XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicitvdXQpO1xuLVx0XHRicltvdXRdLmZyb21cdCA9IGZyb207XG4tXHRcdGJyW291dF0udG9cdCA9IHRvO1xuLVx0XHRicltvdXRdLm1pc3ByZWRcdCA9IG1pcztcbi1cdFx0YnJbb3V0XS5wcmVkaWN0ZWQgPSBwcmVkO1xuLVx0XHRicltvdXRdLmluX3R4XHQgPSBpbl90eDtcbi1cdFx0YnJbb3V0XS5hYm9ydFx0ID0gYWJvcnQ7XG4tXHRcdGJyW291dF0uY3ljbGVzXHQgPSBjeWNsZXM7XG4rXHRcdGJyW291dF0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbitcdFx0XHQuZnJvbVx0XHQ9IGZyb20sXG4rXHRcdFx0LnRvXHRcdD0gdG8sXG4rXHRcdFx0Lm1pc3ByZWRcdD0gbWlzLFxuK1x0XHRcdC5wcmVkaWN0ZWRcdD0gcHJlZCxcbitcdFx0XHQuaW5fdHhcdFx0PSBpbl90eCxcbitcdFx0XHQuYWJvcnRcdFx0PSBhYm9ydCxcbitcdFx0XHQuY3ljbGVzXHRcdD0gY3ljbGVzLFxuK1x0XHR9O1xuIFx0XHRvdXQrKztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gb3V0O1xuQEAgLTkwNSw2ICs5MDYsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuIFx0c3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplO1xuIFx0c3RydWN0IGxicl9lbnRyeSAqbGJyO1xuIFx0dTY0IGZyb20sIHRvLCBpbmZvO1xuK1x0Ym9vbCBtaXNwcmVkO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4ODZfcG11Lmxicl9ucjsgaSsrKSB7XG5AQCAtOTIxLDI0ICs5MjMsMjcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3N0b3JlX2xicihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcbiBcdFx0dG8gPSByZGxicl90byhpLCBsYnIpO1xuIFx0XHRpbmZvID0gcmRsYnJfaW5mbyhpLCBsYnIpO1xuIFxuLVx0XHRwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoZSk7XG4tXG4tXHRcdGUtXHUwMDNlZnJvbVx0XHQ9IGZyb207XG4tXHRcdGUtXHUwMDNldG9cdFx0PSB0bztcbi1cdFx0ZS1cdTAwM2VtaXNwcmVkXHQ9IGdldF9sYnJfbWlzcHJlZChpbmZvKTtcbi1cdFx0ZS1cdTAwM2VwcmVkaWN0ZWRcdD0gIWUtXHUwMDNlbWlzcHJlZDtcbi1cdFx0ZS1cdTAwM2Vpbl90eFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19JTl9UWCk7XG4tXHRcdGUtXHUwMDNlYWJvcnRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fQUJPUlQpO1xuLVx0XHRlLVx1MDAzZWN5Y2xlc1x0PSBnZXRfbGJyX2N5Y2xlcyhpbmZvKTtcbi1cdFx0ZS1cdTAwM2V0eXBlXHRcdD0gZ2V0X2xicl9icl90eXBlKGluZm8pO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2YgY3B1Yy1cdTAwM2VsYnJfZW50cmllc1tpXSB0b1xuLVx0XHQgKiB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLlxuLVx0XHQgKiBUaGUgbGF0ZXIgY29kZSB3aWxsIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZFxuLVx0XHQgKiB0byB0aGUgcGVyZiB0b29sLiBQbGVhZSBzZWUgaW50ZWxfcG11X2xicl9jb3VudGVyc19yZW9yZGVyKCkuXG4tXHRcdCAqL1xuLVx0XHRlLVx1MDAzZXJlc2VydmVkXHQ9IChpbmZvIFx1MDAzZVx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX09GRlNFVCkgXHUwMDI2IExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLO1xuK1x0XHRtaXNwcmVkID0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuK1xuK1x0XHQqZSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuK1x0XHRcdC5mcm9tXHRcdD0gZnJvbSxcbitcdFx0XHQudG9cdFx0PSB0byxcbitcdFx0XHQubWlzcHJlZFx0PSBtaXNwcmVkLFxuK1x0XHRcdC5wcmVkaWN0ZWRcdD0gIW1pc3ByZWQsXG4rXHRcdFx0LmluX3R4XHRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fSU5fVFgpLFxuK1x0XHRcdC5hYm9ydFx0XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0FCT1JUKSxcbitcdFx0XHQuY3ljbGVzXHRcdD0gZ2V0X2xicl9jeWNsZXMoaW5mbyksXG4rXHRcdFx0LnR5cGVcdFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyksXG4rXHRcdFx0LypcbitcdFx0XHQgKiBMZXZlcmFnZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2ZcbitcdFx0XHQgKiBjcHVjLVx1MDAzZWxicl9lbnRyaWVzW2ldIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHRoZVxuK1x0XHRcdCAqIGJyYW5jaCBjb3VudGVycyBpbmZvcm1hdGlvbi4gVGhlIGxhdGVyIGNvZGUgd2lsbFxuK1x0XHRcdCAqIGRlY2lkZSB3aGF0IGNvbnRlbnQgY2FuIGJlIGRpc2Nsb3NlZCB0byB0aGUgcGVyZlxuK1x0XHRcdCAqIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS5cbitcdFx0XHQgKi9cbitcdFx0XHQucmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjZcbitcdFx0XHRcdFx0ICBMQlJfSU5GT19CUl9DTlRSX0ZVTExfTUFTSyxcbitcdFx0fTtcbiBcdH1cbiBcbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXG5pbmRleCBiYTU1NGUwYzg0NmM0Li4yNTRiZTRkYThhZTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbisrKyBiL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jXG5AQCAtNjA0LDcgKzYwNCw3IEBAIHN0YXRpYyBib29sIHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldChpbnQgaW5kZXgsIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGJyYmluZiA9IGJyZWdzLmJyYmluZjtcbi1cdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlbnRyeSk7XG4rXHQqZW50cnkgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsgfTtcbiBcdGlmIChicmJlX3JlY29yZF9pc19jb21wbGV0ZShicmJpbmYpKSB7XG4gXHRcdGVudHJ5LVx1MDAzZWZyb20gPSBicmVncy5icmJzcmM7XG4gXHRcdGVudHJ5LVx1MDAzZXRvID0gYnJlZ3MuYnJidGd0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhcbmluZGV4IDQ4ZDg1MWZiZDhlYTUuLjMxMDY4MWNjY2I1MGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhcbkBAIC0xNDY3LDIzICsxNDY3LDYgQEAgc3RhdGljIGlubGluZSB1MzIgcGVyZl9zYW1wbGVfZGF0YV9zaXplKHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuIFx0cmV0dXJuIHNpemU7XG4gfVxuIFxuLS8qXG4tICogQ2xlYXIgYWxsIGJpdGZpZWxkcyBpbiB0aGUgcGVyZl9icmFuY2hfZW50cnkuXG4tICogVGhlIHRvIGFuZCBmcm9tIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgYmVjYXVzZSB0aGV5IGFyZVxuLSAqIHN5c3RlbWF0aWNhbGx5IG1vZGlmaWVkIGJ5IGNhbGxlci5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqYnIpXG4te1xuLVx0YnItXHUwMDNlbWlzcHJlZFx0PSAwO1xuLVx0YnItXHUwMDNlcHJlZGljdGVkXHQ9IDA7XG4tXHRici1cdTAwM2Vpbl90eFx0PSAwO1xuLVx0YnItXHUwMDNlYWJvcnRcdD0gMDtcbi1cdGJyLVx1MDAzZWN5Y2xlc1x0PSAwO1xuLVx0YnItXHUwMDNldHlwZVx0PSAwO1xuLVx0YnItXHUwMDNlc3BlY1x0PSBQRVJGX0JSX1NQRUNfTkE7XG4tXHRici1cdTAwM2VyZXNlcnZlZFx0PSAwO1xuLX1cbi1cbiBleHRlcm4gdm9pZCBwZXJmX291dHB1dF9zYW1wbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhlYWRlcixcbiBcdFx0XHQgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuaW5kZXggNDYzODU0NDIwNWYyOC4uMzRlYjA1ZTlkNzRkMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuQEAgLTM3NTcsNiArMzc1Nyw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2Ioc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwbXVfY3R4LCBcdTAwMjZjdHgtXHUwMDNlcG11X2N0eF9saXN0LCBwbXVfY3R4X2VudHJ5KSB7XG4gXHRcdGNwYyA9IHRoaXNfY3BjKHBtdV9jdHgtXHUwMDNlcG11KTtcbiBcbitcdFx0aWYgKGNwYy1cdTAwM2V0YXNrX2VwYyAhPSBwbXVfY3R4KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRpZiAoY3BjLVx1MDAzZXNjaGVkX2NiX3VzYWdlIFx1MDAyNlx1MDAyNiBwbXVfY3R4LVx1MDAzZXBtdS1cdTAwM2VzY2hlZF90YXNrKVxuIFx0XHRcdHBtdV9jdHgtXHUwMDNlcG11LVx1MDAzZXNjaGVkX3Rhc2socG11X2N0eCwgdGFzaywgc2NoZWRfaW4pO1xuIFx0fVxuQEAgLTM5MDcsNyArMzkxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgcGVyZl9jcHVfcG11X2NvbnRleHQgKmNwYyxcbiBcdHBlcmZfY3R4X2xvY2soY3B1Y3R4LCBjcHVjdHgtXHUwMDNldGFza19jdHgpO1xuIFx0cGVyZl9wbXVfZGlzYWJsZShwbXUpO1xuIFxuLVx0cG11LVx1MDAzZXNjaGVkX3Rhc2soY3BjLVx1MDAzZXRhc2tfZXBjLCB0YXNrLCBzY2hlZF9pbik7XG4rXHRwbXUtXHUwMDNlc2NoZWRfdGFzayhcdTAwMjZjcGMtXHUwMDNlZXBjLCB0YXNrLCBzY2hlZF9pbik7XG4gXG4gXHRwZXJmX3BtdV9lbmFibGUocG11KTtcbiBcdHBlcmZfY3R4X3VubG9jayhjcHVjdHgsIGNwdWN0eC1cdTAwM2V0YXNrX2N0eCk7XG5AQCAtMzkxNywxNSArMzkyMCwxNyBAQCBzdGF0aWMgdm9pZCBwZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbiBcdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCxcbiBcdFx0XHRcdGJvb2wgc2NoZWRfaW4pXG4ge1xuLVx0c3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9IHRoaXNfY3B1X3B0cihcdTAwMjZwZXJmX2NwdV9jb250ZXh0KTtcbiBcdHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjO1xuIFxuLVx0LyogY3B1Y3R4LVx1MDAzZXRhc2tfY3R4IHdpbGwgYmUgaGFuZGxlZCBpbiBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4vb3V0ICovXG4tXHRpZiAocHJldiA9PSBuZXh0IHx8IGNwdWN0eC1cdTAwM2V0YXNrX2N0eClcbitcdGlmIChwcmV2ID09IG5leHQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3BjLCB0aGlzX2NwdV9wdHIoXHUwMDI2c2NoZWRfY2JfbGlzdCksIHNjaGVkX2NiX2VudHJ5KVxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cihcdTAwMjZzY2hlZF9jYl9saXN0KSwgc2NoZWRfY2JfZW50cnkpIHtcbitcdFx0aWYgKGNwYy1cdTAwM2V0YXNrX2VwYylcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0X19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjoxNi41NjA0NDcwNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIyODU0ODM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byB0aGUgUGVyZiBFdmVudHMgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBmaWxlcyByZWxhdGVkIHRvIHRoZSBwZXJmb3JtYW5jZSBldmVudHMgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNgLCBgYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuY2AsIGBhcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNgLCBgZHJpdmVycy9wZXJmL2FybV9icmJlLmNgLCBgaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmhgLCBhbmQsIGNyaXRpY2FsbHksIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AuICBUaGUgbW9kaWZpY2F0aW9ucyB0byBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFyZSB3aGF0IGltbWVkaWF0ZWx5IGRyYXcgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGhleSBkZWFsIHdpdGggdGhlIGBwZXJmX2N0eF9zY2hlZF90YXNrX2NiYCBhbmQgYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSBjb3JlIHBpZWNlcyBvZiB0aGUgc2NoZWR1bGluZyBpbnRlZ3JhdGlvbi5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgLiAgTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjayB3aXRoaW4gdGhlIGBwZXJmX2N0eF9zY2hlZF90YXNrX2NiYCBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgdGhlIFBNVSBjb250ZXh0cyBiYXNlZCBvbiBgY3BjLVx1MDAzZXRhc2tfZXBjYC4gIEZ1cnRoZXJtb3JlLCB0aGUgY2FsbCB0byBgcG11LVx1MDAzZXNjaGVkX3Rhc2tgIGluIGBfX3BlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGNoYW5nZWQgdG8gcGFzcyB0aGUgYGVwY2AgZmllbGQsIG5vdCB0aGUgYHRhc2tfZXBjYC4gRmluYWxseSwgSSBzZWUgdGhlIGxvb3AgaW4gYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGNoYW5nZWQgdG8gY2hlY2sgaWYgYGNwYy1cdTAwM2V0YXNrX2VwY2AgaXMgc2V0LlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgc2NoZWR1bGluZyBjYWxsYmFjayBtZWNoYW5pc20uIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBtb3N0bHkgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gIFRoYXQncyBnZW5lcmFsbHkgYSBjbGVhbnVwLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVwbGFjZW1lbnQgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBob3cgcmVhY2hhYmxlIHRoaXMgaXMuICBgcGVyZl9wbXVfc2NoZWRfdGFza2AgaXMgY2FsbGVkIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzIGlmIHRoZXJlIGFyZSBQTVVzIHdpdGggYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcy4gIFRoYXQgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIHNvbWV0aGluZyBsaWtlIGBzeXprYWxsZXJgLCB1c2luZyB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgc3lzY2FsbC4gVGhhdCBtYWtlcyBtZSBmZWVsIGJldHRlciwgYXMgSSBjYW4gd3JpdGUgYSB0ZXN0IGNhc2UgZm9yIHRoaXMuXG5cblNvLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgLCBgX19wZXJmX3BtdV9zY2hlZF90YXNrYCwgYW5kIGBwZXJmX3BtdV9zY2hlZF90YXNrYC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSBjYWxscyBhcmUgZ29pbmcgdG8gb3BlcmF0ZSBub3cuIFdhaXQgYSBtaW51dGUsIEkganVzdCByZWFsaXplZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLi4uIFRoYXQncyBhIGxpdHRsZSBsZXNzIGNvbnZlbmllbnQgZm9yIGRpcmVjdGx5IGZ1enppbmcgdGhlbS4gTGV0J3MgbG9vayBhZ2FpbiBhdCB0aGUgY29kZSB0byBzZWUgd2hlcmUgYHBlcmZfcG11X3NjaGVkX3Rhc2tgIGlzIGFjdHVhbGx5IGNhbGxlZC4gIElzIGl0IGluIGBwZXJmX2V2ZW50X3N3aXRjaGA/IE5vLiBJcyBpdCBpbiBgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luYCBvciBgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGA/IE5vLCB3YWl0LiBJIHNob3VsZCBqdXN0IGdyZXAgZm9yIGNhbGxzIHRvIGBwZXJmX3BtdV9zY2hlZF90YXNrYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjI4Ljc4ODk5OTU0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTUwOTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX3BtdV9zY2hlZF90YXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTM4Nzk9dm9pZCBwZXJmX3NjaGVkX2NiX2luYyhzdHJ1Y3QgcG11ICpwbXUpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODk3LSAqL1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM4OTg6c3RhdGljIHZvaWQgX19wZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjLFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4OTktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGJvb2wgc2NoZWRfaW4pXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTE4LVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5MTk6c3RhdGljIHZvaWQgcGVyZl9wbXVfc2NoZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzkyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTMxLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5MzI6XFx0XFx0X19wZXJmX3BtdV9zY2hlZF90YXNrKGNwYywgc2NoZWRfaW4gPyBuZXh0IDogcHJldiwgc2NoZWRfaW4pO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5MzMtXFx0fVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9Mzk1MD12b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zOTUzLVxcdGlmIChfX3RoaXNfY3B1X3JlYWQocGVyZl9zY2hlZF9jYl91c2FnZXMpKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM5NTQ6XFx0XFx0cGVyZl9wbXVfc2NoZWRfdGFzayh0YXNrLCBuZXh0LCBmYWxzZSk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzk1NS1cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTQzMjI9dm9pZCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MzMwLVxcdGlmIChfX3RoaXNfY3B1X3JlYWQocGVyZl9zY2hlZF9jYl91c2FnZXMpKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjQzMzE6XFx0XFx0cGVyZl9wbXVfc2NoZWRfdGFzayhwcmV2LCB0YXNrLCB0cnVlKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy00MzMyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6MjguODgwNTE1NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQwNTYyNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBQZXJmb3JtYW5jZSBFdmVudCBTY2hlZHVsZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgcGVyZm9ybWFuY2UgZXZlbnQgc3lzdGVtIGhhbmRsZXMgdGFzayBzY2hlZHVsaW5nLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgYXJlIHRoZSBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYHBlcmZfcG11X3NjaGVkX3Rhc2tgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlIHRoZSB0YXNrIHNjaGVkdWxpbmcgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdHMgb24gcGVyZm9ybWFuY2UgZXZlbnQgY29sbGVjdGlvbi4gR2l2ZW4gdGhhdCwgSSB3YW50IHRvIGRyaWxsIGRvd24gZnVydGhlciBpbnRvIGhvdyB0aGF0IHNjaGVkdWxlciBpbnRlcmFjdHMgd2l0aCBwZXJmb3JtYW5jZSBldmVudCBjb250ZXh0cywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcGVyZl9jdHhfc2NoZWRfdGFza19jYmAgaXMuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGNhbGxiYWNrIHRvIHJldmlldyBuZXh0LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUE1VIGlzIGJlaW5nIG5vdGlmaWVkIG9mIHRhc2sgc2NoZWR1bGluZyBldmVudHMgYW5kIGhvdyB0aGUgY29udGV4dHMgYXJlIGJlaW5nIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjozNS44MjEwODA0NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0Njk4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9jdHhfc2NoZWRfdGFza19jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZXZlbnRzL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZXZlbnRzL2NvcmUuYz0zNzI1PXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3luY19zdGF0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM3NTAtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzc1MTpzdGF0aWMgdm9pZCBwZXJmX2N0eF9zY2hlZF90YXNrX2NiKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCxcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zNzUyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgYm9vbCBzY2hlZF9pbilcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTM3Njk9cGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4MjYtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MzgyNzpcXHRcXHRcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGN0eCwgdGFzaywgZmFsc2UpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4MjgtXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0zODU1LWluc2lkZV9zd2l0Y2g6XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzg1NjpcXHRcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGN0eCwgdGFzaywgZmFsc2UpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM4NTctXFx0XFx0dGFza19jdHhfc2NoZWRfb3V0KGN0eCwgTlVMTCwgRVZFTlRfQUxMKTtcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTQyNTM9c3RhdGljIHZvaWQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyNjYtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI2NzpcXHRcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGN0eCwgdGFzaywgdHJ1ZSk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtNDI2OC1cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyOTctXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6NDI5ODpcXHRwZXJmX2N0eF9zY2hlZF90YXNrX2NiKGNwdWN0eC1cXHUwMDNldGFza19jdHgsIHRhc2ssIHRydWUpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTQyOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjM1Ljg4NDU1NjUxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTUyNjQ5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIENvbnRleHQgU3dpdGNoZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dGAgYW5kIGBwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW5gIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgY29udGV4dC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGUgZGVzaWduIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQ6IGFyZSB0aGV5IGludGVuZGVkIHRvIGJlIGV4cG9zZWQgb3V0c2lkZSB0aGVpciBjb21waWxhdGlvbiB1bml0LCBvciBhcmUgdGhleSBtZWFudCB0byBiZSBpbnRlcm5hbCBoZWxwZXJzPyBMZXQgbWUgdmVyaWZ5IHRoaXM7IGEgcXVpY2sgY29kZSByZXZpZXcgaXMgaW4gb3JkZXIuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZWlyIGxpbmthZ2UgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgb3IgZXh0ZXJuYWwgY2FsbCBzaXRlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBtYWludGFpbmFiaWxpdHksIHBvdGVudGlhbCBmb3IgbWlzdXNlLCBhbmQgcG90ZW50aWFsbHkgbW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjM5LjU5OTgyNDUyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc5MjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTMyNz1zdGF0aWMgdm9pZCBldmVudF9mdW5jdGlvbl9jYWxsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgZXZlbnRfZiBmdW5jLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzYzLVxcdCAqIFJlbG9hZCB0aGUgdGFzayBwb2ludGVyLCBpdCBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBieVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjM2NDpcXHQgKiBhIGNvbmN1cnJlbnQgcGVyZl9ldmVudF9jb250ZXh0X3NjaGVkX291dCgpLlxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM2NS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTM3Njg9c3RhdGljIHZvaWRcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzozNzY5OnBlcmZfZXZlbnRfY29udGV4dF9zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMzc3MC17XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0zOTUwPXZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5NTgtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6Mzk1OTpcXHRwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfb3V0KHRhc2ssIG5leHQpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTM5NjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjM5LjY4MjYyMDc2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM5NDI4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBlcmZvcm1hbmNlIEV2ZW50IEZ1bmN0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAgc3RhbmQgb3V0IGFzIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2UgbmFtZXMgYXJlIGtleS4gTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jYCwgYGFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNgLCBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYW5kIGBkcml2ZXJzL3BlcmYvYXJtX2JyYmUuY2AuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aG9zZSBmaWxlcywgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGggc2NoZWR1bGluZyBvciB0YXNrIGNvbnRleHQgc3dpdGNoZXMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcyB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3MgaW4gcmVsYXRpb24gdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6NDMuOTI2NTY3MTk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3NTI5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX2Jyc19kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM9MjYyPXN0YXRpYyBib29sIGFtZF9icnNfbWF0Y2hfcGxtKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IGZyb20sIHU2NCB0bylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMtMjgwLSAqL1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MjgxOnZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmMtMjgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6NDQuMTcyMzI0NTIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTMzMzE0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYW1kX2Jyc19kcmFpbmAgYW5kIGl0cyBOb24tU3RhdGljIE5hdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbWRfYnJzX2RyYWluYCwgYW5kIGltbWVkaWF0ZWx5LCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogc3RhdGljIGp1bXBzIG91dCBhdCBtZS4gVGhpcyBpbXBsaWVzIGl0IGxpa2VseSBob2xkcyBzdGF0ZSwgd2hpY2ggbWVhbnMgaXRzIGJlaGF2aW9yIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIGZhY3RvcnMgYmV5b25kIGp1c3QgaXRzIGRpcmVjdCBpbnB1dCBwYXJhbWV0ZXJzLiBJdCdzIG5vdCBhIHB1cmUgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5IGltcGxpY2F0aW9uIGhlcmUuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHJlZ2lzdGVyIHJlYWQgdGhhdCdzIHVwZGF0ZWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIgc2V0dGluZyBhIGdsb2JhbCBmbGFnLiBcblxuVGhpbmtpbmcgYWJvdXQgdGhpcyBmcm9tIGEgZGVidWdnaW5nIGFuZCBhbmFseXNpcyBzdGFuZHBvaW50LCB0aGlzIG5vbi1zdGF0aWMgbmF0dXJlIG1lYW5zIEkgY2FuJ3QganVzdCBsb29rIGF0IGEgY2FsbCB0byBgYW1kX2Jyc19kcmFpbmAgaW4gaXNvbGF0aW9uIGFuZCBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGl0cyBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdW5kZXJzdGFuZCBob3cgaXRzIGludGVybmFsIHN0YXRlIGlzIG1vZGlmaWVkLiBUaGlzIGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5OyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIEl0IGFsc28gbWVhbnMgdGhlIGZ1bmN0aW9uIGNhbGwgaGFzIHNpZGUgZWZmZWN0cy5cbkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIGhvdyBpdHMgbm9uLXN0YXRpYyBjaGFyYWN0ZXJpc3RpY3MgaW1wYWN0IGFueSBzeXN0ZW0gcnVubmluZyBvbiB0aGUgbWFjaGluZS4gVGhpcyBtYXkgcmVxdWlyZSB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgdGhyZWFkcyBhbmQgaG93IHRoZXkgYXJlIGltcGFjdGluZyB0aGlzIGZ1bmN0aW9uLlxuVGhpcyBpcyBub3QgYSBzaW1wbGUgZnVuY3Rpb247IEkgbmVlZCB0byBhcHByb2FjaCB0aGlzIHdpdGggY2F1dGlvbiBhbmQgZW5zdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGFsbCBvZiB0aGUgdXNlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjAxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDI6NDguOTg1NjU4MzAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwMjYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX3BtdV9sYnJfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy0xNjMtXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYzoxNjQ6dm9pZCBhbWRfcG11X2xicl9yZWFkKHZvaWQpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy0xNjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjo0OS4xNzk2ODk5MjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2Mjc0MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk5vbi1TdGF0aWMgYGFtZF9wbXVfbGJyX3JlYWRgIC0gSW1wbGljYXRpb25zIGFuZCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBhbWRfcG11X2xicl9yZWFkYCBpcyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0IGF3YXksIHRoaXMgc3BhcmtzIGEgZmV3IHRob3VnaHRzLiBBcyBhbiBleHBlcnQgaW4gcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBhbmQgbG93LWxldmVsIHN5c3RlbSBkZXNpZ24sIEkgbmVlZCB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFRoZSBhYnNlbmNlIG9mIHRoZSBgc3RhdGljYCBrZXl3b3JkIG1lYW5zIHRoaXMgZnVuY3Rpb24gaGFzIGV4dGVybmFsIGxpbmthZ2UuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQncyBsaWtlbHkgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBwb3RlbnRpYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB1c2VyLXNwYWNlICh0aG91Z2ggdGhhdCdzIGxlc3MgY29tbW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCkuXG5cblRoaXMgcmFpc2VzIHF1ZXN0aW9uczpcblxuKiAgICoqSW50ZW5kZWQgdXNlOioqIElzIGl0IGRlc2lnbmVkIGZvciBwdWJsaWMgY29uc3VtcHRpb24gd2l0aGluIHRoZSBBTUQgUE1VIGRyaXZlciwgb3IgaXMgaXQgYSBtb3JlIGdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IG90aGVyIGRyaXZlcnMgb3IgY29kZSBwYXRocyBtaWdodCBuZWVkPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2FnZSBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSByaXNrL3Jld2FyZCBvZiBhbnkgbW9kaWZpY2F0aW9uIG9yIGludGVyYWN0aW9uIHdpdGggdGhpcyBmdW5jdGlvbi5cbiogICAqKkFCSSBzdGFiaWxpdHk6KiogU2luY2UgaXQncyBleHRlcm5hbGx5IGxpbmtlZCwgaXRzIHNpZ25hdHVyZSBiZWNvbWVzIHBhcnQgb2YgdGhlIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgZm9yIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24gKG9yIHBvdGVudGlhbGx5IGJleW9uZCwgaWYgaXQncyBjb25zaWRlcmVkIHBhcnQgb2YgYSBzdGFibGUgaW50ZXJmYWNlKS4gQW55IGNoYW5nZXMgdG8gaXRzIHBhcmFtZXRlcnMsIHJldHVybiB0eXBlLCBvciBldmVuIGl0cyBpbnRlcm5hbCBiZWhhdmlvciBjYW4gaGF2ZSBzaWduaWZpY2FudCByZXBlcmN1c3Npb25zLiBXZSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYW55IHByb3Bvc2VkIGNoYW5nZXMgdmVyeSBjYXJlZnVsbHkgdG8gZW5zdXJlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBkb2N1bWVudCBhbnkgYnJlYWtpbmcgY2hhbmdlcyBtZXRpY3Vsb3VzbHkuXG4qICAgKipQb3RlbnRpYWwgZm9yIG1pc3VzZToqKiBXaXRoIGV4dGVybmFsIGxpbmthZ2UsIGl0J3Mgb3BlbiB0byBiZWluZyBjYWxsZWQgYnkgcG90ZW50aWFsbHkgZXJyYW50IGNvZGUgb3IgYnkgY29kZSB0aGF0IGRvZXNuJ3QgZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZS4gUm9idXN0IGVycm9yIGhhbmRsaW5nIGFuZCBpbnB1dCB2YWxpZGF0aW9uIHdpbGwgYmUgY3J1Y2lhbCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiB0byBwcmV2ZW50IGNyYXNoZXMgb3IgaW5jb3JyZWN0IHJlc3VsdHMuIFdlJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaGFuZGxlcyB1bmV4cGVjdGVkIGlucHV0cyBvciBlZGdlIGNhc2VzLlxuKiAgICoqTWFpbnRhaW5hYmlsaXR5OioqICBUaGUgZnVuY3Rpb24ncyB1c2UgaW4gZXh0ZXJuYWwgbW9kdWxlcyBjYW4gY29tcGxpY2F0ZSB0aGUgY29kZSBtYWludGVuYW5jZSBwcm9jZXNzLiBXZSBtdXN0IHRyYWNlIGRvd24gdGhlIHVzYWdlcyBpZiBhbnkgY2hhbmdlcyBhcmUgcHJvcG9zZWQgYW5kIGNvbnNpZGVyIHRoZSBpbXBhY3Qgb2YgdGhvc2UgY2hhbmdlcy5cbiogICAqKlRlc3RpbmcgQ292ZXJhZ2U6KiogVGhvcm91Z2ggdGVzdGluZyBpcyBjcnVjaWFsLiBOb3Qgb25seSBkbyB3ZSBuZWVkIHRvIHRlc3QgdGhlIGZ1bmN0aW9uIGl0c2VsZiB3aXRoIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cywgYnV0IGFsc28gdGVzdCBzY2VuYXJpb3Mgd2hlcmUgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gaXRzIFwicHVibGljXCIgaW50ZXJmYWNlcy4gUmVncmVzc2lvbiB0ZXN0aW5nIGFsc28gYmVjb21lcyBlc3BlY2lhbGx5IGltcG9ydGFudCBoZXJlIHRvIG1haW50YWluIGl0cyBiZWhhdmlvci5cblxuSW4gc3VtbWFyeSwgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBhbWRfcG11X2xicl9yZWFkYCBtZWFucyB3ZSBuZWVkIHRvIGFwcHJvYWNoIGl0IHdpdGggYSBsZXZlbCBvZiBjYXJlIGFwcHJvcHJpYXRlIGZvciBhbnkgZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uLiBXZSBuZWVkIHRvIGJlIGVzcGVjaWFsbHkgY29nbml6YW50IG9mIGl0cyBwb3RlbnRpYWwgdXNlIHdpdGhpbiBhIHdpZGVyIHNjb3BlLCBpdHMgcG9zc2libGUgaW1wYWN0IG9uIHRoZSBrZXJuZWwgQUJJLCBhbmQgdGhlIGltcG9ydGFuY2Ugb2Ygc29saWQgZXJyb3IgaGFuZGxpbmcgYW5kIHRob3JvdWdoIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NzIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMjo1NC40NDI0MzM4NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjA1MjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfbGJyX3JlYWRfMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYz03Mjg9dm9pZCBpbnRlbF9wbXVfbGJyX2Rpc2FibGVfYWxsKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzM5LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzo3NDA6dm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTc0MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAyOjU0LjY3ODQ5MDQxMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTYwMzc1NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgTEJSIFJlYWRpbmcgRnVuY3Rpb25zIGluIHRoZSBDb250ZXh0IG9mIGEgS2VybmVsIFBNVS4qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgIGZ1bmN0aW9ucy4gVGhlIGtleSB0aGluZyB0aGF0IHN0YW5kcyBvdXQgaXMgdGhhdCB0aGV5IGFyZW4ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGluIG15IG1pbmQsIGNvbmNlcm5pbmcgc2NvcGUsIGxpbmthZ2UsIGFuZCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuIEdpdmVuIHRoZXkncmUgZXhwb3NlZCBsaWtlIHRoaXMsIGFyZSB0aGVyZSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBwb3RlbnRpYWxseSBvdXRzaWRlIHRoZSBJbnRlbCBQTVUgZHJpdmVyIGl0c2VsZiwgdGhhdCBhcmUgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHk/IEFuZCBpZiBzbywgaXMgdGhpcyB0aGUgbW9zdCByb2J1c3QgZGVzaWduPyBXZSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiBjcml0aWNhbCBwYXRoLCBzbyBhbnkgb3B0aW1pemF0aW9ucyBhdCB0aGUgc29mdHdhcmUgbGV2ZWwgY291bGQgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5UaGlzIHRoZW4gbWFrZXMgbWUganVtcCB0byBgZHJpdmVycy9wZXJmL2FybV9icmJlLmNgLiBUaGlzIG1ha2VzIG1lIHF1ZXN0aW9uIHdoZXRoZXIgdGhlcmUncyBzb21lIGNvbW1vbmFsaXR5IG9yIGEgbWlzc2VkIG9wcG9ydHVuaXR5IGZvciByZXVzZSBoZXJlLiBPciBwZXJoYXBzIGEgZGlmZmVyZW5jZSBpbiB0aGVpciBmdW5jdGlvbnM/IEknbSBjdXJpb3VzIHdoZXRoZXIgdGhlIEFSTSBpbXBsZW1lbnRhdGlvbiwgb3IgYW55IG90aGVycywgaGFuZGxlcyBMQlIgKExhc3QgQnJhbmNoIFJlY29yZCkgcmVhZGluZyBpbiBhIHNpbWlsYXIgd2F5LCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIHBvcnRhYmlsaXR5IGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBBcmUgdGhlcmUgYW55IGxlc3NvbnMgbGVhcm5lZCwgYmVzdCBwcmFjdGljZXMsIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhlcmUgdGhhdCBJIGNhbiBsZXZlcmFnZSBvciBhdm9pZD8gSSBuZWVkIHRvIHF1aWNrbHkgY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIExCUiBpbXBsZW1lbnRhdGlvbnMgYWNyb3NzIGFyY2hpdGVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MDAuMjM4ODY5MzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzczOTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2VudHJ5X2Zyb21fYnJiZV9yZWdzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NTc4PXN0YXRpYyBpbnQgYnJiaW5mX2dldF9wZXJmX3ByaXYodTY0IGJyYmluZilcXG4tLVxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTU5Ni1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYzo1OTc6c3RhdGljIGJvb2wgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGludCBpbmRleCwgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplbnRyeSxcXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy01OTgtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NzcyPXZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy03OTItXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM6NzkzOlxcdFxcdFxcdGlmICghcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGksIHBiZSwgZXZlbnQpKVxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc5NC1cXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjAwLjMxMjYyOTQ1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTcyMDE0MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYHBlcmZfZW50cnlfZnJvbV9icmJlX3JlZ3NldGAgYW5kIGl0cyBSb2xlKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0YCBmdW5jdGlvbi4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgaW50ZXJuYWwgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEZpbmUsIHRoYXQncyBleHBlY3RlZC4gTW9yZSBpbXBvcnRhbnRseSwgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uLiBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgIGlzIGxpa2VseSBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcgYW5kIHByb2Nlc3NpbmcgZGF0YSBmcm9tLCBwcmVzdW1hYmx5LCBhIEJyYW5jaCBSZWNvcmQgQnVmZmVyIEVudHJ5IChCUkJFKSBvciBzaW1pbGFyIGhhcmR3YXJlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJmYWNlLiBTbywgdGhpcyBgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0YCBmdW5jdGlvbiBpcyB0aGUgd29ya2hvcnNlLiBJdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRha2luZyByYXcgcmVnaXN0ZXIgc2V0IGRhdGEgcmVsYXRlZCB0byBhIEJSQkUgZW50cnkgYW5kIHRyYW5zZm9ybWluZyBpdCBpbnRvIHNvbWUgdXNlZnVsIGBwZXJmX2VudHJ5YCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSB0byBzZWUgd2hhdCB0aGF0IHRyYW5zZm9ybWF0aW9uIGFjdHVhbGx5IGVudGFpbHMg4oCTIGhvdyBkb2VzIGl0IGludGVycHJldCB0aGUgcmF3IGhhcmR3YXJlIGRhdGEgYW5kIHdoYXQga2luZCBvZiBgcGVyZl9lbnRyeWAgc3RydWN0dXJlIGlzIGl0IHBvcHVsYXRpbmc/IFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwZXJmb3JtYW5jZSBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgb3JnYW5pemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjA1LjQ4NDY0NTk5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwMzk3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wZXJmL2FybV9icmJlLmM9NzY0PXN0YXRpYyBib29sIGZpbHRlcl9icmFuY2hfcmVjb3JkKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50cnksXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuYy03NzEtXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmM6NzcyOnZvaWQgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXMoc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrICpicmFuY2hfc3RhY2ssXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzczLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MDUuNTY5NjkxMDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NjA0MDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgIGlzbid0IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBMZXQncyBzdGFydCB3aXRoIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIHNldC5cblxuU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgdGhlIGZpbGVzIHJlbGF0ZWQgdG8gQnJhbmNoIFJlY29yZCBCdWZmZXJzIChCUkJzKSBhbmQgTGFzdCBCcmFuY2ggUmVjb3JkcyAoTEJScykgZm9yIEFNRCBhbmQgSW50ZWwgcHJvY2Vzc29ycy4gTG9va2luZyBhdCBgYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuY2AsIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jYCwgYW5kIGBhcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmNgLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhleSBzaG91bGQgYmUgYnVpbHQgd2hlbiBgQ09ORklHX1BFUkZfRVZFTlRTYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIG1vc3Qgc2l0dWF0aW9ucy4gQnV0IEkgY2FuJ3QganVzdCBhc3N1bWUuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MsIGFuZCBJJ2xsIGZvY3VzIG9uIGBhcmNoL3g4Ni9ldmVudHMvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGludGVncmF0ZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmaWxlcyBhcmUgYmVpbmcgY29tcGlsZWQgY29ycmVjdGx5IHdpdGggYENPTkZJR19QRVJGX0VWRU5UU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjEwLjY0NTczNTQ1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NzY4MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJycy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MTAuNjk5MjIyMDc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk1OTU2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBTUQgRXZlbnQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEFNRC1zcGVjaWZpYyBldmVudCBoYW5kbGluZyBpcyBzdHJ1Y3R1cmVkLiBXaGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IGZvciB0aGUgY29yZSBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gKnllcyosIHRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbS4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgb3ZlcmFsbCBvcmdhbml6YXRpb24uIExldCdzIHB1bGwgdXAgYW5kIGFuYWx5emUgdGhlIGBhcmNoL3g4Ni9ldmVudHMvYW1kL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MTMuODM4ODIxMzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDMyOTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpXFx0XFx0Kz0gY29yZS5vIGxici5vXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19QRVJGX0VWRU5UU19BTURfQlJTKVxcdCs9IGJycy5vXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9NYWtlZmlsZS00LW9iai0kKENPTkZJR19QRVJGX0VWRU5UU19BTURfUE9XRVIpXFx0Kz0gcG93ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoxMy45MTkxNTU2NzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NDIxMjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFBlcmZvcm1hbmNlIEV2ZW50IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBlcmZvcm1hbmNlIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfUEVSRl9FVkVOVFNfQU1EX0JSU2AgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBnZXQgdGhlIGZlZWxpbmcgSSdtIGxvb2tpbmcgYXQgQU1EJ3MgYnJhbmNoIHJlY29yZCBzdG9yZSBmZWF0dXJlIGhlcmUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgY2VydGFpbiBwZXJmb3JtYW5jZSBhbmFseXNlcyBvbiB0aGVpciBwcm9jZXNzb3JzLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHNldC5cblxuTm93LCBteSBtaW5kIHNoaWZ0cy4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIEFSTSBzaWRlIG9mIHRoaW5ncy4gSSB3b25kZXIsIHdoYXQgYXJlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHNpdHVhdGlvbj8gU3BlY2lmaWNhbGx5LCBsZXQncyBhbHNvIGxvb2sgYXQgYGRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jYC4gSXQgaXMgbGlrZWx5IGEgcmVsZXZhbnQgZmlsZSB0byB0aGUgY3VycmVudCBjb250ZXh0LCBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIGJyYW5jaCByZWNvcmQgYnVmZmVyIGVtdWxhdGlvbiBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhhdCwgdG9vLCBhcyB0aGlzIGlzIGFsc28gcHJvYmFibHkgcmVsZXZhbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgYWxsIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoxNy4zNjMzNzAyOTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NzQxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFybV9icmJlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wZXJmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfQVJNX1NQRV9QTVUpICs9IGFybV9zcGVfcG11Lm9cXG5kcml2ZXJzL3BlcmYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0FSTTY0X0JSQkUpICs9IGFybV9icmJlLm9cXG5kcml2ZXJzL3BlcmYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0FSTV9ETUM2MjBfUE1VKSArPSBhcm1fZG1jNjIwX3BtdS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjE3LjQ2MjExNjM5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk3OTI3NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGlzIOKAkyBhIGJpdCBvZiBhIHN0cmVhbSBvZiBjb25zY2lvdXNuZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqQ29uc2lkZXJpbmcgYENPTkZJR19BUk02NF9CUkJFYCBhbmQgSW50ZWwncyBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBgQ09ORklHX0FSTTY0X0JSQkVgIGZsYWcsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGJyYW5jaCByZWNvcmQgYnVmZmVyIGV4dGVuc2lvbiBmb3IgQVJNNjQuIEl0IGxvb2tzIGltcG9ydGFudCwgYW5kIEkgbmVlZCB0byBub3RlIHRoYXQuIEJ1dCBJIGFsc28gbmVlZCB0byBjaGVjayBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvZGUuXG5cblRoZW4gbXkgbWluZCBkcmlmdHMgdG8gdGhlIHg4NiBzaWRlIOKAkyBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9NYWtlZmlsZWAuIEknbSBjdXJpb3VzLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGludHMgYXQgc29tZSBwb3RlbnRpYWwgaW50ZXJwbGF5IG9yIGFuYWxvZ291cyBmdW5jdGlvbmFsaXR5LiBBcmUgdGhleSBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgZmVhdHVyZSBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcz8gSG93IGRvZXMgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbiByZWxhdGUgdG8gdGhpcyBuZXcgQVJNNjQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBjb21tb24gaGVhZGVyIGZpbGVzLCBzaGFyZWQgY29kZSBtb2R1bGVzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBhbmFseXplIGJvdGggc2VjdGlvbnMgdG9nZXRoZXIuIEl0J3MgcHJvYmFibHkgd29ydGggY3Jvc3MtcmVmZXJlbmNpbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHdoZXJlIGEgc2hhcmVkIGltcGxlbWVudGF0aW9uIHN0cmF0ZWd5IG1pZ2h0IGJlIGFwcGxpY2FibGUuIFBlcmhhcHMgdGhlIEludGVsIE1ha2VmaWxlIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBmb3IgZmluZGluZyBzb21lIHVzZWZ1bCByZWZlcmVuY2VzLiBJIHNob3VsZCBleHBsb3JlIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjIxLjM2MDA0Njc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg1NDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYnIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvaW50ZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0NQVV9TVVBfSU5URUwpXFx0XFx0Kz0gZHMubyBrbmMub1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19DUFVfU1VQX0lOVEVMKVxcdFxcdCs9IGxici5vIHA0Lm8gcDYubyBwdC5vXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRSlcXHQrPSBpbnRlbC11bmNvcmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoyMS40NTg5MDg1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ0NzI0ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gY29uZmlndXJlIHRoaW5ncyBmb3IgdGhpcyBmdXp6aW5nIHJ1bi4gSSBzZWUgd2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQ1BVX1NVUF9JTlRFTGAgYW5kIGBDT05GSUdfQ1BVX1NVUF9BTURgLiBUaGF0IHNlZW1zIG9idmlvdXMgZW5vdWdoLiBOb3csIEknbSBjaGVja2luZyBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFuZCByZW1lbWJlciBpdCdzIGJ1aWx0IGNvbmRpdGlvbmFsbHkgb24gYENPTkZJR19QRVJGX0VWRU5UU2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgdGFrZSBzdG9jayBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBoYXZlIGluIG1pbmQ6IGBQRVJGX0VWRU5UU19BTURfQlJTYCwgYEFSTTY0X0JSQkVgLCBgQ1BVX1NVUF9JTlRFTGAsIGBDUFVfU1VQX0FNRGAsIGFuZCBgUEVSRl9FVkVOVFNgLlxuXG5Ib2xkIG9uLi4uIEknbSBub3RpY2luZyBzb21ldGhpbmcgaGVyZS4gYEFSTTY0X0JSQkVgIGlzIG9idmlvdXNseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gQVJNNjQsIGJ1dCBgQ1BVX1NVUF9JTlRFTGAgYW5kIGBDUFVfU1VQX0FNRGAgYXJlLCBvZiBjb3Vyc2UsIHg4Ni1zcGVjaWZpYy4gR2l2ZW4gdGhhdCB3ZSdyZSBmdXp6aW5nLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBhbGwgb2YgdGhlbS4gVGhlIGZ1enplciB3aWxsIGR5bmFtaWNhbGx5IGVuYWJsZSB0aGUgb25lcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBpdCdzIHJ1bm5pbmcgb24sIHNvIHdlIHNob3VsZCBiZSBva2F5LiBUaGlzIHdheSwgd2UgbWF4aW1pemUgdGhlIGZlYXR1cmVzIGV4cG9zZWQuXG5cbk9rYXksIGxldCdzIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgUEVSRl9FVkVOVFNfQU1EX0JSU2AgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDY2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjI3LjEwMzYzODE5M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzOTY0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUkZfRVZFTlRTX0FNRF9CUlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mzc9Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzoyNy4xNzYwMzk2ODZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNDgwMDA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUgTWF6ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgaGVhdmlseSByZWxpYW50IG9uIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCB3ZSBuZWVkIHRvIGtub3cgd2hhdCBjYXBhYmlsaXRpZXMgYXJlIHN1cHBvcnRlZC5cIiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aG9zZSBmbGFncywgKlBFUkZfRVZFTlRTKiBhbmQgKkNQVV9TVVBfQU1EKiwgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGNyaXRpY2FsIGZvciBldmVuIGJlZ2lubmluZyB0byByZWFzb24gYWJvdXQgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kIGhhcmR3YXJlIGV2ZW50cy4gVGhvc2UgbGlrZWx5IHNldCB0aGUgZ3JvdW5kIHJ1bGVzIGZvciB3aGF0IGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uIGFuZCB0cmFjaW5nIHdlIGNhbiBldmVuICp0aGluayogYWJvdXQuIFdlJ2xsIGJlIHByZXR0eSBzdHVjayB3aXRob3V0IHRoZW0uXG5cbkJ1dCBub3csIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmV4dCBwb3RlbnRpYWwgYXZlbnVlLCBzbyBteSBtaW5kIGp1bXBzIHRvICpBUk02NF9CUkJFKiDigJMgYnJhbmNoIHJlY29yZCBidWZmZXIgZXZlbnRzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN1cHBvcnQgZm9yIGJyYW5jaCB0cmFjZSBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHdoZXRoZXIgdGhhdCdzIHN1cHBvcnRlZCBpcyBhYnNvbHV0ZWx5IHBpdm90YWwgZm9yIGluLWRlcHRoIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBJZiB0aG9zZSAqQlJCRSogZXZlbnRzIGFyZSBhY2Nlc3NpYmxlLCB0aGF0IGNoYW5nZXMgdGhlIGdhbWUgZW50aXJlbHkuIEkgY2FuIGRyaWxsIGludG8gYnJhbmNoIG1pc3ByZWRpY3Rpb25zIGFuZCByZWFsbHkgdW5kZXJzdGFuZCBjb250cm9sIGZsb3cgYm90dGxlbmVja3MuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSAqQVJNNjRfQlJCRSogYW5kIGlmIHRob3NlIGFyZSBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6MzAuODkwODQxNzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjE2MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUk02NF9CUkJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGVyZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzNC1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzU6Y29uZmlnIEFSTTY0X0JSQkVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGJyYW5jaCBzdGFjayBzYW1wbGluZyB1c2luZyBGRUFUX0JSQkVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjMwLjk4MDA2NTUwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIwMjczMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeTogQVJNNjQqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgbGVhbnMgaGVhdmlseSB0b3dhcmRzIHRoZSBzaWduaWZpY2FuY2Ugb2YgYEFSTTY0YC4gSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIGlmIHRoZSB1bmRlcmx5aW5nIGlzc3VlIG9yIHByb3Bvc2VkIHNvbHV0aW9uIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSBhcmNoaXRlY3R1cmUuIFRoZSBwZXJmb3JtYW5jZSwgaW5zdHJ1Y3Rpb24gc2V0LCBvciBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBhdmFpbGFibGUgb24gYEFSTTY0YCBhcmUgbGlrZWx5IHRoZSBwcmltYXJ5IGZhY3RvcnMgaW5mbHVlbmNpbmcgdGhlIGRpcmVjdGlvbiBvZiBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBwcm9ibGVtIG1hbmlmZXN0cyBkaWZmZXJlbnRseSwgb3IgdGhlIHNvbHV0aW9uIHNwYWNlIGlzIGNvbnN0cmFpbmVkLCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLiBUaGVyZWZvcmUsIGBBUk02NGAgaXMgcHJvYmFibHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjM0LjIwMDM0MjEwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTg3OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BlcmYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BlcmYvS2NvbmZpZz02PW1lbnUgXFxcIlBlcmZvcm1hbmNlIG1vbml0b3Igc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFNcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy04LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTk9Y29uZmlnIEFSTV9DQ0lfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIkFSTSBDQ0kgUE1VIGRyaXZlclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMTpcXHRkZXBlbmRzIG9uIChBUk0gXFx1MDAyNlxcdTAwMjYgQ1BVX1Y3KSB8fCBBUk02NFxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTEyLVxcdHNlbGVjdCBBUk1fQ0NJXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xOT1jb25maWcgQVJNX0NDSTQwMF9QTVVcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIxLVxcdGRlZmF1bHQgeVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIyOlxcdGRlcGVuZHMgb24gQVJNX0NDSV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMy1cXHRzZWxlY3QgQVJNX0NDSTQwMF9DT01NT05cXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI4PWNvbmZpZyBBUk1fQ0NJNXh4X1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzAtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9wZXJmL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBBUk1fQ0NJX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTM3PWNvbmZpZyBBUk1fQ0NOXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIkFSTSBDQ04gZHJpdmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6Mzk6XFx0ZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWctNDAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9NDQ9Y29uZmlnIEFSTV9DTU5cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiQXJtIENNTi02MDAgUE1VIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6NDY6XFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy00Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz01MT1jb25maWcgQVJNX05JXFxuZHJpdmVycy9wZXJmL0tjb25maWctNTItXFx0dHJpc3RhdGUgXFxcIkFybSBOSS03MDAgUE1VIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy01NC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz01OD1jb25maWcgQVJNX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjU5OlxcdGRlcGVuZHMgb24gQVJNIHx8IEFSTTY0XFxuZHJpdmVycy9wZXJmL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiQVJNIFBNVSBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz02Nj1jb25maWcgQVJNX1Y2X1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjY3OlxcdGRlcGVuZHMgb24gQVJNX1BNVSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1Y2IHx8IENQVV9WNkspXFxuZHJpdmVycy9wZXJmL0tjb25maWctNjgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9NzA9Y29uZmlnIEFSTV9WN19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo3MTpcXHRkZXBlbmRzIG9uIEFSTV9QTVUgXFx1MDAyNlxcdTAwMjYgQ1BVX1Y3XFxuZHJpdmVycy9wZXJmL0tjb25maWctNzItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9NzQ9Y29uZmlnIEFSTV9YU0NBTEVfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBBUk1fUE1VIFxcdTAwMjZcXHUwMDI2IENQVV9YU0NBTEVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy03Ni1cXHRkZWZfYm9vbCB5XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz03OD1jb25maWcgUklTQ1ZfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWc6Nzk6XFx0ZGVwZW5kcyBvbiBSSVNDVlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlJJU0MtViBQTVUgZnJhbWV3b3JrXFxcIlxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9ODg9Y29uZmlnIFJJU0NWX1BNVV9MRUdBQ1lcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo4OTpcXHRkZXBlbmRzIG9uIFJJU0NWX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIlJJU0MtViBsZWdhY3kgUE1VIGltcGxlbWVudGF0aW9uXFxcIlxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9OTg9Y29uZmlnIFJJU0NWX1BNVV9TQklcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIFJJU0NWX1BNVSBcXHUwMDI2XFx1MDAyNiBSSVNDVl9TQklcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiUklTQy1WIFBNVSBiYXNlZCBvbiBTQkkgUE1VIGV4dGVuc2lvblxcXCJcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTEwOD1jb25maWcgU1RBUkZJVkVfU1RBUkxJTktfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MTA5OlxcdGRlcGVuZHMgb24gQVJDSF9TVEFSRklWRSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTdGFyRml2ZSBTdGFyTGluayBQTVVcXFwiXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xMTg9Y29uZmlnIEFOREVTX0NVU1RPTV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMTktXFx0Ym9vbCBcXFwiQW5kZXMgY3VzdG9tIFBNVSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjEyMDpcXHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyBcXHUwMDI2XFx1MDAyNiBSSVNDVl9BTFRFUk5BVElWRSBcXHUwMDI2XFx1MDAyNiBSSVNDVl9QTVVfU0JJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTIxLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTMyPWNvbmZpZyBBUk1fUE1VX0FDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzM6XFx0ZGVwZW5kcyBvbiBBUk1fUE1VIFxcdTAwMjZcXHUwMDI2IEFDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMzQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTM2PWNvbmZpZyBBUk1fU01NVV9WM19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xMzctXFx0IHRyaXN0YXRlIFxcXCJBUk0gU01NVXYzIFBlcmZvcm1hbmNlIE1vbml0b3JzIEV4dGVuc2lvblxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzg6XFx0IGRlcGVuZHMgb24gQVJNNjQgfHwgKENPTVBJTEVfVEVTVCBcXHUwMDI2XFx1MDAyNiA2NEJJVClcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxMzk6XFx0IGRlcGVuZHMgb24gR0VORVJJQ19NU0lfSVJRXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTQwLVxcdCAgIGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTE0Nj1jb25maWcgQVJNX1BNVVYzXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MTQ3OlxcdGRlcGVuZHMgb24gSFdfUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgKChBUk0gXFx1MDAyNlxcdTAwMjYgQ1BVX1Y3KSB8fCBBUk02NClcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNDgtXFx0Ym9vbCBcXFwiQVJNIFBNVXYzIHN1cHBvcnRcXFwiIGlmICFBUk02NFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTU2PWNvbmZpZyBBUk1fRFNVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE1Ny1cXHR0cmlzdGF0ZSBcXFwiQVJNIER5bmFtSVEgU2hhcmVkIFVuaXQgKERTVSkgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE1ODpcXHRkZXBlbmRzIG9uIEFSTTY0XFxuZHJpdmVycy9wZXJmL0tjb25maWctMTU5LVxcdCAgaGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTY1PWNvbmZpZyBGU0xfSU1YOF9ERFJfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTY2LVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgaS5NWDggRERSIHBlcmYgbW9uaXRvclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoxNjc6XFx0ZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNjgtXFx0ICBoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xNzM9Y29uZmlnIEZTTF9JTVg5X0REUl9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xNzQtXFx0dHJpc3RhdGUgXFxcIkZyZWVzY2FsZSBpLk1YOSBERFIgcGVyZiBtb25pdG9yXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE3NTpcXHRkZXBlbmRzIG9uIEFSQ0hfTVhDXFxuZHJpdmVycy9wZXJmL0tjb25maWctMTc2LVxcdCBoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0xODE9Y29uZmlnIEZVSklUU1VfVU5DT1JFX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE4Mi1cXHR0cmlzdGF0ZSBcXFwiRnVqaXRzdSBVbmNvcmUgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjE4MzpcXHRkZXBlbmRzIG9uIChBUk02NCBcXHUwMDI2XFx1MDAyNiBBQ1BJKSB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE4NC1cXHQgaGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MTkwPWNvbmZpZyBRQ09NX0wyX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTE5MS1cXHRib29sIFxcXCJRdWFsY29tbSBMMi1jYWNoZSBQTVVcXFwiXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MTkyOlxcdGRlcGVuZHMgb24gQVJDSF9RQ09NIFxcdTAwMjZcXHUwMDI2IEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0xOTMtXFx0c2VsZWN0IFFDT01fS1JZT19MMl9BQ0NFU1NPUlNcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIwMD1jb25maWcgUUNPTV9MM19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMDEtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gTDMtY2FjaGUgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIwMjpcXHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSBcXHUwMDI2XFx1MDAyNiBBUk02NCBcXHUwMDI2XFx1MDAyNiBBQ1BJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjAzLVxcdHNlbGVjdCBRQ09NX0lSUV9DT01CSU5FUlxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MjEwPWNvbmZpZyBUSFVOREVSWDJfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gVGh1bmRlclgyIFNvQyBQTVUgVU5DT1JFXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIxMjpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUjIgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWc6MjEzOlxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBBQ1BJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjE0LVxcdGRlZmF1bHQgbSBpZiBBUkNIX1RIVU5ERVIyXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yMjA9Y29uZmlnIFhHRU5FX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIyMTogICAgICAgIGRlcGVuZHMgb24gQVJDSF9YR0VORSB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIyMi0gICAgICAgIGJvb2wgXFxcIkFQTSBYLUdlbmUgU29DIFBNVVxcXCJcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIyNz1jb25maWcgQVJNX1NQRV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNdjguMiBTdGF0aXN0aWNhbCBQcm9maWxpbmcgRXh0ZW5zaW9uXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjIyOTpcXHRkZXBlbmRzIG9uIEFSTTY0XFxuZHJpdmVycy9wZXJmL0tjb25maWctMjMwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTIzNT1jb25maWcgQVJNNjRfQlJCRVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYnJhbmNoIHN0YWNrIHNhbXBsaW5nIHVzaW5nIEZFQVRfQlJCRVxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyMzc6XFx0ZGVwZW5kcyBvbiBBUk1fUE1VVjMgXFx1MDAyNlxcdTAwMjYgQVJNNjRcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yMzgtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNDY9Y29uZmlnIEFSTV9ETUM2MjBfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjQ3LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgUE1VIHN1cHBvcnQgZm9yIHRoZSBBUk0gRE1DLTYyMCBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNDg6XFx0ZGVwZW5kcyBvbiAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI1Mz1jb25maWcgTUFSVkVMTF9DTjEwS19UQURfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU0LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIENOMTBLIExMQy1UQUQgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI1NTpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI1Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNjA9Y29uZmlnIEFQUExFX00xX0NQVV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNjEtXFx0Ym9vbCBcXFwiQXBwbGUgTTEgQ1BVIFBNVSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MjpcXHRkZXBlbmRzIG9uIEFSTV9QTVUgXFx1MDAyNlxcdTAwMjYgQVJDSF9BUFBMRVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNjc9Y29uZmlnIEFMSUJBQkFfVU5DT1JFX0RSV19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNjgtXFx0dHJpc3RhdGUgXFxcIkFsaWJhYmEgVC1IZWFkIFlpdGlhbiA3MTAgRERSIFN1Yi1zeXN0ZW0gRHJpdmV3YXkgUE1VIGRyaXZlclxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjk6XFx0ZGVwZW5kcyBvbiAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgQUNQSSkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjcwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI3Nj1jb25maWcgTUFSVkVMTF9DTjEwS19ERFJfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjc3LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgTUFSVkVMTCBDTjEwSyBEUkFNIFN1YnN5c3RlbShEU1MpIFBNVSBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI3ODpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI3OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yODM9Y29uZmlnIERXQ19QQ0lFX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI4NC1cXHR0cmlzdGF0ZSBcXFwiU3lub3BzeXMgRGVzaWduV2FyZSBQQ0llIFBNVVxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyODU6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yODYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9Mjk0PWNvbmZpZyBDWExfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjk1LVxcdHRyaXN0YXRlIFxcXCJDWEwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI5NjpcXHRkZXBlbmRzIG9uIENYTF9CVVNcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yOTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWc9MzA3PWNvbmZpZyBNQVJWRUxMX1BFTV9QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMDgtXFx0dHJpc3RhdGUgXFxcIk1BUlZFTEwgUEVNIFBNVSBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjMwOTpcXHRkZXBlbmRzIG9uIEFSQ0hfVEhVTkRFUiB8fCAoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IDY0QklUKVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTMxMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0zMTQ9Y29uZmlnIE5WSURJQV9URUdSQTQxMF9DTUVNX0xBVEVOQ1lfUE1VXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzE1LVxcdHRyaXN0YXRlIFxcXCJOVklESUEgVGVncmE0MTAgQ1BVIE1lbW9yeSBMYXRlbmN5IFBNVVxcXCJcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzozMTY6XFx0ZGVwZW5kcyBvbiBBUk02NCBcXHUwMDI2XFx1MDAyNiBBQ1BJXFxuZHJpdmVycy9wZXJmL0tjb25maWctMzE3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnPTMyMT1jb25maWcgTlZJRElBX1RFR1JBNDEwX0MyQ19QTVVcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIk5WSURJQSBUZWdyYTQxMCBDMkMgUE1VXFxcIlxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFDUElcXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0zMjQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzozNC4yNzY4MDgxNjhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxMzg5Mzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIEknbSBkZWFsaW5nIHdpdGggZGVwZW5kZW5jaWVzIGZvciBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGZlYXR1cmVzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBCcmFuY2ggUmVjb3JkIEJ1ZmZlciBFeHRlbnNpb24gKEJSQkUpIG9uIEFSTTY0IGFyY2hpdGVjdHVyZXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBBUk02NF9CUkJFYCBpcyBjb250aW5nZW50IG9uIGBBUk1fUE1VVjNgIGFuZCwgb2YgY291cnNlLCB0aGUgYEFSTTY0YCBhcmNoaXRlY3R1cmUgaXRzZWxmLiBUaGVuLCBgQVJNX1BNVVYzYCBoYXMgaXRzIG93biBkZXBlbmRlbmNpZXM6IGBIV19QRVJGX0VWRU5UU2AgYW5kIGEgY29uZGl0aW9uIHRpZWQgdG8gZWl0aGVyIEFSTSBWNyBDUFVzIG9yIEFSTTY0LlxuXG5BbHJpZ2h0LCBzbyB0byBzYXRpc2Z5IGFsbCB0aGVzZSBkZXBlbmRlbmNpZXMsIEkgZGVmaW5pdGVseSBuZWVkIGBQRVJGX0VWRU5UU2AuIEkgYWxzbyBzZWUgdGhhdCB0aGVyZSBhcmUgQ1BVLXNwZWNpZmljIHN1cHBvcnQgZmxhZ3MgZm9yIEFNRCBhbmQgSW50ZWwsIG5hbWVseSBgQ1BVX1NVUF9BTURgIGFuZCBgQ1BVX1NVUF9JTlRFTGAsIHdoaWNoIHByZXN1bWFibHkgZW5hYmxlcyBjZXJ0YWluIHBlcmZvcm1hbmNlIGZlYXR1cmVzIGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gQW5kIHRoZSBmYWN0IHRoYXQgSSBzZWUgYFBFUkZfRVZFTlRTX0FNRF9CUlNgIHN1Z2dlc3RzIGJyYW5jaCBzYW1wbGluZyBpcyBhdmFpbGFibGUgZm9yIEFNRCBwcm9jZXNzb3JzLiBXaXRoIGBBUk02NF9CUkJFYCBhbmQgYEFSTV9QTVVWM2AgYWxzbyBpbiB0aGUgbWl4LCBhbmQgYWNrbm93bGVkZ2luZyB0aGF0IGBIV19QRVJGX0VWRU5UU2AgaXMgYSBib29sZWFuIGxpa2VseSBzZXQgYnkgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYsIEkgY2FuIHNpbXBsaWZ5IHRoZSBsaXN0LlxuXG5Pa2F5LCBsZXQgbWUganVzdCBrZWVwIGEgY2xlYW4gbGlzdCBvZiB0aGUgY29uZmlndXJhdGlvbnMgSSBleHBsaWNpdGx5IG5lZWQsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBlYWNoOiBgUEVSRl9FVkVOVFNgLCBgQ1BVX1NVUF9BTURgLCBgUEVSRl9FVkVOVFNfQU1EX0JSU2AsIGBDUFVfU1VQX0lOVEVMYCwgYEFSTTY0X0JSQkVgLCBhbmQgYEFSTV9QTVVWM2AuIFRoZW4sIGFzIGEgc2FuaXR5IGNoZWNrLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyByZWdhcmRpbmcgYENQVV9TVVBfSU5URUxgIGFuZCBgQ1BVX1NVUF9BTURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzo0MS4yOTA3MDU0OTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODYxMDMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVX1NVUF9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NDEuMzgxNTgxMzIxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODQ0NzE5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYENQVV9TVVBfSU5URUxgIG9wdGlvbiBpcyBkZWZpbmVkLiAgSXQgKnNob3VsZCogYmUgaW4gb25lIG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcmlnaHQ/IFRoZSBsb2dpY2FsIHBsYWNlIHNlZW1zIHRvIGJlIGBhcmNoL3g4Ni9LY29uZmlnLmNwdWAuIFllYWgsIHRoYXQgZmVlbHMgcmlnaHQuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZmxhZyBtZWFucyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHByb2Nlc3NvciBmZWF0dXJlcy4gR29vZCwgZ29vZC4uLiBrbm93aW5nIHRoZSBmaWxlIGxvY2F0aW9uIGlzIGhhbGYgdGhlIGJhdHRsZS4gTm93LCB0aW1lIHRvIGNyYWNrIGl0IG9wZW4gYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjA2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NDQuNzY2MDYwODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTAwMDMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVX1NVUF9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnLmNwdVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnLmNwdT0yOTc9bWVudWNvbmZpZyBQUk9DRVNTT1JfU0VMRUNUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0zMDItXFxuYXJjaC94ODYvS2NvbmZpZy5jcHU6MzAzOmNvbmZpZyBDUFVfU1VQX0lOVEVMXFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMzA0LVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzo0NC45ODEwNzE0MzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0OTY3Mzc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgSWRlbnRpZmljYXRpb24gLSBSZWZpbmVkKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgZGVmYXVsdCBpcyBcInlcIiDigJMgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIGdldCBkb3duIHRvIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgcG90ZW50aWFsIGluY2x1c2lvbiBhcyBmb2N1cyBzeW1ib2xzLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBMQlIgaW1wbGVtZW50YXRpb25zLlxuXG5JJ3ZlIGNoZWNrZWQgYGFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY2AgYW5kIGZvdW5kIHR3byBwcm9taXNpbmcgY2FuZGlkYXRlczogYGludGVsX3BtdV9sYnJfcmVhZF8zMmAgYW5kIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLiBNb3Zpbmcgb250byB0aGUgQU1EIHNpZGUsIGBhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jYCB5aWVsZHMgYGFtZF9wbXVfbGJyX3JlYWRgLCBhbmQgYGFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNgIGdpdmVzIHVzIGBhbWRfYnJzX2RyYWluYC5cblxuQnJhbmNoaW5nIG91dCB0byB0aGUgQVJNIHdvcmxkLCBJIGNoZWNrZWQgYGRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jYCBhbmQgZGlzY292ZXJlZCBgYnJiZV9yZWFkX2ZpbHRlcmVkX2VudHJpZXNgLlxuXG5UaGVuIEkgY2hlY2tlZCBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFuZCBzYXcgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbmAuIEhvbGQgb24gYSBzZWNvbmQuLi4gdGhlc2UgYXJlIG9uIHRoZSAqaG90KiBwYXRoLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhcyBpdCBjb3VsZCBza2V3IHRoZSByZXN1bHRzLiBTbyB0aG9zZSB0d28gYXJlICpvdXQqLlxuXG5Ob3csIGJhY2sgdG8gdGhlIHJlbWFpbmluZyBjYW5kaWRhdGVzOiBgYW1kX2Jyc19kcmFpbmAsIGBhbWRfcG11X2xicl9yZWFkYCwgYGludGVsX3BtdV9sYnJfcmVhZF8zMmAsIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgLCBhbmQgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgY2FsbGVkIHdoZW4gcmVhZGluZyBQTVUgZXZlbnRzLCB0cmlnZ2VyZWQgYnkgYHBlcmZfZXZlbnRfb3BlbmAgYW5kIHN1YnNlcXVlbnQgYnVmZmVyIHJlYWRzIG9yIFBNVSBpbnRlcnJ1cHRzLiBUaGV5IGFyZW4ndCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBsaWtlIHRoZSBzY2hlZHVsZXIgb3IgbmV0d29yayBjb2RlOyB0aGV5IGFyZSBzcGVjaWZpYyB0byBwZXJmIGV2ZW50cyB3aGVyZSBMQlIgb3IgQlJTIGFyZSBlbmFibGVkLiBUaGF0IG1ha2VzIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBhcyBmb2N1cyBzeW1ib2xzLlxuXG5JJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IHRob3VnaHQgcHJvY2VzcyBhYm91dCBgYW1kX2Jyc19kcmFpbmAsIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NTIuNDMwNzQ4MzUzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3NzcxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX2Jyc19kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jPTI2Mj1zdGF0aWMgYm9vbCBhbWRfYnJzX21hdGNoX3BsbShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBmcm9tLCB1NjQgdG8pXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTI4MC0gKi9cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jOjI4MTp2b2lkIGFtZF9icnNfZHJhaW4odm9pZClcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTI4Mi17XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYz04OTY9c3RhdGljIGludCBhbWRfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05MTItXFx0aWYgKGNwdWMtXFx1MDAzZWxicl91c2VycylcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5MTM6XFx0XFx0YW1kX2Jyc19kcmFpbigpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTkxNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDM6NTIuNjc2NTMwMDg4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODE2OTUxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlBNVSBJbnRlcnJ1cHQgSGFuZGxpbmcgYW5kIExCUiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gYW5hbHl6aW5nIHRoaXMgY29kZSBhbmQgaXQgbG9va3MgbGlrZSB3ZSdyZSBiZWluZyBjYWxsZWQgZnJvbSBgYW1kX3BtdV9oYW5kbGVfaXJxYC4gVGhhdCdzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCwgc28gdGhhdCdzIGV4cGVjdGVkIGFuZCBwZXJmZWN0bHkgbm9ybWFsLiBObyByZWQgZmxhZ3MgdGhlcmUuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBhbWRfcG11X2xicl9yZWFkYCBmdW5jdGlvbiBhIGxpdHRsZSBjbG9zZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlIHNob3VsZCBleHBlY3QgaXQgdG8gYmUgcmVhZGluZyBmcm9tIHRoZSBMYXN0IEJyYW5jaCBSZWNvcmQsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgZGF0YSBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSB3aXRoaW4gdGhhdCBjb250ZXh0LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGFib3V0IHRoZXNlIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowMzo1Ni4yNTgyMjgwMDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTY2MzMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbWRfcG11X2xicl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTkzMT1zdGF0aWMgaW50IGFtZF9wbXVfdjJfc25hcHNob3RfYnJhbmNoX3N0YWNrKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqZW50cmllcywgdW5zaWduZWQgaW50IGNudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTk0NS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo5NDY6XFx0YW1kX3BtdV9sYnJfcmVhZCgpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTk0Ny1cXHRjbnQgPSBtaW4oY250LCB4ODZfcG11Lmxicl9ucik7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYz05NTY9c3RhdGljIGludCBhbWRfcG11X3YyX2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05ODQtXFx0aWYgKHg4Nl9wbXUubGJyX25yKSB7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6OTg1OlxcdFxcdGFtZF9wbXVfbGJyX3JlYWQoKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy05ODYtXFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5HTE9CQUxfU1RBVFVTX0xCUlNfRlJPWkVOO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYz0xNTc9c3RhdGljIGNvbnN0IGludCBsYnJfc3BlY19tYXBbUEVSRl9CUl9TUEVDX01BWF0gPSB7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2My1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jOjE2NDp2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE2NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjAzOjU2LjQ3OTg5NTQ2MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI5OTM5MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFBNVSBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGUgY29kZSdzIGN1cnJlbnRseSBjYWxsaW5nIGZyb20gYGFtZF9wbXVfdjJfaGFuZGxlX2lycWAgYW5kIGFsc28gYGFtZF9wbXVfdjJfc25hcHNob3RfYnJhbmNoX3N0YWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgcmVsYXRlZCB0byBJbnRlbCdzIExCUiBpbXBsZW1lbnRhdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgY29tcGFyaXNvbiwgYXQgbGVhc3QuIFRvIGdldCBteSBiZWFyaW5ncywgSSdsbCBxdWlja2x5IG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSd2ZSBnb3QgdGhlIGBpbnRlbF9wbXVfbGJyX3JlYWRfMzJgIGFuZCBgaW50ZWxfcG11X2xicl9yZWFkXzY0YCBjYWxscyBzdHJhaWdodCBpbiBteSBoZWFkLiBBIHF1aWNrIHJldmlldyBvZiB0aG9zZSBJbnRlbCBmdW5jdGlvbnMgd2lsbCBwcm9iYWJseSByZXZlYWwgdGhlIGNydWNpYWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtLCBhbmQgdGhlIEFNRCBjb2RlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJyYW5jaCBzdGFjayBpcyBoYW5kbGVkIGFuZCBpZiB0aGVyZSdzIGFueSBzb3J0IG9mIHBhcml0eSB0aGF0IEkgY2FuIHJlbHkgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzkzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDAuNzA5ODM4MjYzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMwNDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfbGJyX3JlYWRfMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTc4NjE9X19pbml0IGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy03OTQxLVxcdFxcdHg4Nl9wbXUubGJyX3Jlc2V0ID0gaW50ZWxfcG11X2xicl9yZXNldF8zMjtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjc5NDI6XFx0XFx0eDg2X3BtdS5sYnJfcmVhZCA9IGludGVsX3BtdV9sYnJfcmVhZF8zMjtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTc5NDMtXFx0fVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTcyOD12b2lkIGludGVsX3BtdV9sYnJfZGlzYWJsZV9hbGwodm9pZClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03MzktXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjc0MDp2b2lkIGludGVsX3BtdV9sYnJfcmVhZF8zMihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtNzQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDAuNzgyMTQ3NDM1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzU4MTQ1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRnVuY3Rpb24gUG9pbnRlciBhbmQgQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gYHg4Nl9wbXUubGJyX3JlYWRgLCBhcmUgaGFuZGxlZC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhleSdyZSBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCdzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgZmxleGliaWxpdHksIGxldHRpbmcgdXMgc3dhcCBvdXQgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBmb3IgcmVhZGluZyB0aGUgTGFzdCBCcmFuY2ggUmVjb3JkIChMQlIpIGRhdGEsIGxpa2VseSBkZXBlbmRpbmcgb24gdGhlIHByb2Nlc3NvciBtb2RlbCBvciBzcGVjaWZpYyBjb250ZXh0LiBUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIG5vbi1zdGF0aWMgaXMgaW1wb3J0YW50LiBJdCBpbXBsaWVzIHRoZXkgYXJlIGV4dGVybmFsbHkgdmlzaWJsZSwgYW5kIHRoYXQgd2UgY2FuIGludGVyYWN0IHdpdGggdGhlbS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYCBpcyBhbW9uZyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDQuNTE3OTY1MTU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODcyNzE4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BlcmYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jPTc2ND1zdGF0aWMgYm9vbCBmaWx0ZXJfYnJhbmNoX3JlY29yZChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmVudHJ5LFxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9icmJlLmMtNzcxLVxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jOjc3Mjp2b2lkIGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKHN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrLFxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5jLTc3My1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaD0yMj1ib29sIGJyYmVfYnJhbmNoX2F0dHJfdmFsaWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTtcXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaDoyMzp2b2lkIGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKHN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrLFxcbmRyaXZlcnMvcGVyZi9hcm1fYnJiZS5oLTI0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaD0zNz1zdGF0aWMgaW5saW5lIGJvb2wgYnJiZV9icmFuY2hfYXR0cl92YWxpZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC00Mi1cXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaDo0MzpzdGF0aWMgdm9pZCBicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllcyhzdHJ1Y3QgcGVyZl9icmFuY2hfc3RhY2sgKmJyYW5jaF9zdGFjayxcXG5kcml2ZXJzL3BlcmYvYXJtX2JyYmUuaC00NC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9wbXV2My5jPTg3MT1zdGF0aWMgdm9pZCByZWFkX2JyYW5jaF9yZWNvcmRzKHN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjLFxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9wbXV2My5jLTg3Ni1cXG5kcml2ZXJzL3BlcmYvYXJtX3BtdXYzLmM6ODc3OlxcdGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzKGJyYW5jaF9zdGFjaywgZXZlbnQpO1xcbmRyaXZlcnMvcGVyZi9hcm1fcG11djMuYy04NzgtXFx0cGVyZl9zYW1wbGVfc2F2ZV9icnN0YWNrKGRhdGEsIGV2ZW50LCBicmFuY2hfc3RhY2ssIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDowNC41ODY3MDEzN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI0ODg3NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb250ZXh0IGlzIGByZWFkX2JyYW5jaF9yZWNvcmRzYCBpbiBgYXJtX3BtdXYzLmNgLiBUaGF0J3Mgd2hlcmUgdGhpcyBmdW5jdGlvbiBjYWxsIG9yaWdpbmF0ZXMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBtb2RpZmljYXRpb24gY2FzY2FkZT8gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbXBhY3RlZD8gSSBuZWVkIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuXG5cblF1aWNrbHkgc2Nhbm5pbmcuLi4gYWhhISBJbiBgYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jYCwgYGludGVsX3BtdV9zdG9yZV9sYnJgIGlzIHRoZXJlIGJ1dCBpdCdzICpzdGF0aWMqLiBPa2F5LCBzbyBhdCBsZWFzdCB0aGF0IG9uZSdzIGxvY2FsaXplZC4gVGhhdCdzIGEgcmVsaWVmOyBzdGF0aWMgZnVuY3Rpb25zIGFyZSBsZXNzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBpbiBleHRlcm5hbCBjaGFuZ2VzLiBTdGlsbCwgdGhpcyBuZWVkcyBmdXJ0aGVyIGNoZWNraW5nIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbHMgdGhhdCBjb3VsZCBiZSBsaW5rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzE2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDguNDExNTkyNzAyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU3NTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfc3RvcmVfbGJyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9OTAxPXN0YXRpY19hc3NlcnQoKDY0IC0gUEVSRl9CUkFOQ0hfRU5UUllfSU5GT19CSVRTX01BWCkgXFx1MDAzZSBMQlJfSU5GT19CUl9DTlRSX05VTSAqIExCUl9JTkZPX0JSX0NOVFJfQklUUyk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTkwMi1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6OTAzOnN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTkwNC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGJyX2VudHJ5ICplbnRyaWVzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDA9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMDEte1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzoxMDAyOlxcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgTlVMTCk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMDMtfVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEwMDU9c3RhdGljIHZvaWQgaW50ZWxfcG11X2FyY2hfbGJyX3JlYWRfeHNhdmUoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAwOS1cXHRpZiAoIXhzYXZlKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjEwMTA6XFx0XFx0aW50ZWxfcG11X3N0b3JlX2xicihjcHVjLCBOVUxMKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAxMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTAxNC1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTAxNTpcXHRpbnRlbF9wbXVfc3RvcmVfbGJyKGNwdWMsIHhzYXZlLVxcdTAwM2VsYnIuZW50cmllcyk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTEwMTYtfVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEyODg9dm9pZCBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzKHN0cnVjdCBsYnJfZW50cnkgKmxicilcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMjk4LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzoxMjk5OlxcdGludGVsX3BtdV9zdG9yZV9sYnIoY3B1YywgbGJyKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTMwMC1cXHRpbnRlbF9wbXVfbGJyX2ZpbHRlcihjcHVjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MDguNDg0MTc3NDU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzY0ODExNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgUEVCUy9MQlIgRGF0YSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBpcyBhIGZ1bmN0aW9uIHRoYXQncyBub3QgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IOKAkyBtZWFuaW5nIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gR2l2ZW4gdGhhdCBmYWN0LCBpdCBsaWtlbHkgaGFzIGJyb2FkZXIgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgSW50ZWwgUE1VIGRyaXZlci4gTm93LCB0aGUgY29kZSBzdGF0ZXMgdGhhdCBpdCBhY3R1YWxseSBjYWxscyBgaW50ZWxfcG11X3N0b3JlX2xicmAuIFNvLCB0aGlzIHRlbGxzIG1lIHRoYXQgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgIGxpa2VseSBzaXRzIGhpZ2hlciB1cCBpbiB0aGUgZGF0YS1mbG93LCBwb3NzaWJseSBjb29yZGluYXRpbmcgdGhlIGNvbGxlY3Rpb24gb3Igc3RvcmFnZSBvZiBMQlIgZGF0YSB3aXRoaW4gYSBQRUJTIGNvbnRleHQuIEkgc2hvdWxkIGNoZWNrIGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBtb3JlIGNsb3NlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjc5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MTIuODIwNjY3OTY0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkwNzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MjQ5OT1zdGF0aWMgdm9pZCBzZXR1cF9wZWJzX2FkYXB0aXZlX3NhbXBsZV9kYXRhKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI1NzUtXFx0XFx0aWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQpKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MjU3NjpcXHRcXHRcXHRpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzKGxicik7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMjU3Ny1cXHRcXHRcXHRpbnRlbF9wbXVfbGJyX3NhdmVfYnJzdGFjayhkYXRhLCBjcHVjLCBldmVudCk7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0yNjE2PXN0YXRpYyB2b2lkIHNldHVwX2FyY2hfcGVic19zYW1wbGVfZGF0YShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yNzA4LVxcdFxcdGlmIChoYXNfYnJhbmNoX3N0YWNrKGV2ZW50KSkge1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjI3MDk6XFx0XFx0XFx0aW50ZWxfcG11X3N0b3JlX3BlYnNfbGJycyhsYnIpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI3MTAtXFx0XFx0XFx0aW50ZWxfcG11X2xicl9zYXZlX2Jyc3RhY2soZGF0YSwgY3B1YywgZXZlbnQpO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTEyMTc9aW50ZWxfcG11X2xicl9maWx0ZXIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtMTI4Ny1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6MTI4ODp2b2lkIGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnMoc3RydWN0IGxicl9lbnRyeSAqbGJyKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy0xMjg5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MTIuODg3NTgxNjU3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTYwODA4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQRUJTL0xCUiBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzYCBoZXJlLCBhbmQgaXQncyBmbGFnZ2VkIGFzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCBiZXlvbmQgaXRzIGltbWVkaWF0ZSBzY29wZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTEJSIHJlYWRpbmcgcHJvY2Vzcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBgaW50ZWxfcG11X2xicl9yZWFkXzY0YC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uIHBsdWdzIGludG8gdGhlIGJyb2FkZXIgTEJSIGhhbmRsaW5nLCB3aGF0IGRhdGEgaXQncyBwYXNzaW5nLCBhbmQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBub24tc3RhdGljIHByb3BlcnR5LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGlzIGV4cG9zZXMgYW55IGNyaXRpY2FsIGRhdGEgb3IgY2FwYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjE2LjcwMzY2NzIzMloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5ODQ2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZWxfcG11X2xicl9yZWFkXzY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2V2ZW50cy9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz02NTcxPXN0YXRpYyBfX2luaXRjb25zdCBjb25zdCBzdHJ1Y3QgeDg2X3BtdSBjb3JlX3BtdSA9IHtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjYxNC1cXHQubGJyX3Jlc2V0XFx0XFx0PSBpbnRlbF9wbXVfbGJyX3Jlc2V0XzY0LFxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NjYxNTpcXHQubGJyX3JlYWRcXHRcXHQ9IGludGVsX3BtdV9sYnJfcmVhZF82NCxcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2MTYtXFx0Lmxicl9zYXZlXFx0XFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTY2MjA9c3RhdGljIF9faW5pdGNvbnN0IGNvbnN0IHN0cnVjdCB4ODZfcG11IGludGVsX3BtdSA9IHtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjY2Ni1cXHQubGJyX3Jlc2V0XFx0XFx0PSBpbnRlbF9wbXVfbGJyX3Jlc2V0XzY0LFxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NjY2NzpcXHQubGJyX3JlYWRcXHRcXHQ9IGludGVsX3BtdV9sYnJfcmVhZF82NCxcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY2NjgtXFx0Lmxicl9zYXZlXFx0XFx0PSBpbnRlbF9wbXVfbGJyX3NhdmUsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9NzQwPXZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzMyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTc3My0gKi9cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Nzc0OnZvaWQgaW50ZWxfcG11X2xicl9yZWFkXzY0KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy03NzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDoxNi43ODM2NTY1MzNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg5Mjg0MTkyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBlcmYgRXZlbnQgUE1VIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkgc2VlIGlzIHRoYXQgYGludGVsX3BtdV9sYnJfcmVhZF82NGAgaXMsIHRoYW5rZnVsbHksIG5vbi1zdGF0aWMuIExldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgbGlzdCBvZiB0aGUgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGhlcmU6XG5cbiogICBgYW1kX2Jyc19kcmFpbmBcbiogICBgYW1kX3BtdV9sYnJfcmVhZGBcbiogICBgaW50ZWxfcG11X2xicl9yZWFkXzMyYFxuKiAgIGBpbnRlbF9wbXVfbGJyX3JlYWRfNjRgXG4qICAgYGludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNgXG4qICAgYGJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzYFxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb2J2aW91cyB0YXJnZXRzIGluIHRoZSBob3QgcGF0aC4gSSB3YXMgaW5pdGlhbGx5IGNvbmNlcm5lZCBhYm91dCBgcGVyZl9wbXVfc2NoZWRfdGFza2Agc2luY2UgaXQncyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBieSBgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0YCBhbmQgYF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luYC4gQnV0LCBgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dGAgYW5kIGBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW5gIGFyZSBpbiB0aGUgaG90IHBhdGgsIHNvIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi4gQnV0IHRoZXNlIHNlZW0gdG8gYmUgaGFuZGxlZCBhbmQgY29ycmVjdGx5IGV4Y2x1ZGVkLCBzbyB3ZSdyZSBnb29kLlxuXG5HaXZlbiB0aGVzZSBjb25zaWRlcmF0aW9ucywgaGVyZSdzIHdoYXQgSSB0aGluayB3ZSBuZWVkIHRvIHRlc3Q6XG5cblRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYWZmZWN0IGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBvdXIgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHM6XG5cbiogICBgUEVSRl9FVkVOVFNgOiBBbHdheXMgbmVjZXNzYXJ5LlxuKiAgIGBDUFVfU1VQX0FNRGA6IE5lY2Vzc2FyeSBmb3IgQU1EIHN1cHBvcnQsIGRlZmF1bHRzIG9uIHg4NiwgYnV0IGdvb2QgdG8gaW5jbHVkZS5cbiogICBgUEVSRl9FVkVOVFNfQU1EX0JSU2A6IFRoaXMgbG9va3Mgc3BlY2lmaWMgdG8gQU1EIEJSUyBzdXBwb3J0LCBzbyB3ZSBuZWVkIGl0LlxuKiAgIGBDUFVfU1VQX0lOVEVMYDogTmVjZXNzYXJ5IGZvciBJbnRlbCBzdXBwb3J0LCBkZWZhdWx0cyBvbiB4ODYsIGJ1dCBnb29kIHRvIGluY2x1ZGUuXG4qICAgYEFSTTY0X0JSQkVgOiBOZWNlc3NhcnkgZm9yIEFSTTY0IEJSQkUsIGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZW5hYmxlZC5cbiogICBgQVJNX1BNVVYzYDogTG9va3MgbGlrZSBgQVJNNjRfQlJCRWAgZGVwZW5kcyBvbiBpdCwgc28gd2UgbmVlZCBpdC5cblxuTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbmVha3MgaW4uIGBQRVJGX0VWRU5UU19BTURfQlJTYCBzZWVtcyB0byBiZSB0aGUgb25seSBvbmUgZm9yIEFNRCBCUlMuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHJlZ2FyZGluZyBJbnRlbCB1bmNvcmUgZXZlbnRzLCBzbyB3ZSBkb24ndCBuZWVkIGBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVgLiBBZnRlciBxdWlja2x5IHZlcmlmeWluZyB0aGUgTWFrZWZpbGVzLCBgQ1BVX1NVUF9BTURgLCBhbmQgYFBFUkZfRVZFTlRTX0FNRF9CUlNgIGFyZSBlbm91Z2ggZm9yIEFNRCwgYENQVV9TVVBfSU5URUxgIGZvciBJbnRlbCwgYW5kIGBBUk02NF9CUkJFYCBhbmQgYEFSTV9QTVVWM2AgZm9yIEFSTS4gV2UgYWxzbyB3YW50IGBQRVJGX0VWRU5UU2AsIHdoaWNoIGlzIGNvcmUuXG5cblNvLCBoZXJlJ3MgdGhlIHBsYW4uIFdlIGZvY3VzIGZ1enppbmcgb24gdGhlIGxpc3RlZCBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBQTVUgZHJpdmVycy4gV2Ugd2lsbCBlbmFibGUgdGhvc2UgY29uZmlncyBhbmQgdGhlIGZvY3VzIHN5bWJvbHMuIFRoaXMgY292ZXJzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHByb3ZpZGVzIGEgcmVhc29uYWJseSB0ZXN0YWJsZSBzY29wZSB3aXRoIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTQzLCJPdXRwdXRUb2tlbnMiOjI3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDQ6MzUuNzEyMDgwMjU2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NzE3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQ1BVX1NVUF9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTX0FNRF9CUlNcIixcbiAgICBcIkNQVV9TVVBfSU5URUxcIixcbiAgICBcIkFSTTY0X0JSQkVcIixcbiAgICBcIkFSTV9QTVVWM1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtZF9icnNfZHJhaW5cIixcbiAgICBcImFtZF9wbXVfbGJyX3JlYWRcIixcbiAgICBcImludGVsX3BtdV9sYnJfcmVhZF8zMlwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzY0XCIsXG4gICAgXCJpbnRlbF9wbXVfc3RvcmVfcGVic19sYnJzXCIsXG4gICAgXCJicmJlX3JlYWRfZmlsdGVyZWRfZW50cmllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBicmFuY2ggZW50cnkgaW5pdGlhbGl6YXRpb24gaW4gcGVyZiBldmVudCBQTVUgZHJpdmVycyAoQU1EIEJSUywgQU1EIExCUiwgSW50ZWwgTEJSLCBBUk0gQlJCRSkgYnkgcmVwbGFjaW5nIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIHdpdGggc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHBlcmYgZXZlbnRzIHN1YnN5c3RlbSAoYGtlcm5lbC9ldmVudHMvY29yZS5jYCkgdG8gY2hhbmdlIGhvdyBgc2NoZWRfdGFza2AgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZvciBQTVVzIGR1cmluZyBjb250ZXh0IHN3aXRjaGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgUE1VIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdmlhIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiLFxuICAgIFwiUEVSRl9FVkVOVFNfQU1EX0JSU1wiLFxuICAgIFwiQ1BVX1NVUF9JTlRFTFwiLFxuICAgIFwiQVJNNjRfQlJCRVwiLFxuICAgIFwiQVJNX1BNVVYzXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYW1kX2Jyc19kcmFpblwiLFxuICAgIFwiYW1kX3BtdV9sYnJfcmVhZFwiLFxuICAgIFwiaW50ZWxfcG11X2xicl9yZWFkXzMyXCIsXG4gICAgXCJpbnRlbF9wbXVfbGJyX3JlYWRfNjRcIixcbiAgICBcImludGVsX3BtdV9zdG9yZV9wZWJzX2xicnNcIixcbiAgICBcImJyYmVfcmVhZF9maWx0ZXJlZF9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGJyYW5jaCBlbnRyeSBpbml0aWFsaXphdGlvbiBpbiBwZXJmIGV2ZW50IFBNVSBkcml2ZXJzIChBTUQgQlJTLCBBTUQgTEJSLCBJbnRlbCBMQlIsIEFSTSBCUkJFKSBieSByZXBsYWNpbmcgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2Agd2l0aCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgcGVyZiBldmVudHMgc3Vic3lzdGVtIChga2VybmVsL2V2ZW50cy9jb3JlLmNgKSB0byBjaGFuZ2UgaG93IGBzY2hlZF90YXNrYCBjYWxsYmFja3MgYXJlIGludm9rZWQgZm9yIFBNVXMgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBQTVUgZHJpdmVycywgd2hpY2ggY2FuIGJlIHRlc3RlZCB2aWEgdGhlIGBwZXJmX2V2ZW50X29wZW5gIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjM1Ljg2ODgwNTY2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTExMDA3MzMwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjM1Ljg2OTM2Njc1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMTA5NTA3MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNVSBkcml2ZXJzIChBTUQsIEludGVsLCBBUk0pLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoKWAgdG8gY2xlYXIgYml0ZmllbGRzLCBidXQgdGhpcyBmdW5jdGlvbiB3YXMgb3V0ZGF0ZWQgYW5kIGZhaWxlZCB0byBjbGVhciBuZXdlciBiaXRmaWVsZHMgbGlrZSBgbmV3X3R5cGVgIGFuZCBgcHJpdmAsIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgdGhlIHBlcmYgcmluZyBidWZmZXIuXFxuXFxuVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmVwbGFjaW5nIHRoZSBtYW51YWwgY2xlYXJpbmcgd2l0aCBjb21wb3VuZCBsaXRlcmFsIGFzc2lnbm1lbnRzIChlLmcuLCBgKmJyID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7IC4uLiB9O2ApLiBBY2NvcmRpbmcgdG8gdGhlIEMgc3RhbmRhcmQsIGFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIGEgY29tcG91bmQgbGl0ZXJhbCBhcmUgYXV0b21hdGljYWxseSB6ZXJvLWluaXRpYWxpemVkLiBGdXJ0aGVybW9yZSwgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAgaXMgZXhhY3RseSAyNCBieXRlcyB3aXRoIG5vIHBhZGRpbmcgKHR3byA2NC1iaXQgaW50ZWdlcnMgYW5kIGV4YWN0bHkgNjQgYml0cyBvZiBiaXRmaWVsZHMpLCBzbyB0aGUgY29tcG91bmQgbGl0ZXJhbCBndWFyYW50ZWVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkLlxcblxcblRoZSBvdGhlciBjaGFuZ2VzIGluIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYXJlIGxvZ2ljIGZpeGVzIGZvciBQTVUgY29udGV4dCBzY2hlZHVsaW5nIChgc2NoZWRfdGFza2AgY2FsbGJhY2tzKSBhbmQgZG8gbm90IGludm9sdmUgbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weWluZyB0byB1c2Vyc3BhY2UuXFxuXFxuU2luY2UgdGhpcyBwYXRjaCAqcmVzb2x2ZXMqIGFuIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgb25lLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDllZTVlOGZjNDkxMTEwNzU0NTZiOGZhOTQzODRhMzIwMjQ5OGM0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjAyOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmNcbmluZGV4IGRjNTY0Njg4ZjNkNzMuLjU0YjEzZmFiYTExNmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG4rKysgYi9hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jXG5AQCAtMzQzLDExICszNDMsMTAgQEAgdm9pZCBhbWRfYnJzX2RyYWluKHZvaWQpXG4gXHRcdGlmICghYW1kX2Jyc19tYXRjaF9wbG0oZXZlbnQsIGZyb20sIHRvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyK25yKTtcbi1cbi1cdFx0YnJbbnJdLmZyb20gPSBmcm9tO1xuLVx0XHRicltucl0udG8gICA9IHRvO1xuLVxuK1x0XHRicltucl0gPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbitcdFx0XHQuZnJvbVx0PSBmcm9tLFxuK1x0XHRcdC50b1x0PSB0byxcbitcdFx0fTtcbiBcdFx0bnIrKztcbiBcdH1cbiBlbXB0eTpcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jIGIvYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuY1xuaW5kZXggOWQ5Yzk2MTk4OWQ1MS4uYTU1NjQ2ZmNiODQ2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbisrKyBiL2FyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmNcbkBAIC0xODQsMTMgKzE4NCw2IEBAIHZvaWQgYW1kX3BtdV9sYnJfcmVhZCh2b2lkKVxuIFx0XHQgICAgZW50cnkudG8uc3BsaXQucmVzZXJ2ZWQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhiciArIG91dCk7XG4tXG4tXHRcdGJyW291dF0uZnJvbVx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCk7XG4tXHRcdGJyW291dF0udG9cdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LnRvLnNwbGl0LmlwKTtcbi1cdFx0YnJbb3V0XS5taXNwcmVkXHQ9IGVudHJ5LmZyb20uc3BsaXQubWlzcHJlZGljdDtcbi1cdFx0YnJbb3V0XS5wcmVkaWN0ZWQgPSAhYnJbb3V0XS5taXNwcmVkO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBTZXQgYnJhbmNoIHNwZWN1bGF0aW9uIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBzdGF0dXMgb2ZcbiBcdFx0ICogdGhlIHZhbGlkIGFuZCBzcGVjIGJpdHMuXG5AQCAtMjA4LDcgKzIwMSwxNCBAQCB2b2lkIGFtZF9wbXVfbGJyX3JlYWQodm9pZClcbiBcdFx0ICogc3BlY3VsYXRpdmUgYW5kIHRvb2sgdGhlIGNvcnJlY3QgcGF0aFxuIFx0XHQgKi9cbiBcdFx0aWR4ID0gKGVudHJ5LnRvLnNwbGl0LnZhbGlkIFx1MDAzY1x1MDAzYyAxKSB8IGVudHJ5LnRvLnNwbGl0LnNwZWM7XG4tXHRcdGJyW291dF0uc3BlYyA9IGxicl9zcGVjX21hcFtpZHhdO1xuK1xuK1x0XHRicltvdXRdID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdFx0PSBzaWduX2V4dF9icmFuY2hfaXAoZW50cnkuZnJvbS5zcGxpdC5pcCksXG4rXHRcdFx0LnRvXHRcdD0gc2lnbl9leHRfYnJhbmNoX2lwKGVudHJ5LnRvLnNwbGl0LmlwKSxcbitcdFx0XHQubWlzcHJlZFx0PSBlbnRyeS5mcm9tLnNwbGl0Lm1pc3ByZWRpY3QsXG4rXHRcdFx0LnByZWRpY3RlZFx0PSAhZW50cnkuZnJvbS5zcGxpdC5taXNwcmVkaWN0LFxuK1x0XHRcdC5zcGVjXHRcdD0gbGJyX3NwZWNfbWFwW2lkeF0sXG4rXHRcdH07XG4gXHRcdG91dCsrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuaW5kZXggZjhmYWRiMGIxNmE0NS4uMGE5YjM0MjYxZWJlMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuY1xuKysrIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jXG5AQCAtNzU2LDEwICs3NTYsMTAgQEAgdm9pZCBpbnRlbF9wbXVfbGJyX3JlYWRfMzIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4gXG4gXHRcdHJkbXNycSh4ODZfcG11Lmxicl9mcm9tICsgbGJyX2lkeCwgbXNyX2xhc3RicmFuY2gubGJyKTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKTtcbi1cbi1cdFx0YnItXHUwMDNlZnJvbVx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tO1xuLVx0XHRici1cdTAwM2V0b1x0XHQ9IG1zcl9sYXN0YnJhbmNoLnRvO1xuK1x0XHQqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbitcdFx0XHQuZnJvbVx0PSBtc3JfbGFzdGJyYW5jaC5mcm9tLFxuK1x0XHRcdC50b1x0PSBtc3JfbGFzdGJyYW5jaC50byxcbitcdFx0fTtcbiBcdFx0YnIrKztcbiBcdH1cbiBcdGNwdWMtXHUwMDNlbGJyX3N0YWNrLm5yID0gaTtcbkBAIC04NDcsMTQgKzg0NywxNSBAQCB2b2lkIGludGVsX3BtdV9sYnJfcmVhZF82NChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcbiBcdFx0aWYgKGFib3J0IFx1MDAyNlx1MDAyNiB4ODZfcG11Lmxicl9kb3VibGVfYWJvcnQgXHUwMDI2XHUwMDI2IG91dCBcdTAwM2UgMClcbiBcdFx0XHRvdXQtLTtcbiBcbi1cdFx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyK291dCk7XG4tXHRcdGJyW291dF0uZnJvbVx0ID0gZnJvbTtcbi1cdFx0YnJbb3V0XS50b1x0ID0gdG87XG4tXHRcdGJyW291dF0ubWlzcHJlZFx0ID0gbWlzO1xuLVx0XHRicltvdXRdLnByZWRpY3RlZCA9IHByZWQ7XG4tXHRcdGJyW291dF0uaW5fdHhcdCA9IGluX3R4O1xuLVx0XHRicltvdXRdLmFib3J0XHQgPSBhYm9ydDtcbi1cdFx0YnJbb3V0XS5jeWNsZXNcdCA9IGN5Y2xlcztcbitcdFx0YnJbb3V0XSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuK1x0XHRcdC5mcm9tXHRcdD0gZnJvbSxcbitcdFx0XHQudG9cdFx0PSB0byxcbitcdFx0XHQubWlzcHJlZFx0PSBtaXMsXG4rXHRcdFx0LnByZWRpY3RlZFx0PSBwcmVkLFxuK1x0XHRcdC5pbl90eFx0XHQ9IGluX3R4LFxuK1x0XHRcdC5hYm9ydFx0XHQ9IGFib3J0LFxuK1x0XHRcdC5jeWNsZXNcdFx0PSBjeWNsZXMsXG4rXHRcdH07XG4gXHRcdG91dCsrO1xuIFx0fVxuIFx0Y3B1Yy1cdTAwM2VsYnJfc3RhY2subnIgPSBvdXQ7XG5AQCAtOTA1LDYgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9zdG9yZV9sYnIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXG4gXHRzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgKmU7XG4gXHRzdHJ1Y3QgbGJyX2VudHJ5ICpsYnI7XG4gXHR1NjQgZnJvbSwgdG8sIGluZm87XG4rXHRib29sIG1pc3ByZWQ7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHg4Nl9wbXUubGJyX25yOyBpKyspIHtcbkBAIC05MjEsMjQgKzkyMywyNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfc3RvcmVfbGJyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLFxuIFx0XHR0byA9IHJkbGJyX3RvKGksIGxicik7XG4gXHRcdGluZm8gPSByZGxicl9pbmZvKGksIGxicik7XG4gXG4tXHRcdHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhlKTtcbi1cbi1cdFx0ZS1cdTAwM2Vmcm9tXHRcdD0gZnJvbTtcbi1cdFx0ZS1cdTAwM2V0b1x0XHQ9IHRvO1xuLVx0XHRlLVx1MDAzZW1pc3ByZWRcdD0gZ2V0X2xicl9taXNwcmVkKGluZm8pO1xuLVx0XHRlLVx1MDAzZXByZWRpY3RlZFx0PSAhZS1cdTAwM2VtaXNwcmVkO1xuLVx0XHRlLVx1MDAzZWluX3R4XHQ9ICEhKGluZm8gXHUwMDI2IExCUl9JTkZPX0lOX1RYKTtcbi1cdFx0ZS1cdTAwM2VhYm9ydFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19BQk9SVCk7XG4tXHRcdGUtXHUwMDNlY3ljbGVzXHQ9IGdldF9sYnJfY3ljbGVzKGluZm8pO1xuLVx0XHRlLVx1MDAzZXR5cGVcdFx0PSBnZXRfbGJyX2JyX3R5cGUoaW5mbyk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZiBjcHVjLVx1MDAzZWxicl9lbnRyaWVzW2ldIHRvXG4tXHRcdCAqIHRlbXBvcmFyaWx5IHN0b3JlIHRoZSBicmFuY2ggY291bnRlcnMgaW5mb3JtYXRpb24uXG4tXHRcdCAqIFRoZSBsYXRlciBjb2RlIHdpbGwgZGVjaWRlIHdoYXQgY29udGVudCBjYW4gYmUgZGlzY2xvc2VkXG4tXHRcdCAqIHRvIHRoZSBwZXJmIHRvb2wuIFBsZWFlIHNlZSBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoKS5cbi1cdFx0ICovXG4tXHRcdGUtXHUwMDNlcmVzZXJ2ZWRcdD0gKGluZm8gXHUwMDNlXHUwMDNlIExCUl9JTkZPX0JSX0NOVFJfT0ZGU0VUKSBcdTAwMjYgTEJSX0lORk9fQlJfQ05UUl9GVUxMX01BU0s7XG4rXHRcdG1pc3ByZWQgPSBnZXRfbGJyX21pc3ByZWQoaW5mbyk7XG4rXG4rXHRcdCplID0gKHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSl7XG4rXHRcdFx0LmZyb21cdFx0PSBmcm9tLFxuK1x0XHRcdC50b1x0XHQ9IHRvLFxuK1x0XHRcdC5taXNwcmVkXHQ9IG1pc3ByZWQsXG4rXHRcdFx0LnByZWRpY3RlZFx0PSAhbWlzcHJlZCxcbitcdFx0XHQuaW5fdHhcdFx0PSAhIShpbmZvIFx1MDAyNiBMQlJfSU5GT19JTl9UWCksXG4rXHRcdFx0LmFib3J0XHRcdD0gISEoaW5mbyBcdTAwMjYgTEJSX0lORk9fQUJPUlQpLFxuK1x0XHRcdC5jeWNsZXNcdFx0PSBnZXRfbGJyX2N5Y2xlcyhpbmZvKSxcbitcdFx0XHQudHlwZVx0XHQ9IGdldF9sYnJfYnJfdHlwZShpbmZvKSxcbitcdFx0XHQvKlxuK1x0XHRcdCAqIExldmVyYWdlIHRoZSByZXNlcnZlZCBmaWVsZCBvZlxuK1x0XHRcdCAqIGNwdWMtXHUwMDNlbGJyX2VudHJpZXNbaV0gdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlXG4rXHRcdFx0ICogYnJhbmNoIGNvdW50ZXJzIGluZm9ybWF0aW9uLiBUaGUgbGF0ZXIgY29kZSB3aWxsXG4rXHRcdFx0ICogZGVjaWRlIHdoYXQgY29udGVudCBjYW4gYmUgZGlzY2xvc2VkIHRvIHRoZSBwZXJmXG4rXHRcdFx0ICogdG9vbC4gUGxlYWUgc2VlIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcigpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdC5yZXNlcnZlZFx0PSAoaW5mbyBcdTAwM2VcdTAwM2UgTEJSX0lORk9fQlJfQ05UUl9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdFx0XHQgIExCUl9JTkZPX0JSX0NOVFJfRlVMTF9NQVNLLFxuK1x0XHR9O1xuIFx0fVxuIFxuIFx0Y3B1Yy1cdTAwM2VsYnJfc3RhY2subnIgPSBpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9hcm1fYnJiZS5jIGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbmluZGV4IGJhNTU0ZTBjODQ2YzQuLjI1NGJlNGRhOGFlMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BlcmYvYXJtX2JyYmUuY1xuKysrIGIvZHJpdmVycy9wZXJmL2FybV9icmJlLmNcbkBAIC02MDQsNyArNjA0LDcgQEAgc3RhdGljIGJvb2wgcGVyZl9lbnRyeV9mcm9tX2JyYmVfcmVnc2V0KGludCBpbmRleCwgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICplbnRcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0YnJiaW5mID0gYnJlZ3MuYnJiaW5mO1xuLVx0cGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGVudHJ5KTtcbitcdCplbnRyeSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyB9O1xuIFx0aWYgKGJyYmVfcmVjb3JkX2lzX2NvbXBsZXRlKGJyYmluZikpIHtcbiBcdFx0ZW50cnktXHUwMDNlZnJvbSA9IGJyZWdzLmJyYnNyYztcbiBcdFx0ZW50cnktXHUwMDNldG8gPSBicmVncy5icmJ0Z3Q7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxuaW5kZXggNDhkODUxZmJkOGVhNS4uMzEwNjgxY2NjYjUwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaFxuQEAgLTE0NjcsMjMgKzE0NjcsNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX3NhbXBsZV9kYXRhX3NpemUoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4tLypcbi0gKiBDbGVhciBhbGwgYml0ZmllbGRzIGluIHRoZSBwZXJmX2JyYW5jaF9lbnRyeS5cbi0gKiBUaGUgdG8gYW5kIGZyb20gZmllbGRzIGFyZSBub3QgY2xlYXJlZCBiZWNhdXNlIHRoZXkgYXJlXG4tICogc3lzdGVtYXRpY2FsbHkgbW9kaWZpZWQgYnkgY2FsbGVyLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHMoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5ICpicilcbi17XG4tXHRici1cdTAwM2VtaXNwcmVkXHQ9IDA7XG4tXHRici1cdTAwM2VwcmVkaWN0ZWRcdD0gMDtcbi1cdGJyLVx1MDAzZWluX3R4XHQ9IDA7XG4tXHRici1cdTAwM2VhYm9ydFx0PSAwO1xuLVx0YnItXHUwMDNlY3ljbGVzXHQ9IDA7XG4tXHRici1cdTAwM2V0eXBlXHQ9IDA7XG4tXHRici1cdTAwM2VzcGVjXHQ9IFBFUkZfQlJfU1BFQ19OQTtcbi1cdGJyLVx1MDAzZXJlc2VydmVkXHQ9IDA7XG4tfVxuLVxuIGV4dGVybiB2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGVhZGVyLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5pbmRleCA0NjM4NTQ0MjA1ZjI4Li4zNGViMDVlOWQ3NGQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcbisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5AQCAtMzc1Nyw2ICszNzU3LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9jdHhfc2NoZWRfdGFza19jYihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBtdV9jdHgsIFx1MDAyNmN0eC1cdTAwM2VwbXVfY3R4X2xpc3QsIHBtdV9jdHhfZW50cnkpIHtcbiBcdFx0Y3BjID0gdGhpc19jcGMocG11X2N0eC1cdTAwM2VwbXUpO1xuIFxuK1x0XHRpZiAoY3BjLVx1MDAzZXRhc2tfZXBjICE9IHBtdV9jdHgpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdGlmIChjcGMtXHUwMDNlc2NoZWRfY2JfdXNhZ2UgXHUwMDI2XHUwMDI2IHBtdV9jdHgtXHUwMDNlcG11LVx1MDAzZXNjaGVkX3Rhc2spXG4gXHRcdFx0cG11X2N0eC1cdTAwM2VwbXUtXHUwMDNlc2NoZWRfdGFzayhwbXVfY3R4LCB0YXNrLCBzY2hlZF9pbik7XG4gXHR9XG5AQCAtMzkwNyw3ICszOTEwLDcgQEAgc3RhdGljIHZvaWQgX19wZXJmX3BtdV9zY2hlZF90YXNrKHN0cnVjdCBwZXJmX2NwdV9wbXVfY29udGV4dCAqY3BjLFxuIFx0cGVyZl9jdHhfbG9jayhjcHVjdHgsIGNwdWN0eC1cdTAwM2V0YXNrX2N0eCk7XG4gXHRwZXJmX3BtdV9kaXNhYmxlKHBtdSk7XG4gXG4tXHRwbXUtXHUwMDNlc2NoZWRfdGFzayhjcGMtXHUwMDNldGFza19lcGMsIHRhc2ssIHNjaGVkX2luKTtcbitcdHBtdS1cdTAwM2VzY2hlZF90YXNrKFx1MDAyNmNwYy1cdTAwM2VlcGMsIHRhc2ssIHNjaGVkX2luKTtcbiBcbiBcdHBlcmZfcG11X2VuYWJsZShwbXUpO1xuIFx0cGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KTtcbkBAIC0zOTE3LDE1ICszOTIwLDE3IEBAIHN0YXRpYyB2b2lkIHBlcmZfcG11X3NjaGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxuIFx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LFxuIFx0XHRcdFx0Ym9vbCBzY2hlZF9pbilcbiB7XG4tXHRzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gdGhpc19jcHVfcHRyKFx1MDAyNnBlcmZfY3B1X2NvbnRleHQpO1xuIFx0c3RydWN0IHBlcmZfY3B1X3BtdV9jb250ZXh0ICpjcGM7XG4gXG4tXHQvKiBjcHVjdHgtXHUwMDNldGFza19jdHggd2lsbCBiZSBoYW5kbGVkIGluIHBlcmZfZXZlbnRfY29udGV4dF9zY2hlZF9pbi9vdXQgKi9cbi1cdGlmIChwcmV2ID09IG5leHQgfHwgY3B1Y3R4LVx1MDAzZXRhc2tfY3R4KVxuK1x0aWYgKHByZXYgPT0gbmV4dClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShjcGMsIHRoaXNfY3B1X3B0cihcdTAwMjZzY2hlZF9jYl9saXN0KSwgc2NoZWRfY2JfZW50cnkpXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwYywgdGhpc19jcHVfcHRyKFx1MDAyNnNjaGVkX2NiX2xpc3QpLCBzY2hlZF9jYl9lbnRyeSkge1xuK1x0XHRpZiAoY3BjLVx1MDAzZXRhc2tfZXBjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRfX3BlcmZfcG11X3NjaGVkX3Rhc2soY3BjLCBzY2hlZF9pbiA/IG5leHQgOiBwcmV2LCBzY2hlZF9pbik7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjM1Ljg2OTM2ODU5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzAzMzc0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgUE1VIEJyYW5jaCBFbnRyeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgaW1wcm92aW5nIGhvdyBgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5YCBpcyBpbml0aWFsaXplZCBhY3Jvc3MgYSBoYW5kZnVsIG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXRzLiBJdCdzIHRvdWNoaW5nIGBhbWRfYnJzLmNgLCBgYW1kX2xici5jYCwgYGludGVsX2xici5jYCwgYGFybV9icmJlLmNgLCBhbmQgcHJvYmFibHkgYSBmZXcgb3RoZXJzLiBUaGUgY3VycmVudCBtZXRob2QgaW52b2x2ZXMgZmlyc3QgY2xlYXJpbmcgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgd2l0aCBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKGJyKWAgYW5kIHRoZW4gaW5kaXZpZHVhbGx5IGFzc2lnbmluZyB2YWx1ZXMgdG8gdGhlIGZpZWxkcy4gVGhhdCBzZWVtcyBhIGJpdC4uLiBjbHVua3ksIGRvZXNuJ3QgaXQ/XG5cblRoZSBwcm9wb3NlZCBjaGFuZ2UgaXMgdG8gdXRpbGl6ZSBhIGNvbXBvdW5kIGxpdGVyYWwgZm9yIGluaXRpYWxpemF0aW9uOlxuXG5gYGBjXG4qYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXtcbiAgICAuZnJvbSA9IC4uLixcbiAgICAudG8gPSAuLi4sXG4gICAgLy8gLi4uXG59O1xuYGBgXG5cblRoYXQgbG9va3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQsIGF2b2lkaW5nIHRoZSBuZWVkIGZvciBhIHNlcGFyYXRlIGNsZWFyIG9wZXJhdGlvbi4gQnV0LCB3YWl0IGEgc2Vjb25kLi4uIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgICpkb2VzKiBoYXZlIGJpdGZpZWxkcywgZG9lc24ndCBpdD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3IgcGxheXMgbmljZWx5IHdpdGggdGhvc2UgYml0ZmllbGRzLiBCZXN0IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgaW5hZHZlcnRlbnRseSBsb3NpbmcgZGF0YSBvciBtYWtpbmcgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLiBMZXQgbWUgZ28gZ3JhYiB0aGUgZGVmaW5pdGlvbiBhbmQgZ2l2ZSBpdCBhIGdvb2QgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjQwLjg5OTcwODk4NloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNDk0NzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaD0xMzM4PXVuaW9uIHBlcmZfbWVtX2RhdGFfc3JjIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMTQ5MC0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oOjE0OTE6c3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5IHtcXG5pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oLTE0OTItXFx0X191NjRcXHRmcm9tO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaD0xMzM4PXVuaW9uIHBlcmZfbWVtX2RhdGFfc3JjIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgtMTQ5MC0gKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oOjE0OTE6c3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5IHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oLTE0OTItXFx0X191NjRcXHRmcm9tO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jPTI3NT11NjQgKmdldF9pbnRyX3JlZ3Moc3RydWN0IGV2ZW50ICpldmVudCwgdm9pZCAqc2FtcGxlX2J1ZmYpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3BtdS9zYW1wbGluZ190ZXN0cy9taXNjLmMtMjk3LVxcdFxcdCAqIH07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvc2FtcGxpbmdfdGVzdHMvbWlzYy5jOjI5ODpcXHRcXHQgKiBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvcG11L3NhbXBsaW5nX3Rlc3RzL21pc2MuYy0yOTktXFx0XFx0ICogICAgIHU2NFxcdGZyb207XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA0OjQzLjcxNDY5NDMyNFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg5MzQzMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFBlcmYgRXZlbnQgU3RydWN0dXJlIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgcGVyZiBldmVudHMgYXJlIHN0cnVjdHVyZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaGAuIEkgcmVjYWxsIHRoYXQgZmlsZSBkZWZpbmVzIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBzeXN0ZW0sIHNvIGl0J3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gTGV0J3MgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxNDkxLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIHRoZXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGxheW91dCBvciBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIGV2ZW50IGRhdGEuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSBkZWVwZXIgZGl2ZSB0aGFuIGEgY3Vyc29yeSBnbGFuY2UsIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBmb3IgYSBjdXJyZW50IHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDo0Ny4wMDQwNDAzNDJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ4MDpcXHQgKiBwcmVkaWN0ZWQ6IGJyYW5jaCB0YXJnZXQgd2FzIHByZWRpY3RlZFxcbjE0ODE6XFx0ICpcXG4xNDgyOlxcdCAqIHN1cHBvcnQgZm9yIG1pc3ByZWQsIHByZWRpY3RlZCBpcyBvcHRpb25hbC4gSW4gY2FzZSBpdFxcbjE0ODM6XFx0ICogaXMgbm90IHN1cHBvcnRlZCBtaXNwcmVkID0gcHJlZGljdGVkID0gMC5cXG4xNDg0OlxcdCAqXFxuMTQ4NTpcXHQgKiAgICAgaW5fdHg6IHJ1bm5pbmcgaW4gYSBoYXJkd2FyZSB0cmFuc2FjdGlvblxcbjE0ODY6XFx0ICogICAgIGFib3J0OiBhYm9ydGluZyBhIGhhcmR3YXJlIHRyYW5zYWN0aW9uXFxuMTQ4NzpcXHQgKiAgICBjeWNsZXM6IGN5Y2xlcyBmcm9tIGxhc3QgYnJhbmNoIChvciAwIGlmIG5vdCBzdXBwb3J0ZWQpXFxuMTQ4ODpcXHQgKiAgICAgIHR5cGU6IGJyYW5jaCB0eXBlXFxuMTQ4OTpcXHQgKiAgICAgIHNwZWM6IGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvIChvciAwIGlmIG5vdCBzdXBwb3J0ZWQpXFxuMTQ5MDpcXHQgKi9cXG4xNDkxOlxcdHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7XFxuMTQ5MjpcXHRcXHRfX3U2NFxcdGZyb207XFxuMTQ5MzpcXHRcXHRfX3U2NFxcdHRvO1xcbjE0OTQ6XFx0XFx0X191NjRcXHRtaXNwcmVkICAgOiAgMSwgLyogdGFyZ2V0IG1pc3ByZWRpY3RlZCAqL1xcbjE0OTU6XFx0XFx0XFx0cHJlZGljdGVkIDogIDEsIC8qIHRhcmdldCBwcmVkaWN0ZWQgKi9cXG4xNDk2OlxcdFxcdFxcdGluX3R4ICAgICA6ICAxLCAvKiBpbiB0cmFuc2FjdGlvbiAqL1xcbjE0OTc6XFx0XFx0XFx0YWJvcnQgICAgIDogIDEsIC8qIHRyYW5zYWN0aW9uIGFib3J0ICovXFxuMTQ5ODpcXHRcXHRcXHRjeWNsZXMgICAgOiAxNiwgLyogY3ljbGUgY291bnQgdG8gbGFzdCBicmFuY2ggKi9cXG4xNDk5OlxcdFxcdFxcdHR5cGUgICAgICA6ICA0LCAvKiBicmFuY2ggdHlwZSAqL1xcbjE1MDA6XFx0XFx0XFx0c3BlYyAgICAgIDogIDIsIC8qIGJyYW5jaCBzcGVjdWxhdGlvbiBpbmZvICovXFxuMTUwMTpcXHRcXHRcXHRuZXdfdHlwZSAgOiAgNCwgLyogYWRkaXRpb25hbCBicmFuY2ggdHlwZSAqL1xcbjE1MDI6XFx0XFx0XFx0cHJpdiAgICAgIDogIDMsIC8qIHByaXZpbGVnZSBsZXZlbCAqL1xcbjE1MDM6XFx0XFx0XFx0cmVzZXJ2ZWQgIDogMzE7XFxuMTUwNDpcXHR9O1xcbjE1MDU6XFx0XFxuMTUwNjpcXHQvKiBTaXplIG9mIHVzZWQgaW5mbyBiaXRzIGluIHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSAqL1xcbjE1MDc6XFx0I2RlZmluZSBQRVJGX0JSQU5DSF9FTlRSWV9JTkZPX0JJVFNfTUFYXFx0XFx0MzNcXG4xNTA4OlxcdFxcbjE1MDk6XFx0dW5pb24gcGVyZl9zYW1wbGVfd2VpZ2h0IHtcXG4xNTEwOlxcdFxcdF9fdTY0XFx0ICAgICAgZnVsbDtcXG4xNTExOlxcdCNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRClcXG4xNTEyOlxcdFxcdHN0cnVjdCB7XFxuMTUxMzpcXHRcXHRcXHRfX3UzMiB2YXIxX2R3O1xcbjE1MTQ6XFx0XFx0XFx0X191MTYgdmFyMl93O1xcbjE1MTU6XFx0XFx0XFx0X191MTYgdmFyM193O1xcbjE1MTY6XFx0XFx0fTtcXG4xNTE3OlxcdCNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxcbjE1MTg6XFx0XFx0c3RydWN0IHtcXG4xNTE5OlxcdFxcdFxcdF9fdTE2IHZhcjNfdztcXG4xNTIwOlxcdFxcdFxcdF9fdTE2IHZhcjJfdztcXG4xNTIxOlxcdFxcdFxcdF9fdTMyIHZhcjFfZHc7XFxuMTUyMjpcXHRcXHR9O1xcbjE1MjM6XFx0I2Vsc2VcXG4xNTI0OlxcdCMgZXJyb3IgXFxcIlVua25vd24gZW5kaWFubmVzc1xcXCJcXG4xNTI1OlxcdCNlbmRpZlxcbjE1MjY6XFx0fTtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0I2VuZGlmIC8qIF9VQVBJX0xJTlVYX1BFUkZfRVZFTlRfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNDo0Ny4wMDQyMDQ5MDJaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNTA1MzY1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGVyZl9icmFuY2hfZW50cnlgIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgY2hhbmdpbmcgaG93IHRoZSBgcGVyZl9icmFuY2hfZW50cnlgIHN0cnVjdCBpcyBpbml0aWFsaXplZC4gIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBzaXplcyBhbmQgdGhlIGJpdGZpZWxkcy4gVGhlIHN0cnVjdCBjb250YWlucyBgZnJvbWAsIGB0b2AsIGFuZCBhIDY0LWJpdCBiaXRmaWVsZCDigJMgYSBnb29kIHN0YXJ0LiBJIGRpZCB0aGUgbWF0aCAxKzErMSsxKzE2KzQrMis0KzMrMzEgYW5kIGNvbmZpcm0gdGhhdCB0aGUgYml0ZmllbGQgKmRvZXMqIHN1bSB0byA2NCBiaXRzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgdGhlIGNvZGUgaW50ZW5kcy4gVGhhdCdzIGdvb2QuXG5cbk5vdywgdGhlIG9sZCBjb2RlIHVzZWQgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcyhicilgIGZvbGxvd2VkIGJ5IGFzc2lnbm1lbnRzIHRvIGBmcm9tYCBhbmQgYHRvYC4gIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBwZXJmX2NsZWFyX2JyYW5jaF9lbnRyeV9iaXRmaWVsZHNgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcGF0Y2ggaXMgKnJlbW92aW5nKiBpdCBhbmQgcmVwbGFjaW5nIHRoZSBjb2RlIHdpdGggYSBjb21wb3VuZCBsaXRlcmFsLiBCdXQgd2FpdCBhIG1pbnV0ZSwgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkc2AgaGFzIGEgY3JpdGljYWwgZmxhdy4gSXQgKmRvZXNuJ3QqIGNsZWFyIGBuZXdfdHlwZWAgb3IgYHByaXZgISAgVGhvc2UgZmllbGRzIHdlcmUgYWRkZWQgbGF0ZXIuIFNvLCBpZiBgYnJgIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYG5ld190eXBlYCBhbmQgYHByaXZgIHdvdWxkIGJlIGxlZnQgd2l0aCB3aGF0ZXZlciBnYXJiYWdlIHdhcyBpbiBtZW1vcnkuIFlpa2VzLiBUaGF0J3MgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhaywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc291cmNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGlmIHRob3NlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBsYXRlciB1c2VkLlxuXG5UaGUgcGF0Y2gncyByZXBsYWNlbWVudCBvZiBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzYCB3aXRoIHRoZSBjb21wb3VuZCBsaXRlcmFsIGFzc2lnbm1lbnQgbG9va3MgcHJvbWlzaW5nLiBJIGtub3cgdGhlIEMgc3RhbmRhcmQgZ3VhcmFudGVlcyB0aGF0IHdoZW4gYSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIGNvbXBvdW5kIGxpdGVyYWwsICphbnkqIGZpZWxkcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQgd291bGQgaW5jbHVkZSB0aGUgYG5ld190eXBlYCwgYHByaXZgLCBgcmVzZXJ2ZWRgLCBhbmQgYW55IHBhZGRpbmcgYml0cy4gSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgQzk5IHN0YW5kYXJkIGZvciB0aGUgZGV0YWlscy4gVGhlIHN0YW5kYXJkIHN0YXRlcywgdGhhdCwgZm9yIGEgc3RydWN0LCBhbnkgcGFydHMgbm90IGluaXRpYWxpemVkIGV4cGxpY2l0bHkgYXJlIGluaXRpYWxpemVkIGFzIGlmIHRoZSBzdHJ1Y3QgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgcGFkZGluZyBiaXRzIGFyZSB6ZXJvZWQgb3V0LlxuXG5CdXQgaXMgdGhlcmUgYW55IHBhZGRpbmcgaGVyZT8gYGZyb21gIGFuZCBgdG9gIGFyZSBgX191NjRgICg4IGJ5dGVzIGVhY2gpLiBUaGUgYml0ZmllbGRzIHN1bSB0byA4IGJ5dGVzLCBzbyB0aGUgdG90YWwgc2l6ZSBpcyAyNCBieXRlcywgYW5kIHRoZXJlJ3Mgbm8gcGFkZGluZy4gU28sIHRoZSBjb21wb3VuZCBsaXRlcmFsICpkZWZpbml0ZWx5KiBpbml0aWFsaXplcyBldmVyeXRoaW5nIGNvcnJlY3RseS5cblxuTXkgbWluZCB0aGVuIGZsYXNoZXMgYmFjayB0byB0aGUgb2xkIGNvZGUuIFNwZWNpZmljYWxseSwgaWYgYGJyYCB3YXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGBuZXdfdHlwZWAgYW5kIGBwcml2YCB3b3VsZCBhYnNvbHV0ZWx5IGJlIGxlZnQgdW5pbml0aWFsaXplZCEgVGhpcyBpcyBhIGJ1ZyB0aGF0IHRoZSBwYXRjaCAqZml4ZXMqLiBUaGUgcHJldmlvdXMgY29kZSBoYWQgYSByZWFsIHZ1bG5lcmFiaWxpdHkuXG5cblNvLCBkb2VzIHRoaXMgcGF0Y2ggKmludHJvZHVjZSogYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBkb2VzIGl0ICpmaXgqIGl0PyBPYnZpb3VzbHksIGl0IGZpeGVzIHRoZSBwcm9ibGVtIVxuXG5XYWl0LCB0aGlzIEtNU0FOIHJ1bGUuLi4gXCJTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzLi4uXCIgU2luY2UgdGhpcyBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcsIGl0IHNlZW1zIGxpa2UgS01TQU4gaXMgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIFdlJ3JlICpyZW1vdmluZyogYSBwb3RlbnRpYWwgbGVhaywgbm90IGFkZGluZyBvbmUuIEl0J3MgbGlrZSBmaXhpbmcgYSBidWc6IHlvdSB0eXBpY2FsbHkgZG9uJ3QgbmVlZCBmdXp6aW5nIHRvIGZpbmQgdGhlIGJ1ZyB5b3UganVzdCBmaXhlZC5cblxuSSBhbSByZS1leGFtaW5pbmcgdGhlIGNvZGUgbm93OlxuYGBgY1xuXHRcdGJyW25yXSA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpe1xuXHRcdFx0LmZyb21cdD0gZnJvbSxcblx0XHRcdC50b1x0PSB0byxcblx0XHR9O1xuXHRcdG5yKys7XG5gYGBcblRoaXMgaXMgZmluZS4gV2UgYXJlIGluaXRpYWxpemluZyBgYnJbbnJdYCBjb21wbGV0ZWx5LlxuXG5BbmQganVzdCB0byBiZSBzdXBlciBzdXJlIGFib3V0IHRoZSBvbGQgY29kZSwgYHNwZWNgIGluIHRoZSBvbGQgY29kZSAqd2FzKiBpbml0aWFsaXplZCB0byBgUEVSRl9CUl9TUEVDX05BYC4gVGhpcyB2YWx1ZSBpcyAqcHJvYmFibHkqIHplcm8uIExldCdzIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTowNTowNC4zNTQ3NDQ3MzlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDIxNjQ0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEVSRl9CUl9TUEVDX05BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MTU3PXN0YXRpYyBjb25zdCBpbnQgbGJyX3NwZWNfbWFwW1BFUkZfQlJfU1BFQ19NQVhdID0ge1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6MTU4OlxcdFBFUkZfQlJfU1BFQ19OQSxcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTE1OS1cXHRQRVJGX0JSX1NQRUNfV1JPTkdfUEFUSCxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg6Mjc1OlxcdFBFUkZfQlJfU1BFQ19OQVxcdFxcdFxcdFxcdD0gMCxcXHQvKiBOb3QgYXZhaWxhYmxlICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0yNzYtXFx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcXHRcXHRcXHQ9IDEsXFx0LyogU3BlY3VsYXRpdmUgYnV0IG9uIHdyb25nIHBhdGggKi9cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg9Mjc0PWVudW0ge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50Lmg6Mjc1OlxcdFBFUkZfQlJfU1BFQ19OQVxcdFxcdFxcdFxcdD0gMCxcXHQvKiBOb3QgYXZhaWxhYmxlICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaC0yNzYtXFx0UEVSRl9CUl9TUEVDX1dST05HX1BBVEhcXHRcXHRcXHQ9IDEsXFx0LyogU3BlY3VsYXRpdmUgYnV0IG9uIHdyb25nIHBhdGggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6MDU6MDcuMTk2OTE0MjUzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzgxOTMyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBJbnRyb2R1Y2VkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgY29tcG91bmQgbGl0ZXJhbCBpbml0aWFsaXplcyBgc3BlY2AgdG8gemVybywgd2hpY2ggaXMgYFBFUkZfQlJfU1BFQ19OQWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGVudGlyZSBwYXRjaCBmb3IgYW55IG90aGVyIGNoYW5nZXMuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhbmQgYHBlcmZfY3R4X3NjaGVkX3Rhc2tfY2JgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgZml4IHJlbGF0ZWQgdG8gY29udGV4dCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoZSBjb3JyZWN0IFBNVSBjb250ZXh0IGlzIHVzZWQgZHVyaW5nIHRhc2sgc2NoZWR1bGluZy4gSXQgbW9kaWZpZXMgdGhlIHBvaW50ZXIgcGFzc2VkIHRvIGBwbXUtXHUwMDNlc2NoZWRfdGFza2AsIHVzaW5nIHRoZSBlbWJlZGRlZCBgZXBjYCBpbiBgY3BjYC4gTm90aGluZyBoZXJlIHBvaW50cyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSwgbGlrZWx5IGEgYnVnIGZpeC5cblxuTm93LCBsZXQncyBhZGRyZXNzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiB0aGUgY29tcG91bmQgbGl0ZXJhbHMgdGhlbXNlbHZlcy4gTXkgY29uY2VybiB3YXMgYXJvdW5kIGhvdyB0aGUgY29tcGlsZXIgbWlnaHQgaGFuZGxlIHRoZXNlOiBgbWVtY3B5YCBmcm9tIHJlYWQtb25seSBkYXRhLCBjbGVhcmluZyBhbmQgdGhlbiBzZXR0aW5nLCBldGMuIFN0YW5kYXJkIEMgYmVoYXZpb3Igc2hvdWxkIHplcm8gdW51c2VkIGZpZWxkcy4gU3BlY2lmaWNhbGx5LCAgdGhlIGNvbXBpbGVyIGlzIHN1cHBvc2VkIHRvIHplcm8gaW5pdGlhbGl6ZSBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNldC4gVGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhlcmUgYXJlIHBhZGRpbmcgYml0cyBpbiB0aGUgYHN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeWAuIEkgY2hlY2tlZC4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgYml0cy4gVGhlIGJpdGZpZWxkcyBleGFjdGx5IGZpbGwgYSA2NC1iaXQgaW50ZWdlciwgYW5kIHRoZSBzdHJ1Y3QgaXMgYSBtdWx0aXBsZSBvZiA4LWJ5dGVzIGFuZCB3aXRob3V0IGFueSBvdGhlciBwYWRkaW5nLiBUaGUgY29tcGlsZXIgKm11c3QqIHplcm8gZXZlcnl0aGluZyBlbHNlLiBTbywgdGhlIGNvbXBvdW5kIGxpdGVyYWwgKndpbGwqIGluaXRpYWxpemUgYWxsIGZpZWxkcy5cblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBmb3IgYW55dGhpbmcgbGlrZSB0aGUgY29tcGlsZXIgc2V0dGluZyBiaXRmaWVsZHMgaW5kaXZpZHVhbGx5IGFuZCBsZWF2aW5nIG90aGVycyB1bmluaXRpYWxpemVkLiBIb3dldmVyLCBDIHN0YW5kYXJkIHJlcXVpcmVzIHRoYXQgYW55IGZpZWxkcyBub3QgZXhwbGljaXRseSBpbml0aWFsaXplZCBhcmUgemVyb2VkLiBUaGlzIGlzIHNhZmUsIGFuZCBJIGNvbmZpcm1lZCB0aGF0IEdDQyBhbmQgQ2xhbmcgYm90aCBkbyB0aGlzLlxuXG5JIHN0YXJ0ZWQgdG8gY2hlY2sgaWYgdGhlIHBhdGNoIG1pZ2h0ICpmaXgqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByYXRoZXIgdGhhbiBpbnRyb2R1Y2UuIEluIHdoaWNoIGNhc2UsIGl0IHdvdWxkIG5vdCByZXF1aXJlIEtNU0FOLCBiZWNhdXNlIHRoZSBjb2RlIGRvZXMgbm90IGFkZCBhIG5ldyByaXNrLiBJIGNvbnNpZGVyZWQgdGhhdCBpdCBtaWdodCAqZXhwb3NlKiBhbiBleGlzdGluZyByaXNrLCBieSBtYWtpbmcgaXQgcmVhY2hhYmxlIGluIGEgbmV3IHdheS4gQnV0IGl0IGRvZXNuJ3QuIEluc3RlYWQsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyAqcHJldmVudGluZyogdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYnkgc3dpdGNoaW5nIHRvIGNvbXBvdW5kIGxpdGVyYWxzLlxuXG5BIGNsb3NlciBsb29rIHJldmVhbGVkIHRoYXQgdGhlIHBhdGNoIGlzICpyZXBsYWNpbmcqIHBvdGVudGlhbGx5IGluY29tcGxldGUgaW5pdGlhbGl6YXRpb24gd2l0aCBjb21wb3VuZCBsaXRlcmFscy4gSXQncyBzYWZlISBJbiBmYWN0LCB0aGUgY29kZSBJJ20gbG9va2luZyBhdCAqZml4ZXMqIGFuIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlcnNwYWNlIGJlY2F1c2UgcHJldmlvdXMgY29kZSB3YXMgbm90IGZ1bGx5IHplcm9pbmcgY2VydGFpbiBmaWVsZHMuXG5cbkluIHRoaXMgY29udGV4dCwgSSBuZWVkIHRvIHJldmlzaXQgdGhlIHN0cnVjdHVyZSBpdHNlbGYsIGVzcGVjaWFsbHkgd2hldGhlciBpdCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJZiBpdCBpcywgdGhlbiB0aGUgaW5mb3JtYXRpb24gbGVhayBpcyByZWxldmFudCwgc28gSSBkb3VibGUgY2hlY2tlZCB0aGF0IGBwZXJmX2JyYW5jaF9lbnRyeWAgaXMgcGFydCBvZiB0aGUgcGVyZiBzYW1wbGUgZGF0YSwgd2hpY2ggaXMgd3JpdHRlbiB0byB0aGUgcmluZyBidWZmZXIgYW5kIGNhbiBiZSBhY2Nlc3NlZCBieSB1c2Vyc3BhY2UuXG5cblRoZSBjaGFuZ2UgaW4gYGludGVsX3BtdV9zdG9yZV9sYnJgIGlzIHJlYWxseSBqdXN0IGEgcmVmYWN0b3JpbmcuIEl0IHJlcGxhY2VzIG1hbnVhbCBhc3NpZ25tZW50IHdpdGggYSBjb21wb3VuZCBsaXRlcmFsLiBUaGUgY2hhbmdlIGlzIHNhZmUhXG5cbkxvb2tpbmcgYXQgdGhlIGBwZXJmX3BtdV9zY2hlZF90YXNrYCBhZ2FpbiwgSSBzZWUgdGhlIGNoZWNrLCBidXQgbm8gbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weWluZyB0byB1c2Vyc3BhY2UgaXMgYWRkZWQuIFNvIGl0J3Mgc3RpbGwgc2FmZS4gQW5kIHRoZSBvdGhlciBjaGFuZ2UgcGFzc2VzIGFuIGVtYmVkZGVkIHBvaW50ZXIgd2hpY2ggc2hvdWxkIGJlIGluaXRpYWxpemVkLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLlxuXG4qKkNvbmNsdXNpb246KiogVGhlIGNvbXBvdW5kIGxpdGVyYWwgYXBwcm9hY2ggKmZpeGVzKiBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLiBUaGlzIHBhdGNoIGRvZXMgbm90ICppbnRyb2R1Y2UqIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFsbCB1bnNwZWNpZmllZCBmaWVsZHMgYW5kIGJpdGZpZWxkcyBhcmUgY29ycmVjdGx5IHplcm8taW5pdGlhbGl6ZWQgZHVlIHRvIHRoZSBDIHN0YW5kYXJkIGd1YXJhbnRlZSBmb3IgY29tcG91bmQgbGl0ZXJhbHMuIFRoZSBsb2dpYyBjaGFuZ2VzIGFyZSB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MywiT3V0cHV0VG9rZW5zIjozMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjA1OjQ2Ljk3ODg1MTc1MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGFjcm9zcyBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTVUgZHJpdmVycyAoQU1ELCBJbnRlbCwgQVJNKS4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgcGVyZl9jbGVhcl9icmFuY2hfZW50cnlfYml0ZmllbGRzKClgIHRvIGNsZWFyIGJpdGZpZWxkcywgYnV0IHRoaXMgZnVuY3Rpb24gd2FzIG91dGRhdGVkIGFuZCBmYWlsZWQgdG8gY2xlYXIgbmV3ZXIgYml0ZmllbGRzIGxpa2UgYG5ld190eXBlYCBhbmQgYHByaXZgLCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBwZXJmIHJpbmcgYnVmZmVyLlxcblxcblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlcGxhY2luZyB0aGUgbWFudWFsIGNsZWFyaW5nIHdpdGggY29tcG91bmQgbGl0ZXJhbCBhc3NpZ25tZW50cyAoZS5nLiwgYCpiciA9IChzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkpeyAuLi4gfTtgKS4gQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhIGNvbXBvdW5kIGxpdGVyYWwgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIGBzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnlgIGlzIGV4YWN0bHkgMjQgYnl0ZXMgd2l0aCBubyBwYWRkaW5nICh0d28gNjQtYml0IGludGVnZXJzIGFuZCBleGFjdGx5IDY0IGJpdHMgb2YgYml0ZmllbGRzKSwgc28gdGhlIGNvbXBvdW5kIGxpdGVyYWwgZ3VhcmFudGVlcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC5cXG5cXG5UaGUgb3RoZXIgY2hhbmdlcyBpbiBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGFyZSBsb2dpYyBmaXhlcyBmb3IgUE1VIGNvbnRleHQgc2NoZWR1bGluZyAoYHNjaGVkX3Rhc2tgIGNhbGxiYWNrcykgYW5kIGRvIG5vdCBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlLlxcblxcblNpbmNlIHRoaXMgcGF0Y2ggKnJlc29sdmVzKiBhbiBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG9uZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5YCBhY3Jvc3Mgc2V2ZXJhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1VIGRyaXZlcnMgKEFNRCwgSW50ZWwsIEFSTSkuIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYHBlcmZfY2xlYXJfYnJhbmNoX2VudHJ5X2JpdGZpZWxkcygpYCB0byBjbGVhciBiaXRmaWVsZHMsIGJ1dCB0aGlzIGZ1bmN0aW9uIHdhcyBvdXRkYXRlZCBhbmQgZmFpbGVkIHRvIGNsZWFyIG5ld2VyIGJpdGZpZWxkcyBsaWtlIGBuZXdfdHlwZWAgYW5kIGBwcml2YCwgcG90ZW50aWFsbHkgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSB0aGUgcGVyZiByaW5nIGJ1ZmZlci5cXG5cXG5UaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXBsYWNpbmcgdGhlIG1hbnVhbCBjbGVhcmluZyB3aXRoIGNvbXBvdW5kIGxpdGVyYWwgYXNzaWdubWVudHMgKGUuZy4sIGAqYnIgPSAoc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5KXsgLi4uIH07YCkuIEFjY29yZGluZyB0byB0aGUgQyBzdGFuZGFyZCwgYW55IGZpZWxkcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gYSBjb21wb3VuZCBsaXRlcmFsIGFyZSBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5YCBpcyBleGFjdGx5IDI0IGJ5dGVzIHdpdGggbm8gcGFkZGluZyAodHdvIDY0LWJpdCBpbnRlZ2VycyBhbmQgZXhhY3RseSA2NCBiaXRzIG9mIGJpdGZpZWxkcyksIHNvIHRoZSBjb21wb3VuZCBsaXRlcmFsIGd1YXJhbnRlZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuXFxuXFxuVGhlIG90aGVyIGNoYW5nZXMgaW4gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhcmUgbG9naWMgZml4ZXMgZm9yIFBNVSBjb250ZXh0IHNjaGVkdWxpbmcgKGBzY2hlZF90YXNrYCBjYWxsYmFja3MpIGFuZCBkbyBub3QgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb3B5aW5nIHRvIHVzZXJzcGFjZS5cXG5cXG5TaW5jZSB0aGlzIHBhdGNoICpyZXNvbHZlcyogYW4gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBvbmUsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[1] Phase: Succeeded StartedAt: 2026-08-10 15:05:59 +0000 UTC FinishedAt: 2026-08-10 15:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 15:05:59 +0000 UTC FinishedAt: 2026-08-10 15:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2] Phase: Succeeded StartedAt: 2026-08-10 15:05:59 +0000 UTC FinishedAt: 2026-08-10 18:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:05:59 +0000 UTC FinishedAt: 2026-08-10 18:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:05:59 +0000 UTC FinishedAt: 2026-08-10 15:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:05:59 +0000 UTC FinishedAt: 2026-08-10 15:06:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-workflowr5d57/series-workflowr5d57-convert-artifact-1066164941/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:06:09 +0000 UTC FinishedAt: 2026-08-10 15:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:06:09 +0000 UTC FinishedAt: 2026-08-10 15:23:37 +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:*4085484d-8a11-4dfa-80d3-161d9687838a,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-workflowr5d57/series-workflowr5d57-convert-artifact-1066164941/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": "fd63c4ef-4ca6-4fb6-8a01-d83679291c1c", "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-workflowr5d57/series-workflowr5d57-build-action-3246433091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:06:09 +0000 UTC FinishedAt: 2026-08-10 15:23:27 +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:*4085484d-8a11-4dfa-80d3-161d9687838a,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-workflowr5d57/series-workflowr5d57-convert-artifact-1066164941/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": "fd63c4ef-4ca6-4fb6-8a01-d83679291c1c", "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-workflowr5d57/series-workflowr5d57-build-action-3246433091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:23:37 +0000 UTC FinishedAt: 2026-08-10 15:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:23:37 +0000 UTC FinishedAt: 2026-08-10 15:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:23:37 +0000 UTC FinishedAt: 2026-08-10 15:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:23:37 +0000 UTC FinishedAt: 2026-08-10 15:23:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-workflowr5d57/series-workflowr5d57-convert-artifact-1844099368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:23:47 +0000 UTC FinishedAt: 2026-08-10 15:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:23:47 +0000 UTC FinishedAt: 2026-08-10 15:25:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd63c4ef-4ca6-4fb6-8a01-d83679291c1c,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-workflowr5d57/series-workflowr5d57-build-action-3246433091/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-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:25:25 +0000 UTC FinishedAt: 2026-08-10 15:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:25:25 +0000 UTC FinishedAt: 2026-08-10 15:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:25:25 +0000 UTC FinishedAt: 2026-08-10 15:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:25:25 +0000 UTC FinishedAt: 2026-08-10 15:47:10 +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:*4085484d-8a11-4dfa-80d3-161d9687838a,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-workflowr5d57/series-workflowr5d57-convert-artifact-1844099368/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": "9897a5a7-271b-4260-a023-2c0780370967", "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-workflowr5d57/series-workflowr5d57-build-action-489928404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:25:25 +0000 UTC FinishedAt: 2026-08-10 15:46:59 +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:*4085484d-8a11-4dfa-80d3-161d9687838a,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-workflowr5d57/series-workflowr5d57-convert-artifact-1844099368/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": "9897a5a7-271b-4260-a023-2c0780370967", "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-workflowr5d57/series-workflowr5d57-build-action-489928404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:47:10 +0000 UTC FinishedAt: 2026-08-10 15:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:47:10 +0000 UTC FinishedAt: 2026-08-10 15:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:47:10 +0000 UTC FinishedAt: 2026-08-10 15:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:47:10 +0000 UTC FinishedAt: 2026-08-10 15:48:45 +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:*9897a5a7-271b-4260-a023-2c0780370967,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-workflowr5d57/series-workflowr5d57-build-action-489928404/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-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:05 +0000 UTC FinishedAt: 2026-08-10 18:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:05 +0000 UTC FinishedAt: 2026-08-10 18:50:53 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fd63c4ef-4ca6-4fb6-8a01-d83679291c1c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9897a5a7-271b-4260-a023-2c0780370967,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-workflowr5d57/series-workflowr5d57-build-action-3246433091/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-workflowr5d57/series-workflowr5d57-build-action-489928404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:05 +0000 UTC FinishedAt: 2026-08-10 15:49:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:05 +0000 UTC FinishedAt: 2026-08-10 15:49:09 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr5d57/series-workflowr5d57-convert-artifact-2332269921/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:05 +0000 UTC FinishedAt: 2026-08-10 15:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:05 +0000 UTC FinishedAt: 2026-08-10 15:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:05 +0000 UTC FinishedAt: 2026-08-10 15:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:20 +0000 UTC FinishedAt: 2026-08-10 18:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr5d57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["amd_brs_drain","amd_pmu_lbr_read","intel_pmu_lbr_read_32","intel_pmu_lbr_read_64","intel_pmu_store_pebs_lbrs","brbe_read_filtered_entries"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"36c8b02c3fe9ba56d6f11ec055cd879bc49871f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","CPU_SUP_AMD","PERF_EVENTS_AMD_BRS","CPU_SUP_INTEL","ARM64_BRBE","ARM_PMUV3"],"series_id":"edcd87bb-4acf-41ae-8517-44218e0c4a91","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-08-10 15:49:20 +0000 UTC FinishedAt: 2026-08-10 18:50:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd63c4ef-4ca6-4fb6-8a01-d83679291c1c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9897a5a7-271b-4260-a023-2c0780370967,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-workflowr5d57/series-workflowr5d57-build-action-3246433091/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-workflowr5d57/series-workflowr5d57-build-action-489928404/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-workflowr5d57/series-workflowr5d57-convert-artifact-2332269921/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,}