Name: series-workflowrgfvh Phase: Succeeded StartedAt: 2026-06-21 01:33:17 +0000 UTC FinishedAt: 2026-06-21 05:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[0] Phase: Succeeded StartedAt: 2026-06-21 01:33:17 +0000 UTC FinishedAt: 2026-06-21 01:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[0].run-triage Phase: Succeeded StartedAt: 2026-06-21 01:33:17 +0000 UTC FinishedAt: 2026-06-21 01:47:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_URING_ZCRX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_URING_ZCRX" ], "series_id": "d0755474-b9e5-4499-91b2-271c457331d2" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_pin_pages", "io_region_pin_pages", "io_sqe_buffer_register", "io_create_region", "io_import_umem" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HX1pDUlgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fcmVnaW9uX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2NyZWF0ZV9yZWdpb24mIzM0OywKICAgICYjMzQ7aW9faW1wb3J0X3VtZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgcmVqZWN0IHZhbGlkIGxhcmdlIGFsbG9jYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTE3ZTEyMWViODIwZTMxNjkwODcwMzJjNzE2ZGI1Njk1NWUyYzBjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDIxIDAxOjQ1OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDRmOWI0MzkzMTljNDY2Li5kYTFmNmM1ZDA3ZjhhMCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL21lbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9tZW1tYXAuY1xuQEAgLTUzLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbiBcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLVx0aWYgKFdBUk5fT05fT05DRShucl9wYWdlcyBcdTAwM2UgSU5UX01BWCkpXG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucl9wYWdlcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19VUklOR19aQ1JYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lvbl9waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX2ltcG9ydF91bWVtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gaW9fcGluX3BhZ2VzKCkgYnkgZW5zdXJpbmcgdGhhdCBucl9wYWdlcyBkb2VzIG5vdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZSB0aGF0IGNhbiBiZSBzYWZlbHkgYWxsb2NhdGVkIGZvciB0aGUgcGFnZSBwb2ludGVyIGFycmF5LiBUaGlzIGlzIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGJ1ZmZlciByZWdpc3RyYXRpb24gYW5kIG1lbW9yeSByZWdpb24gY3JlYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGFsbG9jYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZSBvdmVyZmxvdyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IHJlamVjdCB2YWxpZCBsYXJnZSBhbGxvY2F0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTE3ZTEyMWViODIwZTMxNjkwODcwMzJjNzE2ZGI1Njk1NWUyYzBjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVuIDIxIDAxOjQ1OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbWVtbWFwLmMgYi9pb191cmluZy9tZW1tYXAuYwppbmRleCA0ZjliNDM5MzE5YzQ2Ni4uZGExZjZjNWQwN2Y4YTAgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL21lbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL21lbW1hcC5jCkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpCiAJbnJfcGFnZXMgPSBlbmQgLSBzdGFydDsKIAlpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCWlmIChXQVJOX09OX09OQ0UobnJfcGFnZXMgJmd0OyBJTlRfTUFYKSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnJfcGFnZXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gaW9fdXJpbmcvbWVtbWFwLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9tZW1tYXAuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBpb19waW5fcGFnZXNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBjaGVjayBvbiBgbnJfcGFnZXNgLiBPcmlnaW5hbGx5LCBpdCB3YXMganVzdCBhIHdhcm5pbmcgaWYgYG5yX3BhZ2VzYCBleGNlZWRlZCBgSU5UX01BWGAuIE5vdywgaXQmIzM5O3MgY2hlY2tpbmcgYWdhaW5zdCBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAuIEhtbSwgaW50ZXJlc3RpbmcuCgpUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGlzIGlzIHByZXZlbnRpbmcgYW4gaW50ZWdlciBvdmVyZmxvdywgcGFydGljdWxhcmx5IHdoZW4gYWxsb2NhdGluZyB0aGUgYHBhZ2VzYCBhcnJheSB1c2luZyBzb21ldGhpbmcgbGlrZSBga3ZtYWxsb2Nfb2Jqc2Agb3IgcGFzc2luZyBgbnJfcGFnZXNgIHRvIGEgZnVuY3Rpb24gZXhwZWN0aW5nIGFuIGBpbnRgLiBCdXQgd2FpdC4uLiB3YXNuJiMzOTt0IGBrdm1hbGxvY19vYmpzYCBzdXBwb3NlZCB0byB0YWtlIGEgYHNpemVfdGA/IE1heWJlIGl0JiMzOTtzIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHRoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGluIGBucGFnZXNgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBpb19waW5fcGFnZXNgIGZ1bmN0aW9uIGluIGBpb191cmluZy9tZW1tYXAuY2AgdG8gY29uZmlybSB0aGUgcGFyYW1ldGVyIHR5cGVzIGFuZCBob3cgYG5yX3BhZ2VzYCBpcyBhY3R1YWxseSB1c2VkLiBOZWVkIHRvIGJlIHN1cmUgb2YgdGhlIHByZWNpc2UgY29udGV4dCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxuICA0MTpcdHtcbiAgNDI6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgbnJfcGFnZXM7XG4gIDQzOlx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xuICA0NDpcdFx0aW50IHJldDtcbiAgNDU6XHRcbiAgNDY6XHRcdGlmIChjaGVja19hZGRfb3ZlcmZsb3codWFkZHIsIGxlbiwgXHUwMDI2ZW5kKSlcbiAgNDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gIDQ4Olx0XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGVuZCwgUEFHRV9TSVpFIC0gMSwgXHUwMDI2ZW5kKSlcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gIDUwOlx0XG4gIDUxOlx0XHRlbmQgPSBlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gIDUyOlx0XHRzdGFydCA9IHVhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuICA1MzpcdFx0bnJfcGFnZXMgPSBlbmQgLSBzdGFydDtcbiAgNTQ6XHRcdGlmIChXQVJOX09OX09OQ0UoIW5yX3BhZ2VzKSlcbiAgNTU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gIDU2Olx0XHRpZiAobnJfcGFnZXMgXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXG4gIDU3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuICA1ODpcdFxuICA1OTpcdFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuICA2MDpcdFx0aWYgKCFwYWdlcylcbiAgNjE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gIDYyOlx0XG4gIDYzOlx0XHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG4gIDY0Olx0XHRcdFx0XHRcdHBhZ2VzKTtcbiAgNjU6XHRcdC8qIHN1Y2Nlc3MsIG1hcHBlZCBhbGwgcGFnZXMgKi9cbiAgNjY6XHRcdGlmIChyZXQgPT0gbnJfcGFnZXMpIHtcbiAgNjc6XHRcdFx0Km5wYWdlcyA9IG5yX3BhZ2VzO1xuICA2ODpcdFx0XHRyZXR1cm4gcGFnZXM7XG4gIDY5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSwgc3BlY2lmaWNhbGx5IHdpdGggYG5yX3BhZ2VzYC4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZWNvbWUgYSBwcm9ibGVtIGlmIGBucl9wYWdlc2AgZW5kcyB1cCBiZWluZyBzaWduaWZpY2FudGx5IGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopYC4gVGhhdCYjMzk7cyB0aGUgY2xhc3NpYyBzY2VuYXJpby4gSWYgdGhhdCBoYXBwZW5zLCBga3ZtYWxsb2Nfb2Jqc2AgZ2V0cyBjYWxsZWQgd2l0aCBhIHZhbHVlIHRoYXQgaGFzIHdyYXBwZWQgYXJvdW5kIGR1ZSB0byB0aGUgb3ZlcmZsb3cuICBIb2xkIG9uLCBga3ZtYWxsb2Nfb2Jqc2AgdGFrZXMgYHNpemVfdGAgZm9yIGl0cyBhbGxvY2F0aW9uIHNpemUsIHNvIGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93LCBpdCB3b3VsZCBiZSBhIHByb2JsZW0uIE5vdyBJJiMzOTttIHRoaW5raW5nLCB3YWl0IGEgbWludXRlLCBga3ZtYWxsb2Nfb2Jqc2AgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBoZXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJIG5lZWQgdG8ga25vdyBpZiBga3ZtYWxsb2Nfb2Jqc2AgaXMgYSBtYWNybyBvciBmdW5jdGlvbi4gQWN0dWFsbHksIGBucl9wYWdlc2AgaXMgYHVuc2lnbmVkIGxvbmdgLCBzbyB0aGF0IHBvdGVudGlhbGx5IGV4cGFuZHMgdGhlIHByb2JsZW0gc3BhY2UsIGJ1dCB0aGUgZGl2aXNpb24gcmVzdWx0LCBgSU5UX01BWCAvIDhgLCB3b3VsZCBiZSB0aGUgcG9pbnQgb2YgdGhlIG92ZXJmbG93LgoKSSYjMzk7bSBwcmV0dHkgc3VyZSBga3ZtYWxsb2Nfb2Jqc2AgbWlnaHQganVzdCBiZSBhIG1hY3JvIHdyYXBwaW5nIGFyb3VuZCBga3ZtYWxsb2NfYXJyYXlgLiAgVGhhdCYjMzk7cyBteSBodW5jaC4gVGltZSB0byBjb25maXJtIG15IGh5cG90aGVzaXMuIExldCYjMzk7cyBzZWUgaG93IGBpb19waW5fcGFnZXNgIGlzIHVzaW5nIGl0IGFuZCBmb2xsb3cgdGhlIGNhbGwgc3RhY2suIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gdGhlIGNhbGxlcnMgdG8gc2VlIGlmIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3Bpbl9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWNjdy5yc3Q9MTEzPWRldmljZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0LTE0Mi0gIG9mIHRoZSBpb3ZhXHUwMDNjLVx1MDAzZXZhZGRyIG1hcHBpbmdzIGluIHRoaXMgb3BlcmF0aW9uLiBBbmQgdGhleSBleHBvcnQgYVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0OjE0MzogIHZmaW9fcGluX3BhZ2VzIGFuZCBhIHZmaW9fdW5waW5fcGFnZXMgaW50ZXJmYWNlcyBmcm9tIHRoZSB2ZmlvIGlvbW11XG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWNjdy5yc3QtMTQ0LSAgYmFja2VuZCBmb3IgdGhlIHBoeXNpY2FsIGRldmljZXMgdG8gcGluIGFuZCB1bnBpbiBwYWdlcyBieSBkZW1hbmQuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdD0yNTM9ZHJpdmVyOjpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QtMjU0LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdDoyNTU6XHRpbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QtMjU2LVx0XHRcdFx0ICBpbnQgbnBhZ2UsIGludCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYz0xMzc9c3RhdGljIGludCBndnRfcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHVuc2lnbmVkIGxvbmcgZ2ZuLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTE1Mi1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjE1MzpcdFx0cmV0ID0gdmZpb19waW5fcGFnZXMoXHUwMDI2dmdwdS1cdTAwM2V2ZmlvX2RldmljZSwgY3VyX2lvdmEsIDEsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xNTQtXHRcdFx0XHQgICAgIElPTU1VX1JFQUQgfCBJT01NVV9XUklURSwgXHUwMDI2Y3VyX3BhZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTU1LVx0XHRpZiAocmV0ICE9IDEpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjE1NjpcdFx0XHRndnRfdmdwdV9lcnIoXCYjMzQ7dmZpb19waW5fcGFnZXMgZmFpbGVkIGZvciBpb3ZhICVwYWQsIHJldCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTE1Ny1cdFx0XHRcdCAgICAgXHUwMDI2Y3VyX2lvdmEsIHJldCk7XG4tLVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jPTkxPXN0YXRpYyB2b2lkIHBhZ2VfYXJyYXlfdW5waW4oc3RydWN0IHBhZ2VfYXJyYXkgKnBhLFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfY3AuYy0xMjUtICogUmVxdWVzdHMgdG8gcGluIFwmIzM0O2FsaWduZWRcJiMzNDsgcGFnZXMgY2FuIGJlIGNvYWxlc2NlZCBpbnRvIGEgc2luZ2xlXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmM6MTI2OiAqIHZmaW9fcGluX3BhZ2VzIHJlcXVlc3QgZm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3ksIGJhc2VkIG9uIHRoZVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTEyNy0gKiBleHBlY3RhdGlvbiBvZiA0SyBwYWdlIHJlcXVlc3RzLiBVbmFsaWduZWQgcmVxdWVzdHMgYXJlIHByb2JhYmx5XG4tLVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jPTEzMT1zdGF0aWMgaW50IHBhZ2VfYXJyYXlfcGluKHN0cnVjdCBwYWdlX2FycmF5ICpwYSwgc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCBib29sIHVuYWxpZ25lZClcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmMtMTQ2LVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jOjE0NzpcdFx0cmV0ID0gdmZpb19waW5fcGFnZXModmRldiwgKmZpcnN0LCBucGFnZSxcbmRyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfY3AuYy0xNDgtXHRcdFx0XHQgICAgIElPTU1VX1JFQUQgfCBJT01NVV9XUklURSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MzUxPXN0YXRpYyBpbnQgdmZpb19hcF92YWxpZGF0ZV9uaWIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBkbWFfYWRkcl90ICpuaWIpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM2Ny0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBOSUIgcGFnZSwgd2hpY2ggaGFzIGJlZW4gcGlubmVkIHdpdGhcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNjg6ICogdmZpb19waW5fcGFnZXMoKSwgaXMgYSBzaGFyZWQgcGFnZSBiZWxvbmdpbmcgdG8gYSBzZWN1cmUgZ3Vlc3QuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzY5LSAqXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM3MS0gKiAoaS5lLiBpZiB0aGUgTklCIGJlbG9uZ3MgdG8gYSBzZWN1cmUgZ3Vlc3QgYW5kIGlzIHNoYXJlZCksIHRoZW4gMFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM3MjogKiAoc3VjY2VzcykgaXMgcmV0dXJuZWQuIElmIHRoZSBOSUIgd2FzIG5vdCBzaGFyZWQsIHZmaW9fcGluX3BhZ2VzKCkgaGFkXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzczLSAqIGV4cG9ydGVkIGl0IGFuZCBub3cgaXQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBzZWN1cmUgZ3Vlc3QgYW55bW9yZS4gSW5cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzc2LSAqIENvbnRleHQ6IHRoZSBOSUIgKGF0IHBoeXNpY2FsIGFkZHJlc3MgQGFkZHIpIGhhcyB0byBiZSBwaW5uZWQgd2l0aFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM3NzogKlx0ICAgIHZmaW9fcGluX3BhZ2VzKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNzgtICpcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MzgxPXN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zODQtXHQgKiBUaGUgbmliIGhhcyB0byBiZSBsb2NhdGVkIGluIHNoYXJlZCBzdG9yYWdlIHNpbmNlIGd1ZXN0IGFuZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM4NTpcdCAqIGhvc3QgYWNjZXNzIGl0LiB2ZmlvX3Bpbl9wYWdlcygpIHdpbGwgZG8gYSBwaW4gc2hhcmVkIGFuZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM4Ni1cdCAqIGlmIHRoYXQgZmFpbHMgKHBvc3NpYmx5IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGEgc2hhcmVkIHBhZ2UpIGl0XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTQwOC0gKiBzdGF0dXMucmVzcG9uc2VfY29kZSBtYXkgYmUgc2V0IHRvIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpbiBjYXNlIHRoZVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjQwOTogKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00MTAtICpcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNDM5LVx0LyogVGhlIHBpbiB3aWxsIHByb2JhYmx5IGJlIHN1Y2Nlc3NmdWwgZXZlbiBpZiB0aGUgTklCIHdhcyBub3Qgc2hhcmVkICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NDQwOlx0cmV0ID0gdmZpb19waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNDQxLVx0XHRcdCAgICAgSU9NTVVfUkVBRCB8IElPTU1VX1dSSVRFLCBcdTAwMjZoX3BhZ2UpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDUtXHRkZWZhdWx0OlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjQ0NjpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCxcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDctXHRcdFx0XHQgXCYjMzQ7bmliPSVwYWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG4tLVxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYz0yMjU9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19pb21tdWZkX3BoeXNpY2FsX3Bhc2lkX2RldGFjaF9pb2FzKTtcbi0tXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jOjIyOTogKiBcJiMzNDttZGV2IHBhdGhcJiMzNDsgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xuZHJpdmVycy92ZmlvL2lvbW11ZmQuYy0yMzAtICogb3BzIHNldCBzaG91bGQgY2FsbCB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldigpLiBEcml2ZXJzIHRoYXQgZG9cbmRyaXZlcnMvdmZpby9pb21tdWZkLmM6MjMxOiAqIG5vdCBjYWxsIHZmaW9fcGluX3BhZ2VzKCkvdmZpb19kbWFfcncoKSBoYXZlIG5vIG5lZWQgdG8gcHJvdmlkZSBkbWFfdW5tYXAuXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIzMi0gKi9cbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTYzOD1zdGF0aWMgbG9uZyB2cGZuX3BhZ2VzKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjc0LSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo2NzU6c3RhdGljIGxvbmcgdmZpb19waW5fcGFnZXNfcmVtb3RlKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzYtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnBhZ2UsIHVuc2lnbmVkIGxvbmcgKnBmbl9iYXNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9ODkzPXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9waW5fcGFnZXModm9pZCAqaW9tbXVfZGF0YSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTkyMS1cdGlmIChXQVJOX09OQ0UoaW9tbXUtXHUwMDNldmFkZHJfaW52YWxpZF9jb3VudCxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6OTIyOlx0XHQgICAgICBcJiMzNDt2ZmlvX3Bpbl9wYWdlcyBub3QgYWxsb3dlZCB3aXRoIFZGSU9fVVBEQVRFX1ZBRERSXFxuXCYjMzQ7KSkge1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy05MjMtXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE1ODA9c3RhdGljIGludCB2ZmlvX3Bpbl9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwgc3RydWN0IHZmaW9fZG1hICpkbWEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk0LVx0XHQvKiBQaW4gYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTk1Olx0XHRucGFnZSA9IHZmaW9fcGluX3BhZ2VzX3JlbW90ZShkbWEsIHZhZGRyICYjNDM7IGRtYS1cdTAwM2VzaXplLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk2LVx0XHRcdFx0XHQgICAgICBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBcdTAwMjZwZm4sIGxpbWl0LFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MTgwMz1zdGF0aWMgaW50IHZmaW9faW9tbXVfcmVwbGF5KHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE4NjItXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE4NjM6XHRcdFx0XHRucGFnZSA9IHZmaW9fcGluX3BhZ2VzX3JlbW90ZShkbWEsIHZhZGRyLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xODY0LVx0XHRcdFx0XHRcdFx0ICAgICAgbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTY3NT1FWFBPUlRfU1lNQk9MKHZmaW9fc2V0X2lycXNfdmFsaWRhdGVfYW5kX3ByZXBhcmUpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xNjkwLSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjE2OTE6aW50IHZmaW9fcGluX3BhZ2VzKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBkbWFfYWRkcl90IGlvdmEsXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTY5Mi1cdFx0ICAgaW50IG5wYWdlLCBpbnQgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTcyMi19XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTcyMzpFWFBPUlRfU1lNQk9MKHZmaW9fcGluX3BhZ2VzKTtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xNzI0LVxuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTM4MD12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oLTM4My1cbmluY2x1ZGUvbGludXgvdmZpby5oOjM4NDppbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcbmluY2x1ZGUvbGludXgvdmZpby5oLTM4NS1cdFx0ICAgaW50IG5wYWdlLCBpbnQgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcyk7XG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTg9c3RhdGljIGJvb2wgaW9fbWVtX2FsbG9jX2NvbXBvdW5kKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcyxcbi0tXG5pb191cmluZy9tZW1tYXAuYy0zOS1cbmlvX3VyaW5nL21lbW1hcC5jOjQwOnN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbmlvX3VyaW5nL21lbW1hcC5jLTQxLXtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0xMzQ9c3RhdGljIGludCBpb19yZWdpb25fcGluX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0xNDAtXG5pb191cmluZy9tZW1tYXAuYzoxNDE6XHRwYWdlcyA9IGlvX3Bpbl9wYWdlcyhyZWctXHUwMDNldXNlcl9hZGRyLCBzaXplLCBcdTAwMjZucl9wYWdlcyk7XG5pb191cmluZy9tZW1tYXAuYy0xNDItXHRpZiAoSVNfRVJSKHBhZ2VzKSlcbi0tXG5pb191cmluZy9tZW1tYXAuaC05LVxuaW9fdXJpbmcvbWVtbWFwLmg6MTA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKTtcbmlvX3VyaW5nL21lbW1hcC5oLTExLVxuLS1cbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcnNyYy5jLTg4My1cdHJldCA9IC1FTk9NRU07XG5pb191cmluZy9yc3JjLmM6ODg0Olx0cGFnZXMgPSBpb19waW5fcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGlvdi1cdTAwM2Vpb3ZfYmFzZSwgaW92LVx1MDAzZWlvdl9sZW4sXG5pb191cmluZy9yc3JjLmMtODg1LVx0XHRcdFx0XHUwMDI2bnJfcGFnZXMpO1xuLS1cbmlvX3VyaW5nL3pjcnguYz0yMDI9c3RhdGljIGludCBpb19pbXBvcnRfdW1lbShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcbi0tXG5pb191cmluZy96Y3J4LmMtMjEzLVx0XHRyZXR1cm4gLUVGQVVMVDtcbmlvX3VyaW5nL3pjcnguYzoyMTQ6XHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZylhcmVhX3JlZy1cdTAwM2VhZGRyLCBhcmVhX3JlZy1cdTAwM2VsZW4sXG5pb191cmluZy96Y3J4LmMtMjE1LVx0XHRcdFx0ICAgXHUwMDI2bnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgTWVtb3J5IEFsbG9jYXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGlvX3Bpbl9wYWdlc2AuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBhIGZldyBrZXkgcGxhY2VzIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW06IGBpb19yZWdpb25fcGluX3BhZ2VzYCwgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLCBhbmQgYGlvX2ltcG9ydF91bWVtYC4gQ2xlYXJseSwgdGhpcyBpcyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIGltcG9ydGFudC4KClRoZSBjaGFuZ2UgaXRzZWxmIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgYW4gaW50ZWdlciBvdmVyZmxvdy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1Nob3VsZCB3ZSBmdXp6IHRoaXM/JiMzNDsgQWJzb2x1dGVseSwgeWVzLiBBbnkgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIGlvX3VyaW5nIG5lZWRzIHRob3JvdWdoIHRlc3RpbmcuIFdlIHdhbnQgdG8gZW5zdXJlIHRoZSBvdmVyZmxvdyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgdGhhdCBtaWdodCBicmVhayB2YWxpZCBsYXJnZSBhbGxvY2F0aW9ucy4gQWx0aG91Z2gsIGBJTlRfTUFYIC8gOGAgZXF1YXRlcyB0byBhcm91bmQgMjU2TSBwYWdlcywgd2hpY2ggYW1vdW50cyB0byAxVEIgb2YgbWVtb3J5LiBUaGlzIHNob3VsZCBwcmV2ZW50IHRoZSBicmVha2FnZSBvZiB2YWxpZCBhbGxvY2F0aW9ucy4KCldhaXQsIHRoZSBtYXRoIGhlcmUgaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlOiBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgaXMgYDIxNDc0ODM2NDcgLyA4ID0gMjY4NDM1NDU1YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBgbnJfcGFnZXNgIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gSWYgYG5yX3BhZ2VzYCBiZWNvbWVzIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gOGAsIHdvdWxkIHRoaXMgY2F1c2UgYW4gaW50ZXJuYWwgc2l6ZSBjYWxjdWxhdGlvbiBvdmVyZmxvdz8gSSB0aG91Z2h0IGFib3V0IHRoaXMsIGJ1dCwgbm8sIGBrdm1hbGxvY19vYmpzYCB1c2VzIGBzaXplX3RgIGludGVybmFsbHksIHdoaWNoIHNob3VsZCBwcmV2ZW50IHRoZSBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbi4KCkhvd2V2ZXIsIGhvbGQgb24gYSBzZWNvbmQuIGBucGFnZXNgIGlzIGFuIGBpbnQgKm5wYWdlc2AuIFNvLCB0aGUgYXNzaWdubWVudCBgKm5wYWdlcyA9IG5yX3BhZ2VzO2Agd2lsbCBvdmVyZmxvdyBpZiBgbnJfcGFnZXMgJmd0OyBJTlRfTUFYYC4gQWgsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgaWYgKFdBUk5fT05fT05DRShucl9wYWdlcyAmZ3Q7IElOVF9NQVgpKWAuCgpUaGUgbmV3IGNvZGUgaGFzIGBpZiAobnJfcGFnZXMgJmd0OyBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopKWAuIFRoaXMgbm93IGltcG9zZXMgYSBtdWNoIHN0cmljdGVyIGxpbWl0LCBwcmV2ZW50aW5nIGBucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgZnJvbSBvdmVyZmxvd2luZyBgSU5UX01BWGAuIEJ1dCwgYGt2bWFsbG9jX29ianNgIHRha2VzIGBzaXplX3RgLCBzbyBgbnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKilgIHNob3VsZG4mIzM5O3Qgb3ZlcmZsb3cgYHNpemVfdGAgdW5sZXNzIGBucl9wYWdlc2AgaXMgYWJzb2x1dGVseSBodWdlLiBEb2VzIHNvbWV0aGluZyBlbHNlIGluc2lkZSB1c2UgYGludGAgZm9yIHRoZSBzaXplLCB0aG91Z2g/CgpPa2F5LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGF0IGBrdm1hbGxvY19vYmpzYCBpcyBhIG1hY3JvOiBgI2RlZmluZSBrdm1hbGxvY19vYmpzKHR5cGUsIG4sIGZsYWdzKSBrdm1hbGxvY19hcnJheShuLCBzaXplb2YodHlwZSksIGZsYWdzKWAuIGBrdm1hbGxvY19hcnJheWAgaXRzZWxmIHRha2VzIGBzaXplX3Qgbiwgc2l6ZV90IHNpemVgLgoKV2h5IHRoZSBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgbGltaXQgdGhlbj8gQWgsIEkgc2VlLCBpdCBtaWdodCByZWxhdGUgdG8gYE1BWF9SV19DT1VOVGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwgd2hpY2ggbWlnaHQgdXNlIGFuIGBpbnRgIGludGVybmFsbHkuCgpBaGEhIGBJTlRfTUFYYCBpcyAyR0IuIGBJTlRfTUFYIC8gOGAgKHdoZXJlIDggaXMgdGhlIHNpemUgb2YgYSBwYWdlIHBvaW50ZXIpIGlzIDI1Nk1CLiBTbywgdGhlIGFycmF5IG9mIHBvaW50ZXJzIGNhbiBiZSBhdCBtb3N0IDI1Nk1CLgoKT2theSwgc28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBpb191cmluZyB0aGF0IHJlc3RyaWN0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIGR1ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcGFnZSBwb2ludGVyIGFycmF5LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG92ZXJmbG93cy4KCk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgaW9fdXJpbmcgaXMgYWN0dWFsbHkgZW5hYmxlZC4gYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSwgYnV0IGFyZSB0aGVyZSBhbnkgcmVsYXRlZCBjb25maWdzPyBMZXQgbWUgbG9vayBpbiBgaW9fdXJpbmcvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE0LVxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM2LVxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5MzgtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipGb2N1c2luZyBvbiBpb191cmluZyBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIE5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSB0aGVyZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgd29ya3MgYXQgYSBmdW5jdGlvbmFsIGxldmVsLCBzbyBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb191cmluZy96Y3J4LmNgIGFuZCBgaW9fdXJpbmcvcnNyYy5jYC4gVGhvc2Ugc2VlbSBsaWtlIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50cyB0byB1bmRlcnN0YW5kIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBhbmQgcHJvY2Vzc2VzIGludm9sdmVkLiBUaGV5IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYz0yMz1zdHJ1Y3QgaW9fcnNyY191cGRhdGUge1xuLS1cbmlvX3VyaW5nL3JzcmMuYy0yOS1cbmlvX3VyaW5nL3JzcmMuYzozMDpzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbmlvX3VyaW5nL3JzcmMuYy0zMS1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92ZWMgKmlvdik7XG4tLVxuaW9fdXJpbmcvcnNyYy5jPTM2Nz1zdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0zOTYtXHRcdH1cbmlvX3VyaW5nL3JzcmMuYzozOTc6XHRcdG5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTtcbmlvX3VyaW5nL3JzcmMuYy0zOTgtXHRcdGlmIChJU19FUlIobm9kZSkpIHtcbi0tXG5pb191cmluZy9yc3JjLmM9ODA4PWJvb2wgaW9fY2hlY2tfY29hbGVzY2VfYnVmZmVyKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgaW50IG5yX3BhZ2VzLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy04NTQtXG5pb191cmluZy9yc3JjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvcnNyYy5jLTg1Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92ZWMgKmlvdilcbi0tXG5pb191cmluZy9yc3JjLmM9OTUwPWludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbi0tXG5pb191cmluZy9yc3JjLmMtOTk0LVxuaW9fdXJpbmcvcnNyYy5jOjk5NTpcdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBpb3YpO1xuaW9fdXJpbmcvcnNyYy5jLTk5Ni1cdFx0aWYgKElTX0VSUihub2RlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzEwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGNhbGxzIHJlbGF0ZWQgdG8gYnVmZmVyIHJlZ2lzdHJhdGlvbiBpbiBpb191cmluZywgc3BlY2lmaWNhbGx5IGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiB0aGUgYnVmZmVyIHJlZ2lzdHJhdGlvbiBsb2dpYy4gSSYjMzk7dmUgbm90ZWQgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSB0d28ga2V5IGxvY2F0aW9uczogYF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlYCBhbmQgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSByZWFjaGVkIHRocm91Z2ggdGhlIGBpb191cmluZ19yZWdpc3RlcmAgc3lzdGVtIGNhbGwsIHdoZW4gdXNpbmcgdGhlIGBJT1JJTkdfUkVHSVNURVJfQlVGRkVSU2AgYW5kIGBJT1JJTkdfUkVHSVNURVJfQlVGRkVSU19VUERBVEVgIG9wdGlvbnMsIG9mIGNvdXJzZS4KCk5vdywgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdG8gZGlnIGludG8gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHBpbm5pbmcuIExldCYjMzk7cyBzZWUgaG93IG1lbW9yeSBpcyBhY3R1YWxseSBtYXBwZWQgYW5kIG1hbmFnZWQgZm9yIHRoZXNlIHJlZ2lzdGVyZWQgYnVmZmVycy4gSSBzaG91bGQgcHJvYmFibHkgYmUgZXhhbWluaW5nIGBpb19yZWdpb25fcGluX3BhZ2VzYCBsb2NhdGVkIHdpdGhpbiBgaW9fdXJpbmcvbWVtbWFwLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3Qgd2hlcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBwYWdlIHBpbm5pbmcgaXMgaGFwcGVuaW5nLCB3aGljaCBpcyBjcnVjaWFsIGZvciBkaXJlY3QgSS9PIGFuZCB1c2VyLXNwYWNlIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpbGwgYmUsIEkgc3VzcGVjdC4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lvbl9waW5fcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmM9MTE0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2luaXRfcHRyKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcbi0tXG5pb191cmluZy9tZW1tYXAuYy0xMzMtXG5pb191cmluZy9tZW1tYXAuYzoxMzQ6c3RhdGljIGludCBpb19yZWdpb25fcGluX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbmlvX3VyaW5nL21lbW1hcC5jLTEzNS1cdFx0XHQgICAgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTg0PWludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMjE3LVx0aWYgKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSKVxuaW9fdXJpbmcvbWVtbWFwLmM6MjE4Olx0XHRyZXQgPSBpb19yZWdpb25fcGluX3BhZ2VzKG1yLCByZWcpO1xuaW9fdXJpbmcvbWVtbWFwLmMtMjE5LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBpb19jcmVhdGVfcmVnaW9uYCwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqUGlucG9pbnRpbmcgdGhlIE9yaWdpbnMgb2YgYGlvX2NyZWF0ZV9yZWdpb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYGlvX2NyZWF0ZV9yZWdpb25gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAqKndoZXJlIGlzIHRoaXMgdGhpbmcgY2FsbGVkIGZyb20/KiogSXMgaXQgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbj8gQSB1c2VyLXNwYWNlIGxpYnJhcnkgY2FsbD8gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgbGlrZSBuZXR3b3JraW5nLCBibG9jayBJL08sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBtZSBjcml0aWNhbCBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIGRhdGEgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uLiBJcyBpdCByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIGRldmljZSBtYXBwaW5nLCBvciBzb21lIG90aGVyIEkvTyByZXNvdXJjZSBhbGxvY2F0aW9uPyBBbmQgYXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgYWxsb2NhdGlvbiByb3V0aW5lIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXgsIHBlcmhhcHMgaW52b2x2aW5nIGxvY2tpbmcgb3IgcmVzb3VyY2UgcHJvdGVjdGlvbj8gVGhlIG9yaWdpbiBpcyB0aGUga2V5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9MjcyNj1zdGF0aWMgX19jb2xkIGludCBpb19hbGxvY2F0ZV9zY3FfdXJpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0NC1cdH1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mjc0NTpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlcmluZ19yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzQ2LVx0aWYgKHJldClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTI3NTgtXHR9XG5pb191cmluZy9pb191cmluZy5jOjI3NTk6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXNxX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XG5pb191cmluZy9pb191cmluZy5jLTI3NjAtXHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcva2J1Zi5jPTYyNT1pbnQgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmlvX3VyaW5nL2tidWYuYy02NzMtXHR9XG5pb191cmluZy9rYnVmLmM6Njc0Olx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmJsLVx1MDAzZXJlZ2lvbiwgXHUwMDI2cmQsIG1tYXBfb2Zmc2V0KTtcbmlvX3VyaW5nL2tidWYuYy02NzUtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE1Mj1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTgzLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTg0OmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG5pb191cmluZy9tZW1tYXAuYy0xODUtXHRcdCAgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmg9MjA9dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcik7XG5pb191cmluZy9tZW1tYXAuaDoyMTppbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuaW9fdXJpbmcvbWVtbWFwLmgtMjItXHRcdCAgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzAtXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjUzMTpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZuLnJpbmdfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9DUV9SSU5HKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMyLVx0aWYgKHJldClcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTU2MC1cdH1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTYxOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNm4uc3FfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9TUUVTKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYyLVx0aWYgKHJldCkge1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NjkyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MjEtXG5pb191cmluZy9yZWdpc3Rlci5jOjcyMjpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZyZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfTUFQX09GRl9QQVJBTV9SRUdJT04pO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MjMtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL3pjcnguYz0zODA9c3RhdGljIGludCBpb19hbGxvY2F0ZV9yYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTM5OS1cbmlvX3VyaW5nL3pjcnguYzo0MDA6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2aWZxLVx1MDAzZXJxX3JlZ2lvbiwgcmQsIG1tYXBfb2Zmc2V0KTtcbmlvX3VyaW5nL3pjcnguYy00MDEtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgaW9fY3JlYXRlX3JlZ2lvbmAgVXNhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBgaW9fY3JlYXRlX3JlZ2lvbmAgYmVpbmcgYSBjcml0aWNhbCBmdW5jdGlvbiwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uIHdpdGhpbiB0aGUgSS9PIHJpbmcgZnJhbWV3b3JrLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBhcmVhczogYGlvX2FsbG9jYXRlX3NjcV91cmluZ3NgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBpbml0aWFsIGBpb191cmluZ19zZXR1cGAsIHN1Z2dlc3RpbmcgaXRzIGZ1bmRhbWVudGFsIHRvIHJpbmcgaW5pdGlhbGl6YXRpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCBhbmQgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIOKAkyBhbGwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgcmluZyByZWdpc3RyYXRpb24gYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBtYW5hZ2VtZW50LiBBbHNvLCBJIHNlZSBgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nYCBpcyBhIGNvbnN1bWVyLCBhbmQgbG9jYXRlZCBpbiBhIHpjcnggY29udGV4dCBpbiBgaW9fdXJpbmcvemNyeC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpGcm9tIHRoaXMgSSBjYW4gZGVkdWNlIHRoYXQgYGlvX2NyZWF0ZV9yZWdpb25gIGlzIGxpa2VseSB1c2VkIHRvIHByZXBhcmUgbWVtb3J5IHJlZ2lvbnMgZm9yIHZhcmlvdXMgcmluZyB0eXBlcyBhbmQgYXNzb2NpYXRlZCBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGUgcmVhbGx5IGltcG9ydGFudCBmdW5jdGlvbnMgdGhhdCBJIG5lZWQgdG8gbG9vayBpbnRvIGluIG1vcmUgZGV0YWlsIGFyZTogYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCwgYF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAsIGFuZCBgaW9fcmVnaXN0ZXJfemNyeF9pZnFgLiBUaGVzZSBhcmUgdGhlIGtleSByZWdpc3RyYXRpb24gYW5kIHVwZGF0ZSBmdW5jdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhlIGBpb19jcmVhdGVfcmVnaW9uYCBjYWxsLgoKQWgsIHdhaXQuIExldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgaW9fcmVnaXN0ZXJfemNyeF9pZnFgIGlzIGluZGVlZCBsb2NhdGVkIGluIGBpb191cmluZy96Y3J4LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVnaXN0ZXJfemNyeF9pZnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGlvX2ltcG9ydF91bWVtYCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIG9mIGhvdyBgaW9faW1wb3J0X3VtZW1gIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdobyYjMzk7cyBjYWxsaW5nIGl0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc2ltcGxlICYjMzQ7c2VhcmNoIGFuZCByZXBsYWNlJiMzNDsgc2NlbmFyaW8sIHRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBjb2RlJiMzOTtzIGNhbGwgZ3JhcGguIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBpb19pbXBvcnRfdW1lbWAgaXMgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9faW1wb3J0X3VtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvemNyeC5jPTE4NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBpb19jb3VudF9hY2NvdW50X3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKVxuLS1cbmlvX3VyaW5nL3pjcnguYy0yMDEtXG5pb191cmluZy96Y3J4LmM6MjAyOnN0YXRpYyBpbnQgaW9faW1wb3J0X3VtZW0oc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG5pb191cmluZy96Y3J4LmMtMjAzLVx0XHRcdCAgc3RydWN0IGlvX3pjcnhfbWVtICptZW0sXG4tLVxuaW9fdXJpbmcvemNyeC5jPTI2OD1zdGF0aWMgaW50IGlvX2ltcG9ydF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy0yODgtXHRcdHJldHVybiBpb19pbXBvcnRfZG1hYnVmKGlmcSwgbWVtLCBhcmVhX3JlZyk7XG5pb191cmluZy96Y3J4LmM6Mjg5Olx0cmV0dXJuIGlvX2ltcG9ydF91bWVtKGlmcSwgbWVtLCBhcmVhX3JlZyk7XG5pb191cmluZy96Y3J4LmMtMjkwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGlvX2ltcG9ydF9hcmVhYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgaW52ZXN0aWdhdGluZyB0aGUgY2FsbGVycyBvZiB0aGUgYGlvX2ltcG9ydF9hcmVhYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJiMzOTtzIHVzaW5nIGl0LCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSwgYW5kIHdpdGggd2hhdCBwYXJhbWV0ZXJzLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWFwIG91dCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBldmVyeXRoaW5nIGZyb20gZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMgdG8gcmVmYWN0b3Jpbmcgb3Igb3B0aW1pemluZyB0aGUgY29kZS4gR3Jhc3BpbmcgdGhlIGNhbGwgZ3JhcGggb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHF1aWNrbHkgcmV2ZWFsIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcHBsaWNhdGlvbi4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2ltcG9ydF9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3pjcnguYz0yNTU9c3RhdGljIHZvaWQgaW9fcmVsZWFzZV9hcmVhX21lbShzdHJ1Y3QgaW9femNyeF9tZW0gKm1lbSlcbi0tXG5pb191cmluZy96Y3J4LmMtMjY3LVxuaW9fdXJpbmcvemNyeC5jOjI2ODpzdGF0aWMgaW50IGlvX2ltcG9ydF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuaW9fdXJpbmcvemNyeC5jLTI2OS1cdFx0XHQgIHN0cnVjdCBpb196Y3J4X21lbSAqbWVtLFxuLS1cbmlvX3VyaW5nL3pjcnguYz00NTA9c3RhdGljIGludCBpb196Y3J4X2NyZWF0ZV9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy00NzMtXG5pb191cmluZy96Y3J4LmM6NDc0Olx0cmV0ID0gaW9faW1wb3J0X2FyZWEoaWZxLCBcdTAwMjZhcmVhLVx1MDAzZW1lbSwgYXJlYV9yZWcpO1xuaW9fdXJpbmcvemNyeC5jLTQ3NS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjU0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgaW9femNyeF9jcmVhdGVfYXJlYWAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBpb196Y3J4X2NyZWF0ZV9hcmVhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHBhdHRlcm5zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgYXJlYSBjcmVhdGlvbiBmdW5jdGlvbiBpcyBpbnZva2VkLiBJIGV4cGVjdCB0aGF0IGEgcXVpY2sgc2NhbiBvZiB0aGUgaW1tZWRpYXRlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHByaW1hcnkgcHVycG9zZXMsIGhvcGVmdWxseSByZXZlYWxpbmcgaWYgaXQgaXMgYmVpbmcgdXNlZCBhcyBpbnRlbmRlZC4gUGVyaGFwcyB0aGVyZSBhcmUgc29tZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGRlcGVuZGluZyBvbiBob3cgdGhpcyBhcmVhIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBhY2Nlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb196Y3J4X2NyZWF0ZV9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3pjcnguYz00MzY9c3RhdGljIGludCBpb196Y3J4X2FwcGVuZF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy00NDktXG5pb191cmluZy96Y3J4LmM6NDUwOnN0YXRpYyBpbnQgaW9femNyeF9jcmVhdGVfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcbmlvX3VyaW5nL3pjcnguYy00NTEtXHRcdFx0ICAgICAgIHN0cnVjdCBpb191cmluZ196Y3J4X2FyZWFfcmVnICphcmVhX3JlZyxcbi0tXG5pb191cmluZy96Y3J4LmM9ODE1PXN0YXRpYyBpbnQgemNyeF9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTgzNi1cbmlvX3VyaW5nL3pjcnguYzo4Mzc6XHRyZXQgPSBpb196Y3J4X2NyZWF0ZV9hcmVhKGlmcSwgYXJlYSwgcmVnKTtcbmlvX3VyaW5nL3pjcnguYy04MzgtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL3pjcnguYz04ODM9aW50IGlvX3JlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTk4NS1cdH0gZWxzZSB7XG5pb191cmluZy96Y3J4LmM6OTg2Olx0XHRyZXQgPSBpb196Y3J4X2NyZWF0ZV9hcmVhKGlmcSwgXHUwMDI2YXJlYSwgXHUwMDI2cmVnKTtcbmlvX3VyaW5nL3pjcnguYy05ODctXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjE2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGlvX3JlZ2lzdGVyX3pjcnhgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9fcmVnaXN0ZXJfemNyeGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9jYXRlIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGlvX3VyaW5nYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBpbiBlaXRoZXIgYHJlZ2lzdGVyLmNgIG9yLCBnaXZlbiB0aGUgbmFtZSwgbWF5YmUgZXZlbiBgemNyeC5jYC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhY3R1YWxseSBpbiBgaW9fdXJpbmcvemNyeC5jYC4gVGhhdCBtYWtlcyBzZW5zZS4KCk5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCB0byBpdC4gTGV0JiMzOTtzIHRoaW5rLi4uIGNsZWFybHksIGBDT05GSUdfSU9fVVJJTkdgIHdvdWxkIGJlIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGVuYWJsZXMgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBpbiBnZW5lcmFsLiBBbmQgYmFzZWQgb24gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBJJiMzOTtkIGV4cGVjdCB0aGVyZSB0byBiZSBhIGBDT05GSUdfSU9fVVJJTkdfWkNSWGAgY29uZmlnIG9wdGlvbiBhcyB3ZWxsLgoKVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBsb29rIGluIGBpb191cmluZy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBpb191cmluZyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBJT19VUklOR19aQ1JYXG4gICA3Olx0XHRkZWZfYm9vbCB5XG4gICA4Olx0XHRkZXBlbmRzIG9uIElPX1VSSU5HXG4gICA5Olx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuICAxMDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDExOlx0XHRkZXBlbmRzIG9uIE5FVF9SWF9CVVNZX1BPTExcbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgSU9fVVJJTkdfQlBGXG4gIDE0Olx0XHRkZWZfYm9vbCB5XG4gIDE1Olx0XHRkZXBlbmRzIG9uIEJQRlxuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuICAxOTpcdFx0ZGVmX2Jvb2wgeVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBJT19VUklOR1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBrZXJuZWwgY29uZmlnLiBMZXQmIzM5O3Mgc2VlLi4uIGBJT19VUklOR19aQ1JYYC4gUmlnaHQsIHRoYXQgZGVwZW5kcyBvbiBgUEFHRV9QT09MYCwgYElORVRgLCBhbmQgYE5FVF9SWF9CVVNZX1BPTExgLiBNYWtlcyBzZW5zZS4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBlbmFibGUgYm90aCBgSU9fVVJJTkdgIGFuZCBgSU9fVVJJTkdfWkNSWGAuIFdhaXQgYSBtaW51dGUsIGhvbGQgb24uLi4gYElPX1VSSU5HX1pDUlhgIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgISBTbywgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBpdCYjMzk7cyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSU9fVVJJTkdgIGlzIGxpc3RlZCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgYSBtdXN0LiBBbmQgd2FpdCwgd2hlcmUgaXMgYElPX1VSSU5HYCBkZWZpbmVkPyBJIHJlY2FsbCBpdCYjMzk7cyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gQmV0dGVyIGNoZWNrIHRoZXJlIHRvIGNvbmZpcm0gaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgSSBtaWdodCBoYXZlIG1pc3NlZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTA6XHRcdGhlbHBcbjE5MTE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXG4xOTEyOlx0XHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xuMTkxMzpcdFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cbjE5MTQ6XHRcbjE5MTU6XHRjb25maWcgSU9fVVJJTkdcbjE5MTY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTE3Olx0XHRzZWxlY3QgSU9fV1FcbjE5MTg6XHRcdGRlZmF1bHQgeVxuMTkxOTpcdFx0aGVscFxuMTkyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBpb191cmluZyBpbnRlcmZhY2UsIGVuYWJsaW5nXG4xOTIxOlx0XHQgIGFwcGxpY2F0aW9ucyB0byBzdWJtaXQgYW5kIGNvbXBsZXRlIElPIHRocm91Z2ggc3VibWlzc2lvbiBhbmRcbjE5MjI6XHRcdCAgY29tcGxldGlvbiByaW5ncyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUga2VybmVsIGFuZCBhcHBsaWNhdGlvbi5cbjE5MjM6XHRcbjE5MjQ6XHRjb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4xOTI1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtXCYjMzQ7XG4xOTI2Olx0XHRkZXBlbmRzIG9uIElPX1VSSU5HIFx1MDAyNlx1MDAyNiBHQ09WX0tFUk5FTFxuMTkyNzpcdFx0aGVscFxuMTkyODpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgdG8gZmFjaWxpdGF0ZVxuMTkyOTpcdFx0ICBjb2RlIGNvdmVyYWdlIHRlc3RpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDg4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBJT19VUklORyBEZXBlbmRlbmNpZXMgZm9yIGEgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGBJT19VUklOR2AgaXMgc2V0IGFzIHRoZSBkZWZhdWx0LCBzbyBpdCYjMzk7cyB0ZWNobmljYWxseSBhbHJlYWR5IGVuYWJsZWQuIEJ1dCwgYXMgYSBzZWFzb25lZCBwcm8sIEkga25vdyBnb29kIGNvbmZpZ3VyYXRpb24gaHlnaWVuZSBpcyBpbXBvcnRhbnQuIEV4cGxpY2l0bHkgbGlzdGluZyBpdCBpcyBhbHdheXMgYSBzb3VuZCBwcmFjdGljZSBmb3IgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LgoKTm93LCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgYElPX1VSSU5HX1pDUlhgIGhhdmluZyBzb21lIGRlcGVuZGVuY2llcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIGl0IHJlbGllcyBvbiBgUEFHRV9QT09MYCwgYElORVRgLCBhbmQgYE5FVF9SWF9CVVNZX1BPTExgLiBTaW5jZSBJIGFtIGN1cnJlbnRseSBmb2N1c2VkIG9uIGBJT19VUklOR19aQ1JYYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGNvcnJlY3QuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYE5FVF9SWF9CVVNZX1BPTExgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIG15IGludGVuZGVkIHVzZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1JYX0JVU1lfUE9MTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNDI9Y29uZmlnIENHUk9VUF9ORVRfQ0xBU1NJRFxuLS1cbm5ldC9LY29uZmlnLTM0OS1cbm5ldC9LY29uZmlnOjM1MDpjb25maWcgTkVUX1JYX0JVU1lfUE9MTFxubmV0L0tjb25maWctMzUxLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgYE5FVF9SWF9CVVNZX1BPTExgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTkVUX1JYX0JVU1lfUE9MTGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIGEgYGJvb2xgLCBhbmQgdGhlcmUmIzM5O3Mgbm8gdmlzaWJsZSBwcm9tcHQgYXR0YWNoZWQgdG8gaXQuIFRoYXQgKmltbWVkaWF0ZWx5KiB0ZWxscyBtZSBpdCYjMzk7cyBub3QgYSB1c2VyLWZhY2luZyBvcHRpb24gdGhhdCYjMzk7cyBnb2luZyB0byBiZSBkaXJlY3RseSBzZWxlY3RlZCBkdXJpbmcgY29uZmlndXJhdGlvbi4gSW5zdGVhZCwgaXRzIHN0YXRlIGlzICpkZXJpdmVkKiBvciAqc2VsZWN0ZWQqIGJ5IHNvbWUgb3RoZXIgbWVjaGFuaXNtLCBsaWtlbHkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBidWlsZCBmbGFnLCBvciBwb3NzaWJseSBldmVuIGJhc2VkIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUgb3Iga2VybmVsIHZlcnNpb24uIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBjb25zaWRlciB3aGljaCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIHZhbHVlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdHJhY2UgYmFjayB0aGUgbG9naWMgdGhhdCBzZXRzIHRoaXMsIHRvIHVuZGVyc3RhbmQgaXRzIHRydWUgZnVuY3Rpb24gYW5kIHdoeSBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkIGluIGEgZ2l2ZW4gc2NlbmFyaW8uIElzIGl0IGRlcGVuZGVudCBvbiB0aGUgZHJpdmVyPyBUaGUgTklDIHR5cGU/IE1heWJlIGFuIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQmIzM5O3Mgc2VsZWN0aXZlbHkgZW5hYmxlZD8gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGUgY29kZSB0aGF0IHJlZmVyZW5jZXMgdGhpcyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfUlhfQlVTWV9QT0xMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgTkVUX1JYX0JVU1lfUE9MTGAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHN0YWNrJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBuZXR3b3JrLXJlbGF0ZWQgc2V0dGluZ3MuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gbG9vayBkaXJlY3RseSBpbnRvIGBuZXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGhlbHAgdGV4dCBmb3IgYW55dGhpbmcgbmV0d29yay1zcGVjaWZpYyBhbmQgY29uZmlndXJhYmxlIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWZ0ZXIgYE5FVF9SWF9CVVNZX1BPTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQga25vYiBjb250cm9scywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSG9wZWZ1bGx5LCBgbmV0L0tjb25maWdgIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3NhcnkgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ1Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuIDM0NjpcdFx0aGVscFxuIDM0NzpcdFx0ICBDZ3JvdXAgc3Vic3lzdGVtIGZvciB1c2UgYXMgZ2VuZXJhbCBwdXJwb3NlIHNvY2tldCBjbGFzc2lkIG1hcmtlciB0aGF0IGlzXG4gMzQ4Olx0XHQgIGJlaW5nIHVzZWQgaW4gY2xzX2Nncm91cCBhbmQgZm9yIG5ldGZpbHRlciBtYXRjaGluZy5cbiAzNDk6XHRcbiAzNTA6XHRjb25maWcgTkVUX1JYX0JVU1lfUE9MTFxuIDM1MTpcdFx0Ym9vbFxuIDM1MjpcdFx0ZGVmYXVsdCB5IGlmICFQUkVFTVBUX1JUIHx8IChQUkVFTVBUX1JUIFx1MDAyNlx1MDAyNiAhTkVUQ09OU09MRSlcbiAzNTM6XHRcbiAzNTQ6XHRjb25maWcgQlFMXG4gMzU1Olx0XHRib29sXG4gMzU2Olx0XHRwcm9tcHQgXCYjMzQ7RW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXCYjMzQ7XG4gMzU3Olx0XHRkZXBlbmRzIG9uIFNZU0ZTXG4gMzU4Olx0XHRzZWxlY3QgRFFMXG4gMzU5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1ODQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBEZWZhdWx0IE5ldHdvcmsgSU8gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgc3lzdGVtIHNlZW1zIHRvIGJlIGRlZmF1bHRpbmcgdG8gYHlgIGZvciBzb21ldGhpbmcuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIGZhaXJseSBjZXJ0YWluIHRoYXQgd2hhdGV2ZXIgdGhlIGRlZmF1bHQgaXMsIGl0IG1lYW5zIHRoYXQgYElPX1VSSU5HX1pDUlhgIGlzIHByb2JhYmx5IGVuYWJsZWQgYnkgZGVmYXVsdCAqYXMgbG9uZyBhcyogYElORVRgIGlzIGFsc28gZW5hYmxlZC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbiB0aGVzZSBkYXlzLiBCdXQgdGhhdCBicmluZ3MgdXAgYSBmdXJ0aGVyIHBvaW50OiB3aGF0JiMzOTtzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgYFBBR0VfUE9PTGAgb3B0aW9uPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBjb21wb25lbnQgZm9yIG9wdGltaXppbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aCBgaW9fdXJpbmdgLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBkZWZhdWx0IHN0YXR1cyBpbiByZWxhdGlvbiB0byBgSU9fVVJJTkdfWkNSWGAuIEl0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3ksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTMxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OgoKKipUaGUgQ3VyaW91cyBDYXNlIG9mIFBBR0VfUE9PTCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdW5wYWNrIHRoaXMgcXVpY2tseS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSB2YXJpYWJsZSwgYFBBR0VfUE9PTGAuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHdpdGhvdXQgYW55IGZ1cnRoZXIgY29udGV4dCwgdGhpcyB0aGluZyBpcyBpbXBsaWNpdGx5IGEgYm9vbGVhbi4gTm8gcHJvbXB0LCBubyBzdXJyb3VuZGluZyBoaW50cywganVzdC4uLml0LiBTbywgd2l0aG91dCBhbnkgZXhwbGljaXQgYXNzaWdubWVudCBvciBkZWZpbml0aW9uLCB0aGlzIHZhcmlhYmxlLCBieSBkZWZhdWx0LCBpcyB0cmVhdGVkIGFzIGEgYm9vbGVhbi4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bmV4cGVjdGVkLCBhbmQgY2VydGFpbmx5IHdvcnRoIG5vdGluZyB3aGVuIHJldmlld2luZyBjb2RlIG9yIGRlc2lnbi4gSXQgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IHRoZSBzeXN0ZW3igJlzIGRlZmF1bHRzIGFuZCBob3cgaXQgaW50ZXJwcmV0cyBzZWVtaW5nbHkgYW1iaWd1b3VzIGRlY2xhcmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBiZWhhdmlvciBpbiBtaW5kIHRvIGF2b2lkIGludHJvZHVjaW5nIGltcGxpY2l0IGJ1Z3Mgb3IgbWlzdW5kZXJzdGFuZGluZ3MgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBxdWljaywgYWxiZWl0IHBvdGVudGlhbGx5IHN1YnRsZSwgZGV0YWlsIHRvIGtlZXAgaW4gdGhlIG1lbnRhbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFBBR0VfUE9PTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQzNT1jb25maWcgVkVUSFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNzpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDctXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODctXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L0tjb25maWc6NjExOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXHRzZWxlY3QgTkVUX1NIQVBFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjEtXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gNjRCSVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctODAtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjgxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cdHNlbGVjdCBCUk9BRENPTV9QSFkgaWYgQVJDSF9CQ00yODM1XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxMy1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYxLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzUtXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnLTIzLVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZzoyNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMxLVx0c2VsZWN0IEZJWEVEX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cdGltcGx5IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy0xNTMtXHRzZWxlY3QgUkVBTFRFS19QSFlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjE1NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnOjE1Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0NvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc6NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTU5PWNvbmZpZyBNVk5FVEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY1Olx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTAtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjkxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIwLVx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjMtXHRzZWxlY3QgUENTX01US19MWU5YSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZz02PWNvbmZpZyBNTFg0X0VOXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMTEtXHRzZWxlY3QgTUxYNF9DT1JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9Mjk9Y29uZmlnIE1MWDVfQ09SRV9FTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMxLVx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgSU5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNTFg1X0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjMyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzM6XHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zNC1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTMzPWNvbmZpZyBNTFhTV19QQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTM1LVx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEhBU19JT01FTSBcdTAwMjZcdTAwMjYgTUxYU1dfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzctXHRkZWZhdWx0IG1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI3LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6Mjg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjktXHRzZWxlY3QgUENTX1hQQ1Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnPTE9Y29uZmlnIExBTjk2NlhfU1dJVENIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy04LVx0c2VsZWN0IFBIWUxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWctMTAtXHRzZWxlY3QgVkNBUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZz0yOD1jb25maWcgTEFOOTY5WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzAtXHRkZXBlbmRzIG9uIFNQQVJYNV9TV0lUQ0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZzozMTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xOD1jb25maWcgTUlDUk9TT0ZUX01BTkFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yMy1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoyNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI1LVx0c2VsZWN0IE5FVF9TSEFQRVJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnOjI2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNy1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTExMD1jb25maWcgUlRBU0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTEzLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTE0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9Mjk9Y29uZmlnIFJBVkJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzUtXHRzZWxlY3QgTURJT19CSVRCQU5HXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc6MzY6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzctXHRzZWxlY3QgUEhZTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc9MjU9Y29uZmlnIFNOSV9ORVRTRUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0yOC1cdHNlbGVjdCBQSFlMSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnOjI5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMzAtXHRzZWxlY3QgTUlJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy04LVx0c2VsZWN0IFBDU19YUENTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEwLVx0c2VsZWN0IFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZz0yNj1jb25maWcgVEVIVVRJX1RONDBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0yOC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZzoyOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTMwLVx0c2VsZWN0IEZXX0xPQURFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NTA9Y29uZmlnIFRJX0NQU1dcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU1LVx0c2VsZWN0IE1GRF9TWVNDT05cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NTY6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU3LVx0c2VsZWN0IFJFR01BUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy02OS1cdGRlcGVuZHMgb24gVElfQ1BUUyB8fCAhVElfQ1BUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3MDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzEtXHRzZWxlY3QgVElfREFWSU5DSV9NRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMS1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjEwMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAzLVx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0yMDQ9Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIwOC1cdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoyMDk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIxMC1cdGRlcGVuZHMgb24gUFJVX1JFTU9URVBST0Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTk9Y29uZmlnIExJQldYXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIzLVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0yPWNvbmZpZyBNVDc2X0NPUkVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzo0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTUtXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zNy1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM3MQoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiAxNjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKmlvX3VyaW5nIEludGVnZXIgT3ZlcmZsb3cgRml4OiBGb2N1cyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiAgVGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnIHdpbGwgcHVsbCBpbiBgUEFHRV9QT09MYCBpZiBgTkVUYCBpcyBzZXQsIGFuZCBzaW5jZSBgSU9fVVJJTkdfQlBGX09QU2AgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLCB0aGF0IGFsc28gbWVhbnMgYFBBR0VfUE9PTGAgd2lsbCBiZSBlbmFibGVkLiBUaGlzIGluIHR1cm4gZW5hYmxlcyBgSU9fVVJJTkdfWkNSWGAgYXV0b21hdGljYWxseS4gIFRoZXJlZm9yZSwgZXhwbGljaXRseSBlbmFibGluZyBgUEFHRV9QT09MYCBvciBgTkVUX1JYX0JVU1lfUE9MTGAgaXNuJiMzOTt0IG5lY2Vzc2FyeTsganVzdCBgSU9fVVJJTkdgIGFuZCBgSU9fVVJJTkdfWkNSWGAgc2hvdWxkIGNvdmVyIGV2ZXJ5dGhpbmcgd2UgbmVlZC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGNhbGxlcnMgb2YgYGlvX3Bpbl9wYWdlc2AuIEkgcmVjYWxsIGl0JiMzOTtzIHVzZWQgYnkgYGlvX3JlZ2lvbl9waW5fcGFnZXNgLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9faW1wb3J0X3VtZW1gLiAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgIGlzIGNhbGxlZCBieSBgaW9fY3JlYXRlX3JlZ2lvbmAuIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpcyBjYWxsZWQgYnkgYF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlYCBhbmQgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYC4gIEFuZCBgaW9faW1wb3J0X3VtZW1gIGlzIGNhbGxlZCBieSBgaW9faW1wb3J0X2FyZWFgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGlvX3pjcnhfY3JlYXRlX2FyZWFgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHpjcnhfcmVnaXN0ZXJfbmV0ZGV2YCBhbmQgYGlvX3JlZ2lzdGVyX3pjcnhgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYW5kIGBpb19pbXBvcnRfdW1lbWAuIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBgaW9fY3JlYXRlX3JlZ2lvbmAgaXNuJiMzOTt0IHN0YXRpYyBhbmQgaXMgaW4gYGlvX3VyaW5nL21lbW1hcC5jYC4gIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpcyBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9yc3JjLmNgLiAgYGlvX2ltcG9ydF91bWVtYCBpcyBhbHNvIHN0YXRpYyBhbmQgaW4gYGlvX3VyaW5nL3pjcnguY2AuCgpTaW5jZSBzeXprYWxsZXIgY2FuIGZ1enogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3aXRoaW4gdGhlIGNhbGwgdHJlZSwgaXQmIzM5O3MgaWRlYWwgdG8gcHJvdmlkZSBub24tc3RhdGljIG9uZXMgb3IgdGhlIHN0YXRpYyBvbmVzIGlmIHRoZXkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZS4gU3l6a2FsbGVyJiMzOTtzIGBGb2N1c1N5bWJvbHNgIGNhbiBhbHNvIGluY2x1ZGUgc3RhdGljIGZ1bmN0aW9ucy4KVGhlcmVmb3JlLCBteSBsaXN0IHdpbGwgYmU6CgoqICAgYGlvX2NyZWF0ZV9yZWdpb25gCiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAKKiAgIGBpb19pbXBvcnRfdW1lbWAKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fcmVnaW9uX3Bpbl9wYWdlc2AKCkxldCYjMzk7cyB2ZXJpZnkgdGhhdCBgaW9fcGluX3BhZ2VzYCBpc24mIzM5O3Qgc3RhdGljLiBZZXAsIGl0JiMzOTtzIG5vdCBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBuYW1lcyBhcmUgY29ycmVjdDoKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fY3JlYXRlX3JlZ2lvbmAKKiAgIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYAoqICAgYGlvX2ltcG9ydF91bWVtYAoqICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgCgpEb3VibGUgY2hlY2tpbmcsIHRob3NlIGFyZSBhbGwgdGhlIGNhbGxlcnMgb2YgYGlvX3Bpbl9wYWdlc2Agd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gSSBzZWUgYHZmaW9fcGluX3BhZ2VzYCBpbiB0aGUgZ3JlcHBlZCByZXN1bHRzLCBidXQgdGhhdCYjMzk7cyBpbiBhIGRpZmZlcmVudCBzdWJzeXN0ZW0uCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZml4IGZvciBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19waW5fcGFnZXNgLiBUaGUgcGF0Y2ggcHJldmVudHMgYG5yX3BhZ2VzYCBmcm9tIGJlaW5nIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopYC4gIFRoaXMgaXMgYSBjcml0aWNhbCBpb191cmluZyBmdW5jdGlvbiB1c2VkIGR1cmluZyBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3MuIEl0IG5lZWRzIGBJT19VUklOR2AgYW5kIGBJT19VUklOR19aQ1JYYCBzaW5jZSBgaW9faW1wb3J0X3VtZW1gIGlzIGluIGB6Y3J4LmNgLiBDaGVja2VkLCBhbmQgYElPX1VSSU5HX1pDUlhgIGlzIGRlZmluZWQgaW4gYGlvX3VyaW5nL0tjb25maWdgLiBgSU9fVVJJTkdgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIGBpb19jcmVhdGVfcmVnaW9uYCBhbmQgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLiBgSU9fVVJJTkdfWkNSWGAgaXMgcmVxdWlyZWQgZm9yIGBpb19pbXBvcnRfdW1lbWAuIFNpbmNlIGBpb19waW5fcGFnZXNgIGlzIHJlYWNoYWJsZSB2aWEgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGBJT19VUklOR2AgaXMgdGhlIGNvcmUgZGVwZW5kZW5jeS4KCk15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpczoKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAKKiAgIGBpb19jcmVhdGVfcmVnaW9uYAoqICAgYGlvX2ltcG9ydF91bWVtYAoqICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzOgoqICAgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgOiBgc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7SU9fVVJJTkdfWkNSWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19yZWdpb25fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb19pbXBvcnRfdW1lbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGlvX3Bpbl9wYWdlcygpIGJ5IGVuc3VyaW5nIHRoYXQgbnJfcGFnZXMgZG9lcyBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgdGhhdCBjYW4gYmUgc2FmZWx5IGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2UgcG9pbnRlciBhcnJheS4gVGhpcyBpcyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBhbGxvY2F0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGUgb3ZlcmZsb3cgY2hlY2sgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCByZWplY3QgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HX1pDUlgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fcmVnaW9uX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2NyZWF0ZV9yZWdpb24mIzM0OywKICAgICYjMzQ7aW9faW1wb3J0X3VtZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgcmVqZWN0IHZhbGlkIGxhcmdlIGFsbG9jYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6MTAuOTk0NDQzMjI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MjgxMTI1MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJJT19VUklOR19aQ1JYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcGluX3BhZ2VzXCIsXG4gICAgXCJpb19yZWdpb25fcGluX3BhZ2VzXCIsXG4gICAgXCJpb19zcWVfYnVmZmVyX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gICAgXCJpb19pbXBvcnRfdW1lbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gaW9fcGluX3BhZ2VzKCkgYnkgZW5zdXJpbmcgdGhhdCBucl9wYWdlcyBkb2VzIG5vdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZSB0aGF0IGNhbiBiZSBzYWZlbHkgYWxsb2NhdGVkIGZvciB0aGUgcGFnZSBwb2ludGVyIGFycmF5LiBUaGlzIGlzIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGJ1ZmZlciByZWdpc3RyYXRpb24gYW5kIG1lbW9yeSByZWdpb24gY3JlYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGFsbG9jYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZSBvdmVyZmxvdyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgcmVqZWN0IHZhbGlkIGxhcmdlIGFsbG9jYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToxMC45OTQ0NDkyMTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDM5NTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUxN2UxMjFlYjgyMGUzMTY5MDg3MDMyYzcxNmRiNTY5NTVlMmMwYzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjEgMDE6NDU6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbWVtbWFwLmMgYi9pb191cmluZy9tZW1tYXAuY1xcbmluZGV4IDRmOWI0MzkzMTljNDY2Li5kYTFmNmM1ZDA3ZjhhMCAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xcbisrKyBiL2lvX3VyaW5nL21lbW1hcC5jXFxuQEAgLTUzLDcgKzUzLDcgQEAgc3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxcbiBcXHRucl9wYWdlcyA9IGVuZCAtIHN0YXJ0O1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKG5yX3BhZ2VzIFxcdTAwM2UgSU5UX01BWCkpXFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXG4gXFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToxMS40NzU1MzMwMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDgwMDAyNDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiSU9fVVJJTkdfWkNSWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3Bpbl9wYWdlc1wiLFxuICAgIFwiaW9fcmVnaW9uX3Bpbl9wYWdlc1wiLFxuICAgIFwiaW9fc3FlX2J1ZmZlcl9yZWdpc3RlclwiLFxuICAgIFwiaW9fY3JlYXRlX3JlZ2lvblwiLFxuICAgIFwiaW9faW1wb3J0X3VtZW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGlvX3Bpbl9wYWdlcygpIGJ5IGVuc3VyaW5nIHRoYXQgbnJfcGFnZXMgZG9lcyBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgdGhhdCBjYW4gYmUgc2FmZWx5IGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2UgcG9pbnRlciBhcnJheS4gVGhpcyBpcyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBhbGxvY2F0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGUgb3ZlcmZsb3cgY2hlY2sgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IHJlamVjdCB2YWxpZCBsYXJnZSBhbGxvY2F0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTdlMTIxZWI4MjBlMzE2OTA4NzAzMmM3MTZkYjU2OTU1ZTJjMGMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdW4gMjEgMDE6NDU6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9tZW1tYXAuYyBiL2lvX3VyaW5nL21lbW1hcC5jXG5pbmRleCA0ZjliNDM5MzE5YzQ2Ni4uZGExZjZjNWQwN2Y4YTAgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC01Myw3ICs1Myw3IEBAIHN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbiBcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLVx0aWYgKFdBUk5fT05fT05DRShucl9wYWdlcyBcdTAwM2UgSU5UX01BWCkpXG4rXHRpZiAobnJfcGFnZXMgXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFxuIFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6MTEuNDc1NTM0Njg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjYxOTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiBpb191cmluZy9tZW1tYXAuYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9tZW1tYXAuY2AuIEl0IHNlZW1zIHRoZXkndmUgbWFkZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGlvX3Bpbl9wYWdlc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhleSd2ZSBtb2RpZmllZCB0aGUgY2hlY2sgb24gYG5yX3BhZ2VzYC4gT3JpZ2luYWxseSwgaXQgd2FzIGp1c3QgYSB3YXJuaW5nIGlmIGBucl9wYWdlc2AgZXhjZWVkZWQgYElOVF9NQVhgLiBOb3csIGl0J3MgY2hlY2tpbmcgYWdhaW5zdCBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAuIEhtbSwgaW50ZXJlc3RpbmcuXG5cblRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgaXMgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93LCBwYXJ0aWN1bGFybHkgd2hlbiBhbGxvY2F0aW5nIHRoZSBgcGFnZXNgIGFycmF5IHVzaW5nIHNvbWV0aGluZyBsaWtlIGBrdm1hbGxvY19vYmpzYCBvciBwYXNzaW5nIGBucl9wYWdlc2AgdG8gYSBmdW5jdGlvbiBleHBlY3RpbmcgYW4gYGludGAuIEJ1dCB3YWl0Li4uIHdhc24ndCBga3ZtYWxsb2Nfb2Jqc2Agc3VwcG9zZWQgdG8gdGFrZSBhIGBzaXplX3RgPyBNYXliZSBpdCdzIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHRoYXQncyBiZWluZyBwYXNzZWQgaW4gYG5wYWdlc2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGlvX3Bpbl9wYWdlc2AgZnVuY3Rpb24gaW4gYGlvX3VyaW5nL21lbW1hcC5jYCB0byBjb25maXJtIHRoZSBwYXJhbWV0ZXIgdHlwZXMgYW5kIGhvdyBgbnJfcGFnZXNgIGlzIGFjdHVhbGx5IHVzZWQuIE5lZWQgdG8gYmUgc3VyZSBvZiB0aGUgcHJlY2lzZSBjb250ZXh0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToxNS42MzIxNTc1NTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9tZW1tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIG5yX3BhZ2VzO1xcbiAgNDM6XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4gIDQ0OlxcdFxcdGludCByZXQ7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmIChjaGVja19hZGRfb3ZlcmZsb3codWFkZHIsIGxlbiwgXFx1MDAyNmVuZCkpXFxuICA0NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gIDQ4OlxcdFxcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coZW5kLCBQQUdFX1NJWkUgLSAxLCBcXHUwMDI2ZW5kKSlcXG4gIDQ5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRlbmQgPSBlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gIDUyOlxcdFxcdHN0YXJ0ID0gdWFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gIDUzOlxcdFxcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XFxuICA1NDpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXFxuICA1NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gIDU2OlxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXFxuICA1NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiAgNjA6XFx0XFx0aWYgKCFwYWdlcylcXG4gIDYxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuICA2NDpcXHRcXHRcXHRcXHRcXHRcXHRwYWdlcyk7XFxuICA2NTpcXHRcXHQvKiBzdWNjZXNzLCBtYXBwZWQgYWxsIHBhZ2VzICovXFxuICA2NjpcXHRcXHRpZiAocmV0ID09IG5yX3BhZ2VzKSB7XFxuICA2NzpcXHRcXHRcXHQqbnBhZ2VzID0gbnJfcGFnZXM7XFxuICA2ODpcXHRcXHRcXHRyZXR1cm4gcGFnZXM7XFxuICA2OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjE1LjYzMjI1Nzc3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTgxNTY0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUsIHNwZWNpZmljYWxseSB3aXRoIGBucl9wYWdlc2AuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoaXMgY291bGQgYmVjb21lIGEgcHJvYmxlbSBpZiBgbnJfcGFnZXNgIGVuZHMgdXAgYmVpbmcgc2lnbmlmaWNhbnRseSBsYXJnZXIgdGhhbiBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAuIFRoYXQncyB0aGUgY2xhc3NpYyBzY2VuYXJpby4gSWYgdGhhdCBoYXBwZW5zLCBga3ZtYWxsb2Nfb2Jqc2AgZ2V0cyBjYWxsZWQgd2l0aCBhIHZhbHVlIHRoYXQgaGFzIHdyYXBwZWQgYXJvdW5kIGR1ZSB0byB0aGUgb3ZlcmZsb3cuICBIb2xkIG9uLCBga3ZtYWxsb2Nfb2Jqc2AgdGFrZXMgYHNpemVfdGAgZm9yIGl0cyBhbGxvY2F0aW9uIHNpemUsIHNvIGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93LCBpdCB3b3VsZCBiZSBhIHByb2JsZW0uIE5vdyBJJ20gdGhpbmtpbmcsIHdhaXQgYSBtaW51dGUsIGBrdm1hbGxvY19vYmpzYCBsb29rcyBsaWtlIGl0J3MgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaGVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBuZWVkIHRvIGtub3cgaWYgYGt2bWFsbG9jX29ianNgIGlzIGEgbWFjcm8gb3IgZnVuY3Rpb24uIEFjdHVhbGx5LCBgbnJfcGFnZXNgIGlzIGB1bnNpZ25lZCBsb25nYCwgc28gdGhhdCBwb3RlbnRpYWxseSBleHBhbmRzIHRoZSBwcm9ibGVtIHNwYWNlLCBidXQgdGhlIGRpdmlzaW9uIHJlc3VsdCwgYElOVF9NQVggLyA4YCwgd291bGQgYmUgdGhlIHBvaW50IG9mIHRoZSBvdmVyZmxvdy5cblxuSSdtIHByZXR0eSBzdXJlIGBrdm1hbGxvY19vYmpzYCBtaWdodCBqdXN0IGJlIGEgbWFjcm8gd3JhcHBpbmcgYXJvdW5kIGBrdm1hbGxvY19hcnJheWAuICBUaGF0J3MgbXkgaHVuY2guIFRpbWUgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBMZXQncyBzZWUgaG93IGBpb19waW5fcGFnZXNgIGlzIHVzaW5nIGl0IGFuZCBmb2xsb3cgdGhlIGNhbGwgc3RhY2suIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGUgY2FsbGVycyB0byBzZWUgaWYgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToyMC4wNTA0MTY1MjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3NDA2NTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19waW5fcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0PTExMz1kZXZpY2VzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0LTE0Mi0gIG9mIHRoZSBpb3ZhXFx1MDAzYy1cXHUwMDNldmFkZHIgbWFwcGluZ3MgaW4gdGhpcyBvcGVyYXRpb24uIEFuZCB0aGV5IGV4cG9ydCBhXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0OjE0MzogIHZmaW9fcGluX3BhZ2VzIGFuZCBhIHZmaW9fdW5waW5fcGFnZXMgaW50ZXJmYWNlcyBmcm9tIHRoZSB2ZmlvIGlvbW11XFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0LTE0NC0gIGJhY2tlbmQgZm9yIHRoZSBwaHlzaWNhbCBkZXZpY2VzIHRvIHBpbiBhbmQgdW5waW4gcGFnZXMgYnkgZGVtYW5kLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdD0yNTM9ZHJpdmVyOjpcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0LTI1NC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0OjI1NTpcXHRpbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0LTI1Ni1cXHRcXHRcXHRcXHQgIGludCBucGFnZSwgaW50IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmM9MTM3PXN0YXRpYyBpbnQgZ3Z0X3Bpbl9ndWVzdF9wYWdlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1bnNpZ25lZCBsb25nIGdmbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTE1Mi1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYzoxNTM6XFx0XFx0cmV0ID0gdmZpb19waW5fcGFnZXMoXFx1MDAyNnZncHUtXFx1MDAzZXZmaW9fZGV2aWNlLCBjdXJfaW92YSwgMSxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xNTQtXFx0XFx0XFx0XFx0ICAgICBJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIFxcdTAwMjZjdXJfcGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTU1LVxcdFxcdGlmIChyZXQgIT0gMSkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjE1NjpcXHRcXHRcXHRndnRfdmdwdV9lcnIoXFxcInZmaW9fcGluX3BhZ2VzIGZhaWxlZCBmb3IgaW92YSAlcGFkLCByZXQgJWRcXFxcblxcXCIsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTU3LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1cl9pb3ZhLCByZXQpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jPTkxPXN0YXRpYyB2b2lkIHBhZ2VfYXJyYXlfdW5waW4oc3RydWN0IHBhZ2VfYXJyYXkgKnBhLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTEyNS0gKiBSZXF1ZXN0cyB0byBwaW4gXFxcImFsaWduZWRcXFwiIHBhZ2VzIGNhbiBiZSBjb2FsZXNjZWQgaW50byBhIHNpbmdsZVxcbmRyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfY3AuYzoxMjY6ICogdmZpb19waW5fcGFnZXMgcmVxdWVzdCBmb3IgdGhlIHNha2Ugb2YgZWZmaWNpZW5jeSwgYmFzZWQgb24gdGhlXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTEyNy0gKiBleHBlY3RhdGlvbiBvZiA0SyBwYWdlIHJlcXVlc3RzLiBVbmFsaWduZWQgcmVxdWVzdHMgYXJlIHByb2JhYmx5XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmM9MTMxPXN0YXRpYyBpbnQgcGFnZV9hcnJheV9waW4oc3RydWN0IHBhZ2VfYXJyYXkgKnBhLCBzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIGJvb2wgdW5hbGlnbmVkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTE0Ni1cXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmM6MTQ3OlxcdFxcdHJldCA9IHZmaW9fcGluX3BhZ2VzKHZkZXYsICpmaXJzdCwgbnBhZ2UsXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTE0OC1cXHRcXHRcXHRcXHQgICAgIElPTU1VX1JFQUQgfCBJT01NVV9XUklURSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zNTE9c3RhdGljIGludCB2ZmlvX2FwX3ZhbGlkYXRlX25pYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGRtYV9hZGRyX3QgKm5pYilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNjctICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgTklCIHBhZ2UsIHdoaWNoIGhhcyBiZWVuIHBpbm5lZCB3aXRoXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM2ODogKiB2ZmlvX3Bpbl9wYWdlcygpLCBpcyBhIHNoYXJlZCBwYWdlIGJlbG9uZ2luZyB0byBhIHNlY3VyZSBndWVzdC5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzY5LSAqXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzcxLSAqIChpLmUuIGlmIHRoZSBOSUIgYmVsb25ncyB0byBhIHNlY3VyZSBndWVzdCBhbmQgaXMgc2hhcmVkKSwgdGhlbiAwXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM3MjogKiAoc3VjY2VzcykgaXMgcmV0dXJuZWQuIElmIHRoZSBOSUIgd2FzIG5vdCBzaGFyZWQsIHZmaW9fcGluX3BhZ2VzKCkgaGFkXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM3My0gKiBleHBvcnRlZCBpdCBhbmQgbm93IGl0IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2VjdXJlIGd1ZXN0IGFueW1vcmUuIEluXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzc2LSAqIENvbnRleHQ6IHRoZSBOSUIgKGF0IHBoeXNpY2FsIGFkZHJlc3MgQGFkZHIpIGhhcyB0byBiZSBwaW5uZWQgd2l0aFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNzc6ICpcXHQgICAgdmZpb19waW5fcGFnZXMoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNzgtICpcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zODE9c3RhdGljIGludCBlbnN1cmVfbmliX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzg0LVxcdCAqIFRoZSBuaWIgaGFzIHRvIGJlIGxvY2F0ZWQgaW4gc2hhcmVkIHN0b3JhZ2Ugc2luY2UgZ3Vlc3QgYW5kXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM4NTpcXHQgKiBob3N0IGFjY2VzcyBpdC4gdmZpb19waW5fcGFnZXMoKSB3aWxsIGRvIGEgcGluIHNoYXJlZCBhbmRcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzg2LVxcdCAqIGlmIHRoYXQgZmFpbHMgKHBvc3NpYmx5IGJlY2F1c2UgaXQncyBub3QgYSBzaGFyZWQgcGFnZSkgaXRcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00MDgtICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NDA5OiAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00MTAtICpcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz00MTY9c3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTQzOS1cXHQvKiBUaGUgcGluIHdpbGwgcHJvYmFibHkgYmUgc3VjY2Vzc2Z1bCBldmVuIGlmIHRoZSBOSUIgd2FzIG5vdCBzaGFyZWQgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NDQwOlxcdHJldCA9IHZmaW9fcGluX3BhZ2VzKFxcdTAwMjZxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNldmRldiwgbmliLCAxLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDEtXFx0XFx0XFx0ICAgICBJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIFxcdTAwMjZoX3BhZ2UpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTQ0NS1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo0NDY6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDctXFx0XFx0XFx0XFx0IFxcXCJuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvdmZpby9pb21tdWZkLmM9MjI1PUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9faW9tbXVmZF9waHlzaWNhbF9wYXNpZF9kZXRhY2hfaW9hcyk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXFxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYzoyMjk6ICogXFxcIm1kZXYgcGF0aFxcXCIgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xcbmRyaXZlcnMvdmZpby9pb21tdWZkLmMtMjMwLSAqIG9wcyBzZXQgc2hvdWxkIGNhbGwgdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoKS4gRHJpdmVycyB0aGF0IGRvXFxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYzoyMzE6ICogbm90IGNhbGwgdmZpb19waW5fcGFnZXMoKS92ZmlvX2RtYV9ydygpIGhhdmUgbm8gbmVlZCB0byBwcm92aWRlIGRtYV91bm1hcC5cXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIzMi0gKi9cXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NjM4PXN0YXRpYyBsb25nIHZwZm5fcGFnZXMoc3RydWN0IHZmaW9fZG1hICpkbWEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTY3NC0gKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjY3NTpzdGF0aWMgbG9uZyB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoc3RydWN0IHZmaW9fZG1hICpkbWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5wYWdlLCB1bnNpZ25lZCBsb25nICpwZm5fYmFzZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9ODkzPXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9waW5fcGFnZXModm9pZCAqaW9tbXVfZGF0YSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtOTIxLVxcdGlmIChXQVJOX09OQ0UoaW9tbXUtXFx1MDAzZXZhZGRyX2ludmFsaWRfY291bnQsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo5MjI6XFx0XFx0ICAgICAgXFxcInZmaW9fcGluX3BhZ2VzIG5vdCBhbGxvd2VkIHdpdGggVkZJT19VUERBVEVfVkFERFJcXFxcblxcXCIpKSB7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy05MjMtXFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTgwPXN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk0LVxcdFxcdC8qIFBpbiBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5ICovXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTk1OlxcdFxcdG5wYWdlID0gdmZpb19waW5fcGFnZXNfcmVtb3RlKGRtYSwgdmFkZHIgKyBkbWEtXFx1MDAzZXNpemUsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCwgXFx1MDAyNnBmbiwgbGltaXQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE4MDM9c3RhdGljIGludCB2ZmlvX2lvbW11X3JlcGxheShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE4NjItXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxODYzOlxcdFxcdFxcdFxcdG5wYWdlID0gdmZpb19waW5fcGFnZXNfcmVtb3RlKGRtYSwgdmFkZHIsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xODY0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xNjc1PUVYUE9SVF9TWU1CT0wodmZpb19zZXRfaXJxc192YWxpZGF0ZV9hbmRfcHJlcGFyZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTY5MC0gKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTY5MTppbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTY5Mi1cXHRcXHQgICBpbnQgbnBhZ2UsIGludCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTE3MjItfVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxNzIzOkVYUE9SVF9TWU1CT0wodmZpb19waW5fcGFnZXMpO1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xNzI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvLmg9MzgwPXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0zODMtXFxuaW5jbHVkZS9saW51eC92ZmlvLmg6Mzg0OmludCB2ZmlvX3Bpbl9wYWdlcyhzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgZG1hX2FkZHJfdCBpb3ZhLFxcbmluY2x1ZGUvbGludXgvdmZpby5oLTM4NS1cXHRcXHQgICBpbnQgbnBhZ2UsIGludCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE4PXN0YXRpYyBib29sIGlvX21lbV9hbGxvY19jb21wb3VuZChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0zOS1cXG5pb191cmluZy9tZW1tYXAuYzo0MDpzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDEte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTM0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX3Bpbl9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xNDAtXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTQxOlxcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHJlZy1cXHUwMDNldXNlcl9hZGRyLCBzaXplLCBcXHUwMDI2bnJfcGFnZXMpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTE0Mi1cXHRpZiAoSVNfRVJSKHBhZ2VzKSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTktXFxuaW9fdXJpbmcvbWVtbWFwLmg6MTA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKTtcXG5pb191cmluZy9tZW1tYXAuaC0xMS1cXG4tLVxcbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtODgzLVxcdHJldCA9IC1FTk9NRU07XFxuaW9fdXJpbmcvcnNyYy5jOjg4NDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVxcdTAwM2Vpb3ZfYmFzZSwgaW92LVxcdTAwM2Vpb3ZfbGVuLFxcbmlvX3VyaW5nL3JzcmMuYy04ODUtXFx0XFx0XFx0XFx0XFx1MDAyNm5yX3BhZ2VzKTtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0yMDI9c3RhdGljIGludCBpb19pbXBvcnRfdW1lbShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yMTMtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuaW9fdXJpbmcvemNyeC5jOjIxNDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZylhcmVhX3JlZy1cXHUwMDNlYWRkciwgYXJlYV9yZWctXFx1MDAzZWxlbixcXG5pb191cmluZy96Y3J4LmMtMjE1LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjIyLjYyNDQ4ODk4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDk1NDAyNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGlvX3VyaW5nIE1lbW9yeSBBbGxvY2F0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgaW9fcGluX3BhZ2VzYC4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMgaW4gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbTogYGlvX3JlZ2lvbl9waW5fcGFnZXNgLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9faW1wb3J0X3VtZW1gLiBDbGVhcmx5LCB0aGlzIGlzIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSwgc28gaXQncyBpbXBvcnRhbnQuXG5cblRoZSBjaGFuZ2UgaXRzZWxmIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gcHJldmVudCBhbiBpbnRlZ2VyIG92ZXJmbG93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU2hvdWxkIHdlIGZ1enogdGhpcz9cIiBBYnNvbHV0ZWx5LCB5ZXMuIEFueSBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gaW9fdXJpbmcgbmVlZHMgdGhvcm91Z2ggdGVzdGluZy4gV2Ugd2FudCB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIHRoYXQgbWlnaHQgYnJlYWsgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuIEFsdGhvdWdoLCBgSU5UX01BWCAvIDhgIGVxdWF0ZXMgdG8gYXJvdW5kIDI1Nk0gcGFnZXMsIHdoaWNoIGFtb3VudHMgdG8gMVRCIG9mIG1lbW9yeS4gVGhpcyBzaG91bGQgcHJldmVudCB0aGUgYnJlYWthZ2Ugb2YgdmFsaWQgYWxsb2NhdGlvbnMuXG5cbldhaXQsIHRoZSBtYXRoIGhlcmUgaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlOiBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgaXMgYDIxNDc0ODM2NDcgLyA4ID0gMjY4NDM1NDU1YC4gVGhhdCdzIGltcG9ydGFudC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzLiBgbnJfcGFnZXNgIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gSWYgYG5yX3BhZ2VzYCBiZWNvbWVzIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gOGAsIHdvdWxkIHRoaXMgY2F1c2UgYW4gaW50ZXJuYWwgc2l6ZSBjYWxjdWxhdGlvbiBvdmVyZmxvdz8gSSB0aG91Z2h0IGFib3V0IHRoaXMsIGJ1dCwgbm8sIGBrdm1hbGxvY19vYmpzYCB1c2VzIGBzaXplX3RgIGludGVybmFsbHksIHdoaWNoIHNob3VsZCBwcmV2ZW50IHRoZSBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbi5cblxuSG93ZXZlciwgaG9sZCBvbiBhIHNlY29uZC4gYG5wYWdlc2AgaXMgYW4gYGludCAqbnBhZ2VzYC4gU28sIHRoZSBhc3NpZ25tZW50IGAqbnBhZ2VzID0gbnJfcGFnZXM7YCB3aWxsIG92ZXJmbG93IGlmIGBucl9wYWdlcyBcdTAwM2UgSU5UX01BWGAuIEFoLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYGlmIChXQVJOX09OX09OQ0UobnJfcGFnZXMgXHUwMDNlIElOVF9NQVgpKWAuXG5cblRoZSBuZXcgY29kZSBoYXMgYGlmIChucl9wYWdlcyBcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSlgLiBUaGlzIG5vdyBpbXBvc2VzIGEgbXVjaCBzdHJpY3RlciBsaW1pdCwgcHJldmVudGluZyBgbnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKilgIGZyb20gb3ZlcmZsb3dpbmcgYElOVF9NQVhgLiBCdXQsIGBrdm1hbGxvY19vYmpzYCB0YWtlcyBgc2l6ZV90YCwgc28gYG5yX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopYCBzaG91bGRuJ3Qgb3ZlcmZsb3cgYHNpemVfdGAgdW5sZXNzIGBucl9wYWdlc2AgaXMgYWJzb2x1dGVseSBodWdlLiBEb2VzIHNvbWV0aGluZyBlbHNlIGluc2lkZSB1c2UgYGludGAgZm9yIHRoZSBzaXplLCB0aG91Z2g/XG5cbk9rYXksIGxldCdzIGNsYXJpZnkgdGhhdCBga3ZtYWxsb2Nfb2Jqc2AgaXMgYSBtYWNybzogYCNkZWZpbmUga3ZtYWxsb2Nfb2Jqcyh0eXBlLCBuLCBmbGFncykga3ZtYWxsb2NfYXJyYXkobiwgc2l6ZW9mKHR5cGUpLCBmbGFncylgLiBga3ZtYWxsb2NfYXJyYXlgIGl0c2VsZiB0YWtlcyBgc2l6ZV90IG4sIHNpemVfdCBzaXplYC5cblxuV2h5IHRoZSBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgbGltaXQgdGhlbj8gQWgsIEkgc2VlLCBpdCBtaWdodCByZWxhdGUgdG8gYE1BWF9SV19DT1VOVGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwgd2hpY2ggbWlnaHQgdXNlIGFuIGBpbnRgIGludGVybmFsbHkuXG5cbkFoYSEgYElOVF9NQVhgIGlzIDJHQi4gYElOVF9NQVggLyA4YCAod2hlcmUgOCBpcyB0aGUgc2l6ZSBvZiBhIHBhZ2UgcG9pbnRlcikgaXMgMjU2TUIuIFNvLCB0aGUgYXJyYXkgb2YgcG9pbnRlcnMgY2FuIGJlIGF0IG1vc3QgMjU2TUIuXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gaW9fdXJpbmcgdGhhdCByZXN0cmljdHMgdGhlIG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBkdWUgdG8gdGhlIHNpemUgb2YgdGhlIHBhZ2UgcG9pbnRlciBhcnJheS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBvdmVyZmxvd3MuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgaW9fdXJpbmcgaXMgYWN0dWFsbHkgZW5hYmxlZC4gYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSwgYnV0IGFyZSB0aGVyZSBhbnkgcmVsYXRlZCBjb25maWdzPyBMZXQgbWUgbG9vayBpbiBgaW9fdXJpbmcvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NTozMi43MTk5MDcwNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNjAwODQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTQtXFxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTYtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzYtXFxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTM4LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6MzUuNDI1OTIxMTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE1MjcwNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbioqRm9jdXNpbmcgb24gaW9fdXJpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCdzIHRoZSBmb3VuZGF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBOb3csIHdoZXJlIGRvIHdlIGdvIGZyb20gdGhlcmU/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlLi4uSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgd29ya3MgYXQgYSBmdW5jdGlvbmFsIGxldmVsLCBzbyBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaW9fdXJpbmcvemNyeC5jYCBhbmQgYGlvX3VyaW5nL3JzcmMuY2AuIFRob3NlIHNlZW0gbGlrZSBzZW5zaWJsZSBzdGFydGluZyBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIHByb2Nlc3NlcyBpbnZvbHZlZC4gVGhleSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjM4Ljc0MTE5NDM4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MDgzNzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19zcWVfYnVmZmVyX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3JzcmMuYz0yMz1zdHJ1Y3QgaW9fcnNyY191cGRhdGUge1xcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTI5LVxcbmlvX3VyaW5nL3JzcmMuYzozMDpzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9yc3JjLmMtMzEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvdmVjICppb3YpO1xcbi0tXFxuaW9fdXJpbmcvcnNyYy5jPTM2Nz1zdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTM5Ni1cXHRcXHR9XFxuaW9fdXJpbmcvcnNyYy5jOjM5NzpcXHRcXHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XFxuaW9fdXJpbmcvcnNyYy5jLTM5OC1cXHRcXHRpZiAoSVNfRVJSKG5vZGUpKSB7XFxuLS1cXG5pb191cmluZy9yc3JjLmM9ODA4PWJvb2wgaW9fY2hlY2tfY29hbGVzY2VfYnVmZmVyKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgaW50IG5yX3BhZ2VzLFxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTg1NC1cXG5pb191cmluZy9yc3JjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbmlvX3VyaW5nL3JzcmMuYy04NTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvdmVjICppb3YpXFxuLS1cXG5pb191cmluZy9yc3JjLmM9OTUwPWludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy05OTQtXFxuaW9fdXJpbmcvcnNyYy5jOjk5NTpcXHRcXHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XFxuaW9fdXJpbmcvcnNyYy5jLTk5Ni1cXHRcXHRpZiAoSVNfRVJSKG5vZGUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjQxLjExMjA0MTYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODA1Nzg1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBjYWxscyByZWxhdGVkIHRvIGJ1ZmZlciByZWdpc3RyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhlIGJ1ZmZlciByZWdpc3RyYXRpb24gbG9naWMuIEkndmUgbm90ZWQgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zOiBgX19pb19zcWVfYnVmZmVyc191cGRhdGVgIGFuZCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgYXJlIHJlYWNoZWQgdGhyb3VnaCB0aGUgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXN0ZW0gY2FsbCwgd2hlbiB1c2luZyB0aGUgYElPUklOR19SRUdJU1RFUl9CVUZGRVJTYCBhbmQgYElPUklOR19SRUdJU1RFUl9CVUZGRVJTX1VQREFURWAgb3B0aW9ucywgb2YgY291cnNlLlxuXG5Ob3csIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwaW5uaW5nLiBMZXQncyBzZWUgaG93IG1lbW9yeSBpcyBhY3R1YWxseSBtYXBwZWQgYW5kIG1hbmFnZWQgZm9yIHRoZXNlIHJlZ2lzdGVyZWQgYnVmZmVycy4gSSBzaG91bGQgcHJvYmFibHkgYmUgZXhhbWluaW5nIGBpb19yZWdpb25fcGluX3BhZ2VzYCBsb2NhdGVkIHdpdGhpbiBgaW9fdXJpbmcvbWVtbWFwLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3Qgd2hlcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBwYWdlIHBpbm5pbmcgaXMgaGFwcGVuaW5nLCB3aGljaCBpcyBjcnVjaWFsIGZvciBkaXJlY3QgSS9PIGFuZCB1c2VyLXNwYWNlIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpbGwgYmUsIEkgc3VzcGVjdC4gVGltZSB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjQ0LjY5MjYyMzIyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTY5NDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWdpb25fcGluX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL21lbW1hcC5jPTExND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9pbml0X3B0cihzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xMzMtXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTM0OnN0YXRpYyBpbnQgaW9fcmVnaW9uX3Bpbl9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuaW9fdXJpbmcvbWVtbWFwLmMtMTM1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZylcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE4ND1pbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMjE3LVxcdGlmIChyZWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSKVxcbmlvX3VyaW5nL21lbW1hcC5jOjIxODpcXHRcXHRyZXQgPSBpb19yZWdpb25fcGluX3BhZ2VzKG1yLCByZWcpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTIxOS1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjQ3LjIwODMyOTg2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg1NTQzOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBpb19jcmVhdGVfcmVnaW9uYCwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipQaW5wb2ludGluZyB0aGUgT3JpZ2lucyBvZiBgaW9fY3JlYXRlX3JlZ2lvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgYGlvX2NyZWF0ZV9yZWdpb25gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAqKndoZXJlIGlzIHRoaXMgdGhpbmcgY2FsbGVkIGZyb20/KiogSXMgaXQgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbj8gQSB1c2VyLXNwYWNlIGxpYnJhcnkgY2FsbD8gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgbGlrZSBuZXR3b3JraW5nLCBibG9jayBJL08sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBtZSBjcml0aWNhbCBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIElzIGl0IHJlbGF0ZWQgdG8gdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCwgZGV2aWNlIG1hcHBpbmcsIG9yIHNvbWUgb3RoZXIgSS9PIHJlc291cmNlIGFsbG9jYXRpb24/IEFuZCBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBhbGxvY2F0aW9uIHJvdXRpbmUgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCwgcGVyaGFwcyBpbnZvbHZpbmcgbG9ja2luZyBvciByZXNvdXJjZSBwcm90ZWN0aW9uPyBUaGUgb3JpZ2luIGlzIHRoZSBrZXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NTo1MC4xOTM4NzY0MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQ1Njc4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fY3JlYXRlX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTI3MjY9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0NC1cXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzQ1OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VyaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0Ni1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzU4LVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjI3NTk6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc2MC1cXHRpZiAocmV0KSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmM9NjI1PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjczLVxcdH1cXG5pb191cmluZy9rYnVmLmM6Njc0OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2YmwtXFx1MDAzZXJlZ2lvbiwgXFx1MDAyNnJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcva2J1Zi5jLTY3NS1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTUyPXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE4My1cXG5pb191cmluZy9tZW1tYXAuYzoxODQ6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG5pb191cmluZy9tZW1tYXAuYy0xODUtXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTIwPXZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xcbmlvX3VyaW5nL21lbW1hcC5oOjIxOmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuaW9fdXJpbmcvbWVtbWFwLmgtMjItXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzAtXFx0fVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTMxOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2bi5yaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMyLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTU2MC1cXHR9XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1NjE6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZuLnNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NjkyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTcyMS1cXG5pb191cmluZy9yZWdpc3Rlci5jOjcyMjpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNnJlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfTUFQX09GRl9QQVJBTV9SRUdJT04pO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzIzLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy96Y3J4LmM9MzgwPXN0YXRpYyBpbnQgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTM5OS1cXG5pb191cmluZy96Y3J4LmM6NDAwOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2aWZxLVxcdTAwM2VycV9yZWdpb24sIHJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcvemNyeC5jLTQwMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6NTIuNTY4NDUyMzI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDI1NzQxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGlvX2NyZWF0ZV9yZWdpb25gIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvIGBpb19jcmVhdGVfcmVnaW9uYCBiZWluZyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG1lbW9yeSByZWdpb24gY3JlYXRpb24gd2l0aGluIHRoZSBJL08gcmluZyBmcmFtZXdvcmsuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGBpb19hbGxvY2F0ZV9zY3FfdXJpbmdzYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgaW5pdGlhbCBgaW9fdXJpbmdfc2V0dXBgLCBzdWdnZXN0aW5nIGl0cyBmdW5kYW1lbnRhbCB0byByaW5nIGluaXRpYWxpemF0aW9uLiBUaGVuIHRoZXJlJ3MgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCBhbmQgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIOKAkyBhbGwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgcmluZyByZWdpc3RyYXRpb24gYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBtYW5hZ2VtZW50LiBBbHNvLCBJIHNlZSBgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nYCBpcyBhIGNvbnN1bWVyLCBhbmQgbG9jYXRlZCBpbiBhIHpjcnggY29udGV4dCBpbiBgaW9fdXJpbmcvemNyeC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkZyb20gdGhpcyBJIGNhbiBkZWR1Y2UgdGhhdCBgaW9fY3JlYXRlX3JlZ2lvbmAgaXMgbGlrZWx5IHVzZWQgdG8gcHJlcGFyZSBtZW1vcnkgcmVnaW9ucyBmb3IgdmFyaW91cyByaW5nIHR5cGVzIGFuZCBhc3NvY2lhdGVkIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgdGhlIHJlYWxseSBpbXBvcnRhbnQgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGxvb2sgaW50byBpbiBtb3JlIGRldGFpbCBhcmU6IGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAsIGBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZWAsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYCwgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gLCBhbmQgYGlvX3JlZ2lzdGVyX3pjcnhfaWZxYC4gVGhlc2UgYXJlIHRoZSBrZXkgcmVnaXN0cmF0aW9uIGFuZCB1cGRhdGUgZnVuY3Rpb25zIHRoYXQgZGVwZW5kIG9uIHRoZSBgaW9fY3JlYXRlX3JlZ2lvbmAgY2FsbC5cblxuQWgsIHdhaXQuIExldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgaW9fcmVnaXN0ZXJfemNyeF9pZnFgIGlzIGluZGVlZCBsb2NhdGVkIGluIGBpb191cmluZy96Y3J4LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTU1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjU3LjI3MTAyOTM5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1Mzk2MDY0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfemNyeF9pZnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjAwLjAyNTAwMDY0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE2ODA5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaW9faW1wb3J0X3VtZW1gIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiBob3cgYGlvX2ltcG9ydF91bWVtYCBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aG8ncyBjYWxsaW5nIGl0LiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgXCJzZWFyY2ggYW5kIHJlcGxhY2VcIiBzY2VuYXJpbywgdGhpcyByZXF1aXJlcyBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIGNvZGUncyBjYWxsIGdyYXBoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSBgaW9faW1wb3J0X3VtZW1gIGlzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MDMuMzQxODE1Mjc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg1MzA2MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2ltcG9ydF91bWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3pjcnguYz0xODU9c3RhdGljIHVuc2lnbmVkIGxvbmcgaW9fY291bnRfYWNjb3VudF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBucl9wYWdlcylcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yMDEtXFxuaW9fdXJpbmcvemNyeC5jOjIwMjpzdGF0aWMgaW50IGlvX2ltcG9ydF91bWVtKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxcbmlvX3VyaW5nL3pjcnguYy0yMDMtXFx0XFx0XFx0ICBzdHJ1Y3QgaW9femNyeF9tZW0gKm1lbSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0yNjg9c3RhdGljIGludCBpb19pbXBvcnRfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yODgtXFx0XFx0cmV0dXJuIGlvX2ltcG9ydF9kbWFidWYoaWZxLCBtZW0sIGFyZWFfcmVnKTtcXG5pb191cmluZy96Y3J4LmM6Mjg5OlxcdHJldHVybiBpb19pbXBvcnRfdW1lbShpZnEsIG1lbSwgYXJlYV9yZWcpO1xcbmlvX3VyaW5nL3pjcnguYy0yOTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjowNS43MjcxMzAxNjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NTY3MTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBpb19pbXBvcnRfYXJlYWAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBpbnZlc3RpZ2F0aW5nIHRoZSBjYWxsZXJzIG9mIHRoZSBgaW9faW1wb3J0X2FyZWFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8ncyB1c2luZyBpdCwgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbSwgYW5kIHdpdGggd2hhdCBwYXJhbWV0ZXJzLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtYXAgb3V0IGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3VlcyB0byByZWZhY3RvcmluZyBvciBvcHRpbWl6aW5nIHRoZSBjb2RlLiBHcmFzcGluZyB0aGUgY2FsbCBncmFwaCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcXVpY2tseSByZXZlYWwgaXRzIGRlcGVuZGVuY2llcyBhbmQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFwcGxpY2F0aW9uLiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjowOC40NzI4MDQ5MzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzMxNTYzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9faW1wb3J0X2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvemNyeC5jPTI1NT1zdGF0aWMgdm9pZCBpb19yZWxlYXNlX2FyZWFfbWVtKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTI2Ny1cXG5pb191cmluZy96Y3J4LmM6MjY4OnN0YXRpYyBpbnQgaW9faW1wb3J0X2FyZWEoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXFxuaW9fdXJpbmcvemNyeC5jLTI2OS1cXHRcXHRcXHQgIHN0cnVjdCBpb196Y3J4X21lbSAqbWVtLFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTQ1MD1zdGF0aWMgaW50IGlvX3pjcnhfY3JlYXRlX2FyZWEoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtNDczLVxcbmlvX3VyaW5nL3pjcnguYzo0NzQ6XFx0cmV0ID0gaW9faW1wb3J0X2FyZWEoaWZxLCBcXHUwMDI2YXJlYS1cXHUwMDNlbWVtLCBhcmVhX3JlZyk7XFxuaW9fdXJpbmcvemNyeC5jLTQ3NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjoxMC44NDU5Njc5NzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMjQyNTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgaW9femNyeF9jcmVhdGVfYXJlYWAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYGlvX3pjcnhfY3JlYXRlX2FyZWFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgcGF0dGVybnMuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUgdG8gaWRlbnRpZnkgdGhlIGRpZmZlcmVudCBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGFyZWEgY3JlYXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gSSBleHBlY3QgdGhhdCBhIHF1aWNrIHNjYW4gb2YgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBwcmltYXJ5IHB1cnBvc2VzLCBob3BlZnVsbHkgcmV2ZWFsaW5nIGlmIGl0IGlzIGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQuIFBlcmhhcHMgdGhlcmUgYXJlIHNvbWUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgYXJlYSBpcyBiZWluZyBpbml0aWFsaXplZCBhbmQgYWNjZXNzZWQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjEzLjY1ODM5NjU5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2ODk3NTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb196Y3J4X2NyZWF0ZV9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3pjcnguYz00MzY9c3RhdGljIGludCBpb196Y3J4X2FwcGVuZF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTQ0OS1cXG5pb191cmluZy96Y3J4LmM6NDUwOnN0YXRpYyBpbnQgaW9femNyeF9jcmVhdGVfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG5pb191cmluZy96Y3J4LmMtNDUxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfemNyeF9hcmVhX3JlZyAqYXJlYV9yZWcsXFxuLS1cXG5pb191cmluZy96Y3J4LmM9ODE1PXN0YXRpYyBpbnQgemNyeF9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtODM2LVxcbmlvX3VyaW5nL3pjcnguYzo4Mzc6XFx0cmV0ID0gaW9femNyeF9jcmVhdGVfYXJlYShpZnEsIGFyZWEsIHJlZyk7XFxuaW9fdXJpbmcvemNyeC5jLTgzOC1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTg4Mz1pbnQgaW9fcmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy05ODUtXFx0fSBlbHNlIHtcXG5pb191cmluZy96Y3J4LmM6OTg2OlxcdFxcdHJldCA9IGlvX3pjcnhfY3JlYXRlX2FyZWEoaWZxLCBcXHUwMDI2YXJlYSwgXFx1MDAyNnJlZyk7XFxuaW9fdXJpbmcvemNyeC5jLTk4Ny1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjoxNi4wMjczNzgxNTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNjQwMDM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpb19yZWdpc3Rlcl96Y3J4YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpb19yZWdpc3Rlcl96Y3J4YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbi4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGlvX3VyaW5nYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBpbiBlaXRoZXIgYHJlZ2lzdGVyLmNgIG9yLCBnaXZlbiB0aGUgbmFtZSwgbWF5YmUgZXZlbiBgemNyeC5jYC4gQWgsIHJpZ2h0LCBpdCdzIGFjdHVhbGx5IGluIGBpb191cmluZy96Y3J4LmNgLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3cgSSBuZWVkIHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXQuIExldCdzIHRoaW5rLi4uIGNsZWFybHksIGBDT05GSUdfSU9fVVJJTkdgIHdvdWxkIGJlIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGVuYWJsZXMgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBpbiBnZW5lcmFsLiBBbmQgYmFzZWQgb24gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBJJ2QgZXhwZWN0IHRoZXJlIHRvIGJlIGEgYENPTkZJR19JT19VUklOR19aQ1JYYCBjb25maWcgb3B0aW9uIGFzIHdlbGwuXG5cblRpbWUgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgbG9vayBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MTkuODUzNzgzNzkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgaW9fdXJpbmcgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSU9fVVJJTkdfWkNSWFxcbiAgIDc6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gIDEwOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBORVRfUlhfQlVTWV9QT0xMXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBJT19VUklOR19CUEZcXG4gIDE0OlxcdFxcdGRlZl9ib29sIHlcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbiAgMTk6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjE5Ljg1Mzg2Mjc3M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkxMTA5MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGlzIGtlcm5lbCBjb25maWcuIExldCdzIHNlZS4uLiBgSU9fVVJJTkdfWkNSWGAuIFJpZ2h0LCB0aGF0IGRlcGVuZHMgb24gYFBBR0VfUE9PTGAsIGBJTkVUYCwgYW5kIGBORVRfUlhfQlVTWV9QT0xMYC4gTWFrZXMgc2Vuc2UuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZW5hYmxlIGJvdGggYElPX1VSSU5HYCBhbmQgYElPX1VSSU5HX1pDUlhgLiBXYWl0IGEgbWludXRlLCBob2xkIG9uLi4uIGBJT19VUklOR19aQ1JYYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCEgU28sIGlmIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG1ldCwgaXQncyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJT19VUklOR2AgaXMgbGlzdGVkIGluIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgbXVzdC4gQW5kIHdhaXQsIHdoZXJlIGlzIGBJT19VUklOR2AgZGVmaW5lZD8gSSByZWNhbGwgaXQncyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gQmV0dGVyIGNoZWNrIHRoZXJlIHRvIGNvbmZpcm0gaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgSSBtaWdodCBoYXZlIG1pc3NlZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjoyMy4zNDQ5NzYzMDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTEwOlxcdFxcdGhlbHBcXG4xOTExOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXFxuMTkxMjpcXHRcXHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xcbjE5MTM6XFx0XFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cXG4xOTE0OlxcdFxcbjE5MTU6XFx0Y29uZmlnIElPX1VSSU5HXFxuMTkxNjpcXHRcXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuMTkxNzpcXHRcXHRzZWxlY3QgSU9fV1FcXG4xOTE4OlxcdFxcdGRlZmF1bHQgeVxcbjE5MTk6XFx0XFx0aGVscFxcbjE5MjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBpb191cmluZyBpbnRlcmZhY2UsIGVuYWJsaW5nXFxuMTkyMTpcXHRcXHQgIGFwcGxpY2F0aW9ucyB0byBzdWJtaXQgYW5kIGNvbXBsZXRlIElPIHRocm91Z2ggc3VibWlzc2lvbiBhbmRcXG4xOTIyOlxcdFxcdCAgY29tcGxldGlvbiByaW5ncyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUga2VybmVsIGFuZCBhcHBsaWNhdGlvbi5cXG4xOTIzOlxcdFxcbjE5MjQ6XFx0Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbjE5MjU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW1cXFwiXFxuMTkyNjpcXHRcXHRkZXBlbmRzIG9uIElPX1VSSU5HIFxcdTAwMjZcXHUwMDI2IEdDT1ZfS0VSTkVMXFxuMTkyNzpcXHRcXHRoZWxwXFxuMTkyODpcXHRcXHQgIEVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCB0byBmYWNpbGl0YXRlXFxuMTkyOTpcXHRcXHQgIGNvZGUgY292ZXJhZ2UgdGVzdGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MjMuMzQ1MjYzMTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExOTg4MTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBJT19VUklORyBEZXBlbmRlbmNpZXMgZm9yIGEgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYElPX1VSSU5HYCBpcyBzZXQgYXMgdGhlIGRlZmF1bHQsIHNvIGl0J3MgdGVjaG5pY2FsbHkgYWxyZWFkeSBlbmFibGVkLiBCdXQsIGFzIGEgc2Vhc29uZWQgcHJvLCBJIGtub3cgZ29vZCBjb25maWd1cmF0aW9uIGh5Z2llbmUgaXMgaW1wb3J0YW50LiBFeHBsaWNpdGx5IGxpc3RpbmcgaXQgaXMgYWx3YXlzIGEgc291bmQgcHJhY3RpY2UgZm9yIGNsYXJpdHkgYW5kIG1haW50YWluYWJpbGl0eS5cblxuTm93LCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgYElPX1VSSU5HX1pDUlhgIGhhdmluZyBzb21lIGRlcGVuZGVuY2llcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIGl0IHJlbGllcyBvbiBgUEFHRV9QT09MYCwgYElORVRgLCBhbmQgYE5FVF9SWF9CVVNZX1BPTExgLiBTaW5jZSBJIGFtIGN1cnJlbnRseSBmb2N1c2VkIG9uIGBJT19VUklOR19aQ1JYYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGNvcnJlY3QuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgTkVUX1JYX0JVU1lfUE9MTGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCdzIGNvcnJlY3RseSBjb25maWd1cmVkIGZvciBteSBpbnRlbmRlZCB1c2UgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0ODgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjI2LjQ2NTE0ODA1NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMTQ0MzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1JYX0JVU1lfUE9MTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNDI9Y29uZmlnIENHUk9VUF9ORVRfQ0xBU1NJRFxcbi0tXFxubmV0L0tjb25maWctMzQ5LVxcbm5ldC9LY29uZmlnOjM1MDpjb25maWcgTkVUX1JYX0JVU1lfUE9MTFxcbm5ldC9LY29uZmlnLTM1MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjI4Ljg3NjU5OTg2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDEzNzYyNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgYE5FVF9SWF9CVVNZX1BPTExgIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9SWF9CVVNZX1BPTExgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIGEgYGJvb2xgLCBhbmQgdGhlcmUncyBubyB2aXNpYmxlIHByb21wdCBhdHRhY2hlZCB0byBpdC4gVGhhdCAqaW1tZWRpYXRlbHkqIHRlbGxzIG1lIGl0J3Mgbm90IGEgdXNlci1mYWNpbmcgb3B0aW9uIHRoYXQncyBnb2luZyB0byBiZSBkaXJlY3RseSBzZWxlY3RlZCBkdXJpbmcgY29uZmlndXJhdGlvbi4gSW5zdGVhZCwgaXRzIHN0YXRlIGlzICpkZXJpdmVkKiBvciAqc2VsZWN0ZWQqIGJ5IHNvbWUgb3RoZXIgbWVjaGFuaXNtLCBsaWtlbHkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBidWlsZCBmbGFnLCBvciBwb3NzaWJseSBldmVuIGJhc2VkIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUgb3Iga2VybmVsIHZlcnNpb24uIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBjb25zaWRlciB3aGljaCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIHZhbHVlLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byB0cmFjZSBiYWNrIHRoZSBsb2dpYyB0aGF0IHNldHMgdGhpcywgdG8gdW5kZXJzdGFuZCBpdHMgdHJ1ZSBmdW5jdGlvbiBhbmQgd2h5IGl0J3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiBhIGdpdmVuIHNjZW5hcmlvLiBJcyBpdCBkZXBlbmRlbnQgb24gdGhlIGRyaXZlcj8gVGhlIE5JQyB0eXBlPyBNYXliZSBhbiBvdmVyYWxsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0J3Mgc2VsZWN0aXZlbHkgZW5hYmxlZD8gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODU0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzEuODkwMzY1NDA5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0NTAxNjc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX1JYX0JVU1lfUE9MTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzQuMzQ0ODg2NTY2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzY3MjA0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBORVRfUlhfQlVTWV9QT0xMYCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgbmV0d29yayBzdGFjaydzIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG5ldHdvcmstcmVsYXRlZCBzZXR0aW5ncy4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBsb29rIGRpcmVjdGx5IGludG8gYG5ldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGhlbHAgdGV4dCBmb3IgYW55dGhpbmcgbmV0d29yay1zcGVjaWZpYyBhbmQgY29uZmlndXJhYmxlIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgTkVUX1JYX0JVU1lfUE9MTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBrbm9iIGNvbnRyb2xzLCBpdHMgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBjb25maWd1cmF0aW9uIGNvbnRleHQuIEhvcGVmdWxseSwgYG5ldC9LY29uZmlnYCB3aWxsIHByb3ZpZGUgbWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzcuMjgxNjA5NDM0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0NTpcXHRcXHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxcbiAzNDY6XFx0XFx0aGVscFxcbiAzNDc6XFx0XFx0ICBDZ3JvdXAgc3Vic3lzdGVtIGZvciB1c2UgYXMgZ2VuZXJhbCBwdXJwb3NlIHNvY2tldCBjbGFzc2lkIG1hcmtlciB0aGF0IGlzXFxuIDM0ODpcXHRcXHQgIGJlaW5nIHVzZWQgaW4gY2xzX2Nncm91cCBhbmQgZm9yIG5ldGZpbHRlciBtYXRjaGluZy5cXG4gMzQ5OlxcdFxcbiAzNTA6XFx0Y29uZmlnIE5FVF9SWF9CVVNZX1BPTExcXG4gMzUxOlxcdFxcdGJvb2xcXG4gMzUyOlxcdFxcdGRlZmF1bHQgeSBpZiAhUFJFRU1QVF9SVCB8fCAoUFJFRU1QVF9SVCBcXHUwMDI2XFx1MDAyNiAhTkVUQ09OU09MRSlcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0Y29uZmlnIEJRTFxcbiAzNTU6XFx0XFx0Ym9vbFxcbiAzNTY6XFx0XFx0cHJvbXB0IFxcXCJFbmFibGUgQnl0ZSBRdWV1ZSBMaW1pdHNcXFwiXFxuIDM1NzpcXHRcXHRkZXBlbmRzIG9uIFNZU0ZTXFxuIDM1ODpcXHRcXHRzZWxlY3QgRFFMXFxuIDM1OTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzcuMjgxNjkxMDE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODI3MjY2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIERlZmF1bHQgTmV0d29yayBJTyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgc3lzdGVtIHNlZW1zIHRvIGJlIGRlZmF1bHRpbmcgdG8gYHlgIGZvciBzb21ldGhpbmcuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhhdCB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpcywgaXQgbWVhbnMgdGhhdCBgSU9fVVJJTkdfWkNSWGAgaXMgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0ICphcyBsb25nIGFzKiBgSU5FVGAgaXMgYWxzbyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgdGhhdCdzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gdGhlc2UgZGF5cy4gQnV0IHRoYXQgYnJpbmdzIHVwIGEgZnVydGhlciBwb2ludDogd2hhdCdzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgYFBBR0VfUE9PTGAgb3B0aW9uPyBUaGF0J3MgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3Igb3B0aW1pemluZyBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aXRoIGBpb191cmluZ2AsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGRlZmF1bHQgc3RhdHVzIGluIHJlbGF0aW9uIHRvIGBJT19VUklOR19aQ1JYYC4gSXQncyBhIGNvbW1vbiBkZXBlbmRlbmN5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU4NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6NDAuMTY0NDIwODUyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyNjM2MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xcbi0tXFxubmV0L0tjb25maWctNDkwLVxcbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXFxubmV0L0tjb25maWctNDkyLVxcdGJvb2xcXG5uZXQvS2NvbmZpZy00OTMtXFxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcXG5uZXQvS2NvbmZpZy00OTUtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjQyLjU1NzA2MzU1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTUxOTEwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHN1bW1hcnk6XG5cbioqVGhlIEN1cmlvdXMgQ2FzZSBvZiBQQUdFX1BPT0wqKlxuXG5BbHJpZ2h0LCBsZXQncyB1bnBhY2sgdGhpcyBxdWlja2x5LiBXZSdyZSB0YWxraW5nIGFib3V0IGEgdmFyaWFibGUsIGBQQUdFX1BPT0xgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCB3aXRob3V0IGFueSBmdXJ0aGVyIGNvbnRleHQsIHRoaXMgdGhpbmcgaXMgaW1wbGljaXRseSBhIGJvb2xlYW4uIE5vIHByb21wdCwgbm8gc3Vycm91bmRpbmcgaGludHMsIGp1c3QuLi5pdC4gU28sIHdpdGhvdXQgYW55IGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgZGVmaW5pdGlvbiwgdGhpcyB2YXJpYWJsZSwgYnkgZGVmYXVsdCwgaXMgdHJlYXRlZCBhcyBhIGJvb2xlYW4uIFRoYXQncyBhIGxpdHRsZSB1bmV4cGVjdGVkLCBhbmQgY2VydGFpbmx5IHdvcnRoIG5vdGluZyB3aGVuIHJldmlld2luZyBjb2RlIG9yIGRlc2lnbi4gSXQgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IHRoZSBzeXN0ZW3igJlzIGRlZmF1bHRzIGFuZCBob3cgaXQgaW50ZXJwcmV0cyBzZWVtaW5nbHkgYW1iaWd1b3VzIGRlY2xhcmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBiZWhhdmlvciBpbiBtaW5kIHRvIGF2b2lkIGludHJvZHVjaW5nIGltcGxpY2l0IGJ1Z3Mgb3IgbWlzdW5kZXJzdGFuZGluZ3MgZG93biB0aGUgbGluZS4gSXQncyBhIHF1aWNrLCBhbGJlaXQgcG90ZW50aWFsbHkgc3VidGxlLCBkZXRhaWwgdG8ga2VlcCBpbiB0aGUgbWVudGFsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjQ2LjMxMjI1NzIzM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDQ1Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0Mzc6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTg4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gNjRCSVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo4MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cXHRzZWxlY3QgQlJPQURDT01fUEhZIGlmIEFSQ0hfQkNNMjgzNVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXFx0c2VsZWN0IEZJWEVEX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjMyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cXHRzZWxlY3QgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXFxcIiBpZiBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz01OT1jb25maWcgTVZORVRBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo2NTpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVxcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cXHRzZWxlY3QgUENTX01US19MWU5YSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjMzOlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zNC1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTMzPWNvbmZpZyBNTFhTV19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTM3LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI3LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI5LVxcdHNlbGVjdCBQQ1NfWFBDU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZz0xPWNvbmZpZyBMQU45NjZYX1NXSVRDSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy04LVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTEwLVxcdHNlbGVjdCBWQ0FQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc9Mjg9Y29uZmlnIExBTjk2OVhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzAtXFx0ZGVwZW5kcyBvbiBTUEFSWDVfU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTg9Y29uZmlnIE1JQ1JPU09GVF9NQU5BXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yMy1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjI0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNS1cXHRzZWxlY3QgTkVUX1NIQVBFUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjctXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0xMTA9Y29uZmlnIFJUQVNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTEzLVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTI5PWNvbmZpZyBSQVZCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzUtXFx0c2VsZWN0IE1ESU9fQklUQkFOR1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzozNjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM3LVxcdHNlbGVjdCBQSFlMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnPTI1PWNvbmZpZyBTTklfTkVUU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0yOC1cXHRzZWxlY3QgUEhZTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc6Mjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTMwLVxcdHNlbGVjdCBNSUlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy04LVxcdHNlbGVjdCBQQ1NfWFBDU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6OTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc9MjY9Y29uZmlnIFRFSFVUSV9UTjQwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0yOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnOjI5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0zMC1cXHRzZWxlY3QgRldfTE9BREVSXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTUwPWNvbmZpZyBUSV9DUFNXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU1LVxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo1NjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01Ny1cXHRzZWxlY3QgUkVHTUFQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy02OS1cXHRkZXBlbmRzIG9uIFRJX0NQVFMgfHwgIVRJX0NQVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjcwOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTcxLVxcdHNlbGVjdCBUSV9EQVZJTkNJX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMS1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MTAyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMy1cXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MjA0PWNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIwOC1cXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjIwOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMTAtXFx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc9Mj1jb25maWcgTVQ3Nl9DT1JFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTUtXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM3LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0Njo0OC44MjY3MjIyODlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNTA1NzEwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqaW9fdXJpbmcgSW50ZWdlciBPdmVyZmxvdyBGaXg6IEZvY3VzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiAgVGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnIHdpbGwgcHVsbCBpbiBgUEFHRV9QT09MYCBpZiBgTkVUYCBpcyBzZXQsIGFuZCBzaW5jZSBgSU9fVVJJTkdfQlBGX09QU2AgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLCB0aGF0IGFsc28gbWVhbnMgYFBBR0VfUE9PTGAgd2lsbCBiZSBlbmFibGVkLiBUaGlzIGluIHR1cm4gZW5hYmxlcyBgSU9fVVJJTkdfWkNSWGAgYXV0b21hdGljYWxseS4gIFRoZXJlZm9yZSwgZXhwbGljaXRseSBlbmFibGluZyBgUEFHRV9QT09MYCBvciBgTkVUX1JYX0JVU1lfUE9MTGAgaXNuJ3QgbmVjZXNzYXJ5OyBqdXN0IGBJT19VUklOR2AgYW5kIGBJT19VUklOR19aQ1JYYCBzaG91bGQgY292ZXIgZXZlcnl0aGluZyB3ZSBuZWVkLlxuXG5Ob3csIGxldCdzIHJldmlzaXQgdGhlIGNhbGxlcnMgb2YgYGlvX3Bpbl9wYWdlc2AuIEkgcmVjYWxsIGl0J3MgdXNlZCBieSBgaW9fcmVnaW9uX3Bpbl9wYWdlc2AsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYW5kIGBpb19pbXBvcnRfdW1lbWAuICBgaW9fcmVnaW9uX3Bpbl9wYWdlc2AgaXMgY2FsbGVkIGJ5IGBpb19jcmVhdGVfcmVnaW9uYC4gYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgIGlzIGNhbGxlZCBieSBgX19pb19zcWVfYnVmZmVyc191cGRhdGVgIGFuZCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiAgQW5kIGBpb19pbXBvcnRfdW1lbWAgaXMgY2FsbGVkIGJ5IGBpb19pbXBvcnRfYXJlYWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgaW9femNyeF9jcmVhdGVfYXJlYWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgemNyeF9yZWdpc3Rlcl9uZXRkZXZgIGFuZCBgaW9fcmVnaXN0ZXJfemNyeGAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9faW1wb3J0X3VtZW1gLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIHN0YXRpYyBvciBleHBvcnRlZC4gYGlvX2NyZWF0ZV9yZWdpb25gIGlzbid0IHN0YXRpYyBhbmQgaXMgaW4gYGlvX3VyaW5nL21lbW1hcC5jYC4gIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpcyBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9yc3JjLmNgLiAgYGlvX2ltcG9ydF91bWVtYCBpcyBhbHNvIHN0YXRpYyBhbmQgaW4gYGlvX3VyaW5nL3pjcnguY2AuXG5cblNpbmNlIHN5emthbGxlciBjYW4gZnV6eiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHdpdGhpbiB0aGUgY2FsbCB0cmVlLCBpdCdzIGlkZWFsIHRvIHByb3ZpZGUgbm9uLXN0YXRpYyBvbmVzIG9yIHRoZSBzdGF0aWMgb25lcyBpZiB0aGV5IGFyZSBkaXJlY3RseSByZWFjaGFibGUuIFN5emthbGxlcidzIGBGb2N1c1N5bWJvbHNgIGNhbiBhbHNvIGluY2x1ZGUgc3RhdGljIGZ1bmN0aW9ucy5cblRoZXJlZm9yZSwgbXkgbGlzdCB3aWxsIGJlOlxuXG4qICAgYGlvX2NyZWF0ZV9yZWdpb25gXG4qICAgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgXG4qICAgYGlvX2ltcG9ydF91bWVtYFxuKiAgIGBpb19waW5fcGFnZXNgXG4qICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgXG5cbkxldCdzIHZlcmlmeSB0aGF0IGBpb19waW5fcGFnZXNgIGlzbid0IHN0YXRpYy4gWWVwLCBpdCdzIG5vdCBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AuXG5cbkxldCdzIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gbmFtZXMgYXJlIGNvcnJlY3Q6XG4qICAgYGlvX3Bpbl9wYWdlc2BcbiogICBgaW9fY3JlYXRlX3JlZ2lvbmBcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmBcbiogICBgaW9faW1wb3J0X3VtZW1gXG4qICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgXG5cbkRvdWJsZSBjaGVja2luZywgdGhvc2UgYXJlIGFsbCB0aGUgY2FsbGVycyBvZiBgaW9fcGluX3BhZ2VzYCB3aXRoaW4gdGhlIGBpb191cmluZ2Agc3Vic3lzdGVtLiBJIHNlZSBgdmZpb19waW5fcGFnZXNgIGluIHRoZSBncmVwcGVkIHJlc3VsdHMsIGJ1dCB0aGF0J3MgaW4gYSBkaWZmZXJlbnQgc3Vic3lzdGVtLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZml4IGZvciBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19waW5fcGFnZXNgLiBUaGUgcGF0Y2ggcHJldmVudHMgYG5yX3BhZ2VzYCBmcm9tIGJlaW5nIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopYC4gIFRoaXMgaXMgYSBjcml0aWNhbCBpb191cmluZyBmdW5jdGlvbiB1c2VkIGR1cmluZyBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLlxuXG5Ob3csIGZvciB0aGUgY29uZmlncy4gSXQgbmVlZHMgYElPX1VSSU5HYCBhbmQgYElPX1VSSU5HX1pDUlhgIHNpbmNlIGBpb19pbXBvcnRfdW1lbWAgaXMgaW4gYHpjcnguY2AuIENoZWNrZWQsIGFuZCBgSU9fVVJJTkdfWkNSWGAgaXMgZGVmaW5lZCBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AuIGBJT19VUklOR2AgYWxvbmUgaXMgc3VmZmljaWVudCBmb3IgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAuIGBJT19VUklOR19aQ1JYYCBpcyByZXF1aXJlZCBmb3IgYGlvX2ltcG9ydF91bWVtYC4gU2luY2UgYGlvX3Bpbl9wYWdlc2AgaXMgcmVhY2hhYmxlIHZpYSBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYElPX1VSSU5HYCBpcyB0aGUgY29yZSBkZXBlbmRlbmN5LlxuXG5NeSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaXM6XG4qICAgYGlvX3Bpbl9wYWdlc2BcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmBcbiogICBgaW9fY3JlYXRlX3JlZ2lvbmBcbiogICBgaW9faW1wb3J0X3VtZW1gXG4qICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlczpcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmA6IGBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX1xuXG4iLCJJbnB1dFRva2VucyI6MjAzNzEsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NzowNi4xNzcyOTY4MDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI1NTQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIklPX1VSSU5HX1pDUlhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3JlZ2lvbl9waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX2NyZWF0ZV9yZWdpb25cIixcbiAgICBcImlvX2ltcG9ydF91bWVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCByZWplY3QgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIklPX1VSSU5HX1pDUlhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3JlZ2lvbl9waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX2NyZWF0ZV9yZWdpb25cIixcbiAgICBcImlvX2ltcG9ydF91bWVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCByZWplY3QgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-21 01:33:17 +0000 UTC FinishedAt: 2026-06-21 01:47:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_URING_ZCRX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_URING_ZCRX" ], "series_id": "d0755474-b9e5-4499-91b2-271c457331d2" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_pin_pages", "io_region_pin_pages", "io_sqe_buffer_register", "io_create_region", "io_import_umem" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HX1pDUlgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fcmVnaW9uX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2NyZWF0ZV9yZWdpb24mIzM0OywKICAgICYjMzQ7aW9faW1wb3J0X3VtZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgcmVqZWN0IHZhbGlkIGxhcmdlIGFsbG9jYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTE3ZTEyMWViODIwZTMxNjkwODcwMzJjNzE2ZGI1Njk1NWUyYzBjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDIxIDAxOjQ1OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDRmOWI0MzkzMTljNDY2Li5kYTFmNmM1ZDA3ZjhhMCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL21lbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9tZW1tYXAuY1xuQEAgLTUzLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbiBcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLVx0aWYgKFdBUk5fT05fT05DRShucl9wYWdlcyBcdTAwM2UgSU5UX01BWCkpXG4mIzQzO1x0aWYgKG5yX3BhZ2VzIFx1MDAzZSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCBucl9wYWdlcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19VUklOR19aQ1JYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3JlZ2lvbl9waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX2ltcG9ydF91bWVtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gaW9fcGluX3BhZ2VzKCkgYnkgZW5zdXJpbmcgdGhhdCBucl9wYWdlcyBkb2VzIG5vdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZSB0aGF0IGNhbiBiZSBzYWZlbHkgYWxsb2NhdGVkIGZvciB0aGUgcGFnZSBwb2ludGVyIGFycmF5LiBUaGlzIGlzIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGJ1ZmZlciByZWdpc3RyYXRpb24gYW5kIG1lbW9yeSByZWdpb24gY3JlYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGFsbG9jYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZSBvdmVyZmxvdyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IHJlamVjdCB2YWxpZCBsYXJnZSBhbGxvY2F0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTE3ZTEyMWViODIwZTMxNjkwODcwMzJjNzE2ZGI1Njk1NWUyYzBjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVuIDIxIDAxOjQ1OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbWVtbWFwLmMgYi9pb191cmluZy9tZW1tYXAuYwppbmRleCA0ZjliNDM5MzE5YzQ2Ni4uZGExZjZjNWQwN2Y4YTAgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL21lbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL21lbW1hcC5jCkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpCiAJbnJfcGFnZXMgPSBlbmQgLSBzdGFydDsKIAlpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCWlmIChXQVJOX09OX09OQ0UobnJfcGFnZXMgJmd0OyBJTlRfTUFYKSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlwYWdlcyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgbnJfcGFnZXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gaW9fdXJpbmcvbWVtbWFwLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9tZW1tYXAuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBpb19waW5fcGFnZXNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBjaGVjayBvbiBgbnJfcGFnZXNgLiBPcmlnaW5hbGx5LCBpdCB3YXMganVzdCBhIHdhcm5pbmcgaWYgYG5yX3BhZ2VzYCBleGNlZWRlZCBgSU5UX01BWGAuIE5vdywgaXQmIzM5O3MgY2hlY2tpbmcgYWdhaW5zdCBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAuIEhtbSwgaW50ZXJlc3RpbmcuCgpUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGlzIGlzIHByZXZlbnRpbmcgYW4gaW50ZWdlciBvdmVyZmxvdywgcGFydGljdWxhcmx5IHdoZW4gYWxsb2NhdGluZyB0aGUgYHBhZ2VzYCBhcnJheSB1c2luZyBzb21ldGhpbmcgbGlrZSBga3ZtYWxsb2Nfb2Jqc2Agb3IgcGFzc2luZyBgbnJfcGFnZXNgIHRvIGEgZnVuY3Rpb24gZXhwZWN0aW5nIGFuIGBpbnRgLiBCdXQgd2FpdC4uLiB3YXNuJiMzOTt0IGBrdm1hbGxvY19vYmpzYCBzdXBwb3NlZCB0byB0YWtlIGEgYHNpemVfdGA/IE1heWJlIGl0JiMzOTtzIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHRoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGluIGBucGFnZXNgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBpb19waW5fcGFnZXNgIGZ1bmN0aW9uIGluIGBpb191cmluZy9tZW1tYXAuY2AgdG8gY29uZmlybSB0aGUgcGFyYW1ldGVyIHR5cGVzIGFuZCBob3cgYG5yX3BhZ2VzYCBpcyBhY3R1YWxseSB1c2VkLiBOZWVkIHRvIGJlIHN1cmUgb2YgdGhlIHByZWNpc2UgY29udGV4dCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxuICA0MTpcdHtcbiAgNDI6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgbnJfcGFnZXM7XG4gIDQzOlx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xuICA0NDpcdFx0aW50IHJldDtcbiAgNDU6XHRcbiAgNDY6XHRcdGlmIChjaGVja19hZGRfb3ZlcmZsb3codWFkZHIsIGxlbiwgXHUwMDI2ZW5kKSlcbiAgNDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gIDQ4Olx0XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGVuZCwgUEFHRV9TSVpFIC0gMSwgXHUwMDI2ZW5kKSlcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gIDUwOlx0XG4gIDUxOlx0XHRlbmQgPSBlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gIDUyOlx0XHRzdGFydCA9IHVhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuICA1MzpcdFx0bnJfcGFnZXMgPSBlbmQgLSBzdGFydDtcbiAgNTQ6XHRcdGlmIChXQVJOX09OX09OQ0UoIW5yX3BhZ2VzKSlcbiAgNTU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gIDU2Olx0XHRpZiAobnJfcGFnZXMgXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXG4gIDU3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuICA1ODpcdFxuICA1OTpcdFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuICA2MDpcdFx0aWYgKCFwYWdlcylcbiAgNjE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gIDYyOlx0XG4gIDYzOlx0XHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG4gIDY0Olx0XHRcdFx0XHRcdHBhZ2VzKTtcbiAgNjU6XHRcdC8qIHN1Y2Nlc3MsIG1hcHBlZCBhbGwgcGFnZXMgKi9cbiAgNjY6XHRcdGlmIChyZXQgPT0gbnJfcGFnZXMpIHtcbiAgNjc6XHRcdFx0Km5wYWdlcyA9IG5yX3BhZ2VzO1xuICA2ODpcdFx0XHRyZXR1cm4gcGFnZXM7XG4gIDY5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSwgc3BlY2lmaWNhbGx5IHdpdGggYG5yX3BhZ2VzYC4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZWNvbWUgYSBwcm9ibGVtIGlmIGBucl9wYWdlc2AgZW5kcyB1cCBiZWluZyBzaWduaWZpY2FudGx5IGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopYC4gVGhhdCYjMzk7cyB0aGUgY2xhc3NpYyBzY2VuYXJpby4gSWYgdGhhdCBoYXBwZW5zLCBga3ZtYWxsb2Nfb2Jqc2AgZ2V0cyBjYWxsZWQgd2l0aCBhIHZhbHVlIHRoYXQgaGFzIHdyYXBwZWQgYXJvdW5kIGR1ZSB0byB0aGUgb3ZlcmZsb3cuICBIb2xkIG9uLCBga3ZtYWxsb2Nfb2Jqc2AgdGFrZXMgYHNpemVfdGAgZm9yIGl0cyBhbGxvY2F0aW9uIHNpemUsIHNvIGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93LCBpdCB3b3VsZCBiZSBhIHByb2JsZW0uIE5vdyBJJiMzOTttIHRoaW5raW5nLCB3YWl0IGEgbWludXRlLCBga3ZtYWxsb2Nfb2Jqc2AgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBoZXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJIG5lZWQgdG8ga25vdyBpZiBga3ZtYWxsb2Nfb2Jqc2AgaXMgYSBtYWNybyBvciBmdW5jdGlvbi4gQWN0dWFsbHksIGBucl9wYWdlc2AgaXMgYHVuc2lnbmVkIGxvbmdgLCBzbyB0aGF0IHBvdGVudGlhbGx5IGV4cGFuZHMgdGhlIHByb2JsZW0gc3BhY2UsIGJ1dCB0aGUgZGl2aXNpb24gcmVzdWx0LCBgSU5UX01BWCAvIDhgLCB3b3VsZCBiZSB0aGUgcG9pbnQgb2YgdGhlIG92ZXJmbG93LgoKSSYjMzk7bSBwcmV0dHkgc3VyZSBga3ZtYWxsb2Nfb2Jqc2AgbWlnaHQganVzdCBiZSBhIG1hY3JvIHdyYXBwaW5nIGFyb3VuZCBga3ZtYWxsb2NfYXJyYXlgLiAgVGhhdCYjMzk7cyBteSBodW5jaC4gVGltZSB0byBjb25maXJtIG15IGh5cG90aGVzaXMuIExldCYjMzk7cyBzZWUgaG93IGBpb19waW5fcGFnZXNgIGlzIHVzaW5nIGl0IGFuZCBmb2xsb3cgdGhlIGNhbGwgc3RhY2suIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gdGhlIGNhbGxlcnMgdG8gc2VlIGlmIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3Bpbl9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWNjdy5yc3Q9MTEzPWRldmljZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0LTE0Mi0gIG9mIHRoZSBpb3ZhXHUwMDNjLVx1MDAzZXZhZGRyIG1hcHBpbmdzIGluIHRoaXMgb3BlcmF0aW9uLiBBbmQgdGhleSBleHBvcnQgYVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0OjE0MzogIHZmaW9fcGluX3BhZ2VzIGFuZCBhIHZmaW9fdW5waW5fcGFnZXMgaW50ZXJmYWNlcyBmcm9tIHRoZSB2ZmlvIGlvbW11XG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWNjdy5yc3QtMTQ0LSAgYmFja2VuZCBmb3IgdGhlIHBoeXNpY2FsIGRldmljZXMgdG8gcGluIGFuZCB1bnBpbiBwYWdlcyBieSBkZW1hbmQuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdD0yNTM9ZHJpdmVyOjpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QtMjU0LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdDoyNTU6XHRpbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QtMjU2LVx0XHRcdFx0ICBpbnQgbnBhZ2UsIGludCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYz0xMzc9c3RhdGljIGludCBndnRfcGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHVuc2lnbmVkIGxvbmcgZ2ZuLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTE1Mi1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjE1MzpcdFx0cmV0ID0gdmZpb19waW5fcGFnZXMoXHUwMDI2dmdwdS1cdTAwM2V2ZmlvX2RldmljZSwgY3VyX2lvdmEsIDEsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xNTQtXHRcdFx0XHQgICAgIElPTU1VX1JFQUQgfCBJT01NVV9XUklURSwgXHUwMDI2Y3VyX3BhZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTU1LVx0XHRpZiAocmV0ICE9IDEpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjE1NjpcdFx0XHRndnRfdmdwdV9lcnIoXCYjMzQ7dmZpb19waW5fcGFnZXMgZmFpbGVkIGZvciBpb3ZhICVwYWQsIHJldCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTE1Ny1cdFx0XHRcdCAgICAgXHUwMDI2Y3VyX2lvdmEsIHJldCk7XG4tLVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jPTkxPXN0YXRpYyB2b2lkIHBhZ2VfYXJyYXlfdW5waW4oc3RydWN0IHBhZ2VfYXJyYXkgKnBhLFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfY3AuYy0xMjUtICogUmVxdWVzdHMgdG8gcGluIFwmIzM0O2FsaWduZWRcJiMzNDsgcGFnZXMgY2FuIGJlIGNvYWxlc2NlZCBpbnRvIGEgc2luZ2xlXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmM6MTI2OiAqIHZmaW9fcGluX3BhZ2VzIHJlcXVlc3QgZm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3ksIGJhc2VkIG9uIHRoZVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTEyNy0gKiBleHBlY3RhdGlvbiBvZiA0SyBwYWdlIHJlcXVlc3RzLiBVbmFsaWduZWQgcmVxdWVzdHMgYXJlIHByb2JhYmx5XG4tLVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jPTEzMT1zdGF0aWMgaW50IHBhZ2VfYXJyYXlfcGluKHN0cnVjdCBwYWdlX2FycmF5ICpwYSwgc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCBib29sIHVuYWxpZ25lZClcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmMtMTQ2LVxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jOjE0NzpcdFx0cmV0ID0gdmZpb19waW5fcGFnZXModmRldiwgKmZpcnN0LCBucGFnZSxcbmRyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfY3AuYy0xNDgtXHRcdFx0XHQgICAgIElPTU1VX1JFQUQgfCBJT01NVV9XUklURSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MzUxPXN0YXRpYyBpbnQgdmZpb19hcF92YWxpZGF0ZV9uaWIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBkbWFfYWRkcl90ICpuaWIpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM2Ny0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBOSUIgcGFnZSwgd2hpY2ggaGFzIGJlZW4gcGlubmVkIHdpdGhcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNjg6ICogdmZpb19waW5fcGFnZXMoKSwgaXMgYSBzaGFyZWQgcGFnZSBiZWxvbmdpbmcgdG8gYSBzZWN1cmUgZ3Vlc3QuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzY5LSAqXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM3MS0gKiAoaS5lLiBpZiB0aGUgTklCIGJlbG9uZ3MgdG8gYSBzZWN1cmUgZ3Vlc3QgYW5kIGlzIHNoYXJlZCksIHRoZW4gMFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM3MjogKiAoc3VjY2VzcykgaXMgcmV0dXJuZWQuIElmIHRoZSBOSUIgd2FzIG5vdCBzaGFyZWQsIHZmaW9fcGluX3BhZ2VzKCkgaGFkXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzczLSAqIGV4cG9ydGVkIGl0IGFuZCBub3cgaXQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBzZWN1cmUgZ3Vlc3QgYW55bW9yZS4gSW5cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzc2LSAqIENvbnRleHQ6IHRoZSBOSUIgKGF0IHBoeXNpY2FsIGFkZHJlc3MgQGFkZHIpIGhhcyB0byBiZSBwaW5uZWQgd2l0aFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM3NzogKlx0ICAgIHZmaW9fcGluX3BhZ2VzKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNzgtICpcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MzgxPXN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zODQtXHQgKiBUaGUgbmliIGhhcyB0byBiZSBsb2NhdGVkIGluIHNoYXJlZCBzdG9yYWdlIHNpbmNlIGd1ZXN0IGFuZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM4NTpcdCAqIGhvc3QgYWNjZXNzIGl0LiB2ZmlvX3Bpbl9wYWdlcygpIHdpbGwgZG8gYSBwaW4gc2hhcmVkIGFuZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM4Ni1cdCAqIGlmIHRoYXQgZmFpbHMgKHBvc3NpYmx5IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGEgc2hhcmVkIHBhZ2UpIGl0XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTQwOC0gKiBzdGF0dXMucmVzcG9uc2VfY29kZSBtYXkgYmUgc2V0IHRvIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpbiBjYXNlIHRoZVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjQwOTogKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00MTAtICpcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNDM5LVx0LyogVGhlIHBpbiB3aWxsIHByb2JhYmx5IGJlIHN1Y2Nlc3NmdWwgZXZlbiBpZiB0aGUgTklCIHdhcyBub3Qgc2hhcmVkICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NDQwOlx0cmV0ID0gdmZpb19waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNDQxLVx0XHRcdCAgICAgSU9NTVVfUkVBRCB8IElPTU1VX1dSSVRFLCBcdTAwMjZoX3BhZ2UpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDUtXHRkZWZhdWx0OlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjQ0NjpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCxcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDctXHRcdFx0XHQgXCYjMzQ7bmliPSVwYWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG4tLVxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYz0yMjU9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19pb21tdWZkX3BoeXNpY2FsX3Bhc2lkX2RldGFjaF9pb2FzKTtcbi0tXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jOjIyOTogKiBcJiMzNDttZGV2IHBhdGhcJiMzNDsgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xuZHJpdmVycy92ZmlvL2lvbW11ZmQuYy0yMzAtICogb3BzIHNldCBzaG91bGQgY2FsbCB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldigpLiBEcml2ZXJzIHRoYXQgZG9cbmRyaXZlcnMvdmZpby9pb21tdWZkLmM6MjMxOiAqIG5vdCBjYWxsIHZmaW9fcGluX3BhZ2VzKCkvdmZpb19kbWFfcncoKSBoYXZlIG5vIG5lZWQgdG8gcHJvdmlkZSBkbWFfdW5tYXAuXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIzMi0gKi9cbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTYzOD1zdGF0aWMgbG9uZyB2cGZuX3BhZ2VzKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNjc0LSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo2NzU6c3RhdGljIGxvbmcgdmZpb19waW5fcGFnZXNfcmVtb3RlKHN0cnVjdCB2ZmlvX2RtYSAqZG1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzYtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnBhZ2UsIHVuc2lnbmVkIGxvbmcgKnBmbl9iYXNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9ODkzPXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9waW5fcGFnZXModm9pZCAqaW9tbXVfZGF0YSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTkyMS1cdGlmIChXQVJOX09OQ0UoaW9tbXUtXHUwMDNldmFkZHJfaW52YWxpZF9jb3VudCxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6OTIyOlx0XHQgICAgICBcJiMzNDt2ZmlvX3Bpbl9wYWdlcyBub3QgYWxsb3dlZCB3aXRoIFZGSU9fVVBEQVRFX1ZBRERSXFxuXCYjMzQ7KSkge1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy05MjMtXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE1ODA9c3RhdGljIGludCB2ZmlvX3Bpbl9tYXBfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwgc3RydWN0IHZmaW9fZG1hICpkbWEsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk0LVx0XHQvKiBQaW4gYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTk1Olx0XHRucGFnZSA9IHZmaW9fcGluX3BhZ2VzX3JlbW90ZShkbWEsIHZhZGRyICYjNDM7IGRtYS1cdTAwM2VzaXplLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk2LVx0XHRcdFx0XHQgICAgICBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBcdTAwMjZwZm4sIGxpbWl0LFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MTgwMz1zdGF0aWMgaW50IHZmaW9faW9tbXVfcmVwbGF5KHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE4NjItXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjE4NjM6XHRcdFx0XHRucGFnZSA9IHZmaW9fcGluX3BhZ2VzX3JlbW90ZShkbWEsIHZhZGRyLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xODY0LVx0XHRcdFx0XHRcdFx0ICAgICAgbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTY3NT1FWFBPUlRfU1lNQk9MKHZmaW9fc2V0X2lycXNfdmFsaWRhdGVfYW5kX3ByZXBhcmUpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xNjkwLSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjE2OTE6aW50IHZmaW9fcGluX3BhZ2VzKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBkbWFfYWRkcl90IGlvdmEsXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTY5Mi1cdFx0ICAgaW50IG5wYWdlLCBpbnQgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTcyMi19XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTcyMzpFWFBPUlRfU1lNQk9MKHZmaW9fcGluX3BhZ2VzKTtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xNzI0LVxuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTM4MD12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oLTM4My1cbmluY2x1ZGUvbGludXgvdmZpby5oOjM4NDppbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcbmluY2x1ZGUvbGludXgvdmZpby5oLTM4NS1cdFx0ICAgaW50IG5wYWdlLCBpbnQgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcyk7XG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTg9c3RhdGljIGJvb2wgaW9fbWVtX2FsbG9jX2NvbXBvdW5kKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcyxcbi0tXG5pb191cmluZy9tZW1tYXAuYy0zOS1cbmlvX3VyaW5nL21lbW1hcC5jOjQwOnN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbmlvX3VyaW5nL21lbW1hcC5jLTQxLXtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0xMzQ9c3RhdGljIGludCBpb19yZWdpb25fcGluX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0xNDAtXG5pb191cmluZy9tZW1tYXAuYzoxNDE6XHRwYWdlcyA9IGlvX3Bpbl9wYWdlcyhyZWctXHUwMDNldXNlcl9hZGRyLCBzaXplLCBcdTAwMjZucl9wYWdlcyk7XG5pb191cmluZy9tZW1tYXAuYy0xNDItXHRpZiAoSVNfRVJSKHBhZ2VzKSlcbi0tXG5pb191cmluZy9tZW1tYXAuaC05LVxuaW9fdXJpbmcvbWVtbWFwLmg6MTA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKTtcbmlvX3VyaW5nL21lbW1hcC5oLTExLVxuLS1cbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcnNyYy5jLTg4My1cdHJldCA9IC1FTk9NRU07XG5pb191cmluZy9yc3JjLmM6ODg0Olx0cGFnZXMgPSBpb19waW5fcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGlvdi1cdTAwM2Vpb3ZfYmFzZSwgaW92LVx1MDAzZWlvdl9sZW4sXG5pb191cmluZy9yc3JjLmMtODg1LVx0XHRcdFx0XHUwMDI2bnJfcGFnZXMpO1xuLS1cbmlvX3VyaW5nL3pjcnguYz0yMDI9c3RhdGljIGludCBpb19pbXBvcnRfdW1lbShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcbi0tXG5pb191cmluZy96Y3J4LmMtMjEzLVx0XHRyZXR1cm4gLUVGQVVMVDtcbmlvX3VyaW5nL3pjcnguYzoyMTQ6XHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZylhcmVhX3JlZy1cdTAwM2VhZGRyLCBhcmVhX3JlZy1cdTAwM2VsZW4sXG5pb191cmluZy96Y3J4LmMtMjE1LVx0XHRcdFx0ICAgXHUwMDI2bnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgTWVtb3J5IEFsbG9jYXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGlvX3Bpbl9wYWdlc2AuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBhIGZldyBrZXkgcGxhY2VzIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW06IGBpb19yZWdpb25fcGluX3BhZ2VzYCwgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLCBhbmQgYGlvX2ltcG9ydF91bWVtYC4gQ2xlYXJseSwgdGhpcyBpcyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIGltcG9ydGFudC4KClRoZSBjaGFuZ2UgaXRzZWxmIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgYW4gaW50ZWdlciBvdmVyZmxvdy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1Nob3VsZCB3ZSBmdXp6IHRoaXM/JiMzNDsgQWJzb2x1dGVseSwgeWVzLiBBbnkgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIGlvX3VyaW5nIG5lZWRzIHRob3JvdWdoIHRlc3RpbmcuIFdlIHdhbnQgdG8gZW5zdXJlIHRoZSBvdmVyZmxvdyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgdGhhdCBtaWdodCBicmVhayB2YWxpZCBsYXJnZSBhbGxvY2F0aW9ucy4gQWx0aG91Z2gsIGBJTlRfTUFYIC8gOGAgZXF1YXRlcyB0byBhcm91bmQgMjU2TSBwYWdlcywgd2hpY2ggYW1vdW50cyB0byAxVEIgb2YgbWVtb3J5LiBUaGlzIHNob3VsZCBwcmV2ZW50IHRoZSBicmVha2FnZSBvZiB2YWxpZCBhbGxvY2F0aW9ucy4KCldhaXQsIHRoZSBtYXRoIGhlcmUgaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlOiBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgaXMgYDIxNDc0ODM2NDcgLyA4ID0gMjY4NDM1NDU1YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBgbnJfcGFnZXNgIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gSWYgYG5yX3BhZ2VzYCBiZWNvbWVzIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gOGAsIHdvdWxkIHRoaXMgY2F1c2UgYW4gaW50ZXJuYWwgc2l6ZSBjYWxjdWxhdGlvbiBvdmVyZmxvdz8gSSB0aG91Z2h0IGFib3V0IHRoaXMsIGJ1dCwgbm8sIGBrdm1hbGxvY19vYmpzYCB1c2VzIGBzaXplX3RgIGludGVybmFsbHksIHdoaWNoIHNob3VsZCBwcmV2ZW50IHRoZSBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbi4KCkhvd2V2ZXIsIGhvbGQgb24gYSBzZWNvbmQuIGBucGFnZXNgIGlzIGFuIGBpbnQgKm5wYWdlc2AuIFNvLCB0aGUgYXNzaWdubWVudCBgKm5wYWdlcyA9IG5yX3BhZ2VzO2Agd2lsbCBvdmVyZmxvdyBpZiBgbnJfcGFnZXMgJmd0OyBJTlRfTUFYYC4gQWgsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgaWYgKFdBUk5fT05fT05DRShucl9wYWdlcyAmZ3Q7IElOVF9NQVgpKWAuCgpUaGUgbmV3IGNvZGUgaGFzIGBpZiAobnJfcGFnZXMgJmd0OyBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopKWAuIFRoaXMgbm93IGltcG9zZXMgYSBtdWNoIHN0cmljdGVyIGxpbWl0LCBwcmV2ZW50aW5nIGBucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgZnJvbSBvdmVyZmxvd2luZyBgSU5UX01BWGAuIEJ1dCwgYGt2bWFsbG9jX29ianNgIHRha2VzIGBzaXplX3RgLCBzbyBgbnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKilgIHNob3VsZG4mIzM5O3Qgb3ZlcmZsb3cgYHNpemVfdGAgdW5sZXNzIGBucl9wYWdlc2AgaXMgYWJzb2x1dGVseSBodWdlLiBEb2VzIHNvbWV0aGluZyBlbHNlIGluc2lkZSB1c2UgYGludGAgZm9yIHRoZSBzaXplLCB0aG91Z2g/CgpPa2F5LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGF0IGBrdm1hbGxvY19vYmpzYCBpcyBhIG1hY3JvOiBgI2RlZmluZSBrdm1hbGxvY19vYmpzKHR5cGUsIG4sIGZsYWdzKSBrdm1hbGxvY19hcnJheShuLCBzaXplb2YodHlwZSksIGZsYWdzKWAuIGBrdm1hbGxvY19hcnJheWAgaXRzZWxmIHRha2VzIGBzaXplX3Qgbiwgc2l6ZV90IHNpemVgLgoKV2h5IHRoZSBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgbGltaXQgdGhlbj8gQWgsIEkgc2VlLCBpdCBtaWdodCByZWxhdGUgdG8gYE1BWF9SV19DT1VOVGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwgd2hpY2ggbWlnaHQgdXNlIGFuIGBpbnRgIGludGVybmFsbHkuCgpBaGEhIGBJTlRfTUFYYCBpcyAyR0IuIGBJTlRfTUFYIC8gOGAgKHdoZXJlIDggaXMgdGhlIHNpemUgb2YgYSBwYWdlIHBvaW50ZXIpIGlzIDI1Nk1CLiBTbywgdGhlIGFycmF5IG9mIHBvaW50ZXJzIGNhbiBiZSBhdCBtb3N0IDI1Nk1CLgoKT2theSwgc28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBpb191cmluZyB0aGF0IHJlc3RyaWN0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIGR1ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcGFnZSBwb2ludGVyIGFycmF5LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG92ZXJmbG93cy4KCk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgaW9fdXJpbmcgaXMgYWN0dWFsbHkgZW5hYmxlZC4gYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSwgYnV0IGFyZSB0aGVyZSBhbnkgcmVsYXRlZCBjb25maWdzPyBMZXQgbWUgbG9vayBpbiBgaW9fdXJpbmcvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE0LVxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM2LVxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5MzgtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipGb2N1c2luZyBvbiBpb191cmluZyBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIE5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSB0aGVyZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgd29ya3MgYXQgYSBmdW5jdGlvbmFsIGxldmVsLCBzbyBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb191cmluZy96Y3J4LmNgIGFuZCBgaW9fdXJpbmcvcnNyYy5jYC4gVGhvc2Ugc2VlbSBsaWtlIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50cyB0byB1bmRlcnN0YW5kIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBhbmQgcHJvY2Vzc2VzIGludm9sdmVkLiBUaGV5IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYz0yMz1zdHJ1Y3QgaW9fcnNyY191cGRhdGUge1xuLS1cbmlvX3VyaW5nL3JzcmMuYy0yOS1cbmlvX3VyaW5nL3JzcmMuYzozMDpzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbmlvX3VyaW5nL3JzcmMuYy0zMS1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92ZWMgKmlvdik7XG4tLVxuaW9fdXJpbmcvcnNyYy5jPTM2Nz1zdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0zOTYtXHRcdH1cbmlvX3VyaW5nL3JzcmMuYzozOTc6XHRcdG5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTtcbmlvX3VyaW5nL3JzcmMuYy0zOTgtXHRcdGlmIChJU19FUlIobm9kZSkpIHtcbi0tXG5pb191cmluZy9yc3JjLmM9ODA4PWJvb2wgaW9fY2hlY2tfY29hbGVzY2VfYnVmZmVyKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgaW50IG5yX3BhZ2VzLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy04NTQtXG5pb191cmluZy9yc3JjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvcnNyYy5jLTg1Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92ZWMgKmlvdilcbi0tXG5pb191cmluZy9yc3JjLmM9OTUwPWludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbi0tXG5pb191cmluZy9yc3JjLmMtOTk0LVxuaW9fdXJpbmcvcnNyYy5jOjk5NTpcdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBpb3YpO1xuaW9fdXJpbmcvcnNyYy5jLTk5Ni1cdFx0aWYgKElTX0VSUihub2RlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzEwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGNhbGxzIHJlbGF0ZWQgdG8gYnVmZmVyIHJlZ2lzdHJhdGlvbiBpbiBpb191cmluZywgc3BlY2lmaWNhbGx5IGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiB0aGUgYnVmZmVyIHJlZ2lzdHJhdGlvbiBsb2dpYy4gSSYjMzk7dmUgbm90ZWQgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSB0d28ga2V5IGxvY2F0aW9uczogYF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlYCBhbmQgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSByZWFjaGVkIHRocm91Z2ggdGhlIGBpb191cmluZ19yZWdpc3RlcmAgc3lzdGVtIGNhbGwsIHdoZW4gdXNpbmcgdGhlIGBJT1JJTkdfUkVHSVNURVJfQlVGRkVSU2AgYW5kIGBJT1JJTkdfUkVHSVNURVJfQlVGRkVSU19VUERBVEVgIG9wdGlvbnMsIG9mIGNvdXJzZS4KCk5vdywgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdG8gZGlnIGludG8gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHBpbm5pbmcuIExldCYjMzk7cyBzZWUgaG93IG1lbW9yeSBpcyBhY3R1YWxseSBtYXBwZWQgYW5kIG1hbmFnZWQgZm9yIHRoZXNlIHJlZ2lzdGVyZWQgYnVmZmVycy4gSSBzaG91bGQgcHJvYmFibHkgYmUgZXhhbWluaW5nIGBpb19yZWdpb25fcGluX3BhZ2VzYCBsb2NhdGVkIHdpdGhpbiBgaW9fdXJpbmcvbWVtbWFwLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3Qgd2hlcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBwYWdlIHBpbm5pbmcgaXMgaGFwcGVuaW5nLCB3aGljaCBpcyBjcnVjaWFsIGZvciBkaXJlY3QgSS9PIGFuZCB1c2VyLXNwYWNlIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpbGwgYmUsIEkgc3VzcGVjdC4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lvbl9waW5fcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmM9MTE0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2luaXRfcHRyKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcbi0tXG5pb191cmluZy9tZW1tYXAuYy0xMzMtXG5pb191cmluZy9tZW1tYXAuYzoxMzQ6c3RhdGljIGludCBpb19yZWdpb25fcGluX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbmlvX3VyaW5nL21lbW1hcC5jLTEzNS1cdFx0XHQgICAgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTg0PWludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMjE3LVx0aWYgKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSKVxuaW9fdXJpbmcvbWVtbWFwLmM6MjE4Olx0XHRyZXQgPSBpb19yZWdpb25fcGluX3BhZ2VzKG1yLCByZWcpO1xuaW9fdXJpbmcvbWVtbWFwLmMtMjE5LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBpb19jcmVhdGVfcmVnaW9uYCwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqUGlucG9pbnRpbmcgdGhlIE9yaWdpbnMgb2YgYGlvX2NyZWF0ZV9yZWdpb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYGlvX2NyZWF0ZV9yZWdpb25gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAqKndoZXJlIGlzIHRoaXMgdGhpbmcgY2FsbGVkIGZyb20/KiogSXMgaXQgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbj8gQSB1c2VyLXNwYWNlIGxpYnJhcnkgY2FsbD8gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgbGlrZSBuZXR3b3JraW5nLCBibG9jayBJL08sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBtZSBjcml0aWNhbCBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIGRhdGEgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uLiBJcyBpdCByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIGRldmljZSBtYXBwaW5nLCBvciBzb21lIG90aGVyIEkvTyByZXNvdXJjZSBhbGxvY2F0aW9uPyBBbmQgYXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgYWxsb2NhdGlvbiByb3V0aW5lIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXgsIHBlcmhhcHMgaW52b2x2aW5nIGxvY2tpbmcgb3IgcmVzb3VyY2UgcHJvdGVjdGlvbj8gVGhlIG9yaWdpbiBpcyB0aGUga2V5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9MjcyNj1zdGF0aWMgX19jb2xkIGludCBpb19hbGxvY2F0ZV9zY3FfdXJpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0NC1cdH1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mjc0NTpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlcmluZ19yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzQ2LVx0aWYgKHJldClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTI3NTgtXHR9XG5pb191cmluZy9pb191cmluZy5jOjI3NTk6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXNxX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XG5pb191cmluZy9pb191cmluZy5jLTI3NjAtXHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcva2J1Zi5jPTYyNT1pbnQgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmlvX3VyaW5nL2tidWYuYy02NzMtXHR9XG5pb191cmluZy9rYnVmLmM6Njc0Olx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmJsLVx1MDAzZXJlZ2lvbiwgXHUwMDI2cmQsIG1tYXBfb2Zmc2V0KTtcbmlvX3VyaW5nL2tidWYuYy02NzUtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE1Mj1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTgzLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTg0OmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG5pb191cmluZy9tZW1tYXAuYy0xODUtXHRcdCAgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmg9MjA9dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcik7XG5pb191cmluZy9tZW1tYXAuaDoyMTppbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuaW9fdXJpbmcvbWVtbWFwLmgtMjItXHRcdCAgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzAtXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjUzMTpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZuLnJpbmdfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9DUV9SSU5HKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMyLVx0aWYgKHJldClcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTU2MC1cdH1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTYxOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNm4uc3FfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9TUUVTKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYyLVx0aWYgKHJldCkge1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NjkyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MjEtXG5pb191cmluZy9yZWdpc3Rlci5jOjcyMjpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZyZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfTUFQX09GRl9QQVJBTV9SRUdJT04pO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MjMtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL3pjcnguYz0zODA9c3RhdGljIGludCBpb19hbGxvY2F0ZV9yYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTM5OS1cbmlvX3VyaW5nL3pjcnguYzo0MDA6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2aWZxLVx1MDAzZXJxX3JlZ2lvbiwgcmQsIG1tYXBfb2Zmc2V0KTtcbmlvX3VyaW5nL3pjcnguYy00MDEtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgaW9fY3JlYXRlX3JlZ2lvbmAgVXNhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBgaW9fY3JlYXRlX3JlZ2lvbmAgYmVpbmcgYSBjcml0aWNhbCBmdW5jdGlvbiwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uIHdpdGhpbiB0aGUgSS9PIHJpbmcgZnJhbWV3b3JrLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBhcmVhczogYGlvX2FsbG9jYXRlX3NjcV91cmluZ3NgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBpbml0aWFsIGBpb191cmluZ19zZXR1cGAsIHN1Z2dlc3RpbmcgaXRzIGZ1bmRhbWVudGFsIHRvIHJpbmcgaW5pdGlhbGl6YXRpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCBhbmQgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIOKAkyBhbGwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgcmluZyByZWdpc3RyYXRpb24gYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBtYW5hZ2VtZW50LiBBbHNvLCBJIHNlZSBgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nYCBpcyBhIGNvbnN1bWVyLCBhbmQgbG9jYXRlZCBpbiBhIHpjcnggY29udGV4dCBpbiBgaW9fdXJpbmcvemNyeC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpGcm9tIHRoaXMgSSBjYW4gZGVkdWNlIHRoYXQgYGlvX2NyZWF0ZV9yZWdpb25gIGlzIGxpa2VseSB1c2VkIHRvIHByZXBhcmUgbWVtb3J5IHJlZ2lvbnMgZm9yIHZhcmlvdXMgcmluZyB0eXBlcyBhbmQgYXNzb2NpYXRlZCBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGUgcmVhbGx5IGltcG9ydGFudCBmdW5jdGlvbnMgdGhhdCBJIG5lZWQgdG8gbG9vayBpbnRvIGluIG1vcmUgZGV0YWlsIGFyZTogYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCwgYF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAsIGFuZCBgaW9fcmVnaXN0ZXJfemNyeF9pZnFgLiBUaGVzZSBhcmUgdGhlIGtleSByZWdpc3RyYXRpb24gYW5kIHVwZGF0ZSBmdW5jdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhlIGBpb19jcmVhdGVfcmVnaW9uYCBjYWxsLgoKQWgsIHdhaXQuIExldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgaW9fcmVnaXN0ZXJfemNyeF9pZnFgIGlzIGluZGVlZCBsb2NhdGVkIGluIGBpb191cmluZy96Y3J4LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVnaXN0ZXJfemNyeF9pZnEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGlvX2ltcG9ydF91bWVtYCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIG9mIGhvdyBgaW9faW1wb3J0X3VtZW1gIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdobyYjMzk7cyBjYWxsaW5nIGl0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc2ltcGxlICYjMzQ7c2VhcmNoIGFuZCByZXBsYWNlJiMzNDsgc2NlbmFyaW8sIHRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBjb2RlJiMzOTtzIGNhbGwgZ3JhcGguIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBpb19pbXBvcnRfdW1lbWAgaXMgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9faW1wb3J0X3VtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvemNyeC5jPTE4NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBpb19jb3VudF9hY2NvdW50X3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKVxuLS1cbmlvX3VyaW5nL3pjcnguYy0yMDEtXG5pb191cmluZy96Y3J4LmM6MjAyOnN0YXRpYyBpbnQgaW9faW1wb3J0X3VtZW0oc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG5pb191cmluZy96Y3J4LmMtMjAzLVx0XHRcdCAgc3RydWN0IGlvX3pjcnhfbWVtICptZW0sXG4tLVxuaW9fdXJpbmcvemNyeC5jPTI2OD1zdGF0aWMgaW50IGlvX2ltcG9ydF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy0yODgtXHRcdHJldHVybiBpb19pbXBvcnRfZG1hYnVmKGlmcSwgbWVtLCBhcmVhX3JlZyk7XG5pb191cmluZy96Y3J4LmM6Mjg5Olx0cmV0dXJuIGlvX2ltcG9ydF91bWVtKGlmcSwgbWVtLCBhcmVhX3JlZyk7XG5pb191cmluZy96Y3J4LmMtMjkwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGlvX2ltcG9ydF9hcmVhYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgaW52ZXN0aWdhdGluZyB0aGUgY2FsbGVycyBvZiB0aGUgYGlvX2ltcG9ydF9hcmVhYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJiMzOTtzIHVzaW5nIGl0LCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSwgYW5kIHdpdGggd2hhdCBwYXJhbWV0ZXJzLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWFwIG91dCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBldmVyeXRoaW5nIGZyb20gZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMgdG8gcmVmYWN0b3Jpbmcgb3Igb3B0aW1pemluZyB0aGUgY29kZS4gR3Jhc3BpbmcgdGhlIGNhbGwgZ3JhcGggb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHF1aWNrbHkgcmV2ZWFsIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcHBsaWNhdGlvbi4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2ltcG9ydF9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3pjcnguYz0yNTU9c3RhdGljIHZvaWQgaW9fcmVsZWFzZV9hcmVhX21lbShzdHJ1Y3QgaW9femNyeF9tZW0gKm1lbSlcbi0tXG5pb191cmluZy96Y3J4LmMtMjY3LVxuaW9fdXJpbmcvemNyeC5jOjI2ODpzdGF0aWMgaW50IGlvX2ltcG9ydF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuaW9fdXJpbmcvemNyeC5jLTI2OS1cdFx0XHQgIHN0cnVjdCBpb196Y3J4X21lbSAqbWVtLFxuLS1cbmlvX3VyaW5nL3pjcnguYz00NTA9c3RhdGljIGludCBpb196Y3J4X2NyZWF0ZV9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy00NzMtXG5pb191cmluZy96Y3J4LmM6NDc0Olx0cmV0ID0gaW9faW1wb3J0X2FyZWEoaWZxLCBcdTAwMjZhcmVhLVx1MDAzZW1lbSwgYXJlYV9yZWcpO1xuaW9fdXJpbmcvemNyeC5jLTQ3NS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjU0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgaW9femNyeF9jcmVhdGVfYXJlYWAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBpb196Y3J4X2NyZWF0ZV9hcmVhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHBhdHRlcm5zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgYXJlYSBjcmVhdGlvbiBmdW5jdGlvbiBpcyBpbnZva2VkLiBJIGV4cGVjdCB0aGF0IGEgcXVpY2sgc2NhbiBvZiB0aGUgaW1tZWRpYXRlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHByaW1hcnkgcHVycG9zZXMsIGhvcGVmdWxseSByZXZlYWxpbmcgaWYgaXQgaXMgYmVpbmcgdXNlZCBhcyBpbnRlbmRlZC4gUGVyaGFwcyB0aGVyZSBhcmUgc29tZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGRlcGVuZGluZyBvbiBob3cgdGhpcyBhcmVhIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBhY2Nlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb196Y3J4X2NyZWF0ZV9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3pjcnguYz00MzY9c3RhdGljIGludCBpb196Y3J4X2FwcGVuZF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy00NDktXG5pb191cmluZy96Y3J4LmM6NDUwOnN0YXRpYyBpbnQgaW9femNyeF9jcmVhdGVfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcbmlvX3VyaW5nL3pjcnguYy00NTEtXHRcdFx0ICAgICAgIHN0cnVjdCBpb191cmluZ196Y3J4X2FyZWFfcmVnICphcmVhX3JlZyxcbi0tXG5pb191cmluZy96Y3J4LmM9ODE1PXN0YXRpYyBpbnQgemNyeF9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTgzNi1cbmlvX3VyaW5nL3pjcnguYzo4Mzc6XHRyZXQgPSBpb196Y3J4X2NyZWF0ZV9hcmVhKGlmcSwgYXJlYSwgcmVnKTtcbmlvX3VyaW5nL3pjcnguYy04MzgtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL3pjcnguYz04ODM9aW50IGlvX3JlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTk4NS1cdH0gZWxzZSB7XG5pb191cmluZy96Y3J4LmM6OTg2Olx0XHRyZXQgPSBpb196Y3J4X2NyZWF0ZV9hcmVhKGlmcSwgXHUwMDI2YXJlYSwgXHUwMDI2cmVnKTtcbmlvX3VyaW5nL3pjcnguYy05ODctXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjE2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGlvX3JlZ2lzdGVyX3pjcnhgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9fcmVnaXN0ZXJfemNyeGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9jYXRlIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGlvX3VyaW5nYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBpbiBlaXRoZXIgYHJlZ2lzdGVyLmNgIG9yLCBnaXZlbiB0aGUgbmFtZSwgbWF5YmUgZXZlbiBgemNyeC5jYC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhY3R1YWxseSBpbiBgaW9fdXJpbmcvemNyeC5jYC4gVGhhdCBtYWtlcyBzZW5zZS4KCk5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCB0byBpdC4gTGV0JiMzOTtzIHRoaW5rLi4uIGNsZWFybHksIGBDT05GSUdfSU9fVVJJTkdgIHdvdWxkIGJlIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGVuYWJsZXMgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBpbiBnZW5lcmFsLiBBbmQgYmFzZWQgb24gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBJJiMzOTtkIGV4cGVjdCB0aGVyZSB0byBiZSBhIGBDT05GSUdfSU9fVVJJTkdfWkNSWGAgY29uZmlnIG9wdGlvbiBhcyB3ZWxsLgoKVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBsb29rIGluIGBpb191cmluZy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBpb191cmluZyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBJT19VUklOR19aQ1JYXG4gICA3Olx0XHRkZWZfYm9vbCB5XG4gICA4Olx0XHRkZXBlbmRzIG9uIElPX1VSSU5HXG4gICA5Olx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuICAxMDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDExOlx0XHRkZXBlbmRzIG9uIE5FVF9SWF9CVVNZX1BPTExcbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgSU9fVVJJTkdfQlBGXG4gIDE0Olx0XHRkZWZfYm9vbCB5XG4gIDE1Olx0XHRkZXBlbmRzIG9uIEJQRlxuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuICAxOTpcdFx0ZGVmX2Jvb2wgeVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBJT19VUklOR1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBrZXJuZWwgY29uZmlnLiBMZXQmIzM5O3Mgc2VlLi4uIGBJT19VUklOR19aQ1JYYC4gUmlnaHQsIHRoYXQgZGVwZW5kcyBvbiBgUEFHRV9QT09MYCwgYElORVRgLCBhbmQgYE5FVF9SWF9CVVNZX1BPTExgLiBNYWtlcyBzZW5zZS4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBlbmFibGUgYm90aCBgSU9fVVJJTkdgIGFuZCBgSU9fVVJJTkdfWkNSWGAuIFdhaXQgYSBtaW51dGUsIGhvbGQgb24uLi4gYElPX1VSSU5HX1pDUlhgIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgISBTbywgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBpdCYjMzk7cyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSU9fVVJJTkdgIGlzIGxpc3RlZCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgYSBtdXN0LiBBbmQgd2FpdCwgd2hlcmUgaXMgYElPX1VSSU5HYCBkZWZpbmVkPyBJIHJlY2FsbCBpdCYjMzk7cyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gQmV0dGVyIGNoZWNrIHRoZXJlIHRvIGNvbmZpcm0gaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgSSBtaWdodCBoYXZlIG1pc3NlZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTA6XHRcdGhlbHBcbjE5MTE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXG4xOTEyOlx0XHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xuMTkxMzpcdFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cbjE5MTQ6XHRcbjE5MTU6XHRjb25maWcgSU9fVVJJTkdcbjE5MTY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTE3Olx0XHRzZWxlY3QgSU9fV1FcbjE5MTg6XHRcdGRlZmF1bHQgeVxuMTkxOTpcdFx0aGVscFxuMTkyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBpb191cmluZyBpbnRlcmZhY2UsIGVuYWJsaW5nXG4xOTIxOlx0XHQgIGFwcGxpY2F0aW9ucyB0byBzdWJtaXQgYW5kIGNvbXBsZXRlIElPIHRocm91Z2ggc3VibWlzc2lvbiBhbmRcbjE5MjI6XHRcdCAgY29tcGxldGlvbiByaW5ncyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUga2VybmVsIGFuZCBhcHBsaWNhdGlvbi5cbjE5MjM6XHRcbjE5MjQ6XHRjb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4xOTI1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtXCYjMzQ7XG4xOTI2Olx0XHRkZXBlbmRzIG9uIElPX1VSSU5HIFx1MDAyNlx1MDAyNiBHQ09WX0tFUk5FTFxuMTkyNzpcdFx0aGVscFxuMTkyODpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgdG8gZmFjaWxpdGF0ZVxuMTkyOTpcdFx0ICBjb2RlIGNvdmVyYWdlIHRlc3RpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDg4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBJT19VUklORyBEZXBlbmRlbmNpZXMgZm9yIGEgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGBJT19VUklOR2AgaXMgc2V0IGFzIHRoZSBkZWZhdWx0LCBzbyBpdCYjMzk7cyB0ZWNobmljYWxseSBhbHJlYWR5IGVuYWJsZWQuIEJ1dCwgYXMgYSBzZWFzb25lZCBwcm8sIEkga25vdyBnb29kIGNvbmZpZ3VyYXRpb24gaHlnaWVuZSBpcyBpbXBvcnRhbnQuIEV4cGxpY2l0bHkgbGlzdGluZyBpdCBpcyBhbHdheXMgYSBzb3VuZCBwcmFjdGljZSBmb3IgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LgoKTm93LCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgYElPX1VSSU5HX1pDUlhgIGhhdmluZyBzb21lIGRlcGVuZGVuY2llcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIGl0IHJlbGllcyBvbiBgUEFHRV9QT09MYCwgYElORVRgLCBhbmQgYE5FVF9SWF9CVVNZX1BPTExgLiBTaW5jZSBJIGFtIGN1cnJlbnRseSBmb2N1c2VkIG9uIGBJT19VUklOR19aQ1JYYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGNvcnJlY3QuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYE5FVF9SWF9CVVNZX1BPTExgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIG15IGludGVuZGVkIHVzZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1JYX0JVU1lfUE9MTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNDI9Y29uZmlnIENHUk9VUF9ORVRfQ0xBU1NJRFxuLS1cbm5ldC9LY29uZmlnLTM0OS1cbm5ldC9LY29uZmlnOjM1MDpjb25maWcgTkVUX1JYX0JVU1lfUE9MTFxubmV0L0tjb25maWctMzUxLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgYE5FVF9SWF9CVVNZX1BPTExgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTkVUX1JYX0JVU1lfUE9MTGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIGEgYGJvb2xgLCBhbmQgdGhlcmUmIzM5O3Mgbm8gdmlzaWJsZSBwcm9tcHQgYXR0YWNoZWQgdG8gaXQuIFRoYXQgKmltbWVkaWF0ZWx5KiB0ZWxscyBtZSBpdCYjMzk7cyBub3QgYSB1c2VyLWZhY2luZyBvcHRpb24gdGhhdCYjMzk7cyBnb2luZyB0byBiZSBkaXJlY3RseSBzZWxlY3RlZCBkdXJpbmcgY29uZmlndXJhdGlvbi4gSW5zdGVhZCwgaXRzIHN0YXRlIGlzICpkZXJpdmVkKiBvciAqc2VsZWN0ZWQqIGJ5IHNvbWUgb3RoZXIgbWVjaGFuaXNtLCBsaWtlbHkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBidWlsZCBmbGFnLCBvciBwb3NzaWJseSBldmVuIGJhc2VkIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUgb3Iga2VybmVsIHZlcnNpb24uIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBjb25zaWRlciB3aGljaCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIHZhbHVlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdHJhY2UgYmFjayB0aGUgbG9naWMgdGhhdCBzZXRzIHRoaXMsIHRvIHVuZGVyc3RhbmQgaXRzIHRydWUgZnVuY3Rpb24gYW5kIHdoeSBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkIGluIGEgZ2l2ZW4gc2NlbmFyaW8uIElzIGl0IGRlcGVuZGVudCBvbiB0aGUgZHJpdmVyPyBUaGUgTklDIHR5cGU/IE1heWJlIGFuIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQmIzM5O3Mgc2VsZWN0aXZlbHkgZW5hYmxlZD8gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGUgY29kZSB0aGF0IHJlZmVyZW5jZXMgdGhpcyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfUlhfQlVTWV9QT0xMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgTkVUX1JYX0JVU1lfUE9MTGAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHN0YWNrJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBuZXR3b3JrLXJlbGF0ZWQgc2V0dGluZ3MuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gbG9vayBkaXJlY3RseSBpbnRvIGBuZXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGhlbHAgdGV4dCBmb3IgYW55dGhpbmcgbmV0d29yay1zcGVjaWZpYyBhbmQgY29uZmlndXJhYmxlIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWZ0ZXIgYE5FVF9SWF9CVVNZX1BPTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQga25vYiBjb250cm9scywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSG9wZWZ1bGx5LCBgbmV0L0tjb25maWdgIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3NhcnkgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ1Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuIDM0NjpcdFx0aGVscFxuIDM0NzpcdFx0ICBDZ3JvdXAgc3Vic3lzdGVtIGZvciB1c2UgYXMgZ2VuZXJhbCBwdXJwb3NlIHNvY2tldCBjbGFzc2lkIG1hcmtlciB0aGF0IGlzXG4gMzQ4Olx0XHQgIGJlaW5nIHVzZWQgaW4gY2xzX2Nncm91cCBhbmQgZm9yIG5ldGZpbHRlciBtYXRjaGluZy5cbiAzNDk6XHRcbiAzNTA6XHRjb25maWcgTkVUX1JYX0JVU1lfUE9MTFxuIDM1MTpcdFx0Ym9vbFxuIDM1MjpcdFx0ZGVmYXVsdCB5IGlmICFQUkVFTVBUX1JUIHx8IChQUkVFTVBUX1JUIFx1MDAyNlx1MDAyNiAhTkVUQ09OU09MRSlcbiAzNTM6XHRcbiAzNTQ6XHRjb25maWcgQlFMXG4gMzU1Olx0XHRib29sXG4gMzU2Olx0XHRwcm9tcHQgXCYjMzQ7RW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXCYjMzQ7XG4gMzU3Olx0XHRkZXBlbmRzIG9uIFNZU0ZTXG4gMzU4Olx0XHRzZWxlY3QgRFFMXG4gMzU5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1ODQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBEZWZhdWx0IE5ldHdvcmsgSU8gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgc3lzdGVtIHNlZW1zIHRvIGJlIGRlZmF1bHRpbmcgdG8gYHlgIGZvciBzb21ldGhpbmcuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIGZhaXJseSBjZXJ0YWluIHRoYXQgd2hhdGV2ZXIgdGhlIGRlZmF1bHQgaXMsIGl0IG1lYW5zIHRoYXQgYElPX1VSSU5HX1pDUlhgIGlzIHByb2JhYmx5IGVuYWJsZWQgYnkgZGVmYXVsdCAqYXMgbG9uZyBhcyogYElORVRgIGlzIGFsc28gZW5hYmxlZC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbiB0aGVzZSBkYXlzLiBCdXQgdGhhdCBicmluZ3MgdXAgYSBmdXJ0aGVyIHBvaW50OiB3aGF0JiMzOTtzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgYFBBR0VfUE9PTGAgb3B0aW9uPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBjb21wb25lbnQgZm9yIG9wdGltaXppbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aCBgaW9fdXJpbmdgLCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBkZWZhdWx0IHN0YXR1cyBpbiByZWxhdGlvbiB0byBgSU9fVVJJTkdfWkNSWGAuIEl0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3ksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDAxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTMxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OgoKKipUaGUgQ3VyaW91cyBDYXNlIG9mIFBBR0VfUE9PTCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdW5wYWNrIHRoaXMgcXVpY2tseS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSB2YXJpYWJsZSwgYFBBR0VfUE9PTGAuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHdpdGhvdXQgYW55IGZ1cnRoZXIgY29udGV4dCwgdGhpcyB0aGluZyBpcyBpbXBsaWNpdGx5IGEgYm9vbGVhbi4gTm8gcHJvbXB0LCBubyBzdXJyb3VuZGluZyBoaW50cywganVzdC4uLml0LiBTbywgd2l0aG91dCBhbnkgZXhwbGljaXQgYXNzaWdubWVudCBvciBkZWZpbml0aW9uLCB0aGlzIHZhcmlhYmxlLCBieSBkZWZhdWx0LCBpcyB0cmVhdGVkIGFzIGEgYm9vbGVhbi4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bmV4cGVjdGVkLCBhbmQgY2VydGFpbmx5IHdvcnRoIG5vdGluZyB3aGVuIHJldmlld2luZyBjb2RlIG9yIGRlc2lnbi4gSXQgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IHRoZSBzeXN0ZW3igJlzIGRlZmF1bHRzIGFuZCBob3cgaXQgaW50ZXJwcmV0cyBzZWVtaW5nbHkgYW1iaWd1b3VzIGRlY2xhcmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBiZWhhdmlvciBpbiBtaW5kIHRvIGF2b2lkIGludHJvZHVjaW5nIGltcGxpY2l0IGJ1Z3Mgb3IgbWlzdW5kZXJzdGFuZGluZ3MgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBxdWljaywgYWxiZWl0IHBvdGVudGlhbGx5IHN1YnRsZSwgZGV0YWlsIHRvIGtlZXAgaW4gdGhlIG1lbnRhbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMDE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFBBR0VfUE9PTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQzNT1jb25maWcgVkVUSFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNzpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDctXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODctXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L0tjb25maWc6NjExOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXHRzZWxlY3QgTkVUX1NIQVBFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjEtXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gNjRCSVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctODAtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjgxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cdHNlbGVjdCBCUk9BRENPTV9QSFkgaWYgQVJDSF9CQ00yODM1XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxMy1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYxLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzUtXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnLTIzLVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZzoyNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMxLVx0c2VsZWN0IEZJWEVEX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cdGltcGx5IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy0xNTMtXHRzZWxlY3QgUkVBTFRFS19QSFlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjE1NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnOjE1Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0NvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc6NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTU5PWNvbmZpZyBNVk5FVEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY1Olx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTAtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjkxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIwLVx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjMtXHRzZWxlY3QgUENTX01US19MWU5YSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZz02PWNvbmZpZyBNTFg0X0VOXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctMTEtXHRzZWxlY3QgTUxYNF9DT1JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9Mjk9Y29uZmlnIE1MWDVfQ09SRV9FTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMxLVx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgSU5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNTFg1X0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjMyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzM6XHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zNC1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTMzPWNvbmZpZyBNTFhTV19QQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTM1LVx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEhBU19JT01FTSBcdTAwMjZcdTAwMjYgTUxYU1dfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzctXHRkZWZhdWx0IG1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI3LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6Mjg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjktXHRzZWxlY3QgUENTX1hQQ1Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnPTE9Y29uZmlnIExBTjk2NlhfU1dJVENIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy04LVx0c2VsZWN0IFBIWUxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWctMTAtXHRzZWxlY3QgVkNBUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZz0yOD1jb25maWcgTEFOOTY5WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzAtXHRkZXBlbmRzIG9uIFNQQVJYNV9TV0lUQ0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZzozMTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xOD1jb25maWcgTUlDUk9TT0ZUX01BTkFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yMy1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZzoyNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI1LVx0c2VsZWN0IE5FVF9TSEFQRVJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnOjI2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNy1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTExMD1jb25maWcgUlRBU0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTEzLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTE0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9Mjk9Y29uZmlnIFJBVkJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzUtXHRzZWxlY3QgTURJT19CSVRCQU5HXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc6MzY6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzctXHRzZWxlY3QgUEhZTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc9MjU9Y29uZmlnIFNOSV9ORVRTRUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0yOC1cdHNlbGVjdCBQSFlMSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnOjI5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMzAtXHRzZWxlY3QgTUlJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy04LVx0c2VsZWN0IFBDU19YUENTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEwLVx0c2VsZWN0IFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZz0yNj1jb25maWcgVEVIVVRJX1RONDBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0yOC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZzoyOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTMwLVx0c2VsZWN0IEZXX0xPQURFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NTA9Y29uZmlnIFRJX0NQU1dcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU1LVx0c2VsZWN0IE1GRF9TWVNDT05cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NTY6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU3LVx0c2VsZWN0IFJFR01BUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy02OS1cdGRlcGVuZHMgb24gVElfQ1BUUyB8fCAhVElfQ1BUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3MDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzEtXHRzZWxlY3QgVElfREFWSU5DSV9NRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMS1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjEwMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAzLVx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0yMDQ9Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIwOC1cdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoyMDk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIxMC1cdGRlcGVuZHMgb24gUFJVX1JFTU9URVBST0Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTk9Y29uZmlnIExJQldYXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIzLVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0yPWNvbmZpZyBNVDc2X0NPUkVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzo0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTUtXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zNy1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM3MQoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiAxNjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKmlvX3VyaW5nIEludGVnZXIgT3ZlcmZsb3cgRml4OiBGb2N1cyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiAgVGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnIHdpbGwgcHVsbCBpbiBgUEFHRV9QT09MYCBpZiBgTkVUYCBpcyBzZXQsIGFuZCBzaW5jZSBgSU9fVVJJTkdfQlBGX09QU2AgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLCB0aGF0IGFsc28gbWVhbnMgYFBBR0VfUE9PTGAgd2lsbCBiZSBlbmFibGVkLiBUaGlzIGluIHR1cm4gZW5hYmxlcyBgSU9fVVJJTkdfWkNSWGAgYXV0b21hdGljYWxseS4gIFRoZXJlZm9yZSwgZXhwbGljaXRseSBlbmFibGluZyBgUEFHRV9QT09MYCBvciBgTkVUX1JYX0JVU1lfUE9MTGAgaXNuJiMzOTt0IG5lY2Vzc2FyeTsganVzdCBgSU9fVVJJTkdgIGFuZCBgSU9fVVJJTkdfWkNSWGAgc2hvdWxkIGNvdmVyIGV2ZXJ5dGhpbmcgd2UgbmVlZC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGNhbGxlcnMgb2YgYGlvX3Bpbl9wYWdlc2AuIEkgcmVjYWxsIGl0JiMzOTtzIHVzZWQgYnkgYGlvX3JlZ2lvbl9waW5fcGFnZXNgLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9faW1wb3J0X3VtZW1gLiAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgIGlzIGNhbGxlZCBieSBgaW9fY3JlYXRlX3JlZ2lvbmAuIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpcyBjYWxsZWQgYnkgYF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlYCBhbmQgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYC4gIEFuZCBgaW9faW1wb3J0X3VtZW1gIGlzIGNhbGxlZCBieSBgaW9faW1wb3J0X2FyZWFgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGlvX3pjcnhfY3JlYXRlX2FyZWFgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHpjcnhfcmVnaXN0ZXJfbmV0ZGV2YCBhbmQgYGlvX3JlZ2lzdGVyX3pjcnhgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYW5kIGBpb19pbXBvcnRfdW1lbWAuIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBgaW9fY3JlYXRlX3JlZ2lvbmAgaXNuJiMzOTt0IHN0YXRpYyBhbmQgaXMgaW4gYGlvX3VyaW5nL21lbW1hcC5jYC4gIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpcyBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9yc3JjLmNgLiAgYGlvX2ltcG9ydF91bWVtYCBpcyBhbHNvIHN0YXRpYyBhbmQgaW4gYGlvX3VyaW5nL3pjcnguY2AuCgpTaW5jZSBzeXprYWxsZXIgY2FuIGZ1enogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3aXRoaW4gdGhlIGNhbGwgdHJlZSwgaXQmIzM5O3MgaWRlYWwgdG8gcHJvdmlkZSBub24tc3RhdGljIG9uZXMgb3IgdGhlIHN0YXRpYyBvbmVzIGlmIHRoZXkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZS4gU3l6a2FsbGVyJiMzOTtzIGBGb2N1c1N5bWJvbHNgIGNhbiBhbHNvIGluY2x1ZGUgc3RhdGljIGZ1bmN0aW9ucy4KVGhlcmVmb3JlLCBteSBsaXN0IHdpbGwgYmU6CgoqICAgYGlvX2NyZWF0ZV9yZWdpb25gCiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAKKiAgIGBpb19pbXBvcnRfdW1lbWAKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fcmVnaW9uX3Bpbl9wYWdlc2AKCkxldCYjMzk7cyB2ZXJpZnkgdGhhdCBgaW9fcGluX3BhZ2VzYCBpc24mIzM5O3Qgc3RhdGljLiBZZXAsIGl0JiMzOTtzIG5vdCBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBuYW1lcyBhcmUgY29ycmVjdDoKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fY3JlYXRlX3JlZ2lvbmAKKiAgIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYAoqICAgYGlvX2ltcG9ydF91bWVtYAoqICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgCgpEb3VibGUgY2hlY2tpbmcsIHRob3NlIGFyZSBhbGwgdGhlIGNhbGxlcnMgb2YgYGlvX3Bpbl9wYWdlc2Agd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gSSBzZWUgYHZmaW9fcGluX3BhZ2VzYCBpbiB0aGUgZ3JlcHBlZCByZXN1bHRzLCBidXQgdGhhdCYjMzk7cyBpbiBhIGRpZmZlcmVudCBzdWJzeXN0ZW0uCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZml4IGZvciBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19waW5fcGFnZXNgLiBUaGUgcGF0Y2ggcHJldmVudHMgYG5yX3BhZ2VzYCBmcm9tIGJlaW5nIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopYC4gIFRoaXMgaXMgYSBjcml0aWNhbCBpb191cmluZyBmdW5jdGlvbiB1c2VkIGR1cmluZyBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3MuIEl0IG5lZWRzIGBJT19VUklOR2AgYW5kIGBJT19VUklOR19aQ1JYYCBzaW5jZSBgaW9faW1wb3J0X3VtZW1gIGlzIGluIGB6Y3J4LmNgLiBDaGVja2VkLCBhbmQgYElPX1VSSU5HX1pDUlhgIGlzIGRlZmluZWQgaW4gYGlvX3VyaW5nL0tjb25maWdgLiBgSU9fVVJJTkdgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIGBpb19jcmVhdGVfcmVnaW9uYCBhbmQgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLiBgSU9fVVJJTkdfWkNSWGAgaXMgcmVxdWlyZWQgZm9yIGBpb19pbXBvcnRfdW1lbWAuIFNpbmNlIGBpb19waW5fcGFnZXNgIGlzIHJlYWNoYWJsZSB2aWEgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGBJT19VUklOR2AgaXMgdGhlIGNvcmUgZGVwZW5kZW5jeS4KCk15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpczoKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAKKiAgIGBpb19jcmVhdGVfcmVnaW9uYAoqICAgYGlvX2ltcG9ydF91bWVtYAoqICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzOgoqICAgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgOiBgc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7SU9fVVJJTkdfWkNSWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19yZWdpb25fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb19pbXBvcnRfdW1lbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGlvX3Bpbl9wYWdlcygpIGJ5IGVuc3VyaW5nIHRoYXQgbnJfcGFnZXMgZG9lcyBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgdGhhdCBjYW4gYmUgc2FmZWx5IGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2UgcG9pbnRlciBhcnJheS4gVGhpcyBpcyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBhbGxvY2F0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGUgb3ZlcmZsb3cgY2hlY2sgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCByZWplY3QgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HX1pDUlgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fcmVnaW9uX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2NyZWF0ZV9yZWdpb24mIzM0OywKICAgICYjMzQ7aW9faW1wb3J0X3VtZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgcmVqZWN0IHZhbGlkIGxhcmdlIGFsbG9jYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6MTAuOTk0NDQzMjI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MjgxMTI1MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJJT19VUklOR19aQ1JYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcGluX3BhZ2VzXCIsXG4gICAgXCJpb19yZWdpb25fcGluX3BhZ2VzXCIsXG4gICAgXCJpb19zcWVfYnVmZmVyX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gICAgXCJpb19pbXBvcnRfdW1lbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gaW9fcGluX3BhZ2VzKCkgYnkgZW5zdXJpbmcgdGhhdCBucl9wYWdlcyBkb2VzIG5vdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZSB0aGF0IGNhbiBiZSBzYWZlbHkgYWxsb2NhdGVkIGZvciB0aGUgcGFnZSBwb2ludGVyIGFycmF5LiBUaGlzIGlzIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIGJ1ZmZlciByZWdpc3RyYXRpb24gYW5kIG1lbW9yeSByZWdpb24gY3JlYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGFsbG9jYXRpb24gcGF0aHMgdG8gZW5zdXJlIHRoZSBvdmVyZmxvdyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgcmVqZWN0IHZhbGlkIGxhcmdlIGFsbG9jYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToxMC45OTQ0NDkyMTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDM5NTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUxN2UxMjFlYjgyMGUzMTY5MDg3MDMyYzcxNmRiNTY5NTVlMmMwYzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjEgMDE6NDU6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbWVtbWFwLmMgYi9pb191cmluZy9tZW1tYXAuY1xcbmluZGV4IDRmOWI0MzkzMTljNDY2Li5kYTFmNmM1ZDA3ZjhhMCAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xcbisrKyBiL2lvX3VyaW5nL21lbW1hcC5jXFxuQEAgLTUzLDcgKzUzLDcgQEAgc3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxcbiBcXHRucl9wYWdlcyA9IGVuZCAtIHN0YXJ0O1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKG5yX3BhZ2VzIFxcdTAwM2UgSU5UX01BWCkpXFxuK1xcdGlmIChucl9wYWdlcyBcXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXG4gXFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToxMS40NzU1MzMwMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDgwMDAyNDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiSU9fVVJJTkdfWkNSWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3Bpbl9wYWdlc1wiLFxuICAgIFwiaW9fcmVnaW9uX3Bpbl9wYWdlc1wiLFxuICAgIFwiaW9fc3FlX2J1ZmZlcl9yZWdpc3RlclwiLFxuICAgIFwiaW9fY3JlYXRlX3JlZ2lvblwiLFxuICAgIFwiaW9faW1wb3J0X3VtZW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGlvX3Bpbl9wYWdlcygpIGJ5IGVuc3VyaW5nIHRoYXQgbnJfcGFnZXMgZG9lcyBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgdGhhdCBjYW4gYmUgc2FmZWx5IGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2UgcG9pbnRlciBhcnJheS4gVGhpcyBpcyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBhbGxvY2F0aW9uIHBhdGhzIHRvIGVuc3VyZSB0aGUgb3ZlcmZsb3cgY2hlY2sgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IHJlamVjdCB2YWxpZCBsYXJnZSBhbGxvY2F0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMTdlMTIxZWI4MjBlMzE2OTA4NzAzMmM3MTZkYjU2OTU1ZTJjMGMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdW4gMjEgMDE6NDU6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9tZW1tYXAuYyBiL2lvX3VyaW5nL21lbW1hcC5jXG5pbmRleCA0ZjliNDM5MzE5YzQ2Ni4uZGExZjZjNWQwN2Y4YTAgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC01Myw3ICs1Myw3IEBAIHN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbiBcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLVx0aWYgKFdBUk5fT05fT05DRShucl9wYWdlcyBcdTAwM2UgSU5UX01BWCkpXG4rXHRpZiAobnJfcGFnZXMgXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFxuIFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6MTEuNDc1NTM0Njg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjYxOTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiBpb191cmluZy9tZW1tYXAuYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9tZW1tYXAuY2AuIEl0IHNlZW1zIHRoZXkndmUgbWFkZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGlvX3Bpbl9wYWdlc2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhleSd2ZSBtb2RpZmllZCB0aGUgY2hlY2sgb24gYG5yX3BhZ2VzYC4gT3JpZ2luYWxseSwgaXQgd2FzIGp1c3QgYSB3YXJuaW5nIGlmIGBucl9wYWdlc2AgZXhjZWVkZWQgYElOVF9NQVhgLiBOb3csIGl0J3MgY2hlY2tpbmcgYWdhaW5zdCBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAuIEhtbSwgaW50ZXJlc3RpbmcuXG5cblRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgaXMgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93LCBwYXJ0aWN1bGFybHkgd2hlbiBhbGxvY2F0aW5nIHRoZSBgcGFnZXNgIGFycmF5IHVzaW5nIHNvbWV0aGluZyBsaWtlIGBrdm1hbGxvY19vYmpzYCBvciBwYXNzaW5nIGBucl9wYWdlc2AgdG8gYSBmdW5jdGlvbiBleHBlY3RpbmcgYW4gYGludGAuIEJ1dCB3YWl0Li4uIHdhc24ndCBga3ZtYWxsb2Nfb2Jqc2Agc3VwcG9zZWQgdG8gdGFrZSBhIGBzaXplX3RgPyBNYXliZSBpdCdzIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHRoYXQncyBiZWluZyBwYXNzZWQgaW4gYG5wYWdlc2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGlvX3Bpbl9wYWdlc2AgZnVuY3Rpb24gaW4gYGlvX3VyaW5nL21lbW1hcC5jYCB0byBjb25maXJtIHRoZSBwYXJhbWV0ZXIgdHlwZXMgYW5kIGhvdyBgbnJfcGFnZXNgIGlzIGFjdHVhbGx5IHVzZWQuIE5lZWQgdG8gYmUgc3VyZSBvZiB0aGUgcHJlY2lzZSBjb250ZXh0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToxNS42MzIxNTc1NTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9tZW1tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIG5yX3BhZ2VzO1xcbiAgNDM6XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4gIDQ0OlxcdFxcdGludCByZXQ7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmIChjaGVja19hZGRfb3ZlcmZsb3codWFkZHIsIGxlbiwgXFx1MDAyNmVuZCkpXFxuICA0NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gIDQ4OlxcdFxcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coZW5kLCBQQUdFX1NJWkUgLSAxLCBcXHUwMDI2ZW5kKSlcXG4gIDQ5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRlbmQgPSBlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gIDUyOlxcdFxcdHN0YXJ0ID0gdWFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gIDUzOlxcdFxcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XFxuICA1NDpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFucl9wYWdlcykpXFxuICA1NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gIDU2OlxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2UgKikpXFxuICA1NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cGFnZXMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIG5yX3BhZ2VzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiAgNjA6XFx0XFx0aWYgKCFwYWdlcylcXG4gIDYxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuICA2NDpcXHRcXHRcXHRcXHRcXHRcXHRwYWdlcyk7XFxuICA2NTpcXHRcXHQvKiBzdWNjZXNzLCBtYXBwZWQgYWxsIHBhZ2VzICovXFxuICA2NjpcXHRcXHRpZiAocmV0ID09IG5yX3BhZ2VzKSB7XFxuICA2NzpcXHRcXHRcXHQqbnBhZ2VzID0gbnJfcGFnZXM7XFxuICA2ODpcXHRcXHRcXHRyZXR1cm4gcGFnZXM7XFxuICA2OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjE1LjYzMjI1Nzc3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTgxNTY0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUsIHNwZWNpZmljYWxseSB3aXRoIGBucl9wYWdlc2AuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoaXMgY291bGQgYmVjb21lIGEgcHJvYmxlbSBpZiBgbnJfcGFnZXNgIGVuZHMgdXAgYmVpbmcgc2lnbmlmaWNhbnRseSBsYXJnZXIgdGhhbiBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAuIFRoYXQncyB0aGUgY2xhc3NpYyBzY2VuYXJpby4gSWYgdGhhdCBoYXBwZW5zLCBga3ZtYWxsb2Nfb2Jqc2AgZ2V0cyBjYWxsZWQgd2l0aCBhIHZhbHVlIHRoYXQgaGFzIHdyYXBwZWQgYXJvdW5kIGR1ZSB0byB0aGUgb3ZlcmZsb3cuICBIb2xkIG9uLCBga3ZtYWxsb2Nfb2Jqc2AgdGFrZXMgYHNpemVfdGAgZm9yIGl0cyBhbGxvY2F0aW9uIHNpemUsIHNvIGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93LCBpdCB3b3VsZCBiZSBhIHByb2JsZW0uIE5vdyBJJ20gdGhpbmtpbmcsIHdhaXQgYSBtaW51dGUsIGBrdm1hbGxvY19vYmpzYCBsb29rcyBsaWtlIGl0J3MgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaGVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBuZWVkIHRvIGtub3cgaWYgYGt2bWFsbG9jX29ianNgIGlzIGEgbWFjcm8gb3IgZnVuY3Rpb24uIEFjdHVhbGx5LCBgbnJfcGFnZXNgIGlzIGB1bnNpZ25lZCBsb25nYCwgc28gdGhhdCBwb3RlbnRpYWxseSBleHBhbmRzIHRoZSBwcm9ibGVtIHNwYWNlLCBidXQgdGhlIGRpdmlzaW9uIHJlc3VsdCwgYElOVF9NQVggLyA4YCwgd291bGQgYmUgdGhlIHBvaW50IG9mIHRoZSBvdmVyZmxvdy5cblxuSSdtIHByZXR0eSBzdXJlIGBrdm1hbGxvY19vYmpzYCBtaWdodCBqdXN0IGJlIGEgbWFjcm8gd3JhcHBpbmcgYXJvdW5kIGBrdm1hbGxvY19hcnJheWAuICBUaGF0J3MgbXkgaHVuY2guIFRpbWUgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBMZXQncyBzZWUgaG93IGBpb19waW5fcGFnZXNgIGlzIHVzaW5nIGl0IGFuZCBmb2xsb3cgdGhlIGNhbGwgc3RhY2suIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGUgY2FsbGVycyB0byBzZWUgaWYgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NToyMC4wNTA0MTY1MjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3NDA2NTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19waW5fcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0PTExMz1kZXZpY2VzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0LTE0Mi0gIG9mIHRoZSBpb3ZhXFx1MDAzYy1cXHUwMDNldmFkZHIgbWFwcGluZ3MgaW4gdGhpcyBvcGVyYXRpb24uIEFuZCB0aGV5IGV4cG9ydCBhXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0OjE0MzogIHZmaW9fcGluX3BhZ2VzIGFuZCBhIHZmaW9fdW5waW5fcGFnZXMgaW50ZXJmYWNlcyBmcm9tIHRoZSB2ZmlvIGlvbW11XFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0LTE0NC0gIGJhY2tlbmQgZm9yIHRoZSBwaHlzaWNhbCBkZXZpY2VzIHRvIHBpbiBhbmQgdW5waW4gcGFnZXMgYnkgZGVtYW5kLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdD0yNTM9ZHJpdmVyOjpcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0LTI1NC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0OjI1NTpcXHRpbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0LTI1Ni1cXHRcXHRcXHRcXHQgIGludCBucGFnZSwgaW50IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmM9MTM3PXN0YXRpYyBpbnQgZ3Z0X3Bpbl9ndWVzdF9wYWdlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1bnNpZ25lZCBsb25nIGdmbixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jLTE1Mi1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYzoxNTM6XFx0XFx0cmV0ID0gdmZpb19waW5fcGFnZXMoXFx1MDAyNnZncHUtXFx1MDAzZXZmaW9fZGV2aWNlLCBjdXJfaW92YSwgMSxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYy0xNTQtXFx0XFx0XFx0XFx0ICAgICBJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIFxcdTAwMjZjdXJfcGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTU1LVxcdFxcdGlmIChyZXQgIT0gMSkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jOjE1NjpcXHRcXHRcXHRndnRfdmdwdV9lcnIoXFxcInZmaW9fcGluX3BhZ2VzIGZhaWxlZCBmb3IgaW92YSAlcGFkLCByZXQgJWRcXFxcblxcXCIsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMtMTU3LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN1cl9pb3ZhLCByZXQpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jPTkxPXN0YXRpYyB2b2lkIHBhZ2VfYXJyYXlfdW5waW4oc3RydWN0IHBhZ2VfYXJyYXkgKnBhLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTEyNS0gKiBSZXF1ZXN0cyB0byBwaW4gXFxcImFsaWduZWRcXFwiIHBhZ2VzIGNhbiBiZSBjb2FsZXNjZWQgaW50byBhIHNpbmdsZVxcbmRyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfY3AuYzoxMjY6ICogdmZpb19waW5fcGFnZXMgcmVxdWVzdCBmb3IgdGhlIHNha2Ugb2YgZWZmaWNpZW5jeSwgYmFzZWQgb24gdGhlXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTEyNy0gKiBleHBlY3RhdGlvbiBvZiA0SyBwYWdlIHJlcXVlc3RzLiBVbmFsaWduZWQgcmVxdWVzdHMgYXJlIHByb2JhYmx5XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmM9MTMxPXN0YXRpYyBpbnQgcGFnZV9hcnJheV9waW4oc3RydWN0IHBhZ2VfYXJyYXkgKnBhLCBzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIGJvb2wgdW5hbGlnbmVkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTE0Ni1cXG5kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X2NwLmM6MTQ3OlxcdFxcdHJldCA9IHZmaW9fcGluX3BhZ2VzKHZkZXYsICpmaXJzdCwgbnBhZ2UsXFxuZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19jcC5jLTE0OC1cXHRcXHRcXHRcXHQgICAgIElPTU1VX1JFQUQgfCBJT01NVV9XUklURSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zNTE9c3RhdGljIGludCB2ZmlvX2FwX3ZhbGlkYXRlX25pYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGRtYV9hZGRyX3QgKm5pYilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNjctICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgTklCIHBhZ2UsIHdoaWNoIGhhcyBiZWVuIHBpbm5lZCB3aXRoXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM2ODogKiB2ZmlvX3Bpbl9wYWdlcygpLCBpcyBhIHNoYXJlZCBwYWdlIGJlbG9uZ2luZyB0byBhIHNlY3VyZSBndWVzdC5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzY5LSAqXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzcxLSAqIChpLmUuIGlmIHRoZSBOSUIgYmVsb25ncyB0byBhIHNlY3VyZSBndWVzdCBhbmQgaXMgc2hhcmVkKSwgdGhlbiAwXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM3MjogKiAoc3VjY2VzcykgaXMgcmV0dXJuZWQuIElmIHRoZSBOSUIgd2FzIG5vdCBzaGFyZWQsIHZmaW9fcGluX3BhZ2VzKCkgaGFkXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM3My0gKiBleHBvcnRlZCBpdCBhbmQgbm93IGl0IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2VjdXJlIGd1ZXN0IGFueW1vcmUuIEluXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzc2LSAqIENvbnRleHQ6IHRoZSBOSUIgKGF0IHBoeXNpY2FsIGFkZHJlc3MgQGFkZHIpIGhhcyB0byBiZSBwaW5uZWQgd2l0aFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNzc6ICpcXHQgICAgdmZpb19waW5fcGFnZXMoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNzgtICpcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zODE9c3RhdGljIGludCBlbnN1cmVfbmliX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzg0LVxcdCAqIFRoZSBuaWIgaGFzIHRvIGJlIGxvY2F0ZWQgaW4gc2hhcmVkIHN0b3JhZ2Ugc2luY2UgZ3Vlc3QgYW5kXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjM4NTpcXHQgKiBob3N0IGFjY2VzcyBpdC4gdmZpb19waW5fcGFnZXMoKSB3aWxsIGRvIGEgcGluIHNoYXJlZCBhbmRcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzg2LVxcdCAqIGlmIHRoYXQgZmFpbHMgKHBvc3NpYmx5IGJlY2F1c2UgaXQncyBub3QgYSBzaGFyZWQgcGFnZSkgaXRcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00MDgtICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NDA5OiAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00MTAtICpcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz00MTY9c3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTQzOS1cXHQvKiBUaGUgcGluIHdpbGwgcHJvYmFibHkgYmUgc3VjY2Vzc2Z1bCBldmVuIGlmIHRoZSBOSUIgd2FzIG5vdCBzaGFyZWQgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NDQwOlxcdHJldCA9IHZmaW9fcGluX3BhZ2VzKFxcdTAwMjZxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNldmRldiwgbmliLCAxLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDEtXFx0XFx0XFx0ICAgICBJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUsIFxcdTAwMjZoX3BhZ2UpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTQ0NS1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo0NDY6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy00NDctXFx0XFx0XFx0XFx0IFxcXCJuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvdmZpby9pb21tdWZkLmM9MjI1PUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9faW9tbXVmZF9waHlzaWNhbF9wYXNpZF9kZXRhY2hfaW9hcyk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIyOC0gKiBUaGUgZW11bGF0ZWQgc3RhbmRhcmQgb3BzIG1lYW4gdGhhdCB2ZmlvX2RldmljZSBpcyBnb2luZyB0byB1c2UgdGhlXFxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYzoyMjk6ICogXFxcIm1kZXYgcGF0aFxcXCIgYW5kIHdpbGwgY2FsbCB2ZmlvX3Bpbl9wYWdlcygpL3ZmaW9fZG1hX3J3KCkuIERyaXZlcnMgdXNpbmcgdGhpc1xcbmRyaXZlcnMvdmZpby9pb21tdWZkLmMtMjMwLSAqIG9wcyBzZXQgc2hvdWxkIGNhbGwgdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoKS4gRHJpdmVycyB0aGF0IGRvXFxuZHJpdmVycy92ZmlvL2lvbW11ZmQuYzoyMzE6ICogbm90IGNhbGwgdmZpb19waW5fcGFnZXMoKS92ZmlvX2RtYV9ydygpIGhhdmUgbm8gbmVlZCB0byBwcm92aWRlIGRtYV91bm1hcC5cXG5kcml2ZXJzL3ZmaW8vaW9tbXVmZC5jLTIzMi0gKi9cXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NjM4PXN0YXRpYyBsb25nIHZwZm5fcGFnZXMoc3RydWN0IHZmaW9fZG1hICpkbWEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTY3NC0gKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjY3NTpzdGF0aWMgbG9uZyB2ZmlvX3Bpbl9wYWdlc19yZW1vdGUoc3RydWN0IHZmaW9fZG1hICpkbWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy02NzYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5wYWdlLCB1bnNpZ25lZCBsb25nICpwZm5fYmFzZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9ODkzPXN0YXRpYyBpbnQgdmZpb19pb21tdV90eXBlMV9waW5fcGFnZXModm9pZCAqaW9tbXVfZGF0YSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtOTIxLVxcdGlmIChXQVJOX09OQ0UoaW9tbXUtXFx1MDAzZXZhZGRyX2ludmFsaWRfY291bnQsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo5MjI6XFx0XFx0ICAgICAgXFxcInZmaW9fcGluX3BhZ2VzIG5vdCBhbGxvd2VkIHdpdGggVkZJT19VUERBVEVfVkFERFJcXFxcblxcXCIpKSB7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy05MjMtXFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xNTgwPXN0YXRpYyBpbnQgdmZpb19waW5fbWFwX2RtYShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk0LVxcdFxcdC8qIFBpbiBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5ICovXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxNTk1OlxcdFxcdG5wYWdlID0gdmZpb19waW5fcGFnZXNfcmVtb3RlKGRtYSwgdmFkZHIgKyBkbWEtXFx1MDAzZXNpemUsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xNTk2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCwgXFx1MDAyNnBmbiwgbGltaXQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTE4MDM9c3RhdGljIGludCB2ZmlvX2lvbW11X3JlcGxheShzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTE4NjItXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxODYzOlxcdFxcdFxcdFxcdG5wYWdlID0gdmZpb19waW5fcGFnZXNfcmVtb3RlKGRtYSwgdmFkZHIsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xODY0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xNjc1PUVYUE9SVF9TWU1CT0wodmZpb19zZXRfaXJxc192YWxpZGF0ZV9hbmRfcHJlcGFyZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTY5MC0gKi9cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTY5MTppbnQgdmZpb19waW5fcGFnZXMoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIGRtYV9hZGRyX3QgaW92YSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTY5Mi1cXHRcXHQgICBpbnQgbnBhZ2UsIGludCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTE3MjItfVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxNzIzOkVYUE9SVF9TWU1CT0wodmZpb19waW5fcGFnZXMpO1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xNzI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvLmg9MzgwPXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0zODMtXFxuaW5jbHVkZS9saW51eC92ZmlvLmg6Mzg0OmludCB2ZmlvX3Bpbl9wYWdlcyhzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgZG1hX2FkZHJfdCBpb3ZhLFxcbmluY2x1ZGUvbGludXgvdmZpby5oLTM4NS1cXHRcXHQgICBpbnQgbnBhZ2UsIGludCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE4PXN0YXRpYyBib29sIGlvX21lbV9hbGxvY19jb21wb3VuZChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0zOS1cXG5pb191cmluZy9tZW1tYXAuYzo0MDpzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDEte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTM0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX3Bpbl9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xNDAtXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTQxOlxcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHJlZy1cXHUwMDNldXNlcl9hZGRyLCBzaXplLCBcXHUwMDI2bnJfcGFnZXMpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTE0Mi1cXHRpZiAoSVNfRVJSKHBhZ2VzKSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTktXFxuaW9fdXJpbmcvbWVtbWFwLmg6MTA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKTtcXG5pb191cmluZy9tZW1tYXAuaC0xMS1cXG4tLVxcbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtODgzLVxcdHJldCA9IC1FTk9NRU07XFxuaW9fdXJpbmcvcnNyYy5jOjg4NDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVxcdTAwM2Vpb3ZfYmFzZSwgaW92LVxcdTAwM2Vpb3ZfbGVuLFxcbmlvX3VyaW5nL3JzcmMuYy04ODUtXFx0XFx0XFx0XFx0XFx1MDAyNm5yX3BhZ2VzKTtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0yMDI9c3RhdGljIGludCBpb19pbXBvcnRfdW1lbShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yMTMtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuaW9fdXJpbmcvemNyeC5jOjIxNDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZylhcmVhX3JlZy1cXHUwMDNlYWRkciwgYXJlYV9yZWctXFx1MDAzZWxlbixcXG5pb191cmluZy96Y3J4LmMtMjE1LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjIyLjYyNDQ4ODk4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDk1NDAyNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGlvX3VyaW5nIE1lbW9yeSBBbGxvY2F0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgaW9fcGluX3BhZ2VzYC4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMgaW4gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbTogYGlvX3JlZ2lvbl9waW5fcGFnZXNgLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9faW1wb3J0X3VtZW1gLiBDbGVhcmx5LCB0aGlzIGlzIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSwgc28gaXQncyBpbXBvcnRhbnQuXG5cblRoZSBjaGFuZ2UgaXRzZWxmIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gcHJldmVudCBhbiBpbnRlZ2VyIG92ZXJmbG93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU2hvdWxkIHdlIGZ1enogdGhpcz9cIiBBYnNvbHV0ZWx5LCB5ZXMuIEFueSBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gaW9fdXJpbmcgbmVlZHMgdGhvcm91Z2ggdGVzdGluZy4gV2Ugd2FudCB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIHRoYXQgbWlnaHQgYnJlYWsgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuIEFsdGhvdWdoLCBgSU5UX01BWCAvIDhgIGVxdWF0ZXMgdG8gYXJvdW5kIDI1Nk0gcGFnZXMsIHdoaWNoIGFtb3VudHMgdG8gMVRCIG9mIG1lbW9yeS4gVGhpcyBzaG91bGQgcHJldmVudCB0aGUgYnJlYWthZ2Ugb2YgdmFsaWQgYWxsb2NhdGlvbnMuXG5cbldhaXQsIHRoZSBtYXRoIGhlcmUgaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlOiBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgaXMgYDIxNDc0ODM2NDcgLyA4ID0gMjY4NDM1NDU1YC4gVGhhdCdzIGltcG9ydGFudC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzLiBgbnJfcGFnZXNgIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gSWYgYG5yX3BhZ2VzYCBiZWNvbWVzIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gOGAsIHdvdWxkIHRoaXMgY2F1c2UgYW4gaW50ZXJuYWwgc2l6ZSBjYWxjdWxhdGlvbiBvdmVyZmxvdz8gSSB0aG91Z2h0IGFib3V0IHRoaXMsIGJ1dCwgbm8sIGBrdm1hbGxvY19vYmpzYCB1c2VzIGBzaXplX3RgIGludGVybmFsbHksIHdoaWNoIHNob3VsZCBwcmV2ZW50IHRoZSBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbi5cblxuSG93ZXZlciwgaG9sZCBvbiBhIHNlY29uZC4gYG5wYWdlc2AgaXMgYW4gYGludCAqbnBhZ2VzYC4gU28sIHRoZSBhc3NpZ25tZW50IGAqbnBhZ2VzID0gbnJfcGFnZXM7YCB3aWxsIG92ZXJmbG93IGlmIGBucl9wYWdlcyBcdTAwM2UgSU5UX01BWGAuIEFoLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYGlmIChXQVJOX09OX09OQ0UobnJfcGFnZXMgXHUwMDNlIElOVF9NQVgpKWAuXG5cblRoZSBuZXcgY29kZSBoYXMgYGlmIChucl9wYWdlcyBcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSlgLiBUaGlzIG5vdyBpbXBvc2VzIGEgbXVjaCBzdHJpY3RlciBsaW1pdCwgcHJldmVudGluZyBgbnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKilgIGZyb20gb3ZlcmZsb3dpbmcgYElOVF9NQVhgLiBCdXQsIGBrdm1hbGxvY19vYmpzYCB0YWtlcyBgc2l6ZV90YCwgc28gYG5yX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopYCBzaG91bGRuJ3Qgb3ZlcmZsb3cgYHNpemVfdGAgdW5sZXNzIGBucl9wYWdlc2AgaXMgYWJzb2x1dGVseSBodWdlLiBEb2VzIHNvbWV0aGluZyBlbHNlIGluc2lkZSB1c2UgYGludGAgZm9yIHRoZSBzaXplLCB0aG91Z2g/XG5cbk9rYXksIGxldCdzIGNsYXJpZnkgdGhhdCBga3ZtYWxsb2Nfb2Jqc2AgaXMgYSBtYWNybzogYCNkZWZpbmUga3ZtYWxsb2Nfb2Jqcyh0eXBlLCBuLCBmbGFncykga3ZtYWxsb2NfYXJyYXkobiwgc2l6ZW9mKHR5cGUpLCBmbGFncylgLiBga3ZtYWxsb2NfYXJyYXlgIGl0c2VsZiB0YWtlcyBgc2l6ZV90IG4sIHNpemVfdCBzaXplYC5cblxuV2h5IHRoZSBgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZSAqKWAgbGltaXQgdGhlbj8gQWgsIEkgc2VlLCBpdCBtaWdodCByZWxhdGUgdG8gYE1BWF9SV19DT1VOVGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwgd2hpY2ggbWlnaHQgdXNlIGFuIGBpbnRgIGludGVybmFsbHkuXG5cbkFoYSEgYElOVF9NQVhgIGlzIDJHQi4gYElOVF9NQVggLyA4YCAod2hlcmUgOCBpcyB0aGUgc2l6ZSBvZiBhIHBhZ2UgcG9pbnRlcikgaXMgMjU2TUIuIFNvLCB0aGUgYXJyYXkgb2YgcG9pbnRlcnMgY2FuIGJlIGF0IG1vc3QgMjU2TUIuXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gaW9fdXJpbmcgdGhhdCByZXN0cmljdHMgdGhlIG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBkdWUgdG8gdGhlIHNpemUgb2YgdGhlIHBhZ2UgcG9pbnRlciBhcnJheS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBvdmVyZmxvd3MuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgaW9fdXJpbmcgaXMgYWN0dWFsbHkgZW5hYmxlZC4gYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSwgYnV0IGFyZSB0aGVyZSBhbnkgcmVsYXRlZCBjb25maWdzPyBMZXQgbWUgbG9vayBpbiBgaW9fdXJpbmcvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NTozMi43MTk5MDcwNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNjAwODQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTQtXFxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTYtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzYtXFxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTM4LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6MzUuNDI1OTIxMTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE1MjcwNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbioqRm9jdXNpbmcgb24gaW9fdXJpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCdzIHRoZSBmb3VuZGF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBOb3csIHdoZXJlIGRvIHdlIGdvIGZyb20gdGhlcmU/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlLi4uSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgd29ya3MgYXQgYSBmdW5jdGlvbmFsIGxldmVsLCBzbyBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaW9fdXJpbmcvemNyeC5jYCBhbmQgYGlvX3VyaW5nL3JzcmMuY2AuIFRob3NlIHNlZW0gbGlrZSBzZW5zaWJsZSBzdGFydGluZyBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIHByb2Nlc3NlcyBpbnZvbHZlZC4gVGhleSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjM4Ljc0MTE5NDM4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MDgzNzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19zcWVfYnVmZmVyX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3JzcmMuYz0yMz1zdHJ1Y3QgaW9fcnNyY191cGRhdGUge1xcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTI5LVxcbmlvX3VyaW5nL3JzcmMuYzozMDpzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9yc3JjLmMtMzEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvdmVjICppb3YpO1xcbi0tXFxuaW9fdXJpbmcvcnNyYy5jPTM2Nz1zdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTM5Ni1cXHRcXHR9XFxuaW9fdXJpbmcvcnNyYy5jOjM5NzpcXHRcXHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XFxuaW9fdXJpbmcvcnNyYy5jLTM5OC1cXHRcXHRpZiAoSVNfRVJSKG5vZGUpKSB7XFxuLS1cXG5pb191cmluZy9yc3JjLmM9ODA4PWJvb2wgaW9fY2hlY2tfY29hbGVzY2VfYnVmZmVyKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgaW50IG5yX3BhZ2VzLFxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTg1NC1cXG5pb191cmluZy9yc3JjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbmlvX3VyaW5nL3JzcmMuYy04NTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvdmVjICppb3YpXFxuLS1cXG5pb191cmluZy9yc3JjLmM9OTUwPWludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy05OTQtXFxuaW9fdXJpbmcvcnNyYy5jOjk5NTpcXHRcXHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XFxuaW9fdXJpbmcvcnNyYy5jLTk5Ni1cXHRcXHRpZiAoSVNfRVJSKG5vZGUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjQxLjExMjA0MTYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODA1Nzg1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBjYWxscyByZWxhdGVkIHRvIGJ1ZmZlciByZWdpc3RyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhlIGJ1ZmZlciByZWdpc3RyYXRpb24gbG9naWMuIEkndmUgbm90ZWQgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgbG9jYXRpb25zOiBgX19pb19zcWVfYnVmZmVyc191cGRhdGVgIGFuZCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgYXJlIHJlYWNoZWQgdGhyb3VnaCB0aGUgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXN0ZW0gY2FsbCwgd2hlbiB1c2luZyB0aGUgYElPUklOR19SRUdJU1RFUl9CVUZGRVJTYCBhbmQgYElPUklOR19SRUdJU1RFUl9CVUZGRVJTX1VQREFURWAgb3B0aW9ucywgb2YgY291cnNlLlxuXG5Ob3csIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwaW5uaW5nLiBMZXQncyBzZWUgaG93IG1lbW9yeSBpcyBhY3R1YWxseSBtYXBwZWQgYW5kIG1hbmFnZWQgZm9yIHRoZXNlIHJlZ2lzdGVyZWQgYnVmZmVycy4gSSBzaG91bGQgcHJvYmFibHkgYmUgZXhhbWluaW5nIGBpb19yZWdpb25fcGluX3BhZ2VzYCBsb2NhdGVkIHdpdGhpbiBgaW9fdXJpbmcvbWVtbWFwLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3Qgd2hlcmUgdGhlIGFjdHVhbCBwaHlzaWNhbCBwYWdlIHBpbm5pbmcgaXMgaGFwcGVuaW5nLCB3aGljaCBpcyBjcnVjaWFsIGZvciBkaXJlY3QgSS9PIGFuZCB1c2VyLXNwYWNlIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpbGwgYmUsIEkgc3VzcGVjdC4gVGltZSB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjQ0LjY5MjYyMzIyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTY5NDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWdpb25fcGluX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL21lbW1hcC5jPTExND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9pbml0X3B0cihzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xMzMtXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTM0OnN0YXRpYyBpbnQgaW9fcmVnaW9uX3Bpbl9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuaW9fdXJpbmcvbWVtbWFwLmMtMTM1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZylcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE4ND1pbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMjE3LVxcdGlmIChyZWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSKVxcbmlvX3VyaW5nL21lbW1hcC5jOjIxODpcXHRcXHRyZXQgPSBpb19yZWdpb25fcGluX3BhZ2VzKG1yLCByZWcpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTIxOS1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjQ3LjIwODMyOTg2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg1NTQzOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBpb19jcmVhdGVfcmVnaW9uYCwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipQaW5wb2ludGluZyB0aGUgT3JpZ2lucyBvZiBgaW9fY3JlYXRlX3JlZ2lvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgYGlvX2NyZWF0ZV9yZWdpb25gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAqKndoZXJlIGlzIHRoaXMgdGhpbmcgY2FsbGVkIGZyb20/KiogSXMgaXQgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbj8gQSB1c2VyLXNwYWNlIGxpYnJhcnkgY2FsbD8gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgbGlrZSBuZXR3b3JraW5nLCBibG9jayBJL08sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBnaXZlcyBtZSBjcml0aWNhbCBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIElzIGl0IHJlbGF0ZWQgdG8gdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCwgZGV2aWNlIG1hcHBpbmcsIG9yIHNvbWUgb3RoZXIgSS9PIHJlc291cmNlIGFsbG9jYXRpb24/IEFuZCBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBhbGxvY2F0aW9uIHJvdXRpbmUgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCwgcGVyaGFwcyBpbnZvbHZpbmcgbG9ja2luZyBvciByZXNvdXJjZSBwcm90ZWN0aW9uPyBUaGUgb3JpZ2luIGlzIHRoZSBrZXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NTo1MC4xOTM4NzY0MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQ1Njc4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fY3JlYXRlX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTI3MjY9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0NC1cXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzQ1OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VyaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0Ni1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzU4LVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjI3NTk6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc2MC1cXHRpZiAocmV0KSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmM9NjI1PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjczLVxcdH1cXG5pb191cmluZy9rYnVmLmM6Njc0OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2YmwtXFx1MDAzZXJlZ2lvbiwgXFx1MDAyNnJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcva2J1Zi5jLTY3NS1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTUyPXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE4My1cXG5pb191cmluZy9tZW1tYXAuYzoxODQ6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG5pb191cmluZy9tZW1tYXAuYy0xODUtXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTIwPXZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xcbmlvX3VyaW5nL21lbW1hcC5oOjIxOmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuaW9fdXJpbmcvbWVtbWFwLmgtMjItXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzAtXFx0fVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTMxOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2bi5yaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMyLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTU2MC1cXHR9XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1NjE6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZuLnNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NjkyPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTcyMS1cXG5pb191cmluZy9yZWdpc3Rlci5jOjcyMjpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNnJlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfTUFQX09GRl9QQVJBTV9SRUdJT04pO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzIzLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy96Y3J4LmM9MzgwPXN0YXRpYyBpbnQgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTM5OS1cXG5pb191cmluZy96Y3J4LmM6NDAwOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2aWZxLVxcdTAwM2VycV9yZWdpb24sIHJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcvemNyeC5jLTQwMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDU6NTIuNTY4NDUyMzI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDI1NzQxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGlvX2NyZWF0ZV9yZWdpb25gIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvIGBpb19jcmVhdGVfcmVnaW9uYCBiZWluZyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG1lbW9yeSByZWdpb24gY3JlYXRpb24gd2l0aGluIHRoZSBJL08gcmluZyBmcmFtZXdvcmsuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGBpb19hbGxvY2F0ZV9zY3FfdXJpbmdzYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgaW5pdGlhbCBgaW9fdXJpbmdfc2V0dXBgLCBzdWdnZXN0aW5nIGl0cyBmdW5kYW1lbnRhbCB0byByaW5nIGluaXRpYWxpemF0aW9uLiBUaGVuIHRoZXJlJ3MgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCBhbmQgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIOKAkyBhbGwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgcmluZyByZWdpc3RyYXRpb24gYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBtYW5hZ2VtZW50LiBBbHNvLCBJIHNlZSBgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nYCBpcyBhIGNvbnN1bWVyLCBhbmQgbG9jYXRlZCBpbiBhIHpjcnggY29udGV4dCBpbiBgaW9fdXJpbmcvemNyeC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkZyb20gdGhpcyBJIGNhbiBkZWR1Y2UgdGhhdCBgaW9fY3JlYXRlX3JlZ2lvbmAgaXMgbGlrZWx5IHVzZWQgdG8gcHJlcGFyZSBtZW1vcnkgcmVnaW9ucyBmb3IgdmFyaW91cyByaW5nIHR5cGVzIGFuZCBhc3NvY2lhdGVkIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgdGhlIHJlYWxseSBpbXBvcnRhbnQgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGxvb2sgaW50byBpbiBtb3JlIGRldGFpbCBhcmU6IGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAsIGBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZWAsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYCwgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gLCBhbmQgYGlvX3JlZ2lzdGVyX3pjcnhfaWZxYC4gVGhlc2UgYXJlIHRoZSBrZXkgcmVnaXN0cmF0aW9uIGFuZCB1cGRhdGUgZnVuY3Rpb25zIHRoYXQgZGVwZW5kIG9uIHRoZSBgaW9fY3JlYXRlX3JlZ2lvbmAgY2FsbC5cblxuQWgsIHdhaXQuIExldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgaW9fcmVnaXN0ZXJfemNyeF9pZnFgIGlzIGluZGVlZCBsb2NhdGVkIGluIGBpb191cmluZy96Y3J4LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTU1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ1OjU3LjI3MTAyOTM5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1Mzk2MDY0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfemNyeF9pZnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjAwLjAyNTAwMDY0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE2ODA5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaW9faW1wb3J0X3VtZW1gIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiBob3cgYGlvX2ltcG9ydF91bWVtYCBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aG8ncyBjYWxsaW5nIGl0LiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgXCJzZWFyY2ggYW5kIHJlcGxhY2VcIiBzY2VuYXJpbywgdGhpcyByZXF1aXJlcyBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIGNvZGUncyBjYWxsIGdyYXBoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSBgaW9faW1wb3J0X3VtZW1gIGlzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MDMuMzQxODE1Mjc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg1MzA2MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2ltcG9ydF91bWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3pjcnguYz0xODU9c3RhdGljIHVuc2lnbmVkIGxvbmcgaW9fY291bnRfYWNjb3VudF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBucl9wYWdlcylcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yMDEtXFxuaW9fdXJpbmcvemNyeC5jOjIwMjpzdGF0aWMgaW50IGlvX2ltcG9ydF91bWVtKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxcbmlvX3VyaW5nL3pjcnguYy0yMDMtXFx0XFx0XFx0ICBzdHJ1Y3QgaW9femNyeF9tZW0gKm1lbSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0yNjg9c3RhdGljIGludCBpb19pbXBvcnRfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yODgtXFx0XFx0cmV0dXJuIGlvX2ltcG9ydF9kbWFidWYoaWZxLCBtZW0sIGFyZWFfcmVnKTtcXG5pb191cmluZy96Y3J4LmM6Mjg5OlxcdHJldHVybiBpb19pbXBvcnRfdW1lbShpZnEsIG1lbSwgYXJlYV9yZWcpO1xcbmlvX3VyaW5nL3pjcnguYy0yOTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjowNS43MjcxMzAxNjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NTY3MTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBpb19pbXBvcnRfYXJlYWAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBpbnZlc3RpZ2F0aW5nIHRoZSBjYWxsZXJzIG9mIHRoZSBgaW9faW1wb3J0X2FyZWFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8ncyB1c2luZyBpdCwgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbSwgYW5kIHdpdGggd2hhdCBwYXJhbWV0ZXJzLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtYXAgb3V0IGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3VlcyB0byByZWZhY3RvcmluZyBvciBvcHRpbWl6aW5nIHRoZSBjb2RlLiBHcmFzcGluZyB0aGUgY2FsbCBncmFwaCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcXVpY2tseSByZXZlYWwgaXRzIGRlcGVuZGVuY2llcyBhbmQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFwcGxpY2F0aW9uLiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjowOC40NzI4MDQ5MzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzMxNTYzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9faW1wb3J0X2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvemNyeC5jPTI1NT1zdGF0aWMgdm9pZCBpb19yZWxlYXNlX2FyZWFfbWVtKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTI2Ny1cXG5pb191cmluZy96Y3J4LmM6MjY4OnN0YXRpYyBpbnQgaW9faW1wb3J0X2FyZWEoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXFxuaW9fdXJpbmcvemNyeC5jLTI2OS1cXHRcXHRcXHQgIHN0cnVjdCBpb196Y3J4X21lbSAqbWVtLFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTQ1MD1zdGF0aWMgaW50IGlvX3pjcnhfY3JlYXRlX2FyZWEoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtNDczLVxcbmlvX3VyaW5nL3pjcnguYzo0NzQ6XFx0cmV0ID0gaW9faW1wb3J0X2FyZWEoaWZxLCBcXHUwMDI2YXJlYS1cXHUwMDNlbWVtLCBhcmVhX3JlZyk7XFxuaW9fdXJpbmcvemNyeC5jLTQ3NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjoxMC44NDU5Njc5NzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMjQyNTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgaW9femNyeF9jcmVhdGVfYXJlYWAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYGlvX3pjcnhfY3JlYXRlX2FyZWFgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgcGF0dGVybnMuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUgdG8gaWRlbnRpZnkgdGhlIGRpZmZlcmVudCBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGFyZWEgY3JlYXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gSSBleHBlY3QgdGhhdCBhIHF1aWNrIHNjYW4gb2YgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBwcmltYXJ5IHB1cnBvc2VzLCBob3BlZnVsbHkgcmV2ZWFsaW5nIGlmIGl0IGlzIGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQuIFBlcmhhcHMgdGhlcmUgYXJlIHNvbWUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgYXJlYSBpcyBiZWluZyBpbml0aWFsaXplZCBhbmQgYWNjZXNzZWQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjEzLjY1ODM5NjU5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2ODk3NTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb196Y3J4X2NyZWF0ZV9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3pjcnguYz00MzY9c3RhdGljIGludCBpb196Y3J4X2FwcGVuZF9hcmVhKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTQ0OS1cXG5pb191cmluZy96Y3J4LmM6NDUwOnN0YXRpYyBpbnQgaW9femNyeF9jcmVhdGVfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG5pb191cmluZy96Y3J4LmMtNDUxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfemNyeF9hcmVhX3JlZyAqYXJlYV9yZWcsXFxuLS1cXG5pb191cmluZy96Y3J4LmM9ODE1PXN0YXRpYyBpbnQgemNyeF9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtODM2LVxcbmlvX3VyaW5nL3pjcnguYzo4Mzc6XFx0cmV0ID0gaW9femNyeF9jcmVhdGVfYXJlYShpZnEsIGFyZWEsIHJlZyk7XFxuaW9fdXJpbmcvemNyeC5jLTgzOC1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTg4Mz1pbnQgaW9fcmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy05ODUtXFx0fSBlbHNlIHtcXG5pb191cmluZy96Y3J4LmM6OTg2OlxcdFxcdHJldCA9IGlvX3pjcnhfY3JlYXRlX2FyZWEoaWZxLCBcXHUwMDI2YXJlYSwgXFx1MDAyNnJlZyk7XFxuaW9fdXJpbmcvemNyeC5jLTk4Ny1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjoxNi4wMjczNzgxNTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNjQwMDM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpb19yZWdpc3Rlcl96Y3J4YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpb19yZWdpc3Rlcl96Y3J4YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbi4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGlvX3VyaW5nYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBpbiBlaXRoZXIgYHJlZ2lzdGVyLmNgIG9yLCBnaXZlbiB0aGUgbmFtZSwgbWF5YmUgZXZlbiBgemNyeC5jYC4gQWgsIHJpZ2h0LCBpdCdzIGFjdHVhbGx5IGluIGBpb191cmluZy96Y3J4LmNgLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3cgSSBuZWVkIHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXQuIExldCdzIHRoaW5rLi4uIGNsZWFybHksIGBDT05GSUdfSU9fVVJJTkdgIHdvdWxkIGJlIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGVuYWJsZXMgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSBpbiBnZW5lcmFsLiBBbmQgYmFzZWQgb24gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBJJ2QgZXhwZWN0IHRoZXJlIHRvIGJlIGEgYENPTkZJR19JT19VUklOR19aQ1JYYCBjb25maWcgb3B0aW9uIGFzIHdlbGwuXG5cblRpbWUgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgbG9vayBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MTkuODUzNzgzNzkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgaW9fdXJpbmcgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSU9fVVJJTkdfWkNSWFxcbiAgIDc6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gIDEwOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBORVRfUlhfQlVTWV9QT0xMXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBJT19VUklOR19CUEZcXG4gIDE0OlxcdFxcdGRlZl9ib29sIHlcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbiAgMTk6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjE5Ljg1Mzg2Mjc3M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkxMTA5MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGlzIGtlcm5lbCBjb25maWcuIExldCdzIHNlZS4uLiBgSU9fVVJJTkdfWkNSWGAuIFJpZ2h0LCB0aGF0IGRlcGVuZHMgb24gYFBBR0VfUE9PTGAsIGBJTkVUYCwgYW5kIGBORVRfUlhfQlVTWV9QT0xMYC4gTWFrZXMgc2Vuc2UuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZW5hYmxlIGJvdGggYElPX1VSSU5HYCBhbmQgYElPX1VSSU5HX1pDUlhgLiBXYWl0IGEgbWludXRlLCBob2xkIG9uLi4uIGBJT19VUklOR19aQ1JYYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCEgU28sIGlmIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG1ldCwgaXQncyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYW55d2F5LiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJT19VUklOR2AgaXMgbGlzdGVkIGluIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgbXVzdC4gQW5kIHdhaXQsIHdoZXJlIGlzIGBJT19VUklOR2AgZGVmaW5lZD8gSSByZWNhbGwgaXQncyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gQmV0dGVyIGNoZWNrIHRoZXJlIHRvIGNvbmZpcm0gaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgSSBtaWdodCBoYXZlIG1pc3NlZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NjoyMy4zNDQ5NzYzMDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTEwOlxcdFxcdGhlbHBcXG4xOTExOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkXFxuMTkxMjpcXHRcXHQgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZ1xcbjE5MTM6XFx0XFx0ICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay5cXG4xOTE0OlxcdFxcbjE5MTU6XFx0Y29uZmlnIElPX1VSSU5HXFxuMTkxNjpcXHRcXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuMTkxNzpcXHRcXHRzZWxlY3QgSU9fV1FcXG4xOTE4OlxcdFxcdGRlZmF1bHQgeVxcbjE5MTk6XFx0XFx0aGVscFxcbjE5MjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBpb191cmluZyBpbnRlcmZhY2UsIGVuYWJsaW5nXFxuMTkyMTpcXHRcXHQgIGFwcGxpY2F0aW9ucyB0byBzdWJtaXQgYW5kIGNvbXBsZXRlIElPIHRocm91Z2ggc3VibWlzc2lvbiBhbmRcXG4xOTIyOlxcdFxcdCAgY29tcGxldGlvbiByaW5ncyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUga2VybmVsIGFuZCBhcHBsaWNhdGlvbi5cXG4xOTIzOlxcdFxcbjE5MjQ6XFx0Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbjE5MjU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW1cXFwiXFxuMTkyNjpcXHRcXHRkZXBlbmRzIG9uIElPX1VSSU5HIFxcdTAwMjZcXHUwMDI2IEdDT1ZfS0VSTkVMXFxuMTkyNzpcXHRcXHRoZWxwXFxuMTkyODpcXHRcXHQgIEVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCB0byBmYWNpbGl0YXRlXFxuMTkyOTpcXHRcXHQgIGNvZGUgY292ZXJhZ2UgdGVzdGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MjMuMzQ1MjYzMTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExOTg4MTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBJT19VUklORyBEZXBlbmRlbmNpZXMgZm9yIGEgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYElPX1VSSU5HYCBpcyBzZXQgYXMgdGhlIGRlZmF1bHQsIHNvIGl0J3MgdGVjaG5pY2FsbHkgYWxyZWFkeSBlbmFibGVkLiBCdXQsIGFzIGEgc2Vhc29uZWQgcHJvLCBJIGtub3cgZ29vZCBjb25maWd1cmF0aW9uIGh5Z2llbmUgaXMgaW1wb3J0YW50LiBFeHBsaWNpdGx5IGxpc3RpbmcgaXQgaXMgYWx3YXlzIGEgc291bmQgcHJhY3RpY2UgZm9yIGNsYXJpdHkgYW5kIG1haW50YWluYWJpbGl0eS5cblxuTm93LCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgYElPX1VSSU5HX1pDUlhgIGhhdmluZyBzb21lIGRlcGVuZGVuY2llcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIGl0IHJlbGllcyBvbiBgUEFHRV9QT09MYCwgYElORVRgLCBhbmQgYE5FVF9SWF9CVVNZX1BPTExgLiBTaW5jZSBJIGFtIGN1cnJlbnRseSBmb2N1c2VkIG9uIGBJT19VUklOR19aQ1JYYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGNvcnJlY3QuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgTkVUX1JYX0JVU1lfUE9MTGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCdzIGNvcnJlY3RseSBjb25maWd1cmVkIGZvciBteSBpbnRlbmRlZCB1c2UgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0ODgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjI2LjQ2NTE0ODA1NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMTQ0MzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1JYX0JVU1lfUE9MTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNDI9Y29uZmlnIENHUk9VUF9ORVRfQ0xBU1NJRFxcbi0tXFxubmV0L0tjb25maWctMzQ5LVxcbm5ldC9LY29uZmlnOjM1MDpjb25maWcgTkVUX1JYX0JVU1lfUE9MTFxcbm5ldC9LY29uZmlnLTM1MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjI4Ljg3NjU5OTg2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDEzNzYyNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgYE5FVF9SWF9CVVNZX1BPTExgIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9SWF9CVVNZX1BPTExgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIGEgYGJvb2xgLCBhbmQgdGhlcmUncyBubyB2aXNpYmxlIHByb21wdCBhdHRhY2hlZCB0byBpdC4gVGhhdCAqaW1tZWRpYXRlbHkqIHRlbGxzIG1lIGl0J3Mgbm90IGEgdXNlci1mYWNpbmcgb3B0aW9uIHRoYXQncyBnb2luZyB0byBiZSBkaXJlY3RseSBzZWxlY3RlZCBkdXJpbmcgY29uZmlndXJhdGlvbi4gSW5zdGVhZCwgaXRzIHN0YXRlIGlzICpkZXJpdmVkKiBvciAqc2VsZWN0ZWQqIGJ5IHNvbWUgb3RoZXIgbWVjaGFuaXNtLCBsaWtlbHkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBidWlsZCBmbGFnLCBvciBwb3NzaWJseSBldmVuIGJhc2VkIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUgb3Iga2VybmVsIHZlcnNpb24uIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBjb25zaWRlciB3aGljaCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIHZhbHVlLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byB0cmFjZSBiYWNrIHRoZSBsb2dpYyB0aGF0IHNldHMgdGhpcywgdG8gdW5kZXJzdGFuZCBpdHMgdHJ1ZSBmdW5jdGlvbiBhbmQgd2h5IGl0J3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiBhIGdpdmVuIHNjZW5hcmlvLiBJcyBpdCBkZXBlbmRlbnQgb24gdGhlIGRyaXZlcj8gVGhlIE5JQyB0eXBlPyBNYXliZSBhbiBvdmVyYWxsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0J3Mgc2VsZWN0aXZlbHkgZW5hYmxlZD8gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODU0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzEuODkwMzY1NDA5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0NTAxNjc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX1JYX0JVU1lfUE9MTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzQuMzQ0ODg2NTY2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzY3MjA0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBORVRfUlhfQlVTWV9QT0xMYCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgbmV0d29yayBzdGFjaydzIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG5ldHdvcmstcmVsYXRlZCBzZXR0aW5ncy4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBsb29rIGRpcmVjdGx5IGludG8gYG5ldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGhlbHAgdGV4dCBmb3IgYW55dGhpbmcgbmV0d29yay1zcGVjaWZpYyBhbmQgY29uZmlndXJhYmxlIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgTkVUX1JYX0JVU1lfUE9MTGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBrbm9iIGNvbnRyb2xzLCBpdHMgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBjb25maWd1cmF0aW9uIGNvbnRleHQuIEhvcGVmdWxseSwgYG5ldC9LY29uZmlnYCB3aWxsIHByb3ZpZGUgbWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzcuMjgxNjA5NDM0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0NTpcXHRcXHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxcbiAzNDY6XFx0XFx0aGVscFxcbiAzNDc6XFx0XFx0ICBDZ3JvdXAgc3Vic3lzdGVtIGZvciB1c2UgYXMgZ2VuZXJhbCBwdXJwb3NlIHNvY2tldCBjbGFzc2lkIG1hcmtlciB0aGF0IGlzXFxuIDM0ODpcXHRcXHQgIGJlaW5nIHVzZWQgaW4gY2xzX2Nncm91cCBhbmQgZm9yIG5ldGZpbHRlciBtYXRjaGluZy5cXG4gMzQ5OlxcdFxcbiAzNTA6XFx0Y29uZmlnIE5FVF9SWF9CVVNZX1BPTExcXG4gMzUxOlxcdFxcdGJvb2xcXG4gMzUyOlxcdFxcdGRlZmF1bHQgeSBpZiAhUFJFRU1QVF9SVCB8fCAoUFJFRU1QVF9SVCBcXHUwMDI2XFx1MDAyNiAhTkVUQ09OU09MRSlcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0Y29uZmlnIEJRTFxcbiAzNTU6XFx0XFx0Ym9vbFxcbiAzNTY6XFx0XFx0cHJvbXB0IFxcXCJFbmFibGUgQnl0ZSBRdWV1ZSBMaW1pdHNcXFwiXFxuIDM1NzpcXHRcXHRkZXBlbmRzIG9uIFNZU0ZTXFxuIDM1ODpcXHRcXHRzZWxlY3QgRFFMXFxuIDM1OTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6MzcuMjgxNjkxMDE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODI3MjY2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIERlZmF1bHQgTmV0d29yayBJTyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgc3lzdGVtIHNlZW1zIHRvIGJlIGRlZmF1bHRpbmcgdG8gYHlgIGZvciBzb21ldGhpbmcuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhhdCB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpcywgaXQgbWVhbnMgdGhhdCBgSU9fVVJJTkdfWkNSWGAgaXMgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0ICphcyBsb25nIGFzKiBgSU5FVGAgaXMgYWxzbyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgdGhhdCdzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gdGhlc2UgZGF5cy4gQnV0IHRoYXQgYnJpbmdzIHVwIGEgZnVydGhlciBwb2ludDogd2hhdCdzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgYFBBR0VfUE9PTGAgb3B0aW9uPyBUaGF0J3MgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3Igb3B0aW1pemluZyBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aXRoIGBpb191cmluZ2AsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGRlZmF1bHQgc3RhdHVzIGluIHJlbGF0aW9uIHRvIGBJT19VUklOR19aQ1JYYC4gSXQncyBhIGNvbW1vbiBkZXBlbmRlbmN5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU4NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMDE6NDY6NDAuMTY0NDIwODUyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyNjM2MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xcbi0tXFxubmV0L0tjb25maWctNDkwLVxcbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXFxubmV0L0tjb25maWctNDkyLVxcdGJvb2xcXG5uZXQvS2NvbmZpZy00OTMtXFxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcXG5uZXQvS2NvbmZpZy00OTUtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjQyLjU1NzA2MzU1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTUxOTEwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHN1bW1hcnk6XG5cbioqVGhlIEN1cmlvdXMgQ2FzZSBvZiBQQUdFX1BPT0wqKlxuXG5BbHJpZ2h0LCBsZXQncyB1bnBhY2sgdGhpcyBxdWlja2x5LiBXZSdyZSB0YWxraW5nIGFib3V0IGEgdmFyaWFibGUsIGBQQUdFX1BPT0xgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCB3aXRob3V0IGFueSBmdXJ0aGVyIGNvbnRleHQsIHRoaXMgdGhpbmcgaXMgaW1wbGljaXRseSBhIGJvb2xlYW4uIE5vIHByb21wdCwgbm8gc3Vycm91bmRpbmcgaGludHMsIGp1c3QuLi5pdC4gU28sIHdpdGhvdXQgYW55IGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgZGVmaW5pdGlvbiwgdGhpcyB2YXJpYWJsZSwgYnkgZGVmYXVsdCwgaXMgdHJlYXRlZCBhcyBhIGJvb2xlYW4uIFRoYXQncyBhIGxpdHRsZSB1bmV4cGVjdGVkLCBhbmQgY2VydGFpbmx5IHdvcnRoIG5vdGluZyB3aGVuIHJldmlld2luZyBjb2RlIG9yIGRlc2lnbi4gSXQgdGVsbHMgdXMgc29tZXRoaW5nIGFib3V0IHRoZSBzeXN0ZW3igJlzIGRlZmF1bHRzIGFuZCBob3cgaXQgaW50ZXJwcmV0cyBzZWVtaW5nbHkgYW1iaWd1b3VzIGRlY2xhcmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBiZWhhdmlvciBpbiBtaW5kIHRvIGF2b2lkIGludHJvZHVjaW5nIGltcGxpY2l0IGJ1Z3Mgb3IgbWlzdW5kZXJzdGFuZGluZ3MgZG93biB0aGUgbGluZS4gSXQncyBhIHF1aWNrLCBhbGJlaXQgcG90ZW50aWFsbHkgc3VidGxlLCBkZXRhaWwgdG8ga2VlcCBpbiB0aGUgbWVudGFsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDAxOjQ2OjQ2LjMxMjI1NzIzM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDQ1Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0Mzc6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTg4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gNjRCSVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo4MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cXHRzZWxlY3QgQlJPQURDT01fUEhZIGlmIEFSQ0hfQkNNMjgzNVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXFx0c2VsZWN0IEZJWEVEX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjMyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cXHRzZWxlY3QgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXFxcIiBpZiBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz01OT1jb25maWcgTVZORVRBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo2NTpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVxcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cXHRzZWxlY3QgUENTX01US19MWU5YSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjMzOlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zNC1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTMzPWNvbmZpZyBNTFhTV19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTM3LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI3LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI5LVxcdHNlbGVjdCBQQ1NfWFBDU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZz0xPWNvbmZpZyBMQU45NjZYX1NXSVRDSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy04LVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTEwLVxcdHNlbGVjdCBWQ0FQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc9Mjg9Y29uZmlnIExBTjk2OVhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzAtXFx0ZGVwZW5kcyBvbiBTUEFSWDVfU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTg9Y29uZmlnIE1JQ1JPU09GVF9NQU5BXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yMy1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjI0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNS1cXHRzZWxlY3QgTkVUX1NIQVBFUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjUtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjctXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0xMTA9Y29uZmlnIFJUQVNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTEzLVxcdHNlbGVjdCBDUkMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTI5PWNvbmZpZyBSQVZCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzUtXFx0c2VsZWN0IE1ESU9fQklUQkFOR1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzozNjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM3LVxcdHNlbGVjdCBQSFlMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnPTI1PWNvbmZpZyBTTklfTkVUU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0yOC1cXHRzZWxlY3QgUEhZTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc6Mjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTMwLVxcdHNlbGVjdCBNSUlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy04LVxcdHNlbGVjdCBQQ1NfWFBDU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6OTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc9MjY9Y29uZmlnIFRFSFVUSV9UTjQwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0yOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnOjI5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0zMC1cXHRzZWxlY3QgRldfTE9BREVSXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTUwPWNvbmZpZyBUSV9DUFNXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU1LVxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo1NjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01Ny1cXHRzZWxlY3QgUkVHTUFQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy02OS1cXHRkZXBlbmRzIG9uIFRJX0NQVFMgfHwgIVRJX0NQVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjcwOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTcxLVxcdHNlbGVjdCBUSV9EQVZJTkNJX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMS1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MTAyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMy1cXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MjA0PWNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIwOC1cXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjIwOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMTAtXFx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc9Mj1jb25maWcgTVQ3Nl9DT1JFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTUtXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM3LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0Njo0OC44MjY3MjIyODlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczNTA1NzEwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqaW9fdXJpbmcgSW50ZWdlciBPdmVyZmxvdyBGaXg6IEZvY3VzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiAgVGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnIHdpbGwgcHVsbCBpbiBgUEFHRV9QT09MYCBpZiBgTkVUYCBpcyBzZXQsIGFuZCBzaW5jZSBgSU9fVVJJTkdfQlBGX09QU2AgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLCB0aGF0IGFsc28gbWVhbnMgYFBBR0VfUE9PTGAgd2lsbCBiZSBlbmFibGVkLiBUaGlzIGluIHR1cm4gZW5hYmxlcyBgSU9fVVJJTkdfWkNSWGAgYXV0b21hdGljYWxseS4gIFRoZXJlZm9yZSwgZXhwbGljaXRseSBlbmFibGluZyBgUEFHRV9QT09MYCBvciBgTkVUX1JYX0JVU1lfUE9MTGAgaXNuJ3QgbmVjZXNzYXJ5OyBqdXN0IGBJT19VUklOR2AgYW5kIGBJT19VUklOR19aQ1JYYCBzaG91bGQgY292ZXIgZXZlcnl0aGluZyB3ZSBuZWVkLlxuXG5Ob3csIGxldCdzIHJldmlzaXQgdGhlIGNhbGxlcnMgb2YgYGlvX3Bpbl9wYWdlc2AuIEkgcmVjYWxsIGl0J3MgdXNlZCBieSBgaW9fcmVnaW9uX3Bpbl9wYWdlc2AsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYW5kIGBpb19pbXBvcnRfdW1lbWAuICBgaW9fcmVnaW9uX3Bpbl9wYWdlc2AgaXMgY2FsbGVkIGJ5IGBpb19jcmVhdGVfcmVnaW9uYC4gYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgIGlzIGNhbGxlZCBieSBgX19pb19zcWVfYnVmZmVyc191cGRhdGVgIGFuZCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiAgQW5kIGBpb19pbXBvcnRfdW1lbWAgaXMgY2FsbGVkIGJ5IGBpb19pbXBvcnRfYXJlYWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgaW9femNyeF9jcmVhdGVfYXJlYWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgemNyeF9yZWdpc3Rlcl9uZXRkZXZgIGFuZCBgaW9fcmVnaXN0ZXJfemNyeGAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9faW1wb3J0X3VtZW1gLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIHN0YXRpYyBvciBleHBvcnRlZC4gYGlvX2NyZWF0ZV9yZWdpb25gIGlzbid0IHN0YXRpYyBhbmQgaXMgaW4gYGlvX3VyaW5nL21lbW1hcC5jYC4gIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpcyBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9yc3JjLmNgLiAgYGlvX2ltcG9ydF91bWVtYCBpcyBhbHNvIHN0YXRpYyBhbmQgaW4gYGlvX3VyaW5nL3pjcnguY2AuXG5cblNpbmNlIHN5emthbGxlciBjYW4gZnV6eiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHdpdGhpbiB0aGUgY2FsbCB0cmVlLCBpdCdzIGlkZWFsIHRvIHByb3ZpZGUgbm9uLXN0YXRpYyBvbmVzIG9yIHRoZSBzdGF0aWMgb25lcyBpZiB0aGV5IGFyZSBkaXJlY3RseSByZWFjaGFibGUuIFN5emthbGxlcidzIGBGb2N1c1N5bWJvbHNgIGNhbiBhbHNvIGluY2x1ZGUgc3RhdGljIGZ1bmN0aW9ucy5cblRoZXJlZm9yZSwgbXkgbGlzdCB3aWxsIGJlOlxuXG4qICAgYGlvX2NyZWF0ZV9yZWdpb25gXG4qICAgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgXG4qICAgYGlvX2ltcG9ydF91bWVtYFxuKiAgIGBpb19waW5fcGFnZXNgXG4qICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgXG5cbkxldCdzIHZlcmlmeSB0aGF0IGBpb19waW5fcGFnZXNgIGlzbid0IHN0YXRpYy4gWWVwLCBpdCdzIG5vdCBzdGF0aWMgYW5kIGlzIGluIGBpb191cmluZy9tZW1tYXAuY2AuXG5cbkxldCdzIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gbmFtZXMgYXJlIGNvcnJlY3Q6XG4qICAgYGlvX3Bpbl9wYWdlc2BcbiogICBgaW9fY3JlYXRlX3JlZ2lvbmBcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmBcbiogICBgaW9faW1wb3J0X3VtZW1gXG4qICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgXG5cbkRvdWJsZSBjaGVja2luZywgdGhvc2UgYXJlIGFsbCB0aGUgY2FsbGVycyBvZiBgaW9fcGluX3BhZ2VzYCB3aXRoaW4gdGhlIGBpb191cmluZ2Agc3Vic3lzdGVtLiBJIHNlZSBgdmZpb19waW5fcGFnZXNgIGluIHRoZSBncmVwcGVkIHJlc3VsdHMsIGJ1dCB0aGF0J3MgaW4gYSBkaWZmZXJlbnQgc3Vic3lzdGVtLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZml4IGZvciBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19waW5fcGFnZXNgLiBUaGUgcGF0Y2ggcHJldmVudHMgYG5yX3BhZ2VzYCBmcm9tIGJlaW5nIGxhcmdlciB0aGFuIGBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlICopYC4gIFRoaXMgaXMgYSBjcml0aWNhbCBpb191cmluZyBmdW5jdGlvbiB1c2VkIGR1cmluZyBidWZmZXIgcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgcmVnaW9uIGNyZWF0aW9uLlxuXG5Ob3csIGZvciB0aGUgY29uZmlncy4gSXQgbmVlZHMgYElPX1VSSU5HYCBhbmQgYElPX1VSSU5HX1pDUlhgIHNpbmNlIGBpb19pbXBvcnRfdW1lbWAgaXMgaW4gYHpjcnguY2AuIENoZWNrZWQsIGFuZCBgSU9fVVJJTkdfWkNSWGAgaXMgZGVmaW5lZCBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AuIGBJT19VUklOR2AgYWxvbmUgaXMgc3VmZmljaWVudCBmb3IgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAuIGBJT19VUklOR19aQ1JYYCBpcyByZXF1aXJlZCBmb3IgYGlvX2ltcG9ydF91bWVtYC4gU2luY2UgYGlvX3Bpbl9wYWdlc2AgaXMgcmVhY2hhYmxlIHZpYSBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYElPX1VSSU5HYCBpcyB0aGUgY29yZSBkZXBlbmRlbmN5LlxuXG5NeSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaXM6XG4qICAgYGlvX3Bpbl9wYWdlc2BcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmBcbiogICBgaW9fY3JlYXRlX3JlZ2lvbmBcbiogICBgaW9faW1wb3J0X3VtZW1gXG4qICAgYGlvX3JlZ2lvbl9waW5fcGFnZXNgXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlczpcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmA6IGBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX1xuXG4iLCJJbnB1dFRva2VucyI6MjAzNzEsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQwMTo0NzowNi4xNzcyOTY4MDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI1NTQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIklPX1VSSU5HX1pDUlhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3JlZ2lvbl9waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX2NyZWF0ZV9yZWdpb25cIixcbiAgICBcImlvX2ltcG9ydF91bWVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCByZWplY3QgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIklPX1VSSU5HX1pDUlhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3JlZ2lvbl9waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX2NyZWF0ZV9yZWdpb25cIixcbiAgICBcImlvX2ltcG9ydF91bWVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBpb19waW5fcGFnZXMoKSBieSBlbnN1cmluZyB0aGF0IG5yX3BhZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIHRoYXQgY2FuIGJlIHNhZmVseSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlIHBvaW50ZXIgYXJyYXkuIFRoaXMgaXMgY29yZSBpb191cmluZyBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgYnVmZmVyIHJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5IHJlZ2lvbiBjcmVhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgYWxsb2NhdGlvbiBwYXRocyB0byBlbnN1cmUgdGhlIG92ZXJmbG93IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCByZWplY3QgdmFsaWQgbGFyZ2UgYWxsb2NhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[1] Phase: Succeeded StartedAt: 2026-06-21 01:47:18 +0000 UTC FinishedAt: 2026-06-21 01:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-21 01:47:18 +0000 UTC FinishedAt: 2026-06-21 01:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2] Phase: Succeeded StartedAt: 2026-06-21 01:47:18 +0000 UTC FinishedAt: 2026-06-21 05:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-21 01:47:18 +0000 UTC FinishedAt: 2026-06-21 05:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-21 01:47:18 +0000 UTC FinishedAt: 2026-06-21 01:47:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-21 01:47:18 +0000 UTC FinishedAt: 2026-06-21 01:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrgfvh/series-workflowrgfvh-convert-artifact-3953655366/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-21 01:47:28 +0000 UTC FinishedAt: 2026-06-21 02:11:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-21 01:47:28 +0000 UTC FinishedAt: 2026-06-21 02:11:49 +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:*ed23c326-111b-4f7d-9b80-22a38348eb27,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-workflowrgfvh/series-workflowrgfvh-convert-artifact-3953655366/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": "224de098-77c4-4d3e-8bfe-d5f061b6b01d", "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-workflowrgfvh/series-workflowrgfvh-build-action-932498396/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-21 01:47:28 +0000 UTC FinishedAt: 2026-06-21 02:11:39 +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:*ed23c326-111b-4f7d-9b80-22a38348eb27,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-workflowrgfvh/series-workflowrgfvh-convert-artifact-3953655366/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": "224de098-77c4-4d3e-8bfe-d5f061b6b01d", "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-workflowrgfvh/series-workflowrgfvh-build-action-932498396/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-21 02:11:49 +0000 UTC FinishedAt: 2026-06-21 02:11:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-21 02:11:49 +0000 UTC FinishedAt: 2026-06-21 02:11:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-21 02:11:49 +0000 UTC FinishedAt: 2026-06-21 02:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-21 02:11:49 +0000 UTC FinishedAt: 2026-06-21 02:11:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrgfvh/series-workflowrgfvh-convert-artifact-32085401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-21 02:11:59 +0000 UTC FinishedAt: 2026-06-21 02:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-21 02:11:59 +0000 UTC FinishedAt: 2026-06-21 02:14:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*224de098-77c4-4d3e-8bfe-d5f061b6b01d,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-workflowrgfvh/series-workflowrgfvh-build-action-932498396/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-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-21 02:14:38 +0000 UTC FinishedAt: 2026-06-21 02:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-21 02:14:38 +0000 UTC FinishedAt: 2026-06-21 02:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-21 02:14:38 +0000 UTC FinishedAt: 2026-06-21 02:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-21 02:14:38 +0000 UTC FinishedAt: 2026-06-21 02:37:30 +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:*ed23c326-111b-4f7d-9b80-22a38348eb27,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-workflowrgfvh/series-workflowrgfvh-convert-artifact-32085401/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": "032c7226-cde2-461d-a97b-db0fe8dd381a", "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-workflowrgfvh/series-workflowrgfvh-build-action-1976804597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-21 02:14:38 +0000 UTC FinishedAt: 2026-06-21 02:37:20 +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:*ed23c326-111b-4f7d-9b80-22a38348eb27,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-workflowrgfvh/series-workflowrgfvh-convert-artifact-32085401/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": "032c7226-cde2-461d-a97b-db0fe8dd381a", "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-workflowrgfvh/series-workflowrgfvh-build-action-1976804597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-21 02:37:30 +0000 UTC FinishedAt: 2026-06-21 02:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-21 02:37:30 +0000 UTC FinishedAt: 2026-06-21 02:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-21 02:37:30 +0000 UTC FinishedAt: 2026-06-21 02:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-21 02:37:30 +0000 UTC FinishedAt: 2026-06-21 02:38:57 +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:*032c7226-cde2-461d-a97b-db0fe8dd381a,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-workflowrgfvh/series-workflowrgfvh-build-action-1976804597/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-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-21 02:39:07 +0000 UTC FinishedAt: 2026-06-21 05:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-21 02:39:07 +0000 UTC FinishedAt: 2026-06-21 05:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"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:*224de098-77c4-4d3e-8bfe-d5f061b6b01d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*032c7226-cde2-461d-a97b-db0fe8dd381a,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-workflowrgfvh/series-workflowrgfvh-build-action-932498396/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-workflowrgfvh/series-workflowrgfvh-build-action-1976804597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-21 02:39:07 +0000 UTC FinishedAt: 2026-06-21 02:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-21 02:39:07 +0000 UTC FinishedAt: 2026-06-21 02:39:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"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-workflowrgfvh/series-workflowrgfvh-convert-artifact-1676722062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-21 02:39:07 +0000 UTC FinishedAt: 2026-06-21 02:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-21 02:39:07 +0000 UTC FinishedAt: 2026-06-21 02:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-21 02:39:07 +0000 UTC FinishedAt: 2026-06-21 02:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-21 02:39:17 +0000 UTC FinishedAt: 2026-06-21 05:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgfvh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_pin_pages","io_region_pin_pages","io_sqe_buffer_register","io_create_region","io_import_umem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_URING_ZCRX"],"series_id":"d0755474-b9e5-4499-91b2-271c457331d2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-21 02:39:17 +0000 UTC FinishedAt: 2026-06-21 05:41:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*224de098-77c4-4d3e-8bfe-d5f061b6b01d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*032c7226-cde2-461d-a97b-db0fe8dd381a,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-workflowrgfvh/series-workflowrgfvh-build-action-932498396/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-workflowrgfvh/series-workflowrgfvh-build-action-1976804597/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-workflowrgfvh/series-workflowrgfvh-convert-artifact-1676722062/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,}